环保数据传输协议(-安徽绿石动态管控协议)
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”正常
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com