前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MODBUS】Modbus-ASCII数据帧

【MODBUS】Modbus-ASCII数据帧

作者头像
帐篷Li-物联网布道师
发布2024-03-19 21:42:14
800
发布2024-03-19 21:42:14
举报

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,报文如下:

代码语言:javascript
复制
:010604051234AA<CRX<LF>

即:

代码语言:javascript
复制
: 01 06 04 05 12 34 AA <CR><LF>

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

代码语言:javascript
复制
0xAA = LRC(01,06, 04,05,12,34)。

手动LRC计算方法

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

代码语言:javascript
复制
0x56 = 0101 0110取反: 1010 1001加1:  1016 101 = 0xAA或者: 0x100-0x56 = 0xAA
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档