水表MODBUS-RTU通讯协议说明
本水表使用了MODBUS-RTU通讯协议,MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。MODBUS协议在一根通讯线上使用主从应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。
MODBUS协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
MODBUS-RTU格式无起始字符和结尾字符,但需要加等待时间,等待时间不少于3.5个字符发送时间。
主要性能参数
1. 电池电压:3.6V
2. 外部输出电压:12V
3. 工作电流:10mA
4. 静态电流:小于30uA
5. 开关滤波时间:500ms
6. 通讯方式:RS485
7. 通讯协议:MODBUS(RTU模式)
8. 波特率:9600bps
9. 校验:无校验位
10. 数据位:8位
11. 停止位:1位
接线说明
请使用优质的RS485转RS232转换器并正确接线,配备符合要求的12v电源,使用带屏蔽网的聚乙烯双绞4芯线,通讯线路较长时应加大通讯导线的截面积,通讯线应避开大功率设备和强磁电干扰源,并做好防水保护。
1. 模块白色护套两芯线引接脉冲表,不分极性
2. 黑色护套四芯引线为RS485接口,分别为:
红线:+12V
黑线:GND
黄线:RS485 A
绿线:RS485 B
注意:必须谨慎接线!错误将导致损坏计数模块
(1) 传输方式
信息传输为异步方式,并以字节为单位,在主机和从机之间传递的通讯信息是10位字格式,包含1个起始位、8个数据位(最小的有效位先发送)、无奇偶校验位、1个停止位。
(2) 数据帧格式
地址码 | 功能码 | 数据区 | CRC校验码 |
1字节 | 1字节 | n字节 | 2字节 |
地址码:地址码在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,在水表中只使用1~247,其它地址保留。这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
功能码:功能码告诉了被寻址到的终端执行何种功能。下表列出了该系列仪表用到的功能码,以及它们的意义和功能。
功能 | 定义 | 操作 |
03H/04H | 读数据寄存器 | 获得一个或多个寄存器的当前二进制值 |
10H | 预置多寄存器 | 设定二进制值到一系列多寄存器中 |
数据区:数据区包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设置值。例如:功能码告诉终端读取一个寄存器,数据区则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同。
CRC校验码:错误校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
生成一个CRC的流程为:
1、预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。
2、把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
3、将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。
4、如果最低位为0,重复第三步(下一次移位);如果最低位为1,将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。
5、重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。
6、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。
7、最终CRC寄存器的值就是CRC的值。
此外还有一种利用预设的表格计算CRC的方法,它的主要特点是计算速度快,但是表格需要较大的存储空间,该方法此处不再赘述,请参阅相关资料。
通信应用格式详解
(1)功能码03H:读寄存器
此功能允许用户获得设备采集与记录的数据及系统参数。主机一次请求的数据个数没有限制,但不能超出定义的地址范围。
下面的例子是从01号从机读1个采集到的基本数据(数据帧中每个地址占用2个字节)。采集的数据为总用水量(占用4个字节),其地址为00H
主机发送 | 发送信息 | 从机返回 | 返回信息 | |||
地址码 | 01H | 地址码 | 01H | |||
功能码 | 03H | 功能码 | 03H | |||
起始地址 | 高字节 | 00H | 字节数 | 04H | ||
低字节 | 00H | 寄存器数据 | 高字节 | 00H | ||
寄存器数量 | 高字节 | 00H | 低字节 | 12H | ||
低字节 | 02H | 寄存器数据 | 高字节 | D6H | ||
CRC校验码 | 高字节 | C4H | 低字节 | 87H | ||
低字节 | 0BH | CRC校验码 | 高字节 | 44H | ||
低字节 | 34H |
(2)功能码10H:写寄存器
功能码10H允许用户改变多个寄存器的内容,该仪表中地址、通讯速率等可用此功能号写入。主机一次最多可以写入16个(32字节)数据。
主机发送 | 发送信息 | 从机返回 | 返回信息 | |||
地址码 | 01H | 地址码 | 01H | |||
功能码 | 10H | 功能码 | 10H | |||
起始地址 | 高字节 | 00H | 起始地址 | 高字节 | 00H | |
低字节 | 15H | 低字节 | 15H | |||
寄存器数量 | 高字节 | 00H | 寄存器数量 | 高字节 | 00H | |
低字节 | 01H | 低字节 | 01H | |||
字节数 | 02H | CRC校验码 | 高字节 | |||
0015H待写入数据 | 高字节 | 08H | 低字节 | |||
低字节 | 03H | |||||
CRC校验码 | 高字节 | |||||
低字节 |
地址 | 变量名称 | 读写属性 | 数据格式 | |
0000H 0001H | 总用水量 | R | 每个表占用4个字节 | |
0015H 高字节 | 通信地址 | R/W | 001-247 | char |
0015H 低字节 | 通信波特率 | R/W | 01 —— 9600bps(默认) 02 —— 4800bps 03 —— 2400bps 04 —— 1200bps | char |
附:1、读写属性:“R”只读,读参量用03H号命令;“R/W”可读可写,写参量用10H号命令。禁止向未列出的或不具可写属性的地址写入。
2、表的通讯地址和通讯速率出厂时给出,亦可通过本公司提供的软件读出。也可以通过协议设置。
3、表中所测读数占4个字节,单位为m3。高位在前,低位在后,若读出值为0012D687H(1234567),则计量值为1234567×0.01=12345.67m3。
水表地址码为水表上8位灰色数字的最低两位。例如:水表上为42316790,modbus地
址为:90
4、使用注意事项
1、 模块调试时要设置初值,模块的脉冲读数要与水表读书对应。
2、 模块的采集数乘上远程水表脉冲当量才是水表实际值。
3、 模块与远程水表连线长度不超过20厘米,可有效避免干扰,否则模块易多计数。
4、 水表管路中水有回流可导致模块读数大于水表显示值。