C# WPF上位机开发(通讯协议的编写)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        作为上位机,它很重要的一个部分就是需要和外面的设备进行数据沟通的。很多时候,也就是在这个沟通的过程当中,上位机软件才有了自己的价值。如果上位机可以通过收集数据,进一步构建自己的算法,那么上位机自身的价值就更大了。之前说的usb、can、232这些都是沟通的媒介,本质上最重要的还是通讯的协议。

        所谓通讯的协议,其实就是沟通的方式和报文的格式。沟通的方式,一般代表谁先主动发起沟通,谁被动应答沟通;报文的格式,则代表每次沟通的数据有多少个,每个数据代表着什么样的含义。这就是通讯的全部内容。

1、通讯沟通的方式

        大部分上位机在沟通的时候都是作为主动的一方存在的,被沟通的设备一般都是被动响应报文的。比如说一个卷帘门设备、一个充电设备、一个机器人设备等等,基本上都是上位机要求它做什么,它就会去做什么。在作业的过程中,上位机会不停轮询当前的工作状态。

2、哪里可以看到数据协议

        这种协议还是很多的。如果是网站服务器类的协议,这种一般都是私有协议,只需要和对应网站的开发人员搞好对接就可以了;如果是设备类的协议,那么我们通过线上或者线下的方式拿到设备之后,就可以通过它们的售后人员拿到对应设备的开发协议。当然,现在很多设备供应商也会提前在自己的官网或者是github上发布对应的通讯协议,这都是可能的。

3、常见的协议有哪几种

        对于工控领域来说,最常见的协议就是modbus协议,它的通讯格式非常简单,就是简单的应答模式。上位机发送一个请求,设备回复一个请求。主要的请求也只有读写两种模式,读写的报文也很短,一般就十几个字节,这也是因为本身modbus设备功能比较单一,十几个字节加上对应的bit位,其实很容易把大部分功能就说清楚了。

4、某设备232通信协议分析

4.1 读设备协议

        这就是一个读设备协议,整个数据是16进制形式,数据内容是0x0101006400087c13。整个数据有8个字节。第一个01代表设备地址,第二个01代表功能,这里是读。第三、四个字节是0064,转成10进制就是100,代表寄存器地址是100。第五、六个字节是0008,代表需要读8个寄存器。第七、八两个字节7c13,这个是校验码,一般通过crc算法计算得到。

4.2 读设备返回协议

        如果我们按照4.1的形式发送数据之后,那么没什么问题的话,上位机就会从设备读到返回的数据。假设这个数据是0x0101010f118c。这个时候和4.1一样,我们只需要按照官方给出的example去一个一个字节解析就可以了。从长度上看,返回的数据只有6个字节。第一个字节01代表设备地址。第二个字节01代表功能码01,即读。第三个字节代表数据长度01,即1个字节。第四个字节0F代表返回的数据0F。第五、六个字节0x118c代表检验码,用户可以根据校验码判断一下下发的数据是否有错误。

        这里可以思考下,假设返回的数据是4个,那么格式应该是什么样的?比如说还是这里,那么返回的数据可能是这样的,01+01+04+0000000f+校验码2个字节,这样所有的数据长度加起来就是9个字节。

4.3 写设备协议

        和读设备协议相比较,读设备协议稍微复杂了一点。这里写设备的命令是0x010f00640008010fcf59。其中有两个个地方需要注意一下,第一,功能吗从01变成了0f。第二,和读设备相比较,这里多了一个010f,其中01代表要写的数据长度,0f代表要写的数据内容。其他部分和读设备协议差别不大。

4.4 写设备返回协议

        和写设备协议相比较,写设备返回则简单很多。基本上,把写的数据长度、写数据内容拿走,剩下来就是写设备返回的内容。当然,对应的校验码肯定也发生了改变。

5、数据内容代表什么

        前面我们讨论了设备协议,但是大家有没有注意,我们没有讨论读写数据里面的内容。这主要是因为,具体数据的含义其实和设备本身是相关的,它可能是一个门、一个灯、一个开关、一个电机、一个显示屏幕,凡此种种,我们使用的时候再分别分析具体的bit位、具体的数据含义就可以了。这次要学习的主要就是怎么分析这个通信协议的逻辑。

6、其他要注意的地方

        编写协议的时候,还是需要非常小心的,通常来说有这么几点要注意;

        1)注意字节序;

        2)注意每个bit的含义;

        3)一收一发,不断检验执行的返回结果;

        4)严格根据设备的要求,保证输入参数的合法性;

        5)大胆怀疑,小心假设;

        6)出问题的时候,大部分是参数没设置好、环境发生了变化,设备出问题概率不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264609.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python绘制现有彩票记录走势图

在数据分析和可视化的领域中,彩票走势图是一个经典的例子,它可以展示彩票数字随时间的出现频率和趋势。这里使用英国使用EuroMillions彩票的历史数据作为示例,使用Python和Matplotlib库来创建一个简单的走势图。可以在以下网站搜索.csv文件。…

dell r720远程网络安装ubuntu20.04(无U盘)

登陆后界面,在主界面上,我们就可以看到各个硬件组件的状态。在快速启动任务栏中,可以对系统电源进行操作,如开机、关机等。安装操作系统,在虚拟控制台预览处点击>启动 按照浏览器出现的提示确定安装控件等&#x…

实现加盐加密方法以及java nio中基于MappedByteBuffer操作大文件

自己实现 传统MD5可通过彩虹表暴力破解, 加盐加密算法是一种常用的密码保护方法,它将一个随机字符串(盐)添加到原始密码中,然后再进行加密处理。 1. 每次调用方法产生一个唯一盐值(UUID )密码…

uc_16_UDP协议_HTTP协议

1 UDP协议 适合游戏、视频等情景,安全性要求不高,效率要求高。 1)UDP不提供客户机与服务器的链接: UDP的客户机与服务器不必存在长期关系。一个UDP的客户机在通过一个套接字向一个UDP服务器发送了一个数据报之后,马上…

VOL-vue 框架 文件上传控件关于大文件上传等待的修改

我的项目在测试voltable列表组件中对阿里云OSS做附件上传时,几十M的文件可能就会需要一段时间来上传,才能有OSS的状态和链接返回。 但是控件VolUpload.vue并没有去在这方面做任何交互体验上的控制,而且VolUpload.vue本身写的几个上传函数都是…

MyBatis 四大核心组件之 Executor 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

【计算机网络】滑动窗口 流量控制 拥塞控制 概念概述

参考资料:计算机网络第八版-视频课程

【大数据】Hudi 核心知识点详解(二)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 &#x…

docker-centos中基于keepalived+niginx模拟主从热备完整过程

文章目录 一、环境准备二、主机1、环境搭建1.1 镜像拉取1.2 创建网桥1.3 启动容器1.4 配置镜像源1.5 下载工具包1.6 下载keepalived1.7 下载nginx 2、配置2.1 配置keepalived2.2 配置nginx2.2.1 查看nginx.conf2.2.2 修改index.html 3、启动3.1 启动nginx3.2 启动keepalived 4、…

【小白专用】php执行sql脚本 更新23.12.10

可以使用 PHP 的 mysqli 扩展来执行 SQL 脚本。具体步骤如下: 连接到数据库;打开 SQL 脚本文件并读取其中的 SQL 语句;逐条执行 SQL 语句;关闭 SQL 脚本文件;关闭数据库连接。 以下是通过 mysqli 执行 SQL 脚本的示例…

使用eXtplorer本地搭建文件管理器并内网穿透远程访问本地数据

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件,是互联网最重要的应用之一,无论是…

SpringSecurity(四)

SpringSecurity初始化的本质 一、对SpringSecurity初始化的几个疑问 通过前面第一次请求访问的分析我们明白了一个请求就来后的具体处理流程 对于一个请求到来后会通过FilterChainProxy来匹配一个对应的过滤器链来处理该请求。那么这里我们就有几个疑惑。 FilterChainProxy什…