超声水表MODBUS-RTU通信协议V1.1
一.RTU模式
1.物理层
传输接口:RS-485
通信波特率:9600bps
2.RTU模式中每个字节的格式为
编码系统:8位二进制
每个8位域包含两个十六进制字符(0-9、A-F)
传输模式:异步主从半双工方式。
每个字节的位:1个起始位
8个数据位
奇偶不校验
1个停止位
3.帧校验域:循环冗余校验(CRC),对全部报文内容执行校验。
注:数据包的发送序列总是相同的,地址—功能码—数据—检验码,每个数据包必须作为一个连续的位流传输。
4.1 地址(Address)域
地址域在数据包的开始部分,由一个8bit数据组成,这个数据表明了从站的地址,而每一个从站的地址必须是唯一的,有效地址范围为:1~247。主站发送数据包后,只有与主站查询地址相同的从站才会响应。
4.2 功能(Function)域
功能域代码指定被寻址的从站执行何种功能,表1列出了所有的功能码。
数据域是由两个十六进制数集合构成的,范围00...FF。
从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的所为。这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。
例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。
如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。
4.4 错误校验(CRC)域
错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。
CRC值有发送设备计算出来,然后附加到数据包上传送,接收设备在接收数据时重新计算CRC 值,然后与接收到的校验码(CRC)域中的值进行比较,如果这两个数据不相等,则说明数据在传输过程中发生了错误。
CRC码计算时,首先将一个16bits寄存器预置为全1,然后连续把数据包中的8bits字节与该寄存器的当前值进行运算,仅仅每个字节的8位数据进行计算,起始位和停止位与可能使用的奇偶校验位都不影响CRC。
生成CRC时,每个8bits字节与寄存器中的内容进行异或运算,结果向低位移位,高位则补0,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值进行一次异或运算,如果是0,则不进行任何处理。
上述处理重复进行,直到执行完8位移位操作为止,当最后移位移完后,下一个8bits字节与该寄存器进行异或,同样进行另一个8bits字节进行移位异或操作,当数据包中所有字节都处理了,生成的最终值就是CRC值。
CRC码生成流程:
1、将一个16bits寄存器(称之为CRC寄存器)置为FFFFH(全1);
2、把数据包中的第一个字节与CRC寄存器低字节相异或结果存回到CRC寄存器;
3、将CRC寄存器向右移一位,最高位(MSB)补以“0”,最低位(LSB)移出并检测;
4、如果移出位为“0”:重复地3步(下一次移位)
如果移出位为“1”:将CRC寄存器与一个预设的固定值(A001H)进行异或运算;
5、重复第3、4步直到8次移位结束,这样就处理完成8bits字节;
6、重复第2步至第5步处理下一个8bits字节,直到所有字节全部处理结束;
7、最终的CRC寄存器中的值就是CRC值。
二.寄存器地址及定义
三.功能代码
1.03读保持寄存器
说明:读从机保持寄存器的数据。
从站响应帧:
示例(假设地址为01)
读水表瞬时流量、总量与状态寄存器数据
主站请求帧:01 03 00 02 00 0B A5 CD
地址功能码起始地址数量CRC
从站响应帧:
01 03 16 ;地址、功能码、字节计数
00 00 00 00 ;体积(瞬时)流量:0.0 m3/h
3F F3 C0 CA 2A 5B 1D 5D ;正向总量:1.2345 m3
3F F3 C1 C5 B8 52 65 5D ;反向总量:1.2348 m3
00 02 ;仪表状态字:0002 (状态:空管)
01 CF ;CRC
读所有寄存器数据
主站请求帧:01 03 00 00 00 12 C5 C7
地址功能码起始地址数量CRC
从站响应帧:
01 03 24 ;地址、功能码、字节计数
13 08 80 12 ;仪表编号:13088012
00 00 00 00 ;体积(瞬时)流量:0.0 m3/h
3F F3 C0 CA 2A 5B 1D 5D ;正向总量:1.2345678 m3
3F F3 C1 C5 B8 52 65 5D ;反向总量:1.2348077 m3
00 02 ;仪表状态字:0002 (状态:空管)
07 DD ;日期:2013年
0A 12 ;日期:10月18日
04 00 ;时间:4时0分
0A 00 ;时间:10秒
05 A0 ;GPRS通信间隔时间:1440小时
42 19 ;CRC
2.预置单个寄存器值(功能码06H)
查询
响应
3.预置多个寄存器值(功能码10H)
四.备注
本通信协议只提供03、06、10功能码。
当主机发送的数据帧出错时,从机不应答。出错的原因包含以下几种:
1 地址不对;
2 CRC校验出错;
3 数据长度出错;
4 操作的数据地址超出;
5 数据帧不符合要求的。