1. 仪器协议
在线监测仪器与数采仪之间通信协议采用Modbus RTU标准,数采仪作为Modbus主机,每台在线监测仪器作为Modbus从机。
图1 Modbus主从通信系统结构
协议适用接口描述:
(1)适用于RS-485通讯接口通讯;
(2)每个RS-485接口可以同时连接多个在线监测仪器。
(3)适用于RS-232通讯接口通讯;
2. 协议层次
在线监测仪器与数采仪之间通讯协议采用Modbus RTU标准,可承载在多种通讯接口上。
图2 Modbus RTU协议层次图
3. 通信协议
在线监测仪器与数采仪之间通信协议采用Modbus RTU标准,通过Modbus寄存器定义通信数据内容。
3.1 Modbus RTU
3.1.1 报文帧结构
图3 Modbus RTU串行链路PDU
表1 Modbus报文结构表
名称 | 类型 | 长度(字节) | 描述 |
设备地址 | BYTE | 1 | 对应仪器中的设备地址,用于区分挂在同一个485总线下不同在线监测仪器。取值范围1~127 |
功能码 | BYTE | 1 | 功能码定义见6.1.2 |
数据 | BYTE[n] | N | 变长数据,伴随功能码、应答模式不同而不同 |
CRC | WORD | 2 | Modbus CRC16校验结果 |
3.1.2 功能码定义
表2 Modbus功能码定义表
代码 | 功能 | 数据类型 | 备注 |
0x03 | 读 | 整形、浮点、字符 | 读多个寄存器 |
0x10 | 写 | 整形、浮点、字符 | 写多个寄存器 |
0x06 | 写 | 整形、浮点、字符 | 写单个寄存器 |
3.1.3 报文应答格式
3.1.3.1 功能码(0x03)读
主机请求:
设备地址 | 功能码 | 寄存器地址 | 寄存器数量 | CRCH | CRCL |
1B | 1B | 2B | 2B | 1B | 1B |
设备地址:主控板地址,为0x01-0xF7可选
功能码:为0x03
寄存器地址:要读取数据的存放开始地址。
寄存器数量:要读取的寄存器的个数
从机应答:
设备地址 | 功能码 | 寄存器地址 | 数据字节数 | 数据 | CRCH | CRCL |
1B | 1B | 2B | 2B | ... | 1B | 1B |
设备地址:下位机地址,为0x01-0xF7可选
功能码:为0x03
数据字节数:寄存器数量×2
数据:N =(寄存器数量×2)BYTE
错误应答:
设备地址(1BYTE)+出错功能码+错误类型(1BYTE)+CRC校验
注意出错功能码是功能码BYTE最高位取反得到。例如0x03 出错功能码为0x83
错误类型:
01 非法功能
02 非法数据地址
03 非法数据值
04 从站设备故障
05 确认
06 从属设备忙
注:以上错误类型为Modbus RTU标准含义。
示例:
读取命令:
01 03 00 00 00 02 C4 0B (设备地址01)
02 03 00 00 00 02 C4 38 (设备地址02)
其中设备地址(01)+功能码(03)+寄存器起始地址(00 00)+寄存器数量(00 02 即指数据长度为2个字)+CRC校验(C4 0B)
应答报文:
01 03 04 41 CB 42 B7 EF 27
设备地址(01)+ 功能码(03)+数据字节数(04)+ 读取数据(实际为16进制数42 B7 41 CB对应的浮点型数据为91.63)+ CRC校验(EF 27)。
3.1.3.2 功能码(0x10)写
主机请求:
设备地址 | 功能码 | 寄存器地址 | 寄存器数量 | 字节数 | DATA | CRCH | CRCL |
1B | 1B | 2B | 2B | 1B | ... | 1B | 1B |
设备地址:主控板地址,为0x01-0xF7可选
功能码:为0x10
寄存器地址:要读取数据的存放开始地址
寄存器数量:要写入寄存器的个数
字节数:写入数据的字节数
数据:要写入的数据
注意如写一个寄存器,则寄存器数量为1,字节数为2,数据为一个WORD。
从机应答:
设备地址 | 功能码 | 寄存器地址 | 寄存器数量 | CRCH | CRCL |
1B | 1B | 2B | 2B | 1B | 1B |
示例:
主机发送:01 10 00 6B 00 02 04 00 0F 06 08 86 51
从机回复:01 10 00 6B 00 02 30 14
错误应答: 设备地址(1BYTE)+出错功能码+错误类型(1BYTE)+CRC校验
注意出错功能码是功能码BYTE最高位取反得到。例如0x03出错功能码为0x83
错误类型:
01 非法功能
02 非法数据地址
03 非法数据值
04 从站设备故障
05 确认
06 从站设备忙
注:以上错误类型为Modbus RTU标准含义。
3.1.3.3 功能码(0x06)写
主机请求:
设备地址 | 功能码 | 寄存器地址 | DATA | CRCH | CRCL |
1B | 1B | 2B | 2B | 1B | 1B |
从机应答:
设备地址 | 功能码 | 寄存器地址 | DATA | CRCH | CRCL |
1B | 1B | 2B | 2B | 1B | 1B |
3.1.4 应用规约
表3 Modbus数据类型定义表
数据类型 | 描述及要求 |
BYTE | 无符号单字节整型(字节,8位) |
WORD | 无符号2字节整型(字,16位) |
DWORD | 无符号4字节整型(双字,32位) |
FLOAT | 4字节浮点数型(字节,32位)IEEE 754 标准 |
DOUBLE | 8字节浮点数型(字节,64位) |
BYTE[n] | N字节 |
STRING | GBK编码,采用0终结符,若无数据,则放一个0终结符 |
DATE | 日期类型6字节 年(BYTE)-月(BYTE)-日(BYTE)-时(BYTE)-分(BYTE)-秒(BYTE)。 其中:年=byte+2000, 月:1-12,日:1-31,时:0-23 分:0-59 秒:0-59 数值格式:BCD码 |
数据字节序定义:
协议采用大端模式(big-endian)来传递WORD、DWORD、FLOAT、DOUBLE。对于DWORD、FLOAT、DOUBLE,字间顺序也按照大端模式(big-endian)排列(也就是Modbus的Swap模式)。
- 关键参数
名称 | 寄存器偏移 | 数据类型 | 寄存器描述 | 读写 | 单位 | 备注 |
关键参数 | 0x2200 | WORD | 消解温度 | R | 摄氏度 | |
0x2201 | WORD | 消解时长 | R | 分钟 | ||
0x2204 | FLOAT | 量程下限 | R | 毫克/升 | ||
0x2205 | ||||||
0x2206 | FLOAT | 量程上限 | R | 毫克/升 | ||
0x2207 | ||||||
0x2208 | FLOAT | 曲线斜率k | R | |||
0x2209 | ||||||
0x220A | FLOAT | 曲线截距b | R | |||
0x220B | ||||||
0x2210 | FLOAT | 标液一浓度 | R | 毫克/升 | 零标 | |
0x2211 | ||||||
0x2212 | FLOAT | 标液一 测量过程值 | R | 信号值 | ||
0x2213 | ||||||
0x2214 | FLOAT | 标液二浓度 | R | 毫克/升 | 量标 | |
0x2215 | ||||||
0x2216 | FLOAT | 标液二 测量过程值 | R | 信号值 | ||
0x2217 |
- 关键参数的例子
读取消解温度的例子
请求报文: 01 03 22 00 00 01 8E 72
应答报文: 01 03 02 00 64 B9 AF
00 64 表示的是读取消解温度的值,消解温度是100度
2.工作状态
名称 | 寄存器偏移 | 数据类型 | 寄存器描述 | 读写 | 备注 |
工作状态 | 0x2000 | WORD | 工作状态 | R | 16位整形 |
测量模式 | 0x2002 | DWORD | 测量模式 | R | 1连续测量 2周期测量 3定点测量 4触发测量 5调试模式 |
告警位图 | 0x2004 | DWORD | 告警位图 | R | 8个寄存器,表示128种告警。从低到高依次对应告警位0~15 |
仪器工作状态定义表
编码 | 描述 | 备注 |
1 | 离线/调试 | |
2 | 待机 | |
3 | 测量 | |
4 | 维护 | |
5 | 清洗 | |
6 | 故障 | |
7 | 零点校准 | |
8 | 量程校准 | |
9 | 预留 | |
10 | 预留 | |
11 | 标样核查 | |
12~99 | 可扩展 | |
2.1读取工作状态的例子
请求报文: 01 03 20 00 00 01 8F CA
应答报文: 01 03 02 00 02 39 85
00 02 表示工作状态是2,查表可以知道工作的状态在待机状态。
2.2 读取测量模式的例子
请求报文: 01 03 20 02 00 01 2E 0A
应答报文: 01 03 02 00 02 39 85
00 02 表示测量的模式是2,查表可以知道模式的状态就是周期模式。
报警值 | 描述 | 针对方法 |
0x00 | 无故障 | 通用 |
0x01 | 缺试剂告警 | 通用 |
0x02 | 缺水样告警 | 通用 |
0x04 | 缺空白水告警 | 通用 |
0x08 | 缺标液 | 通用 |
0x10 | 备用 | 通用 |
0x20 | 标定异常告警 | 通用 |
0x40 | 超量程告警 | 通用 |
0x80 | 加热异常 | 通用 |
0x100 | 低试剂预警 | 通用 |
0x200 | 超上限告警 | 通用 |
0x400 | 超下限告警 | 通用 |
0x800 | 仪表内部其它异常 | 通用 |
3.反向控制
名称 | 寄存器偏移 | 数据类型 | 寄存器描述 | 读写 | 备注 |
远程控制命令 | 0x2C00 | WORD | 远程控制命令码 | W | |
0x2C01 | BYTE[n] | 远程控制命令参数 | W | 当远程控制命令码为时间校准命令时,该字段为6字节的DATE | |
... | |||||
0x2CFF |
编码 | 名称 | 参数 | 返回说明 |
1 | 启动测量 | 无 | 执行成功/失败 |
2 | 停止测量 | 无 | 执行成功/失败 |
3 | 清洗 | 无 | 执行成功/失败 |
4 | 标定 | 1,被动触发 2,周期标定 | 执行成功/失败 |
5 | 标液一校准 | 标液一校准 | 执行成功/失败 |
6 | 标液二校准 | 标液二校准 | 执行成功/失败 |
7 | 预留 | 无 | |
8 | 时间校准 | Date类型 | 返回仪器设定后的时间 |
9 | 标样核查 | 1 标样一核查 2 标样二核查 | 执行成功/失败 |
11~99 | 可扩展 | 无 |
3.1 反向控制的例子
操作名称 | 示例报文 | 备注 |
启动测量 | 请求报文:01 10 2c 00 00 01 02 00 01 8a 52 应答报文:01 10 2c 00 00 01 09 59 | |
停止测量 | 请求报文:01 10 2c 00 00 01 02 00 02 ca 53 应答报文:01 10 2c 00 00 01 09 59 | |
清洗 | 请求报文:01 10 2c 00 00 01 02 00 03 0b 93 应答报文:01 10 2c 00 00 01 09 59 | |
标定 | 请求报文:01 10 2c 00 00 02 04 00 04 00 01 bf 6f 应答报文:01 10 2c 00 00 02 49 58 00 01表示被动触发标定 | 零点和量标一起标定 |
标液一校准 | 请求报文:01 10 2c 00 00 01 02 00 05 8b 91 应答报文:01 10 2c 00 00 01 09 59 | 零标 |
标液二校准 | 请求报文:01 10 2c 00 00 01 02 00 06 cb 90 应答报文:01 10 2c 00 00 01 09 59 | 量标 |
4.读取数据
名称 | 寄存器偏移 | 数据类型 | 寄存器描述 | 读写 | 备注 |
测量数据 | 0x1000 | DATE | 数据时间 | R | 测量启动时间 |
0x1001 | |||||
0x1002 | |||||
0x1005 | FLOAT | 测量数值 | R | ||
0x1006 | |||||
0x1007 | WORD | 预留 | R | ||
0x1008 | WORD | 数据标识 | R | ||
零点校准数据 | 0x5200 | WORD | 备用 | R | |
0x5201 | DATE | 零点数据时间 | R | ||
0x5202 | |||||
0x5203 | |||||
0x5204 | float | 零点浓度 | R | ||
0x5205 | |||||
0x5206 | float | 零点吸光度值 | R | ||
0x5207 | |||||
量程校准数据 | 0x5208 | WORD | 备用 | R | |
0x5209 | DATE | 量程校准数据时间 | R | ||
0x520A | |||||
0x520B | |||||
0x520C | FLOAT | 量程校准液浓度 | R | ||
0x520D | |||||
0x520E | FLOAT | 量程校准吸光度 | R | ||
0x520F | |||||
0x5210 | WORD | 备用 | R | ||
标液核查数据 | 0x5211 | DATE | 标样核查数据时间 | R | |
0x5212 | |||||
0x5213 | |||||
0x5214 | FLOAT | 标样核查测量浓度值 | R | ||
0x5215 | |||||
0x5216 | FLOAT | 标样核查测量数值吸光度 | R | ||
0x5217 | |||||
0x5218 | FLOAT | 标样核查标准浓度值 | R | 已知标液的浓度值 | |
0x5219 |
仪器测量数据时间定义表
数据类型 | 描述及要求 |
DATE | 日期类型6字节 年(BYTE)-月(BYTE)-日(BYTE)-时(BYTE)-分(BYTE)-秒(BYTE)。 其中:年=byte+2000, 月:1-12,日:1-31,时:0-23 分:0-59 秒:0-59 数值格式:BCD码 |
数据标识表
标识 | 标识定义 | 说明 |
N | 正常 | 测量数据正常有效 |
T | 超上限 | 监测浓度超仪器测量上限 |
L | 超下限 | 监测浓度超仪器下限或小于检出限 |
D | 仪器故障 | 仪器故障 |
B | 仪器离线 | 仪器离线(数据通信正常) |
M | 维护调试数据 | 在线监控(监测)仪器仪表处于维护(调试)期间产生的数据 |
CZ | 标液一校准(零点校准) | 零点校准 |
CS | 标液二校准 | 标液校准 |
SC | 标液核查 | 标液核查 |
4.1 读取数据报文
请求报文:01 03 10 00 00 0B 00 CD
应答报文:01 03 16 17 01 01 00 00 00 00 00 00 00 40 00 00 00 00 0000 4E 00 00 00 00 C3B9
17 01 01 00 00 00表示数据时间2017-01-01 00:00:00
40 00 00 00表示数据通道1测量值为2.0
00 4E表示数据标示“N”正常
