一、产品介绍及参数
智能数字传感器采用高精度土壤硝酸盐离子电极, RS-485接口输出,支持标准Modbus RTU工业数据总线协议,能够完成硝酸盐离子数据采集、校准及自动温度补偿等功能,用户可自定义查询子地址,设置传输波特率。S-CGHNO3智能数字传感器参数:
型号 | S-CGHNO3 |
探头 | 复合电极(带温补) |
反应时间 | 1 秒内完成 90% 读数 |
温度范围 | 0 ~ 50°C |
量程范围 | 0.1ppm ~ 18000ppm |
分辨率 | ±2% |
输出接口 | 全数字输出(浮点),接口RS-485 |
传输协议 | Modbus RTU |
功能码 | 支持 03 04 06 |
自定义定地址 | 支持 1 ~ 254地址范围 |
自定义波特率 | 支持115200, 57600, 38400, 28800, 19200, 14400, 9600, 4800, 2400, 1200,8N1 |
校准 | 命令方式校准/软件校准 |
温度补偿 | 自动补偿 |
补偿器件 | PT100/PT1000铂热电阻 |
自动识别 | 特征码查询识别 |
工作电压 | 5V±0.2V DC |
预热时间 | ≤ 1s |
系统功耗 | ≤ 210 mW |
ESD人体静电防护 | 支持 |
防护等级 | IP54 |
传感器寿命 | 68个月(视土质状况而定) |
二、产品资源
《用户手册》 | 1份 |
《自动校准软件》 | 1份 |
三、使用Modbus通讯协议与传感器通讯
3.1 Modbus协议Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed Automation,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。在中国,Modbus已经成为国家标准GB/T19582-2008
3.2 传感器通讯波特率
在第一次使用传感器时,传感器使用的默认波特率为9600 Baud,8 Data bits, None Parity, 1 Stop Bit,您可以通过Modbus RTU命令写波特率寄存器进行设置,命令写入后将在下一次上电时生效。
表3.2.1 波特率寄存器
寄存器 名称 |
类型 | 大小 |
起始 地址 |
读功 能码 |
写功 能码 |
数据-波特率 | 默认值 | 存储模式 |
波特率 | 4X | 16 Bit | 0x0001 | 0x03 | 0x06 | 见表 4.2.2 | 0x0000 |
大端模式 (Big-Endian) |
表3.2.2 寄存器数据与波特率关系
寄存器数据 | 对应波特率 |
0x0000 | 115200 Baud |
0x0001 | 57600 Baud |
0x0002 | 38400 Baud |
0x0003 | 28800 Baud |
0x0004 | 19200 Baud |
0x0005 | 14400 Baud |
0x0006 | 9600 Baud |
0x0007 | 4800 Baud |
0x0008 | 2400 Baud |
0x0009 | 1200 Baud |
其他 | 自动恢复到出厂设置值 |
(1)将波特率修改为9600 Baud (0x0006),默认传感器子地址为0x01
主机发送请求:
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
数据高位 (8 Bit) |
数据低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x06 | 0x00 | 0x01 | 0x00 | 0x06 | 0x58 | 0x08 |
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
数据高位 (8 Bit) |
数据低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x06 | 0x00 | 0x01 | 0x00 | 0x06 | 0x58 | 0x08 |
传感器进行正常应答后,将传感器重新上电,使用9600 Baud连接传感器即可。
3.3 传感器子地址
在第一次使用传感器时,传感器使用的默认子地址为0x01,您可以通过Modbus RTU命令写子地址寄存器进行设置,命令写入后将在下一次上电时生效。
表3.3.1 子地址寄存器
寄存器 名称 |
类型 | 大小 |
起始 地址 |
读功 能码 |
写功 能码 |
数据范围 | 默认值 | 存储模式 |
子地址 | 4X | 16 Bit | 0x0002 | 0x03 | 0x06 | 0x00~0xFE | 0x0001 |
大端模式 (Big-Endian) |
3.3.1 修改地址寄存器示例
(1)将地址修改为0x08 ,默认传感器地址为0x01
主机发送请求:
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
数据高位 (8 Bit) |
数据低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x06 | 0x00 | 0x02 | 0x00 | 0x08 | 0x29 | 0xCC |
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
数据高位 (8 Bit) |
数据低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x06 | 0x00 | 0x02 | 0x00 | 0x08 | 0x29 | 0xCC |
传感器进行正常应答后,将传感器重新上电,使用子地址 0x08连接传感器即可。
3.4 获取铵离子浓度
通过Modbus RTU 协议可以访问硝酸根离子(NO3)值寄存器来获取当前所测量的NO3值数据,NO3数据由2个16 bit的输入寄存器进行存储,按照小端模式(Little-Endian,即x86体系模式)的单精度浮点数(即C\C++ 中的float类型, 32 Bit)进行表示。
表3.4.1 NO3寄存器
寄存器 名称 |
类型 | 大小 |
起始 地址 |
读功 能码 |
写功 能码 |
数据范围 | 存储模式 |
NH4值1 | 3X | 16 Bit | 0x0001 | 0x04 | - |
-2^128 ~ +2^128 |
单精度浮点数 |
NH4值2 | 3X | 16 Bit | 0x0002 | 0x04 | - |
(1)默认传感器地址为0x01,电极放置在硝酸根离子为 14.078314 ppm 的溶液当中进行测量
主机发送请求:
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
寄存器数量高位 (8 Bit) |
寄存器数量低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x04 | 0x00 | 0x01 | 0x00 | 0x02 | 0x20 | 0x0B |
地址 (8 Bit) |
功能码 (8 Bit) |
字节数 (8 Bit) |
数据位[0] (8 Bit) |
数据位[1] (8 Bit) |
数据位[2] (8 Bit) |
数据位[3] (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x04 | 0x04 | 0xC6 | 0x40 | 0x61 | 0x41 | 0x2F | 0x78 |
应答数据说明:
在传感器应答中,数据位[0]至数据位[3]共4个字节构成了32位小端模式下的Float类型的数据即为14.078314。
编程提示:
以上述数据为例,C语言当中可进行如下转换操作
注意:样例代码为x86 PC 或 小端模式ARM处理器平台
#include <stdio.h> typedef union { unsigned char Hex[4]; float Val; }THex2Float; int main() { THex2Float t; t.Hex[0] = 0xC6; /* 数据位[0] */ t.Hex[1] = 0x40; /* 数据位[1] */ t.Hex[2] = 0x61; /* 数据位[2] */ t.Hex[3] = 0x41; /* 数据位[3] */ printf("%f", t.Val); /* t.Val 值将被输出为 14.078314 */ return 0; } |
表3.4.1 NO3温度寄存器
寄存器 名称 |
类型 | 大小 |
起始 地址 |
读功 能码 |
写功 能码 |
数据范围 | 存储模式 |
NO3温度1 | 3X | 16 Bit | 0x0003 | 0x04 | - |
-2^128 ~ +2^128 |
单精度浮点数 |
NO3温度2 | 3X | 16 Bit | 0x0004 | 0x04 | - |
主机发送请求:
地址 (8 Bit) |
功能码 (8 Bit) |
起始寄存器地址高位 (8 Bit) |
起始寄存器地址低位 (8 Bit) |
寄存器数量高位 (8 Bit) |
寄存器数量低位 (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x04 | 0x00 | 0x03 | 0x00 | 0x02 | 0xB1 | 0xCB |
地址 (8 Bit) |
功能码 (8 Bit) |
字节数 (8 Bit) |
数据位[0] (8 Bit) |
数据位[1] (8 Bit) |
数据位[2] (8 Bit) |
数据位[3] (8 Bit) |
CRC高位 | CRC低位 |
0x01 | 0x04 | 0x04 | 0xC6 | 0x40 | 0x61 | 0x41 | 0x2F | 0x78 |
应答数据说明:
在传感器应答中,数据位[0]至数据位[3]共4个字节构成了32位小端模式下的Float类型的数据即为14.078314。
四、接线说明
若您手中的传感器的接口端使用引线的方式,则连线规则如表4.1所示线缆颜色 | 说明 |
红 | 供电电源,VCC +5V |
黑/蓝 | 电源地线,GND |
绿 | RS-485 A+端子(T/A) |
黄 | RS-485 B-端子(T/B) |
注意:将电源与地连接错误将有可能损毁传感器设备。