串口及通讯协议
§1.1 概述
流量数据采集可以使用本公司研制开发的通用/专用流量/热量数据监控系统,该系统基于TDS-100流量计的特点,充分利用了流量计特色的软硬件设计,具有投资少、系统简单明快、运行可靠等特点。
目前还已经有了多家第三方厂商的专门支持TDS-100系列流量计的数据采集软件供用户选用,其中有些小的软件是免费的,特别方便小用户的组网使用。
为了通讯调试的方便,新版TDS-100设有一个模拟运行状态。在此状态下,流量计不需要接入管道,即可模拟工作,用于调试,参看下一节的问答。
§1.2 关于通讯方面问题的问答
(1) 问:为什么连接不上流量计?,接上后它不做任何反应?
答: A. 检查串口参数是否匹配。
B.检查物理连线是否接好
C.网络地址是否设置正确
(2) 问:为什么MODBUS读出的量值乱七八糟的,和显示值完全不一致?
答:一般来说如果MODBUS协议能够读出数据就表明协议本身没有问题了。乱七八糟的数据是因为存在如下错误:
A.数据格式错误; B.寄存器地址有误,导致数据发生了位移而产生错误。
比如REAL4这种实型变量(IEEE754格式的单精度浮点数),按照字和字节共有4种不同的排列方式,TDS100使用的是最常规的一种,即低word和高byte在前格式。您可以修改您的软件的数据存放格式解决这个问题。如果使用通用的组态软件,则组态软件一般具有一个选择格式的方法。
(3) 问:我的系统要求每次1小时只发出一次命令然后要求同时收到多个变量,应该使用 那个协议?
答:一条MODBUS命令可以一次读出很多变量。问:为什么通过协议读出的量值和流量计显示的不一致?
答:A. 确认变量地址是否就是您要求的那个变量?因为流量计内部的变量太多,是否混淆了? 注意在读取数据时,REG 0001在命令字符串中表示为0000,而不是0001。0001在命令字符串中表示读出REG 0002的内容。
B.对于累积量只能显示7位10进制数字,而通过MODBUS协议可以读出8位10进制数字。这种情况下,读出来的数值的后7位是一样的。
(4) 问:我的系统不能支持长整数以及实型变量格式,应该怎么办?
答:需要采用数值转换方式,或查找新驱动程序解决。

(5) 问:MODBUS有测试程序吗?
答:有!推荐使用MODSCAN这个软件,可以在网上搜到。这个程序很是方便,有助于方便检查读出的数据,理解各种类型数据的含义。
(6) 问:流量计是否具有模拟运行状态以方便测试,怎样设置?
答:有!M1111进入液晶显示分组,ENT键切换至输入输出分组,M307选择模拟运行,M308设置瞬时流量,即启动模拟运行状态。
(7) 问:使用C时,浮点数存放顺序是怎样的?
答:例如3F 9E 06 51四个字节为1.2345678的IEEE754格式单精度浮点形式。在MODBUS数
据流中的顺序是06 51 3F 9E,1号地址数据流应该是01 03 04 06 51 3F 9E 3B 32(十六进制数字)。在X86计算机中使用C语言时,按照内存从低到高存放顺序51 06 9E 3F。
再例如读取净累积寄存器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为效验和)
§1.3 MODBUS协议
MODBUS协议的两种格式都能支持,默认状态下支持MODBUS-RTU格式。
TDS-100型系列超声波流量计/热能表只能支持MODBUS功能代码03和06以及16三种功能代码,分别是读寄存器和写单一寄存器以及数据块写入功能。
例如在RTU方式下读取1号设备的流速,即读寄存器5,6共2个寄存器,命令如下:
01 03 00 04 00 02 85 CA (十六进制数字)
设备号 功能 起始寄存器 寄存器数目 效验和
其中85 CA 是16进制数值,是按照CRC-16 (BISYNCH,多项式是x
16 + x
15 + x
2 + 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。
有关MODBUS协议细节请参考有关资料。
在调试MODBUS协议时,推荐使用一种免费调试软件MODSCAN,这个软件可以在互联网上搜索到。当出现问题时,如果能够接受到效验和正确的数据包则说明通讯本身是不存在问题的。
在默认状态下通信的设置速率一般是9600、无效验、8数据位、1个停止位。
§1.3.1 MODBUS寄存器地址表
(注意与水表协议的不同之处)
|
寄存器 |
寄存器个数 |
变量名称 |
数据类型 |
说明 |
|
0001-0002 |
2 |
瞬时流量 |
REAL4 |
单位:立方米/小时 |
|
0003-0004 |
2 |
瞬时热流量 |
REAL4 |
单位:GJ/小时 |
|
0005-0006 |
2 |
流体速度 |
REAL4 |
单位:米/秒 |
|
0007-0008 |
2 |
测量流体声速 |
REAL4 |
单位:米/秒 |
|
0009-0010 |
2 |
正累积流量 |
LONG |
所有使用长整数的流量累积器,其计量单位受M32(即REG1438)控制 |
|
0011-0012 |
2 |
正累积流量小数部分 |
REAL4 |
REAL4是标准IEEE-754格式单精度浮点数。该格式数据一般也称为FLOAT格式 |
|
0013-0014 |
2 |
负累积流量 |
LONG |
LONG是低字在前带符号长整数 |
|
0015-0016 |
2 |
负累积流量小数部分 |
REAL4 |
|
|
0017-0018 |
2 |
正累积热量 |
LONG |
所有使用长整数的热量累积器,其计量单位受M84(即REG1441)控制 |
|
0019-0020 |
2 |
正累积热量小数部分 |
REAL4 |
|
|
0021-0022 |
2 |
负累积热量 |
LONG |
|
|
0023-0024 |
2 |
负累积热量小数部分 |
REAL4 |
|
|
0025-0026 |
2 |
净累积流量 |
LONG |
|
|
0027-0028 |
2 |
净累积流量小数部分 |
REAL4 |
|
|
0029-0030 |
2 |
净累积热量 |
LONG |
|
|
0031-0032 |
2 |
净累积热量小数部分 |
REAL4 |
|
|
0033-0034 |
2 |
温度1/供水温度 |
REAL4 |
单位:℃ |
|
0035-0036 |
2 |
温度2/回水温度 |
REAL4 |
单位:℃ |
|
0037-0038 |
2 |
模拟输入AI3量 |
REAL4 |
转换后无量钢数据 |
|
0039-0040 |
2 |
模拟输入AI4量 |
REAL4 |
转换后无量钢数据 |
|
0043-0044 |
2 |
模拟输入AI3电流值 |
REAL4 |
单位:毫安 |
|
0045-0046 |
2 |
模拟输入AI4电流值 |
REAL4 |
单位:毫安 |
|
0077-0078 |
2 |
供水电阻数 |
REAL4 |
单位欧姆 |
|
0079-0080 |
2 |
回水电阻数 |
REAL4 |
单位欧姆 |
|
0089-0090 |
2 |
当前电流环输出电流值 |
REAL4 |
单位毫安 |
|
0092 |
1 |
声道1 信号质量 |
INTEGER |
单位:0.01% |
|
0093 |
1 |
声道1 上游信号强度 |
INTEGER |
单位:0.01 |
|
0094 |
1 |
声道1下游信号强度 |
INTEGER |
单位:0.01% |
|
96 |
1 |
操作界面语言类型 |
INTEGER |
0表示中文,1表示英文 |
|
0097-0098 |
2 |
声道1超声波信号传输比 |
REAL4 |
正常范围100+-3% |
|
0099-0100 |
2 |
声道1当前雷诺数 |
REAL4 |
|
|
0101-0102 |
2 |
声道1当前雷诺修正系数 |
REAL4 |
|
|
0105-0106 |
2 |
总工作时间 |
LONG |
无符号,单位秒 |
|
0105-0106 |
2 |
总上电次数 |
LONG |
无符号 |
|
0113-0114 |
2 |
净累积流量(浮点形式) |
REAL4 |
单位为立方米,7位有效数字 |
|
0115-0116 |
2 |
正累积流量(浮点形式) |
REAL4 |
单位为立方米,7位有效数字 |
|
0117-0118 |
2 |
负累积流量(浮点形式) |
REAL4 |
单位为立方米,7位有效数字 |
|
0119-0120 |
2 |
净累积热量(浮点形式) |
REAL4 |
单位为GJ,7位有效数字 |
|
0121-0122 |
2 |
正累积热量(浮点形式) |
REAL4 |
单位为GJ,7位有效数字 |
|
0123-0124 |
2 |
负累积热量(浮点形式) |
REAL4 |
单位为GJ,7位有效数字 |
|
0125-0126 |
2 |
今天累积流量(浮点形式) |
REAL4 |
单位为立方米,7位有效数字 |
|
0127-0128 |
2 |
本月累积流量(浮点形式) |
REAL4 |
单位为立方米,7位有效数字 |
|
0138 |
1 |
声道2 信号质量 |
INTEGER |
单位:0.01% |
|
0139 |
1 |
声道2 上游信号强度 |
INTEGER |
单位:0.01 |
|
0140 |
1 |
声道2下游信号强度 |
INTEGER |
单位:0.01% |
|
0141-0142 |
2 |
声道2超声波信号传输比 |
REAL4 |
正常范围100+-3% |
|
|
|
|
|
|
|
1529 |
2 |
设备电子序列号码 |
BCD |
本设备电子序列号码
请注意高位在前 |