Modbus-ASCII数据帧

Modbus-ASCIl传输模式中,每个字节均以ASCI编码,实际报文中1个字节会以两ASCIl字符发送,因此这种模式比Modbus-RTU模式效率要低。

例如报文数据 @x5B ="5"+"B"= X35 + X42 .

数据帧格式如下:

从ASCI报文帧可以看出,ASCI模式增加了起始(“:"和结束标志(回车&换行),由于报文数据每字节在ASCI模式下需要2字符进行编码,为了保证ASCI模式和RTU模式在应用级兼容,ASCI模式数据块最大长度为252x2,所以可以计算出报文帧最大长度为1+2+2+2x252+2+2=513字符,报文顿内的字符间隔时间可以达1秒钟。Modbus-ASCI模式校验方法采用的是纵向几余校验 (LRC - Longitudinal Redundancy Cheking) 算法,校验内容不包括顺起始和结束字符。

计算方法也比较简单,对校验内容进行累加和计算,忽略进位,并转换为二进制补码:

例如Modbus-ASCIl模式,主机发送请求,向地址为1的从设备的0x405地址,写入数值0x1234,报文如下:

:010604051234AA<CRX<LF>

即:

: 01 06 04 05 12 34 AA <CR><LF>

可以看到01表示设备地址,06表示写单个保持寄存器。地址为0x0405,数据为0x1234,LRC校验值为0XAA。实际进行校验的数据不包含头和帧尾。

0xAA = LRC(01,06, 04,05,12,34)。

手动LRC计算方法

把原始数据两个字符组成一个字节,并进行二进制加法计算:01+06+04+05+12+34=0x56,计算二进制补码:

0x56 = 0101 0110取反: 1010 1001加1:  1016 101 = 0xAA或者: 0x100-0x56 = 0xAA

相关推荐

  1. 汇川CodeSysPLC教程03-2-3 Modbus ASCII

    2023-12-21 23:06:03       31 阅读
  2. MODBUS

    2023-12-21 23:06:03       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 23:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 23:06:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 23:06:03       82 阅读
  4. Python语言-面向对象

    2023-12-21 23:06:03       91 阅读

热门阅读

  1. 晶振选型参考

    2023-12-21 23:06:03       57 阅读
  2. 5-Docker实例-nginx application

    2023-12-21 23:06:03       52 阅读
  3. Linux | 数据结构之内核链表

    2023-12-21 23:06:03       68 阅读
  4. C语言初学6:判断

    2023-12-21 23:06:03       59 阅读
  5. 网站访问量指标

    2023-12-21 23:06:03       54 阅读
  6. C语言求回文数(详解版)

    2023-12-21 23:06:03       60 阅读
  7. C语言三个数从小到大排序/输出

    2023-12-21 23:06:03       49 阅读
  8. netstat命令检查端口是否监听

    2023-12-21 23:06:03       56 阅读
  9. IEEE双栏摘要排版

    2023-12-21 23:06:03       55 阅读
  10. CCF编程能力等级认证GESP—C++5级—20230923

    2023-12-21 23:06:03       84 阅读
  11. 阿里lindorm与MyBatis Plus集成

    2023-12-21 23:06:03       63 阅读