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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 12:14:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 12:14:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 12:14:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 12:14:02       20 阅读

热门阅读

  1. 做题笔记:SQL Sever 方式做牛客SQL的题目--SQL212

    2023-12-11 12:14:02       36 阅读
  2. 阿里云服务器环境配置,ssh免密登录和配置docker

    2023-12-11 12:14:02       42 阅读
  3. 【网络编程】-- 04 UDP

    2023-12-11 12:14:02       39 阅读
  4. ARM Cortex-M安全之MPU介绍

    2023-12-11 12:14:02       31 阅读
  5. OD机考真题搜集:服务失效判断

    2023-12-11 12:14:02       41 阅读
  6. JVM理解

    JVM理解

    2023-12-11 12:14:02      30 阅读