对于IT专业人员来说,解决服务器机房中环境监控问题的最简单方法可能是使用具有SNMP输出的专用控制器(例如,NetBotz或NetPing)。 但是对于那些不惧怕困难并希望获得工业级廉价解决方案(通过批量生产设备)的人来说,Modbus协议有一个有趣的选择。

下面,我将描述基于俄罗斯制造的组件-NVP Bolid的监视系统,我们将“合并” Zabbix 4.0中的数据。 NVP“ Bolid”在消防自动化设备领域广为人知,经过考虑的解决方案将带有这种“烙印”。 坦率地说,他们的装置在外壳的设计和周到性上没有什么不同,但是……价格足以弥补所有这些缺点。 值得注意的是非常好的文档以及或多或少的常规免费技术支持。
协议和接口
在继续使用硬件之前,我们将简要介绍所使用的协议和接口:
Modbus :一种基于“主站”-“从站”原理的工业协议。 Modbus网络上只能有一个主站,它轮询从站并“告诉”该做什么。 作为传输介质,它可以使用RS-485(Modbus RTU)或以太网(Modbus TCP)接口。 理论上,最大设备数为247。
Orion :NVP“ Bolid”公司的专有协议,建立在“ Master”(主)-“ Slave”(从)的原则上。 显然,修改后的RS-485接口用作数据传输介质,因此最大线路长度可以达到3 km(!)。 设备的最大数量为127。
DLS (两线通信线):NVP“ Bolid”公司的专有协议,建立在“主”-“从”(主)的原则上。 它使用铜对电缆作为数据传输介质(建议使用双绞电缆)。 设备的最大数量为127 + 1。 拓扑-带有分支的总线(或环形),最大线路长度可以达到1.5 km(取决于电缆的类型,电缆导体的横截面和所连接设备的数量)。
RS-485 :物理层接口,使用“双绞线”(一对“ 2线”或两对“ 4线”对进行数据传输,第二个不常见)。 声明的最大线长为1.2公里。 拓扑是公共汽车。
如您所见,使用了相当“远程”的通信线路。 在所有协议中,设备寻址都由“句柄”(预配置)设置。
感测器
该系统涉及连接“专用”(专有)地址传感器(更严格地说是“检测器”,即具有内置传感器的设备),但是您也可以使用地址扩展器(1至8个输入)连接“普通”非地址。 可寻址检测器的使用具有两个优点:几乎所有可寻址设备都通过信号线接收电源(即,不必提供单独的12V电源线),也不需要将地址扩展器放在任何地方。 传感器连接到
DPS 。
“终端”设备的范围非常广泛,但是我将给出解决我们的问题时可能需要的设备:
- S2000-VT-室内温度和湿度组合传感器(IP41)。 拥有测量仪器证书,误差仅为0.5°C,建议零售价仅为1200卢布!
- S2000-SMK(及其变型)-“开门”传感器(电磁接触检测器,簧片开关)。 建议零售价-300卢布。
- S2000-DZ-点淹没传感器(与Realty一起完成,因此是“未格式化”)。 建议零售价-800卢布。
- 2000-1,2000-2,2000-8-用于1、2和8连接的地址扩展器,可用作其他设备(例如,灭火设备)“干触点”类型信号(开/关)的“接收器”或空调泵);
- S2000-SP2-继电器块(用于2个输出),可用于控制设备(例如,警报灯-指示灯)。 建议零售价-1200卢布。
有关设备的完整列表,请参见
制造商的
官方网站 。
控制者
我可以这么说,控制器的“线”由三个模型组成:
- S2000-KDL-基本模型(名称代表“ System 2000-两线通信线的控制器”);
- S2000-KDL-2I-为RS-485和DPS增加了电流隔离;
- S2000-KDL-Modbus-S2000-KDL-2I设计中已添加Modbus S2000-PP协议转换器。
最好使用S2000-KDL-Modbus,但也可以将S2000-KDL / C2000-KDL-2I与附近安装了S2000-PP协议转换器并采用面板安装式外壳的设计一起使用。
控制器在
DLS线路中扮演“领导者”的角色(只能将一条DPS线路连接到一个控制器),在RS-485 Orion线路上,它已经充当“从属”,并且将无法“直接”从其收集数据。 为了在RS-485 Orion线路中收集数据,使用了所谓的2000或2000-控制台(包括内置版本),这些控制台已经标准化了数据传输接口。
以下控制器还可以区分以下特征:
- 指的是可配置的类型,而不是可编程的类型(即,您只需要配置参数,而无需开发程序);
- 在DPS中最多支持127个可寻址设备(S2000-VT有两个地址),许多专员不建议使用100-110以上的设备;
- 电源DC 12-24V的双输入;
- 不太方便的外壳设计(所有连接的导线都不能隐藏在设备外壳中,您必须将它们从设备背面卸下)。
对于系统容错,您可以使用以下措施(可选):
- 环形环路-一处出现环路中断不会影响可寻址传感器发出的信号;
- 使用分支隔离块(BRIZ)-允许您进行径向分支,并隔离其中存在短路“ DPS +”和“ DPS-”的环路段。
重要信息:控制器不断推出新的固件,以消除错误并增加功能,并且C2000-KDL和C2000-KDL-2I固件不兼容。
Modbus连接
如前所述,可以使用C2000-Modbus控制器或C2000-PP转换器。 两种方案均使用Modbus RTU 2线协议(使用RS-485作为从设备)来发出信号(我们的主机是Zabbix或某些SCADA系统)。 可以使用两种方法连接到服务器:
- 首选-Modbus RTU / Modbus TCP转换器,可连接到我们装有软件的服务器所在的本地网络;
- 便宜-带直接连接到服务器的RS-485 / USB转换器。 我注意到有很多关于这些USB记忆棒可靠性的抱怨(您几乎可以接受,我从中国订购了100卢布,使用了一堆RS-232 / RS-485转换器和一个USB / RS-232适配器,并且一切继续进行!)
可以使用两种方案将事件传输到Modbus协议:
- 当这些设备在“ Orion-Master”模式(由板上的跳线选择)下运行并充当“ Orion”系统的询问器时,直接从2000-/C2000--Modbus获得。
- 使用“ S2000M”遥控器时,它会从控制器收集信息,然后才通过C2000-/C2000--Modbus(“猎户模式”从属模式)将其发送到Modbus。 该方案的优点在于,可以将远程终端用作“本地终端”(请参阅内置LCD屏幕上的事件),并且在服务器发生故障时,可以使用监视软件继续记录事件。 缺点:设置稍微复杂一点,并且遥控器具有非常特定的外观。
电源和安装
对于电源,需要12V直流电源,最好稳定并安装在DIN导轨上。 可以从1个控制器-500 mA的计算中大致选择其功率(通常以mA或A表示)。 我建议仅在使用S2000M遥控器时才使用冗余电源(带内置电池,RIP)。 并确保将电源连接到与监视系统服务器相同的不间断电源(UPS)。
当然,您可以将所有这些安装在墙上,但留给火警和安全警报安装人员使用,我们将使用3U DIN导轨将其安装在19英寸的机壳中(例如,PSM-3U或Cabeus CMO与同一物品一起使用,您必须扔掉前面板)。在使用S2000-M遥控器的情况下,可以使用19英寸4U插头(最好是带孔的),该插头将用作安装面板,并且端子和控制器的DIN导轨已经固定在该插头上。 减去决定-设备代表安装19英寸飞机。
组装和安装组件系统不会引起任何问题,但我提请注意以下几点:
- 大多数传感器都有一小段突出的电缆。 要增加电缆的长度,可以使用具有热收缩作用的焊料,也可以使用两对摆动盒KS-2(紧凑型,但是做工是“ lam缝”),或者使用RJ11(RJ45)连接;
- 在安装传感器之前,必须先注册它们的地址(如下所述)并标记;
- 连接传感器时,必须注意“ DLS +”和“ DLS-”的极性(请参阅文档-DLS +具有什么颜色,通常是彩色的)-如果将其混合,则系统中将不会检测到传感器。
对于那些不想焊接但想要挤压“芯片”的人,可以使用下面描述的选项(可能比RJ11更好-以便不将DPS线路意外地连接到服务器)。
要求:
- 双绞线2对,无屏蔽;
- RJ11连接器(6P4C或6P6C)的“袋”;
- 带插座型输入的RJ11分配器(价格合理的多种选择)。
在一对上,我们启动DPS,在另一对上,例如12V DC。 通过分离器连接传感器。
组装架
在“实用”部分,组装了一个支架,其中包括:
- NVP Bolid制造的协议转换器C2000-PP;
- NVP“ Bolid”生产的控制器S2000-KDL;
- NVP Bolid制造的温湿度计(组合式温湿度传感器)C2000-VT;
- NVP“ Bolid”制造的磁接触检测器S2000-SMK;
- Rielta制造的点泄漏传感器S2000-DZ;
- 地址扩展器S2000-AP1 isp。 02生产NVP“ Bolid”;
- “ Rielta”制造的体积检测器Photon-10M(如“堆”);
- AccordTec生产的12V-AT / 12 / 1.5 DIN电源单元;
- 在速卖通上购买的RS-485 / USB适配器(在常见的CH340G芯片上,Linux将其定义为“ QinHeng Electronics HL-340 USB串行适配器”)。 该系统如何以最便宜的配置工作变得很有趣。
- 来自TONK集团公司的TONK 1811瘦客户机(在avito上以500卢布的价格购买)在具有集成GMA950图形的Intel Atom N270处理器上。

完善瘦客户机和支架的外观瘦客户机有点“完成”:
- 安装了Windows XP嵌入式系统的2GB DOM模块已由旧笔记本电脑中的2.5个ATA 60GB HDD取代(我不得不购买电缆,由于某些原因SATA-HDD无法启动-它在BIOS中包括了SATA端口);
- DDR2 SO-DIMM RAM从1GB增加到2GB;
- 安装了Linux Mint 19.1“ Tessa” Xfce Edition,并使用TightVNC配置了远程桌面;
- 冷却系统经过“精制”-减少了散热片,因此HDD几乎可以与外壳“齐平”,卸下顶盖,并在顶部“增加”一些通过电阻连接的120毫米风扇。 立刻所有的“刹车”消失了,工作变得非常合理。

配置Bolid设备
所有设置都在Windows环境中进行;因此,在开始工作之前,您需要在RS-485 / USB适配器上安装驱动程序,以及NVP Bolid上的两个“超级”程序,这些程序是免费提供的:
Orion-prog和
Uprog 。 此外,设备分别通过RS-485 / USB适配器连接到Orion AB的RS-485端口(使用直接布局,与COM端口不同)。
重要说明:在S2000-PP上执行所有后续步骤后,必须卸下板上的XP1跳线。
步骤1.将RS-485 / USB适配器插入USB接口,然后在设备管理器中查看为适配器分配了COM端口号的设备。 适配器的驱动程序必须在“设备管理器”中安装,而不带有感叹号。
步骤2.代表管理员,运行Orion-prog,选择所需的COM端口并执行搜索,以查看设备的固件版本。 请访问制造商的官方网站,并检查是否有更新的固件,并在必要时(很可能是必需的)进行更新(在撰写本文时:S2000-PP为1.32,S2000-KDL为2.22)。
*实际上是固件1.32,我是“弯曲地”安装的-在Uprog中,未从设备读取配置。 因此,它“回滚”到1.31。
步骤3.设置设备的地址(首先使用S2000-PP,例如2,然后使用S2000-KDL-3)。 为此,请运行Uprog-所有设备的默认地址均为127,因此您需要一次在起始设备上进行配置。 有关制造商的详细视频,请访问
YouTube 。
步骤4.在S2000-KDL上设置地址后,有必要在两线通信线(DLS)中设置传感器的地址。 它们还具有默认地址127(并且Uprog中带有传感器的圆圈未突出显示)。 我们读取设备的配置(Ctrl + F3),然后将传感器顺序连接到DLS的输出,设置地址。 在上下文菜单“请求AU类型”中指向传感器时,可以指定传感器的类型或“对ADC AU的请求”-查找传感器是否正常工作(例如,对于ADC的磁接触检测器,关闭时:100,打开时:50)。 实际上,我具有以下地址配置:1-C2000-SMK簧片开关,2-C2000-VT温度,3-C2000-VT湿度,4-C2000-DZ泄漏,5-C2000-AP1地址扩展器isp。 02(已连接Photon-10M体积检测器)。
接下来,转到“输入”选项卡并执行以下操作:
- 指示传感器的类型:温度-10,湿度测量-15,所有其他传感器-6(技术);
- 对于技术输入,我们设置“恢复时间s”-这是环路在收到“违规”状态后将返回“正常”状态的时间。 必须指出至少Zabbix的轮询间隔数(我花了10秒);
- 为了简化设置,请关闭“ AU指示的控制”(0),“监视开路和短路”和“监视备用电池的状态”。
用C2000-KDL完成所有“操作”后,我们执行“仪器中的配置记录”。
步骤5.配置S2000-PP。
在“设备”选项卡上,设置显示在图片中(这些是“运行”次数最多的设置,大多数设备默认使用这些设置)。 RS-485 / USB适配器的COM端口以及连接到Modbus网络的任何其他设备应具有相似的设置。 我为Modbus网络上的S2000-PP设备选择了地址11(Orion系统中的地址为2!)。

然后,我们转到“设备”选项卡并开始填写“区域表”:
- 我在第一列表示“ 3”-这是Orion系统中S2000-KDL设备的地址;
- 警报回路号(“警报回路”)-这些是传感器的地址(实际上是警报回路=地址,如果我们不想从中获取信息,可以跳过几个地址);
- Modbus部件号-您可以将我们的传感器分组。 为了简化-我没有这样做,而是将其归于每个人1部分;
- 区域类型是一个非常重要的参数。 我们根据传感器的类型选择它。

设置完S2000-PP之后,我们执行“仪器中的配置记录”。
步骤6.通过RS-485 Orion将C2000-PP和C2000-KDL组合成网络,将传感器连接到C2000-KDL(可以使用两个端子),然后将RS-485 / USB适配器连接到Modbus C2000-PP输出。 我们将XP1跳线设置为关闭位置(重要:安装跳线后,必须通过重置电源电压来重启设备)。 一切-系统已准备就绪。
我们在免费控制台程序
Modpoll Modbus Master Simulator (以下称为“ Modpoll”)中检查“可操作性”,例如,在固件地址“ S2000-PP”或通过从S2000-KDL向“ 40000”发送信息-这是第一个传感器:

可以在
此处下载“熟悉”固件。
Zabbix设定
警告:像Linux Mint一样,首次配置了Zabbix(因为Windows上没有Zabbix):)安装Zabbix之后,您需要安装软件包
autoconf ,
automake ,
libtool ,
pkg-config ,然后安装扩展模块
-libzbxmodbus 。 在
Habré上有另一篇关于他的文章(我会不断提及),并且最近已更新,仅用于Zabbix 4.0。 本文还提供了有关Modbus协议的更多详细信息。
该模块本身以及或多或少的详细说明在GitHub上。与GitHub上指定的安装方式之间的微小差异:... ./configure --prefix=/etc/zabbix --enable-zabbix-3.2 ... sudo make install
在研究
libzbxmodbus模块的操作时,
很明显不可能将方案与S2000M遥控器一起使用,因为在这种情况下,来自温湿度计的数据如下所示:在寄存器46179中写入所需区域的编号,然后从寄存器46328中收集数据-即 非常平凡的(例如,在“大型” SCADA系统中,可以在MasterSCADA中实现)。
在配置文件
etc / zabbix / zabbix_server.conf中,我们编写了扩展链接,并使用Zabbix将硬件连接到服务器。 我不必安装用于RS-485 / USB适配器的驱动程序,但我仍然不明白如何确定要使用哪个USB编号,可以很好地连接到
/ dev / ttyUSB0 (您可以使用
lsusb命令在系统中找到该设备)。
与Windows一样,我们使用Modpoll实用程序(我运行linux i386)检查是否已连接硬件,并且可以从中获取信息:

由于本文使用Zabbix 2.2示例描述了配置过程-界面略有不同,因此我将提供设置的说明和图片。
步骤1.我们创建一个网络节点和一个将要包含我们的节点的组(例如,一个节点-“环境监控”和一个组-“工程基础架构”):
设置>主机>创建主机>输入我们的名称>添加

步骤2.创建数据元素。 本文建议创建模板,但是由于我们的系统不包含重复的元素,因此我将跳过此步骤。 例如,如果我们有几台通过Modbus连接的空调,那么我们可以使用系统功能。
设置>网络节点>在包含我们节点“环境监控”名称的行中,单击“数据元素”>,在出现的窗口中,单击“创建数据元素”。
我们开始“锤击”我们的传感器:

细微差别:
- 本文使用了“ modbus_read_registers”函数的语法,并且根据GitHub的描述“ modbus_read” -第二个选项更短且有效;
- 您可以用/ dev / ttyUSB0和“ 11 ”形式指定端口,而不是宏{$ MODBUS_PORT}和{$ MODBUS_SLAVE},但是如果以后需要更改S2000-PP的USB端口或地址,将会很不方便;
- 该文档指出,要请求S2000-PP上的区域状态(列“ Modbus区域号”),您必须联系:“注册地址40000 + M,其中M =(区域号–1)” –这是进度:“区域号。 负 1“
- 不要进行非常频繁的时间调查:S2000-PP开始返回“异常错误15”错误-设备没有时间准备数据(这通过设备上的指示器持续发光表示);
- 通过寄存器3000 -...获取温度和湿度数据
- 在“数据元素”窗口中,还有所需的“预处理”选项卡。 您可以在此处编辑“最后”显示的内容。 根据读数值获得温度和湿度,该值必须除以256:“用户系数”-0.0039(即1/256);
- 用于离散簧片开关,泄漏传感器等 您还需要使用“值显示”,这是由于提供信息的方式所致。
有关轮询区域时如何提供数据的一些知识。
假设您收到的响应为十进制格式9148(D)。 我们将其转换为十六进制格式(HEX):得到23BC-根据S2000-PP设备的说明,这是两个事件,代码分别为23(HEX)/ 35(D)和BC(HEX)/ 188(D)。 接下来,请参阅表5。“ Orion系统的事件列表(AL状态)”。 在其中找到35个“恢复技术输入”和188个“恢复与输入的通信”。 无需转换D-HEX-D,第一个事件是接收值除以256的整数部分,其余是第二个事件(
9148 =
35 * 256 +
188 )。 在采访技术投入时,我们只会选择第一个事件(优先级),“应该”采用状态35和36(“恢复技术投入”和“违反技术投入”)。 我们将使用数据元素设置“信息类型:数字(正整数)”丢弃小数部分(第二个事件)。
步骤3.填写端口宏和设备号:
设置>网络节点>“环境监控”>选择“宏”

步骤4.在控制面板上显示读数:
开始屏幕>所有面板,在出现的窗口中选择“创建面板”>,设置“面板名称”和该面板可用的用户>单击“创建新的小部件”>键入“数据概述”,更新间隔“ 10秒”,组工程基础结构网络的节点>添加>调整面板大小,然后单击“保存更改”:

结论
通过使用“远程”协议,所得的系统可以成为监视服务器和一对交叉办公区域(就监视温度和湿度条件而言)甚至小型数据中心的绝佳解决方案。 有人可能会说“ fu fu fu,汽车仍然令人作呕,您需要使用XXX(代替工业自动化中的某些东西)”也是一种选择,但我认为这将是非常多余的,而且也更昂贵。 还有一点细微差别:如您所见,Bolid上的系统非常简单(尽管逻辑有些奇怪),但是“完成”了舞会上的决定。 控制器-有时他仍然是个“黑子”。
PS:本文是对我博客上的两篇文章的改编:
对服务器机房的廉价监控(第1部分-入门)对服务器机房进行廉价监控(第2部分-实用)UPD 工作3天后,RS485-USB适配器脱落。 它被认为是不稳定的,但适合调试。 它被MOXA生产的单端口转换器MGate MB3170取代(取自现有产品),一切都变得稳定。
您需要了解,本文只是如何与Zabbix和Bolid“交朋友”的示例。 对于实际的实现,您可以添加更多受监视的DPS状态,例如负温度(它们的处理方式有所不同)。