串口及通讯协议
§1.1 概述
新一代超声波流量计系列产品本身带有隔离的 RS485 接口,可以同时支持多种常用的通讯协议,
包括 MODBUS、M-BUS、产品 FUJI 扩展协议、并兼容汇中公司产品通讯协议。
MODBUS 协议是常规的工控协议,超声波流量计系列产品支持 RTU 和 ASCII 两种格式。
M-BUS 是国际上常用热表计量协议,使用该协议在 M63 菜单中选择“MODBUS ASCII”选
项。
产品 FUJI 扩展协议是在日本 FIJI 超声波流量计协议的基础上扩展实现的,能够兼容 FUJI 超声
波流量计协议,以及第 7 版超声波流量计协议。
兼容协议可以兼容产品水表协议以及汇中公司产品通讯协议,为方便用户把超声波流量计系列
产品接入用户按照国内其它厂家通讯协议而开发的数据采集系统中,目前可以支持 12 种兼容通讯协
议。使用兼容通讯协议,用户需要在 M63 中选择“MODBUS ASCII”选项后再选择协议中的一种
即可。
超声波流量计系列产品还能够起到简易 RTU 设备的作用,可使用电流环及 OCT 输出控制步进
式或模拟式电磁阀的开度,OCT 输出可控制其他设备的上下电,其 1 路模拟输入可用来输入压力、
温度等信号。
位于 M63 窗口处的设置选项设置为“MODBUS-RTU ONLY”时,用来支持 MODBUS-RTU 协
议。当此选项设置为“MODBUS ASCII+原协议”时,用来支持 MODBUS ASCII、Meter-BUS、产
品 FUJI 扩展协议以及汇中流量计水表兼容协议。
不同的汇中流量计水表兼容协议的选择则也使用 M63 进行选择。在选择了“MODBUS-RTU”,
“MODBUS-ASCII”之后进行选择。
M62 菜单用于设置串行口参数。能够支持的波特率有 19200,14400, 9600, 4800, 2400, 1200, 600,
300 共 8 种,停止位 1 比特或 2 比特。校验位也可以选择。
使用各种组态软件自带的标准 MODBUS 驱动程序可以方便地把超声波流量计连接到数据采集
中。
中。
通过使用 MODBUS-PROFIBUS 转换器,也可以方便地把超声波流量计连接到 PROFIBUS 总线
使用 RS485 则可以接入 RS-485 总线。也可以使用本公司生产的 GSM 短信息模块板,通过短信
息传输流量/热量测量数据。该模块板可以多机组网,还可以使用普通手机(移动电话)查看流量计
的工作状态和测量数据。
在网络环境中使用时,除标识地址码的编程需使用串口或并口操作键盘外,其他各个量的操作
均可在上位机上进行,数据的传输采用命令应答方式,即上位机发出命令,流量计做出相应的回答。
流量数据采集可以使用本公司研制开发的通用/专用流量/热量数据监控系统,该系统基于超声
波流量计流量计的特点,充分利用了流量计特色的软硬件设计,具有投资少、系统简单明快、运行
可靠等特点。
目前还已经有了多家第三方厂商的专门支持超声波流量计系列流量计的数据采集软件供用户选
用,其中有些小的软件是免费的,特别方便小用户的组网使用。
为了通讯调试的方便,新版超声波流量计设有一个模拟运行状态。在此状态下,流量计不需要
接入管道,即可模拟工作,用于调试,参看下一节的问答。
§1.2 关于通讯方面问题的问答
(1) 问:为什么连接不上流量计?,接上后它不做任何反应?
答: A. 检查串口参数是否匹配;位于 M63 窗口的协议选择是否正确
B.检查物理连线是否接好
D.位于 M46 窗口的地址是否设置正确
C.把流量计重新上电,应该能接收到字符“AT”,否则 A 和 B 步存在问题
D.检查命令是否正确。在使用扩展协议时命令后面要紧跟者一个回车符号
(2) 问:为什么 MODBUS 读出的量值乱七八糟的,和显示值完全不一致?
答:一般来说如果 MODBUS 协议能够读出数据就表明协议本身没有问题了。乱七八糟
的数据是因为存在如下错误:
A.数据格式错误; B.寄存器地址有误,导致数据发生了位移而产生错误。
比如 REAL4 这种实型变量(IEEE754 格式的单精度浮点数),按照字和字节共有 4
种不同的排列方式,TDS100 使用的是最常规的一种,即低 word 和高 byte 在前格
式。您可以修改您的软件的数据存放格式解决这个问题。如果使用通用的组态软件,
则组态软件一般具有一个选择格式的方法。
(3) 问:我的系统要求每次 1 小时只发出一次命令然后要求同时收到多个变量,应该使用
那个协议?
答:一条 MODBUS 命令可以一次读出很多变量。如果 MODBUS-RTU 不能解决问题,
可以使用使用“&”连接符号连接起来的产品扩展协议。还可以使用简易兼容协议,
或者 Meter-BUS 协议。
(4) 问:为什么通过协议读出的量值和流量计显示的不一致?
答:A. 确认变量地址是否就是您要求的那个变量?因为流量计内部的变量太多,是否混
淆了? 注意在读取数据时,REG 0001 在命令字符串中表示为 0000,而不是 0001。
0001 在命令字符串中表示读出 REG 0002 的内容。
B.对于累积量只能显示 7 位 10 进制数字,而通过 MODBUS 协议可以读出 8 位 10
进制数字。这种情况下,读出来的数值的后 7 位是一样的。
(5) 问:我的系统不能支持长整数以及实型变量格式,应该怎么办?
答:需要采用数值转换方式,或查找新驱动程序解决。
(6) 问:MODBUS 有测试程序吗?
答:有!推荐使用 MODSCAN 这个软件,可以在网上搜到。这个程序很是方便,有助于
方便检查读出的数据,理解各种类型数据的含义。
(7) 问:流量计是否具有模拟运行状态以方便测试,怎样设置?
答:有!在 M11 窗口中输入 0 值即启动模拟运行状态。模拟运行状态下总是设置流速为
1.2345678m/s,瞬时流量等于 0,并且显示“R”状态。如果要求瞬时流量为设定值,
则可以通过在 M44 窗口中输入一个负的设定值实现。例如在 M44 窗口中输入-3600
立方米/秒。瞬时流量就会显示为 3600 立方米/秒。这时所有累积器也会做相应的
累积。因此就得到了变化的累积量输出。使用这个功能,能在不接传感器的条件下,
特别方便与联网软件的调试以及流量计功能的测试。
(8) 问:使用 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
返回数据应该为(设净累积器=802609,其 4 字节 16 进制表示为 00 0C 3F 31)
01 03 04 3F 31 00 0C A7 ED(十六进制数字,A7 ED 为效验和)
0C(十六进制数字)
02
44
03
00
18
00
§1.3 MODBUS 协议
MODBUS 协议的两种格式都能支持。通过在菜单窗口 M63 中,选择使用 MODBUS-RTU 还是
MODBUS-ASCII 格式。默认状态下支持 MODBUS-ASCII 格式。
超声波流量计型系列超声波流量计/热能表只能支持 MODBUS 功能代码 03 和 06 以及 16 三种
功能代码,分别是读寄存器和写单一寄存器以及数据块写入功能。
例如在 RTU 方式下读取 1 号设备的流速,即读寄存器 5,6 共 2 个寄存器,命令如下:
01
设备号 功能 起始寄存器 寄存器数目
00
02
03
00
04
效验和
85 CA (十六进制数字)
其中 85 CA 是 16 进制数值,是按照 CRC-16 (BISYNCH,多项式是 x16 + x15 + x2 + 1 屏蔽字为
0A001H)循环冗余算法得到的。请参考 MODBUS 有关资料了解进一步的算法。
返回的数据应该为(设定状态为模拟运行状态,流速=1.2345678m/s):
01
03
04
06
51
3F 9E
设备号 功能 数据字节数 数据=1.234567
3B 32(十六进制数字)
效验和
其中 3F 9E 06 51 四个字节即为 1.2345678 的 IEEE754 格式单精度浮点形式。
再举例,读净累积流量,REG25,REG26 两个寄存器命令如下:
01
03
00
18
00
02
44
0C(十六进制数字)
返回数据应该为(设净累积器=802609,其 4 字节 16 进制表示为 00 0C 3F 31)
03
04
01
00
当净累计=0 时,返回数据为 01
3F 31
0C
03
04
A7 ED(十六进制数字,A7 ED 为效验和)
00
00 FA 33
00
00
其中 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 个停止位。
§1.3.1 MODBUS 寄存器地址表
(注意与水表协议的不同之处)
寄存器
0001-0002
0003-0004
0005-0006
0007-0008
0009-0010
0011-0012
0013-0014
0015-0016
0017-0018
0019-0020
0021-0022
0023-0024
0025-0026
0027-0028
0029-0030
0031-0032
0033-0034
0035-0036
0037-0038
0039-0040
0041-0042
0043-0044
0045-0046
0047-0048
0049-0050
0051
0053-0055
0056
寄存器
个数
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
3
1
变量名称
数据类型
说明
瞬时流量
瞬时热流量
流体速度
测量流体声速
正累积流量
REAL4
REAL4
REAL4
REAL4
LONG
正累积流量小数部分
REAL4
负累积流量
负累积流量小数部分
正累积热量
正累积热量小数部分
负累积热量
负累积热量小数部分
净累积流量
净累积流量小数部分
净累积热量
净累积热量小数部分
温度 1/供水温度
温度 2/回水温度
模拟输入 AI3 量
模拟输入 AI4 量
模拟输入 AI5 量
模拟输入 AI3 电流值
模拟输入 AI4 电流值
模拟输入 AI5 电流值
系统设置密码
硬件设置密码
仪表日期时间
LONG
REAL4
LONG
REAL4
LONG
REAL4
LONG
REAL4
LONG
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
BCD
BCD
BCD
自动储存数据日小时
BCD
单位:立方米/小时
单位:GJ/小时
单位:米/秒
单位:米/秒
所有使用长整数的流量累积器,
其计量单位受 M32(即 REG1438)
控制
REAL4 是标准 IEEE-754 格式单
精度浮点数。该格式数据一般也
称为 FLOAT 格式
LONG 是低字在前带符号长整数
所有使用长整数的热量累积器,
其计量单位受 M84(即 REG1441)
控制
单位:℃
单位:℃
转换后无量钢数据
转换后无量钢数据
转换后无量钢数据
单位:毫安
单位:毫安
单位:毫安
可写。00H 表示取消密码设置
可写。“A55Ah”表示打开
可写。6 字节 BCD 数分别表示秒
分时日月年,低位在前
可写。2 个字节表示定时储存数据
开始的时间和天,例如 0312H 表
示每月 3 日 12 时储存数据。0012H
表示每日 12 时储存数据。
可写。参看说明书键值表
可写。
可写。单位秒
可写。最大 255 次
可写。最大 65536
16 比特位分别表示含义见备注 4
单位欧姆
单位欧姆
单位微妙
单位纳秒
单位微妙
单位微妙
单位毫安
高字节表示信号调整步骤
底字节表示信号质量,数值范围
0-9,数值大表示信号好
数值范围 0-4095
数值范围 0-4095
0 表示中文,1 表示英文
正常范围 100+-3%
无符号,单位秒
无符号,单位秒
无符号
单位为立方米,7 位有效数字
单位为立方米,7 位有效数字
单位为立方米,7 位有效数字
单位为 GJ,7 位有效数字
单位为 GJ,7 位有效数字
单位为 GJ,7 位有效数字
单位为立方米,7 位有效数字
单位为立方米,7 位有效数字
0059
0060
0061
0062
0062
0072
0077-0078
0079-0080
0081-0082
0083-0084
0085-0086
0087-0088
0089-0090
0092
0093
0094
0096
0097-0098
0099-0100
0101-0102
0103-0104
0105-0106
0105-0106
0113-0114
0115-0116
0117-0118
0119-0120
0121-0122
0123-0124
0125-0126
0127-0128
0129-0130
0131-0132
0133-0134
0135-0136
0137-0138
0139-0140
0141-0142
0143-0144
1
1
1
1
1
1
2
2
2
2
2
2
2
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
供水电阻数
回水电阻数
蜂鸣器剩余鸣响次数
OCT 剩余脉冲数目
仪表工作错误代码
输入键值(可模拟键盘) INTEGER
使显示器显示 x 号菜单
INTEGER
INTEGER
输入背光点亮时间
INTEGER
INTEGER
BIT
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
INTEGER
当前电流环输出电流值
工作步骤和信号质量
超声波总传播时间
超声波传播时间时差
超声波上游传播时间
超声波下游传播时间
上游信号强度
下游信号强度
操作界面语言类型
超声波信号传输比
当前雷诺数
当前雷诺修正系数
工作定时器时间
总工作时间
总上电次数
净累积流量(浮点形式)
正累积流量(浮点形式)
负累积流量(浮点形式)
净累积热量(浮点形式)
正累积热量(浮点形式)
负累积热量(浮点形式)
今天累积流量(浮点形式)
本月累积流量(浮点形式)
手动累积器流量
手动累积器小数部分
批量控制器累积流量
批量控制器小数部分
今天累积流量
今天累积流量小数部分
本月累积流量
本月累积流量小数部分
INTEGER
INTEGER
INTEGER
REAL4
REAL4
REAL4
LONG
LONG
LONG
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
LONG
REAL4
LONG
REAL4
LONG
REAL4
LONG
REAL4
0145-0146
0147-0148
0158
0165-0166
0173-0174
0175-0176
0181-0182
0183-0184
0185-0186
0187-0188
0189-0190
0191-0192
0221-0222
0229-0230
0231-0232
0233-0234
0257-0288
0289
0311
0313
0315
0317
1437
1438
1439
1440
1441
1442
1491
1451
1521
1529
2
2
1
2
2
2
2
2
2
2
2
2
2
2
2
2
32
1
2
2
2
2
1
1
1
1
1
1
1
2
2
2
今年累积流量
今年累积流量小数部分
当前显示所在菜单
故障运行时间
当前频率输出值
当前电流环输出值
当前温差
本次上电所补加的流量
频率系数
自动储存总时间
自动储存正累积流量
自动储存瞬时流量
管道内经
上游传播延迟
下游传播延迟
估算总传播时间
显示器缓冲区
显示器缓冲区存储指针
今天已工作时间
本月已工作时间
今天最大瞬时流量
当月最大瞬时流量
当前瞬时流量计量单位
当前累积流量计量单位
当前累积流量倍乘因子
当前累积热量倍乘因子
当前热能测量单位
仪表通讯地址号码
仪表类型
LONG
REAL4
INTEGER
LONG
REAL4
REAL4
REAL4
REAL4
REAL4
LONG
REAL4
REAL4
REAL4
REAL4
REAL4
REAL4
BCD
INTEGER
LONG
LONG
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
用户标尺因子
厂家标尺因子
设备电子序列号码
REAL4
REAL4
BCD
单位:秒
单位:Hz
单位:mA
单位:℃
单位:立方米
应该小于 0.1
储存时间由寄存器 0056 确定
储存时间由寄存器 0056 确定
储存时间由寄存器 0056 确定
单位毫米
单位微秒
单位微秒
单位微秒
可读出
无符号,单位秒
无符号,单位秒
单位: m3/h
单位: m3/h
取值 0-31 见注 5
取值 0-7 见注 1
n 取值 0-7, 见注解 1
n 取值 0-10,见注解 1
取值 0~3。0=GJ , 1=Kcal
2=KWh, 3=BTU
BIT0=0 表示是流量计
BIT0=1 表示是热能表
BIT3=1 表示热能表装在供水口
BIT3=0 表示热能表装在回水口
不可改写
本设备电子序列号码
请注意高位在前
注:(1)内部累积量使用了长整数和小数组合的方式。一般使用时,只读整数部分即可,小数
部分可以忽略。累积量的大小和 累积单位及倍乘因子有关系,它们之间的确切关系是,设累积整数
部分 N(对正累积而言是寄存器 0009,0010 中数值,32 比特带符号长整数),累积的小数部分为
Nf(对正累积而言是寄存器 0011、0012 中内容,4 字节浮点数),而累积流量倍乘因子为 n(寄存
器 1439)
则正累积流量=(N+Nf ) ×10n-3 (单位在累积流量单位 1438 寄存器中确定)。
寄存器 1438 中 取值 0-7 含义如下
(m3)
0 立方米
(L)
1 公升
(GAL)
2 美制加仑
3 英制加仑
(IGL)
4 美制兆加仑 (MGL)
5 立方英尺
6 美制石油桶[42](OB)
7 英制石油桶
(IB)
(CF)
累积热量=(N+Nf )×10n-4
其中:
对于净热量,N 值在寄存器 0029,0030 中
对于净热量,Nf 值在寄存器 0031,0032 中
n 值在寄存器 1440 中确定,
累积热量单位在寄存器 1441 中确定。
(2)其他变量不再给出,如果您有需求可咨询我公司
(3)请注意上表格中的很多数据对于非热能表来说是无效的,在单独使用流量计时,可以忽略
无关项。这些无关项主要是为了使我们的产品的通讯协议统一,便于用户使用。
(4)错误代码是 16 比特位其含义如下
Bit0 没有收到信号错误
Bit1 信号太低错误
Bit2 信号差错误
Bit3 管道空错误
Bit4 电路硬件错误
Bit5 正在调整电路增益
Bit6 频率输出超量程错误
Bit7 电流环输出电流过量程错误(一般情形下需要设置最大量程)
Bit8 内部数据寄存器效验错误
Bit9 主振频率或者时钟频率存在错误
Bit10 参数区存在效验和错误
Bit11 程序存储器数据效验和错误
Bit12 温度测量电路可能存在错误
Bit13 保留??
Bit14 内部计时器溢出错误
Bit15 模拟输入电路存在错误
注意如果对于流量计,使用此代码时请先注意屏蔽掉那些与热量测量有关的位,因为那些位
的状态不是确定的。
(5)瞬时流量单位代码如下
0 立方米/秒
4 公升/秒
8 美制加仑/秒
12 英制加仑/秒
立方米/分
1
公升/分
5
9
美制加仑/分
13 英制加仑/分
2 立方米/小时
6 公升/小时
10 美制加仑/小时 11 美制加仑/天
14 英制加仑/小时 15 英制加仑/天
3 立方米/天
7 公升/天
16 美制兆加仑/秒 17 美制兆加仑/分 18 美制兆加仑/小时 19 美制兆加仑/天
21 立方英尺/分
20 立方英尺/秒
22 立方英尺/小时 23 立方英尺/天
24 美制石油桶/秒
25 美制石油桶/分 26 美制石油桶/小时 27 美制石油桶/天
28 英制石油桶/秒 29 英制石油桶/分 30 英制石油桶/小时 31 英制石油桶/天
§1.3.2 年月日累积数据 MODBUS 地址表
(1) 日累积数据(注意与其它版本流量计的地址是不同的)
每日累积数据采用 32 个字节大小的数据块循环队储存,共有 512 个数据块,当前的数据块指针
地址在寄存器 0162 中,其数值范围为 0~511。当前指针指向“昨天”的数据,当前指针减 1 则指向“前
天”的数据。数据指针等于 0 时再减 1 则指向数据块 511。设 0162 中数为 1,则昨天的累积数据在寄
存器 10257-10272 中,前天的数据在 10241-10256 中,大前天的数据在 18417-18432 中。
注意:在组态软件中,对于浮点数据等变量的读出在前面需要添加“4”,这样可能在这类软件中
填写寄存器地址时,10241 这个寄存器应该写成“410241”。
地址表如下
寄存器地址 寄 存
变量名称
数据类型 说明
用于检查全天工作时间
日累积数据指针
状态字节和日
月和年
总工作时间
热量正累积器值
热量负累积器值
全天净累积流量
净累积热流量值
正累积器值
负累积器值
低字节中是月,高字节为年
数值范围 0-127
低字节中是状态,高字节是日
当天的总量
23:59:59 秒时刻累积器值
23:59:59 秒时刻累积器值
23:59:59 秒时刻累积器值
23:59:59 秒时刻累积器值
23:59:59 秒时刻累积器值
低字节中是状态,高字节是日
器
个数
1
1
1
2
2
2
2
2
2
2
1
1
2
2
当天的总量
23:59:59 秒时刻累积器值
2
23:59:59 秒时刻累积器值
2
23:59:59 秒时刻累积器值
2
23:59:59 秒时刻累积器值
2
2
23:59:59 秒时刻累积器值
。。。。 。。。。。。。。。。。。。。 。。。。。。 。。。。。。。。。。。。。。。。。。。。
16
Integer
BCD
BCD
LONG
REAL4
REAL4
LONG
LONG
LONG
LONG
BCD
BCD
LONG
REAL4
REAL4
LONG
LONG
LONG
LONG
正累积器值
负累积器值
全天净累积流量
净累积热流量值
热量正累积器值
热量负累积器值
月和年
总工作时间
低字节中是月,高字节为年
用于检查全天工作时间
状态字节和日
数据
块号
0
n/a
0162
10241
10242
10243-10244
10245-10246
10247-10248
10249-10250
10251-10252
10253-10254
10255-10256
10257
10258
10259-10260
10261-10262
10263-10264
10265-10266
10267-10268
10269-10270
10271-10272
。。。。 。。。。。。。。。。
18417-18432
511
1
注:1.状态字节的含义请见状态字含义说明。
2.如果读出的数据全是 0FFH,表明此寄存器为空。
(2) 月累积数据(注意与其它版本流量计的地址是不同的)
第 511 块数据块