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