机房自动化监控手把手分享给你 - 番外1:声光报警实现

本文主要是介绍机房自动化监控手把手分享给你 - 番外1:声光报警实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文章是一个机房自动化监控实际项目系列文章的番外篇,有个朋友问能否补充一个声光报警的实现,我仔细一想:虽然我不在这个项目中实现声光报警,但我在其他项目用过,使用的设备器件成本很低。那就以这个项目为背景,添加这个声光报警功能吧。

如果你不了解这个系列的文章,直接看这篇可能会有点迷糊。这个系列文章非常详细,真的可以说是手把手拉着你在现场做实际的项目一样。如果你还不了解前面的内容,请参考

机房自动化监控手把手分享给你 - 0 总体说明

机房自动化监控手把手分享给你 - 1 项目前期准备

机房自动化监控手把手分享给你 - 2 温湿度传感器的对接

机房自动化监控手把手分享给你 - 3 漏水传感器的对接 

机房自动化监控手把手分享给你 - 4 空调设备对接

机房自动化监控手把手分享给你 - 5 电流监测模块对接

机房自动化监控手把手分享给你 - 6 UPS设备对接

机房自动化监控手把手分享给你 - 7 监控画面制作

机房自动化监控手把手分享给你 - 8 短信报警实现

机房自动化监控手把手分享给你 - 9 程序部署

1 声光报警硬件准备

我们的机房声光报警一般情况下,不需要使用影视剧里面那种夸张的效果:声音巨响、还旋转着散发着红光,然后巨大的基地里面上百号人都可以听到,紧张地到处奔跑!当然,你也可以给你的用户安装这样的玩意——可以保证,在办公室你会被用户k死。

我推荐一款声光报警,如下:

这种声光报警器可以安装在监控箱上,内部只需要给它供电24V直流电就行。很明显,我们需要有个可控制的开关给这个供电控制通断。因此,我们还需要一个开关量输出模块,并且这个模块支持Modbus RTU协议,方便接入监控箱的串口服务器的RS485接口中。

我在网上给你随便找了一个开关量输入输出模块,因为我们只需要控制一路,所以给你选择体积最小的。

那么接下来我们就可以把这个接入到之前项目的电路中了。

2 接入电路

电路图非常简单,如下图:

此电路我们把开关量模块和之前的温湿度、漏水传感器都接在同一个RS485总线上, 并且给开关量模块使用监控箱中的24V直流电。

此模块因为是2路继电器输出,每个输出有一个常开、常闭和一个公共端,我们把24V+接入OUT1的公共口,常开口接声光报警器的一个输入,另一个输入接24V-。这样,只要开关量模块OUT1口有输出,内部继电器吸合,常开口就会闭合,声光报警器就接通24V电源了——也就能发出声光了。

接下来,我们就在之前实际项目软件配置的基础上,加入这个些设备数据。

3 软件配置

假设这个模块配置好的地址是21,RS485接口是(9600 N 8 1)——和我们之前项目总线参数一样,OUT1,OUT2输出对应modbus地址是 00001,00002。

3.1 配置报警输出数据标签

我们打开项目管理界面,在通道ch1下鼠标右键,选择“New Device",在弹出的编辑对话框中填写如下:

添加这个开关量模块对应的设备,然后选中这个swio节点,右边选择"Properties"属性选项卡,修改Modbus Device Address=21。

 接下来,点击"[Tags]选项卡",在里面添加开关量读写数据标签:

这个设备目前就一个声光报警数据标签,其他都不需要配置了。这样就完成了设备接入和标签数据的定义。 

3.2 运行测试

此时,就可以给设备供电,启动项目,然后在标签列表的”Write"列,写入1,点击右边的写入按钮,就可以测试开关量模块Out1是否吸合,声光报警器是否发声。

写入0,就关闭声光报警。

 

由于我们没有实际的设备,以上就没有具体显示数据了。 

3.3 使用IOT-Tree的任务(Task)触发声光输出

此声光报警可以使用之前报警定义作输出,但考虑到之前项目并没有用的任务控制功能,我们此次就以这个例子为契机,使用IOT-Tree Server提供的任务功能,做声光报警输出。

IOT-Tree中的任务是定时运行的JS脚本,我们可以设置任务(Task)-活动(Action)。每个Action含重复运行的JS脚本。在项目启动时,任务也会启动,里面的脚本会被定时运行。任务可以让我们对被监控现场,实现复杂的控制功能。

我们本次控制逻辑非常简单:当发现UPS非online状态时,则输出上面定义的开关量信号=true,否则就关闭。

3.3.1 新建任务和活动

我们在项目中间组织树上方,点击"Tasks"图标,右边选项卡就多了此项目的任务管理界面。

点击"+Add Task",在弹出的对话框口填写如下信息: 

除了任务名称和标题,我们设置Interval MS=5000,也即是任务每间隔5000毫秒运行一次。点击Ok之后,在此任务右边,点击“+” 添加任务内部的活动:

这个活动在任务中被任务调度,一个任务可以有多个活动,并且任务内部的活动共享任务间隔运行的线程。每个活动有自己的JS控制脚本。点击Ok之后,可以看到活动有 init script,run in loop script,end script

3.3.2 编写任务JS脚本 

其中,init script表示任务启动时,会被调用一次,你可以在里面定义JS变量或初始化工作,方便后续使用。run in loop script则是任务运行中,会被定时调用的JS脚本。

我们点击此按钮,弹出JS编辑窗口,左边有以项目$prj为根的js运行上下文。我们写入一段如下代码(如果对成员关系不了解,可以参考左边的全局成员已经内部的树形内容):

let ups_online = upseth.apc9631.ups_st_online ;
let av_out = ch1.swio.aud_vis ;if(ups_online._pv==false)
{// trigger av outif(av_out._pv==false)av_out._pv = true;
}
else
{ // no alertif(av_out._pv==true)av_out._pv = false;
}

这段代码非常简单,首先判断upseth.apc9631.ups_st_online这个数据标签的值,是否为false。如果==false,则表明UPS非online状态,需要报警。此时判断ch1.swio.aud_vis这个标签值是否在报警状态,如果不是则给这个标签写入true(这个会触发IOT-Tree到开关量模块的写指令)。

否则,如果需要解除报警,则写入false。为了避免每次都有写指令产生,需要对当前值进行判断。

保存之后,我们就可以启动项目进行测试了。你可以尝试手工对UPS切换by pass状态,这样就可以查看运行效果。

4 总结

本章是一个之前项目系列的补充文档。但里面有着你及可能遇到的开关量输出和任务控制功能。是对之前系列文章的一个很好的补充。 

这篇关于机房自动化监控手把手分享给你 - 番外1:声光报警实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/585006

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S