介绍
在本文中,我将讨论如何使用Zabbix和Wirenboard监视生产设备,以及如何从生产线和基本资源来源中获取数据。本文介绍了通过免费软件组织监视的概念和要点,但不会讨论SCADA类的严肃系统。我的任务是在没有资本投入的情况下快速部署监控,并尽快从现有资源开始接收数据。
一个任务
我们拥有包含原材料和成品的输送线,还有烤箱,高压灭菌器和其他可用于生产的部件。所有这些都会消耗各种资源(煤气,水,电),并且需要进行监控(工作或闲置)。我们需要进行监控,以使我们能够确定生产中的瓶颈并得出有关使用资源和设备的效率的结论。
整合困难
不幸的是,所有生产设备都由自己的本地控制器控制,不是每个人都有网络接口,每个人都有自己的协议,封闭的操作系统访问权限,使用了模拟传感器-很少有人想与外界共享信息。
改变一切都是漫长,昂贵和困难的,您需要立即获取数据,得出结论:您需要嵌入式。
控制者
我们选择Wirenboard作为控制器。一个完全开放的linux正在运行,您可以安装任何其他软件包,它具有自己的规则引擎和Web界面。控制器制造商生产使用开放式Modbus RTU协议相互通信的所有必要的传感器和仪表线。所有数据都是在MQTT中收集的。我认为,MQTT是收集和传递遥测数据的最合适的方法,该协议是开放的,并且尽可能易于使用。
Zabbix-mqtt-Wirenboard
Zabbix不能直接与MQTT一起使用,但是可以使用外部模块,这是我使用的两个选项。
- Zabbix , MQTT mosquitto_sub. : «UserParameter=mqtt.value[*],mosquitto_sub -t '$1' -C 1», Zabbix , item key mqtt.value[ ].
, – MQTT . , , Zabbix . «retain», , Zabbix , , . – , . , .
Zabbix 4.2 zbx_mqtt. Zabbix , , JSON . «» . Preprocessing: – .
– -. :
/ .
, WB-MCM8 c modbus 32, , MQTT Wirenboard.
/devices/wb-mcm8_32/controls/Input 1 counter
/devices/wb-mcm8_32/controls/Input 2 counter
…
/devices/wb-mcm8_32/controls/Input 8 counter
Zabbix MasterItem_WB-MCM8_32 External check. .

key : mqtt["-t=/devices/wb-mcm8_32/#","--mqtt-host={HOST.CONN}"] :
mqtt[] –
-t=/devices/wb-mcm8_32/# - wb-mcm832
--mqtt-host={HOST.CONN} - Wirenboard. {HOST.CONN}
, Zabbix JSON, :
{…"/devices/wb-mcm8_32/controls/Input 7 counter": "3129705", "/devices/wb-mcm8_32/controls/Input 3 counter": "1885652", "/devices/wb-mcm8_32/controls/Input 1 counter/meta/type": "value", "/devices/wb-mcm8_32/controls/Input 5/meta/order": "13", "/devices/wb-mcm8_32/controls/Input 8/meta/order": "16"…}
dependent item, .

key , mqtt . Preprocessing.

JSONPath -
Check for error in JSON - wb-mcm8 : , , Zabbix .
Simple change - , () – Simple change.
, , . , , .
WB-MAP3H. , , . ( ) ( , – ). (, , ), ( ).

, . , , – .
Delta Modbus TCP RTU
Delta, Modbus TCP. Modbus Zabbix libzbxmodbus. , TCP, com RTU Modbus. , .
Zabbix Master item, 17 Modbus TCP, , .
modbus_read[{$MODBUS_ADDRESS},1,4110,3,17*s]

$MODBUS_ADDRESS – Zabbix, ip , «tcp://192.168.0.2»
1 – Modbus. «1», RTU ,
4110 – ,
3 – Modbus. 3 –
17*s – , 17 , int16 (s=int16, f=float, b=bit )
5 Zabbix – Test, JSON 17 ( 4110 4126).
{"4110":967,"4111":960,"4112":395,"4113":0,"4114":0,"4115":0,"4116":665,"4117":803,"4118":2500,"4119":2500,"4120":447,"4121":999,"4122":1224,"4123":2154,"4124":1493,"4125":1254,"4126":418}
, Preprocessing steps JSONPath = $.4110 4110 . , : In range 0 1500, – . Discard unchanged , .

Siemens
Siemens S7 profinet / profibus, Snap7. zbx_s7_get , .

s7_get.py :
s7_get.py[{HOST.CONN},{$S7.RACK},{$S7.SLOT},{$S7.DB},6,bool,--json]
{HOST.CONN} – , ip ( host interface)
{$S7.RACK} – , rack id
{$S7.SLOT} – ,
{$S7.DB} – , id
6 - offset
Bool – , true / false. int float.
--json – . json, master item .
JSON, ( ).
{"6": ["True", "False", "False", "True", "False", "True", "True", "False"]}
Linx 5900
Linx 5900 ( , ). , , - .
Zabbix moxa NPORT 5150. tcp rs232 serial /dev/ttyr01 linux , Zabbix . Linx Remote Communications Interface (RSI). , ( ).
: 1b 02 08 1b 03
: 1b 06 00 00 08 da bc b9 01 1b 03
:
1b 06 -
00 00
08 – 8 ( )
da bc b9 01 -
1b 03
UINT32 - Little Endian (DCBA)
01 B9 BC 8F 28949647
01 B9 BC DA 28949722
01 B9 BD 25 28949797
, , .
Zabbix serial.get. Item key :
serial.get[/dev/ttyr01,5,1b02081b03,uint32]
Zabbix , .
:
( )
OEE
( )
( )
, , – , . Grafana , .
:
, . lorawan
CAS
P.S.
本文是在Zabbix 5.2发布之前写的。新版本专注于使用物联网,并且已经能够从MQTT和Modbus接收数据而无需其他模块,这要感谢Zabbix开发人员。特别感谢@wabbit 提供了git https://github.com/v-zhuravlev上的模块,它们为监视的发展提供了主要动力。