Modbus-ASCII数据帧

简介: 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)。


4308b8e045cec788023856b40a2be609_1ae0070aff6ebc89a23c1ea2076971a8.png

手动LRC计算方法


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

0x56 = 0101 0110取反: 1010 1001加1:  1016 101 = 0xAA或者: 0x100-0x56 = 0xAA
目录
相关文章
串口网口16进制发送的和ASCII发送以及16进制接收和ASCII接收区别
我们在工控软件中,会经常使用到网口和串口,去接受和发送数据。通常我们发送数据的模式有两种,一种16进制,一种是ASCII码。16进制的的经常会用来和仪器PLC等设备通讯。ACSII码是一种文本模式。
1243 0
串口网口16进制发送的和ASCII发送以及16进制接收和ASCII接收区别
|
3月前
在Modbus RTU中同时进行读取和写入操作
在Modbus RTU中同时进行读取和写入操作
49 0
|
自然语言处理 网络协议 算法
UDP协议和报文格式,校验和,CRC的含义
UDP协议和报文格式,校验和,CRC的含义
|
6月前
|
网络协议 算法
【MODBUS】Modbus的3种传输方式
【MODBUS】Modbus的3种传输方式
144 1
|
6月前
|
传感器 数据采集 网络协议
【MODBUS】Modbus是什么?
【MODBUS】Modbus是什么?
103 1
|
6月前
|
算法
Modbus-RTU数据帧
Modbus-RTU数据帧
161 0
|
6月前
Modbus-TCP数据帧
Modbus-TCP数据帧
106 0
详解CAN总线:CAN总线报文格式—数据帧
CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。
详解CAN总线:CAN总线报文格式—数据帧
详解CAN总线:标准数据帧和扩展数据帧
CAN协议可以接收和发送11位标准数据帧和29位扩展数据帧,CAN标准数据帧和扩展数据帧只是帧ID长度不同,以便可以扩展更多CAN节点。