超声波流量计MODBUS协议调试办法(1)
MODBUS协议的两种格式都能支持。通过在菜单窗口M63中,选择使用MODBUS-RTU还是MODBUS-ASCII格式。默认状态下支持MODBUS-ASCII格式。
超声波流量计/热能表只能支持MODBUS功能代码03和06以及16三种功能代码,分别是读寄存器和写单一寄存器以及数据块写入功能。
例如在RTU方式下读取1号设备的流速,即读寄存器5,6共2个寄存器,命令如下:
01 03 00 04 00 02 85 CA (十六进制数字)
设备号 功能 起始寄存器 寄存器数目 效验和
其中85 CA 是16进制数值,是按照CRC-16 (BISYNCH,多项式是x16 + x15 + x2 + 1屏蔽字为0A001H)循环冗余算法得到的。请参考MODBUS有关资料了解进一步的算法。
返回的数据应该为(设定状态为模拟运行状态,流速=1.2345678m/s):
01 03 04 06 51 3F 9E 3B 32(十六进制数字)
设备号 功能 数据字节数 数据=1.234567 效验和
其中 3F 9E 06 51四个字节即为1.2345678的IEEE754格式单精度浮点形式。
再举例,读净累积流量,REG25,REG26两个寄存器命令如下:
01 03 00 18 00 02 44 0C(十六进制数字)
返回数据应该为(设净累积器=802609,其4字节16进制表示为 00 0C 3F 31)
01 03 04 3F 31 00 0C A7 ED(十六进制数字,A7 ED为效验和)
当净累计=0时,返回数据为01 03 04 00 00 00 00 FA 33
其中FA 33为效验和。
请注意上面例子中数据存放的顺序。对于使用C语言解释数值时,可以使用指针直接把所需的数据放入相应的变量地址中即可,一般常用的存放顺序为低字节在前,例如上面的1.23456m/s例子中,3F 9E 06 51数据的存放顺序为 51 06 9E 3F。
在 ASCII方式下读取1号设备的从寄存器1开始的10个寄存器的命令如下
:01030000000AF2(回车换行)
返回数据为 :0103280000000000000000000000000000000000000000D4
其中“:”是ASCII方式下的引导符,“F2”和“D4” 是双字节效验和。求法是把除“:”及行尾的回车换行以外的所有字符顺序进行单字节加法,不计进位,然后求补码得到的。例如上面的命令中 01h+03h+00h+00h+00h+0Ah=0Eh, 其补码=0-0Eh=F2。而返回数据的效验和等于 1+3+28h=2Ch,其补码=0-2Ch=D4h。
在MODBUS-RTU状态下,每次最多能够读出125个寄存器。而在MODBUS-ASCII状态下每次只能读出61个寄存器。如果多于这些数目,流量计就会返回出错信息。
有关MODBUS协议细节请参考有关资料。
在调试MODBUS协议时,推荐使用一种免费调试软件MODSCAN,这个软件可以在互联网上搜索到。当出现问题时,如果能够接受到效验和正确的数据包则说明通讯本身是不存在问题的。
在默认状态下通信的设置速率一般是9600、无效验、8数据位、1个停止位。
- 上一篇:便携式丨手持式超声波流量计应用在什么领域 2020/4/28
- 下一篇:超声波流量计通讯故障问题解析 2020/4/13