塔石配置解析
一、物理连线
1、传感器与475串口服务器连线
传感器4线,2根信号线连475串口服务器,2根电源线连电源。475串口服务器有两个485口可以用作电源,给传感器供电
2、475串口服务器接入网络
(1)重设ip地址
网线连接电脑,设置192.168.0网段,登录默认ip 192.168.0.80,重设ip地址为10.10.200.1/16的网络地址,网关10.10.10.1
(2)接入网络
测试是否可以页面登录10.10.200.1,如下显示登录页面表示ip设置没有问题。
二、modbus对接(475作为server)
1、配置475的模式为server模式
打开Tool V4.5.5 D20230606.exe,修改设备工作模式为tcp server(参照《TAS-LAN-475_Datasheet V1.0.2.pdf》的3.2.2章节)。记录475的地址和端口号用于客户端访问
2、使用NetAssist1调试
(1)客户端配置服务器参数
NetAssist1模拟客户端(相当于自研软件来访问475 server)。协议类型肯定是client,远程主机和端口填写475作为server的ip
(2)发送modbus指令测试
参照《塔石传感器寄存器定义说明_V1.0.pdf》中定义的温湿度寄存器示例,发送指令
注:远程主机地址我这个截图是之前的ip的,新的是200.1,懒得再截图了别去纠结
(3)检查结果
按照modbus的协议,取16进制数据做转换
0X 02 94的湿度转换十进制是660,表示66.0%
0X01 08 的温度转换十进制是264,表示26.4°
3、zabbix使用modbus对接
(1)modbus rtu转modbus tcp
Zabbix对接时,Modbus rtu要转换成modbus tcp。否则串口服务器发现zabbix的报文多了包头无法解码会丢弃。修改以下转换协议,然后点“配置参数”,完成串口服务器配置。
(2)zabbix配置监控项
创建一个部署有agent2的主机,填写键值如下
参数含义如下:
Øtcp://10.10.200.1:10123 : 475串口服务器作为server开放的地址和端口
Ø1: 设备编号,填写1
Ø3: 读寄存器,固定为3
Ø0: 寄存器地址,湿度是0,温度是1
Ø1: 读取几个字节,此处只读取湿度,所以填写1
Øint16:2字节表示一个物理含义
(3)真实报文帧参考:
以下是zabbix的抓包报文
以下是温湿度传感器的定义
(4)有关zabbix官方寄存器地址说明的解释
Zabbix官方的文档,有关寄存器地址address和function关系的描述有点晦涩。简单的理解就是:modbus.get[tcp://10.10.200.1:10123,1,3,0,1,int16]
modbus.get[tcp://10.10.200.1:10123,1,,40001,1,int16]
上面这两个表达式是完全等价的。无非一个指定了function那么就要用寄存器地址(0000H,其实就是0,取自上一节的文档图片);一个未指定function那就用组态地址(40001,取自上一节的文档图片)
(5)zabbix的监控项两种写法
这个塔石的传感器是个温湿度一体的,也就是说温度湿度对我们来说就是需要采集和监控的对象。在zabbix定义监控项时,可以有两种写法,其中第一种写法极易触发下文“异常处理”章节的问题。
Ø写法1:分别创建两个监控项,一个是温度的,一个是湿度的,如下表达式:
modbus.get[tcp://10.10.200.1:10123,1,3,0,1,int16] 湿度,寄存器地址0开始,长度1
modbus.get[tcp://10.10.200.1:10123,1,3,1,1,int16] 温度,寄存器地址1开始,长度1
Ø写法2:创建一个主监控项,从寄存器地址0开始,长度2,同时获取温湿度modbus.get[tcp://10.10.200.1:10123,1,3,0,2,int16] 寄存器地址0开始,长度2
获取的是json格式的字符串,如图
然后新建2个依赖监控项,通过预处理来取第一个和第二个值。如下是第一个值
(6)异常处理
和同事一起在测试时,发现一个问题,就是他测试的数据我也可能收到,完全是混乱的。查了产品资料发现是下图这个原因。正是由于这个原因,串口服务器设置server模式在多个client访问数据时并不友好,modbus tcp server不能用于稳定性要求高的监控场景。于是有了下文mqtt模式的继续摸索。