霍尼艾格Honeyeagle仪表RS485通讯协议
在线式多合一气体浓度检测仪通讯协议
本探头使用的是基于 RS485 硬件接口 ModbusRTU 通讯协议。支持 03 和 06 两个功能码。03 功能码:读取单个或多个保持寄存器
主机(PLC、PC 等设备)发送:
地址 | 03 | 起始地址高位 | 起始地址低位 | 寄存器数量高位 | 寄存器数量低位 | CRCL | CRCH |
从机回复:
地址 | 03 | 字节数 n*2 | 数据 1 高位 | 数据 1 低位 | …… | 数据 n 高位 | 数据 n 低位 | CRCL | CRCH |
06 功能码:修改单个保持寄存器
主机(PLC、PC 等设备)发送:
地址 | 06 | 地址寄存器高位 | 地址寄存器低位 | 修改数值高位 | 修改数值低位 | CRCL | CRCH |
从机回复
地址 | 06 | 地址寄存器高位 | 地址寄存器低位 | 修改数值高位 | 修改数值低位 | CRCL | CRCH |
被测气体示例:
请先浏览系统参数表中的“数据发送模式”参数。
假设本机地址为 1,数据发送模式为:被动-2。
读取 SO2 实时浓度寄存器指令示例:
主机发送:01 03 00 00 00 01 84 0A
从机回复:01 03 02 00 64 B9 AF (SO2 实时浓度为 100,需按小数点位数 缩小,即需除以 10,实际浓度为 100÷10=10.0ppm)
修改 CH4 低报寄存器指令示例:
主机发送:04 06 00 05 00 FA 19 DD
从机回复:04 06 00 05 00 FA 19 DD(把 CH4 的低报修改为 0xFA,即 250,实际低报值为 250÷10=25.0%LEL)
部分寄存器地址表:气体参数
名称 | 地址 | 备注 | |
通道一 | 实时浓度 | 0x0000 | 03 功能码:读取实时浓度 06 功能码:调零 |
状态 | 0x0001 | 03 功能码:读取当前状态 06 功能码:标定 | |
量程 | 0x0002 | 限制最小 0x0064,即最小限制 100 01 06 00 02 03 E8 CRCL CRCH 修改 0x0002 内容为 0x03E8,即 1000 |
|
单位 | 0x0003 | 0x0000-0x0012,即 0-18,共 19 个单位 0-空,1-ppm,2-pphm,3-ppb,4-%LEL,5-%VOL,6-ug/m3,7-mg/m3,8-g/m3,9-mg/L,10-%RH,11-℃,12-Nm3/h,13-MPa,14-KPa,15-Pa,16-mm,17-m3/h,18-M/S | |
精度 | 0x0004 | 0x0000-0x0004;即 0-4,最多 4 位小数 | |
低报 | 0x0005 | 0-0xFFFF,即 0-65535 | |
高报 | 0x0006 | 0-0xFFFF,即 0-65535 | |
回差 | 0x0007 | 0-0xFFFF,即 0-65535 | |
气体名称第 2、1 字符 | 0x0008 | 单个字符范围 0x0000-0x007F | |
气体名称第 4、3 字符 | 0x0009 | 单个字符范围 0x0000-0x007F | |
气体名称第 6、5 字符 | 0x000A | 单个字符范围 0x0000-0x007F | |
气体名称第 8、7 字符 | 0x000B | 单个字符范围 0x0000-0x007F | |
4mA DAC 值 | 0x0010 | 限制最大 0x0F9F,即 3999 | |
20mA DAC 值 | 0x0011 | 限制最大 0x0F9F,即 3999 | |
报警模式 | 0x0012 | 取值范围:0x0001,0x0002,0x0003,0x0004。以下情况不报警: 模式 1:V<L<H,浓度值<低报值<高报值 模式 2:L<V<H,低报值<浓度值<高报值 模式 3:H<V<L,高报值<浓度值<低报值 模式 4:H<L<V,高报值<低报值<浓度值 |
|
传感器信号类型 | 0x0013 | 0-正信号,1-负信号 | |
读取浓度比例 或 写强制输出电流标志 |
0x001B | 03 功能码:读取当前浓度与量程的比例 06 功能码: 0-随浓度比例输出 4-强制输出 4mA 20-强制输出 20mA 其他值:报错误码 03 |
部分寄存器地址表:系统参数
名称 | 地址 | 备注 | |
系统参数 | 本机地址 | 0x0080 | 0x0001-0x00C7,即 1-199 号 |
与外部设备通信波特率 | 0x0081 | 0x0000-0x0008,即 0-8 0-2400,1-4800,2-9600,3-14400,4-19200, 5-38400,6-56000,7-57600,8-115200 |
|
数据发送模式 | 0x0082 | 0x0000,0x0001,0x0002 0x0000:单地址的被动发送模式,一台 检测仪仅有一个 ModbusRTU 通讯地址,显示为“被动-1”,此检测仪通讯地址即 为系统设置界面下的“本机地址”。气 体 1 寄存器地址范围:0x0000-0x001F;气体 2 寄存器地址范围:0x0020-0x003F;气体 3 寄存器地址范围:0x0040-0x005F;气体 4 寄存器地址范围:0x0060-0x007F; 0x0001:多地址的被动发送模式,一台 检测仪有多个 ModbusRTU 通讯地址,显 示为“被动-2”,例如检测仪系统设置界 面下的“本机地址”为 5,则气体 1 的通 讯 地 址 为 5 , 寄 存 器 地 址 范 围 :0x0000-0x001F;气体 2 的通讯地址为 6,寄存器地址范围:0x0000-0x001F;气体 3 的通讯地址为 7,寄存器地址范围:0x0000-0x001F;气体 4 的通讯地址为 8,寄存器地址范围:0x0000-0x001F; 0x0002:单地址的主动发送模式,数据 协议为 ModbusRTU 协议,一条数据包含 4 个气体的实时浓度,不含小数点①,发 送间隔由“数据主动发送间隔”控制。 数据格式见②。 |
|
数据主动发送间隔 | 0x0083 | 0x0005-0xEA5F,即 5-59999 秒(约 16.666 小时) | |
恢复出厂设置对象 | 0x0084 | 0x0000-0x0005,即 0-5 0-气体 1,1-气体 2,2-气体 3,3-气体 4,4-系统参数,5-全部参数 |
|
语言 | 0x0085 | 0x0000,0x0001,即 0 和 1 0-简体中文,1-English | |
开机倒计时 | 0x0086 | 0x0000-0x012B,即 0-299 秒,5 分钟 | |
开机自检 | 0x0087 | 0x0000,0x0001,即 0 和 1 0-开机不自检,1-自检 |
版本号 | 0x0088 | (只读)十进制 10=V1.0 | |
主动上传开关 | 0x0089 | 0x0000,0x0001,即 0 和 1 设为主动上传模式时有效
0-停止主动上传 |
|
气体 1 实时浓度 | 0x00A0 | 只读,以整数传递,真实值需结合小数 点位数换算,可使用“本机地址”连续 读取③ | |
气体 2 实时浓度 | 0x00A1 | 同上 | |
气体 3 实时浓度 | 0x00A2 | 同上 | |
气体 4 实时浓度 | 0x00A3 | 同上 | |
气体 1 运行状态 | 0x00A4 | 只读,1-正常,2-低报,3-高报,4 故障 | |
气体 2 运行状态 | 0x00A5 | 同上 | |
气体 3 运行状态 | 0x00A6 | 同上 | |
气体 4 运行状态 | 0x00A7 | 同上 | |
气体 1 高限报警值 | 0x00B0 | 只读,以整数传递,真实值需结合小数 点位数换算 | |
气体 1 低限报警值 | 0x00B1 | 同上 | |
气体 1 报警回差值 | 0x00B2 | 同上 | |
气体 2 高限报警值 | 0x00B3 | 同上 | |
气体 2 低限报警值 | 0x00B4 | 同上 | |
气体 2 报警回差值 | 0x00B5 | 同上 | |
气体 3 高限报警值 | 0x00B6 | 同上 | |
气体 3 低限报警值 | 0x00B7 | 同上 | |
气体 3 报警回差值 | 0x00B8 | 同上 | |
气体 4 高限报警值 | 0x00B9 | 同上 | |
气体 4 低限报警值 | 0x00BA | 同上 | |
气体 4 报警回差值 | 0x00BB | 同上 | |
设为出厂参数 | 0x00EE | 0-设为出厂值,非 0-设为当前值 |
①、不含小数点,即数据传输时都是传输整数,例如一个气体的量程为 10.00ppm,实时浓 度为 0.12,在传输时会传输 12,而不是 0.12,可以理解为放大了 100 倍传输,接收端收到 数据后要响应的缩小 100 倍。各个气体的小数点位数可以根据量程上的小数点位数获得。
②、单地址的主动发送模式通信示例:
上图是一个四合一的有毒气体检测仪,包含了四种气体,100.0ppm 的 SO2,50.00mg/m3 的 VOCs,30.00%VOL 的 O2,还有 100.0%LEL 的 CH4,在系统菜单下,给每个气体分配了一 个序号,SO2 为 1,VOCs 为 2,O2 为 3,CH4 为 4。
例如系统设置界面下的“本机地址”为 1,则检测仪会间隔“数据主动发送间隔”时间 主动的通过 RS485 接口向外发送数据,格式如下:
01 03 10 00 64 06 C2 08 16 02 28 00 01 00 02 00 01 00 03 CRCL CRCH
0x01:本机地址;
0x03:功能码;
0x10:后续有 0x10 个字节是数据,即 16 个数据;
0x0064:SO2 的无小数点的实时浓度,100,实际浓度除以 10,即 10.0ppm;
0x06C2:VOCs 的无小数点的实时浓度,1730,实际浓度除以 100,即 17.30mg/m3; 0x0816:O2 的无小数点的实时浓度,2070,实际浓度除以 100,即 20.70%VOL; 0x0228:CH4 的无小数点的实时浓度,552,实际浓度除以 10,即 55.2%VOL; 0x0001:SO2 的运行状态,正常;
0x0002:VOCs 的运行状态,低报;
0x0001:O2 的运行状态,正常;
0x0003:CH4 的运行状态,高报;
CRCL:CRC16 冗余校验码低字节;
CRCH:CRC16 冗余校验码高字节。
③、使用“本机地址”一次读取多个实时浓度数据:被动-1 和被动-2 模式下均可 在“系统设置”列表下的第 0x00A0 号地址开始存储了各个气体的实时浓度和运 行状态,第 0x00B0 号地址开始存储了各个气体的报警阈值。
一条指令读取 4 种气体实时浓度,格式如下:
主机发送:01 03 00 A0 00 04 44 2B
0x01:此检测仪“系统设置”下的“本机地址”
0x03:读保持寄存器
0x00A0:读保持寄存器的起始地址,即从第 0x00A0 号地址开始读取 0x0004:读保持寄存器的个数,连续读 4 个
442B:即 0x2B44,CRC16 循环冗余校验码,发送指令时低位在前高位在后 从机回复:01 03 08 00 64 06 C2 08 16 02 28 2B 7C
0x01:此检测仪“系统设置”下的“本机地址”
0x03:读保持寄存器
0x08:后面有 8 个字节的数据,不包含末尾的 2 个 CRC16 校验码
0x0064:SO2 的无小数点的实时浓度,100,实际浓度除以 10,即 10.0ppm;0x06C2:VOCs 的无小数点的实时浓度,1730,实际浓度除以 100,即 17.30mg/m3;0x0816:O2 的无小数点的实时浓度,2070,实际浓度除以 100,即 20.70%VOL;0x0228:CH4 的无小数点的实时浓度,552,实际浓度除以 10,即 55.2%VOL;2B7C:即 0x7C2B,CRC16 循环冗余校验码,发送指令时低位在前高位在后
Modbus 错误码(10 进制)
|
|
|||||
01 | 非法功能。对于服务器(或从站)来说,询问中接收到的功能码是不可允许的 操作,可能是因为功能码仅适用于新设备而被选单元中不可实现同时,还指出 服务器(或从站)在错误状态中处理这种请求,例如:它是未配置的,且要求 返回寄存器值。 | |||||
|
|
|||||
03 | 非法数据值。对于服务器(或从站)来说,询问中包括的值是不可允许的值。该值指示了组合请求剩余结构中的故障。例如:隐含长度是不正确的。modbus 协议不知道任何特殊寄存器的任何特殊值的重要意义,寄存器中被提交存储的 数据项有一个应用程序期望之外的值。 | |||||
|
|
|||||
05 | 确认。与编程命令一起使用,服务器(或从站)已经接受请求,并且正在处理 这个请求,但是需要长持续时间进行这些操作,返回这个响应防止在客户机(或 主站)中发生超时错误,客户机(或主机)可以继续发送轮询程序完成报文来 确认是否完成处理。 | |||||
|
|
|||||
08 | CRC16 码校验错误,从站接收来自服务器(或主机)的数据后,计算数据的校 验码异常,表明接收的数据本身的校验码是错误的,或者在传输过程中数据发
生了变化,导致校验失败。 |
|||||