基于ModbusRtu协议的Java Socket通信 报文编码格式与数据采集过程详解

      最后更新:2022-06-21 17:31:11 手机定位技术交流文章

      • tcp协议-索克通信获取参见:基于ModbusTcp协议的Java索克通信描述报告编码格式和数据采集过程(顶部)
      • 基于ModbusTcp协议和详细数据采集过程的Java Socket通信编码格式(以下)

      当使用串行传输时,Modbus协议可以选择RTU或ASCII模式,它还指定消息、数据结构、命令和响应方法,你需要检查数据。ASCII模式使用LRC校正,RTU模型使用16位CRC校正。在以太网传输时使用TCP,在这个模式中不使用校正。因为TCP协议是一个面向连接的可靠协议。

      如何判断 ModbusRTU的开始和结束
      在ModbusRTU协议中,必须使用时间间隔来判断帧消息的开始和结束,协议规定的时间是3个字节周期。在一帧报文开始前,必须超过5个字节周期的自由时间,一帧报文结束后,还有三个。 五个字周期的自由时间,否则, 会有一个粘性条件.五字周期是特定的时间,与波特率有关。
      整个消息框必须在连续的字符流中发送。 如果两个字符之间的空位大于1.5字符时,消息框被认为是不完整的,应从接收节点中丢弃。
      在这里插入图片描述


      CRC循环冗余校验
      在RTU模式中包含所有消息内容的可执行文件,基于循环冗余检查(CRC)算法的错误测试域.CRC域审查了整个报告的内容。不管纸上的支票多么奇怪,均执行此检验。

      1)CRC有16位元,由两个8位元组成
      2)CRC将附在报告的最后页上,首先添加较低和较高的字符。
      接收器在接收消息时重新计算CRC值,并将计算结果与实际接收的CRC值比较。 如果两个值不等价,这是错误。

      序列链中的ModbusRTU消息格式
      从站点地址(1字节)+功能代码(1字节)+数据区(N字节)+验证代码(2字节)

      从站点地址:作为索引的字符串
      函数代码:表示读写函数的节点
      数据:通过通信传输的数据,可以是多字节
      校正:确定接收数据是否在传输过程中丢失,两个字节

      读出/保持记录器:
      在这里插入图片描述

      CRC工具类:


      ModbusRtuEncoder类:

      getReadCommand函数

      getWriteCommand函数(主处理器)


      ModbusRtuDecoder类:

      (不全显示, 其他检查了身份证的合法性等.)


      ModbusRtuDeviceTest类:

      运行函数


      整体代码框架如下:

      在这里插入图片描述

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27928.html

          热门文章

          文章分类