开源动环监控——使用zabbix 6.0 的agent2监控精密空调等modbus设备
从zabbix6.0开始,modbus成为了官方的默认集成,modbus协议广泛的用于工业设备。
本文前提:zabbix6.0服务器,zabbix 6.0 agent2主机,一个运行modbus slave软件(一款modbus仿真软件,本例中用其输出modbus tcp协议)的windows主机
本文物理连接及协议参考:SCA精密空调机组通信协议
借助串口服务器,将modbus rtu协议转换为modbus tcp协议。
1.检查agent2主机的zabbix agent2的配置文件
/etc/zabbix/zabbix_agent2.conf
默认应有
Include=/etc/zabbix/zabbix_agent2.d/*.conf
2.编辑agent的配置文件或插件配置文件
vim /etc/zabbix/zabbix_agent2.d/plugins.d/modbus.conf
定义以下参数:
Plugins.Modbus.Sessions.<SessionName>.Endpoint
Plugins.Modbus.Sessions.<SessionName>.SlaveID
Plugins.Modbus.Timeout
举例(slaveip换成运行modbus slave的windows客户端主机ip)
Plugins.Modbus.Sessions.MB1.Endpoint=tcp://slaveip:502
Plugins.Modbus.Sessions.MB1.SlaveID=1
Plugins.Modbus.Sessions.MB1.Timeout=3
3.zabbix服务器添加此agent2主机,同时自定义modbus监控项
官方参数
modbus.get[endpoint,<slaveid>,<function>,<address>,<count>,<type>,<endianness>,<offset>]
以添加上述slave id 1的modbus slave为例,在agent2主机中创建监控项。
SCA空调机组通信协议为例
#监控项
PAC1-modbus-slaveid1-addr40001-开关机
#键值
modbus.get[MB1,2,3,0,1,uint16,be,0]
#监控项
PAC1-modbus-slaveid1-addr40003-设定回风温度
#键值
modbus.get[MB1,2,3,0,1,uint16,be,1]
#监控项
PAC1-modbus-slaveid1-addr40004-系统状态
#键值
modbus.get[MB1,2,3,0,1,uint16,be,3]
#监控项
#PAC1-modbus-slaveid1-addr40004-系统状态-bitx-功能X
PAC1-modbus-slaveid1-addr40004-系统状态-bit00-开机
#类型
可计算的
#键值
PAC1-modbus-slaveid1-addr40004-bit00
#公式(判断Bit x是否为1,按位与2的x次幂,然后按位右移x位)
#公式(判断Bit00是否为1,按位与2的0次幂,然后按位右移0位)
#bitrshift(bitand(last(//modbus.get[MB1,2,3,0,1,uint16,be,3]),power(2,x)),x)
bitrshift(bitand(last(//modbus.get[MB1,2,3,0,1,uint16,be,3]),power(2,0)),0)
#监控项
PAC1-modbus-slaveid1-addr40004-系统状态-bit03-制冷
#类型
可计算的
#键值
PAC1-modbus-slaveid1-addr40004-bit03
#公式(判断Bit03是否为1,按位与2的3次幂,然后按位右移3位)
bitrshift(bitand(last(//modbus.get[MB1,2,3,0,1,uint16,be,3]),power(2,3)),3)
#监控项,单位:小时(16比特位向左移动4位+运行时间低位向右移动12位)
PAC1-modbus40016-风机运行时间高位
#键值
modbus.get[MB1,2,3,0,1,uint16,be,15]
#监控项,单位:秒(低12bit位)
PAC1-modbus40017-风机运行时间低位
#键值
modbus.get[MB1,2,3,0,1,uint16,be,16]
#监控项,单位:秒,上述两项相加
PAC1-modbus40016-风机运行时间
#类型
可计算的
#键值
modbus-slave1-addr40016
#公式
bitor(bitlshift(last(//modbus.get[MB1,1,3,0,1,uint16,be,15]),4),bitrshift(last(//modbus.get[MB1,1,3,0,1,uint16,be,16]),12))*3600+bitand(last(//modbus.get[MB1,1,3,0,1,uint16,be,16]),4095)