机房自动化监控手把手分享给你 - 番外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

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、