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)出问题的时候,大部分是参数没设置好、环境发生了变化,设备出问题概率不大。

相关推荐
卡戎-caryon21 分钟前
【Linux网络与网络编程】03.UDP Socket编程
linux·服务器·网络·笔记·单例模式·udp·网络通信
張萠飛37 分钟前
Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
linux·网络·tcp/ip
神秘的t1 小时前
javaSE————网络原理
java·网络
EasyNVR2 小时前
视频分析设备平台EasyCVR视频结构化AI智能分析:筑牢校园阳光考场远程监控网
网络·音视频
jinan8862 小时前
企业的移动终端安全怎么管理?
大数据·网络·安全·数据分析·开源软件
W说编程2 小时前
《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例
c语言·网络·网络协议·tcp/ip·unix·tcp
不爱敲代码的阿玲2 小时前
西门子s7协议
服务器·网络·tcp/ip
栗筝i2 小时前
Spring 核心技术解析【纯干货版】- XVII:Spring 网络模块 Spring-WebFlux 模块精讲
java·网络·spring
CloudJourney3 小时前
(万字超详细-网络版本)VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例
网络·架构
为你写首诗ge10 小时前
【Unity网络编程知识】FTP学习
网络·unity