超声水表MODBUS-RTU通信协议V1.1
一.RTU模式
1. 物理层
传输接口:RS-485 通信波特率:9600bps
2. RTU模式中每个字节的格式为 编码系统: 8位二进制
每个8位域包含两个十六进制字符(0-9、A-F)
传输模式:异步主从半双工方式。
每个字节的位: 1个起始位 8个数据位 奇偶不校验 1个停止位
3. 帧校验域:循环冗余校验(CRC),对全部报文内容执行校验。
4. 一个数据包格式(除CRC校验外,所发送字时均是先高位字节后低位字节) 地址 Address 1字节 功能码 Function 1字节 数据 Data N字节 检验码 CRC 2字节,先低字节后高字节 注:数据包的发送序列总是相同的,地址—功能码—数据—检验码,每个数据包必须作为一个
连续的位流传输。
4.1 地址(Address)域
地址域在数据包的开始部分,由一个8bit数据组成,这个数据表明了从站的地址,而每一个从站的地址必须是唯一的,有效地址范围为:1~247。主站发送数据包后,只有与主站查询地址相同的从站才会响应。
4.2 功能(Function)域
功能域代码指定被寻址的从站执行何种功能,表1列出了所有的功能码。
代码 03H 06H 10H 意义 读保持寄存器 预置单个寄存器值 预置多个寄存器值 功能 读取一个或多个变量的当前二进制值 用一个预置值改写一个变量的值 用多个预置值改写多个变量的值 4.3 数据(Data)域 数据域是由两个十六进制数集合构成的,范围00...FF。
从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的所为。这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。
例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。
如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。
4.4 错误校验(CRC)域
错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。
CRC值有发送设备计算出来,然后附加到数据包上传送,接收设备在接收数据时重新计算CRC值,然后与接收到的校验码(CRC)域中的值进行比较,如果这两个数据不相等,则说明数据在传输过程中发生了错误。
1
超声水表MODBUS-RTU通讯协议 浙江天信仪表科技有限公司
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值。
2
超声水表MODBUS-RTU通讯协议 浙江天信仪表科技有限公司
二.寄存器地址及定义
序号 寄存器 字地址 意义 说明 读写 状态 1 40001~4002 0000~0001 仪表编号 4字节BCD码,8位编号 读 2 40003~4004 0002~0003 瞬时流量 Float(IEEE7),单位:m3/h 读 3 40005~4008 0004~0007 正向总量 Double(IEEE7),单位:m3 读 4 40009~4012 0008~000B 反向总量 Double(IEEE7),单位:m3 读 Int,水表的工作状态字,字的读 构成如下: BIT15~BIT9 = 未用 BIT8 = 声道2信号弱标识 0:正常 1:声道2信号弱 BIT7 = 声道1信号弱标识 0:正常 1:声道1信号弱 BIT6 = 声道2故障标识 0:正常 1:声道2故障 BIT5 = 声道1故障标识 5 40013 000C 工作状态字 0:正常 1:声道1故障 BIT4 = 测量信号强度低标识 0:正常 1:信号强度低 BIT3 = 气泡含量过多标识 0:正常 1:气泡过多 BIT2 = 测量错误标识 0:正常 1:测量错误 BIT1 = 空管标识 0:正常 1:空管 BIT0 = 电池欠压标识 0:正常 1:欠压 6 40014 000D 日期:年 Int,2字节:年 读/写 7 40015 000E 日期:月、日 Byte 高字节:月,低字节:日 读/写 8 40016 000F 日期:时、分 Byte 高字节:时,低字节:分 读/写 9 40017 0010 日期:秒 Byte 高字节:秒 读/写 10 40018 0011 Gprs通信间Int 范围:1~65535小时 读/写 隔时间 三.功能代码
1. 03读保持寄存器
说明:读从机保持寄存器的数据。 主站请求帧: 地址 1字节 功能码 1字节 0x03 起始地址 2字节 0x0000~0x0011 寄存器数量 2字节 1~18 (0x0012) CRC校验 2字节
3
超声水表MODBUS-RTU通讯协议 浙江天信仪表科技有限公司
从站响应帧: 地址 1字节 功能码 1字节 0x03 字节数 1字节 2×N(寄存器数量) 寄存器值 2×N字节 CRC校验 2字节 示例(假设地址为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 m
3
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 m
3
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) 查询 数据域名称 例如(HEX) 地址 01 功能码 06 起始地址高字节 00
4
超声水表MODBUS-RTU通讯协议 浙江天信仪表科技有限公司
起始地址低字节 01 预置值高字节 00 预置值低字节 01 CRC校验低字节 19 CRC校验高字节 CA
响应 数据域名称 例如(HEX) 地址 01 功能码 06 起始地址高字节 00 起始地址低字节 01 预置值高字节 00 预置值低字节 01 CRC校验低字节 19 CRC校验高字节 CA
3. 预置多个寄存器值(功能码10H) 查询 数据域名称 例如(HEX) 地址 01 功能码 10 起始地址高字节 XX 起始地址低字节 XX 变量的个数高字节 XX 变量的个数低字节 XX 预置值1高字节 XX 预置值1低字节 XX 预置值N低字节 XX 预置值N低字节 XX CRC校验低字节 CRCLO CRC校验高字节 CRCHI 响应 数据域名称 例如(HEX) 地址 01 功能码 10 起始地址低字节 XX 起始地址低字节 XX 变量的个数高字节 XX 变量的个数低字节 XX CRC校验低字节 CRCLO CRC校验高字节 CRCHI
5
超声水表MODBUS-RTU通讯协议 浙江天信仪表科技有限公司
四.备注
本通信协议只提供03、06、10功能码。
当主机发送的数据帧出错时,从机不应答。出错的原因包含以下几种: 1 地址不对; 2 CRC校验出错; 3 数据长度出错;
4 操作的数据地址超出; 5 数据帧不符合要求的。
6
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务