基于MQTT的可配置设备群报警系统设计

2025-01-10 00:00:00吴标平冯海鑫梁正陈明浩
物联网技术 2025年1期
关键词:云平台

摘 要:为了实现设备群报警信息的可配置和对指定用户访问权限的管理,在不修改原系统程序的基础上提出了一种基于MQTT的可配置设备群远程报警系统的设计与实现。组态王与10余台真空处理设备的PLC及传感器进行通信,实时采集运行数据和报警信息。采用Qt开发的数据传输软件Data Bridge通过OPC DA协议获取组态王中的设备数据,并通过MQTT协议发布到云平台服务器。当用户登录APP时,系统根据预先配置好的设备访问权限自动订阅授权设备的报警信息和关键数据,解决了分布式设备管理环境下操作人员和维修人员往往由于设备分布较远无法及时获取和处理指定设备报警信息的问题。

关键词:可配置设备群;Qt;MQTT;远程报警系统;OPC DA;云平台

中图分类号:TP277 文献标识码:A 文章编号:2095-1302(2025)01-0-05

0 引 言

随着人力成本的不断增加,不少企业要求操作人员同时操作和管理多台设备。这些设备往往分布在厂区的不同位置,距离较远,导致操作人员和维修人员无法及时了解设备信息,尤其是运行状态和报警信息。越来越多的企业希望在不更改原有控制系统的基础上对现有的设备群进行升级,使操作人员和维修人员能够通过远程的方式及时掌握所授权的多台设备的状态和报警信息。

针对远程报警系统方面,国内外学者和技术人员进行了深入的研究。文献[1]应用GSM网络模块TC35i,实现了将烟雾报警传感器的报警信息以短信的形式发送到指定手机中。文献[2]设计了一个基于物联网和云的远程医疗系统,将病人信息通过短信和电子邮件发送给医生。文献[3]设计了基于云平台技术和Modbus RTU协议的电锅炉设备,实现锅炉的运行控制、状态监测以及故障报警,并将故障信息推送至微信和邮箱。文献[4]对倍捻设备群进行了改造,基于以太网实现了设备群运行状态网络化在线监测,重点监测倍捻设备群断纱和停机故障。文献[5]研发了一套运架设备群远程安全监控系统,采用VPN技术组网,实现管理调度并在中心大屏幕上实时显示各现场施工设备的各种安全数据。文献[6]设计了一种基于云平台的综采设备群远程故障诊断系统,可以将报警信息推送到手机APP。

综上所述,近年来随着物联网(IoT)技术的不断发展,远程报警状态的获取方式已经从原来的GSM网络短信形式转向了物联网和云平台。同时,设备数据采集的方式也发生了变化,从单一设备的数据采集逐渐转向了设备群的数据采集模式。然而,目前这些设备群的所有信息往往只集中定向到中控室、Web端或APP端,并未对设备和用户群体进行区分,缺乏灵活性。对于集成了云平台功能的可配置型设备群远程报警系统,即能够将不同设备的报警信息配置给不同用户的系统,目前鲜见报道。

针对电工领域真空处理设备群,提出了一种基于Qt和MQTT的可配置设备群远程报警系统,在不更改原有系统程序的基础上进行升级,采用Qt开发的数据传输软件Data Bridge通过OPC DA协议获取各设备组态王中的数据,并通过消息队列遥测传输(Message Queuing Telemetry Transport, MQTT)协议发布到云平台服务器。用户登录APP时,系统根据预先配置好的设备访问权限自动订阅授权设备的报警信息和关键数据,实现了设备群报警信息的可配置和对指定用户访问权限的管理。

1 系统的设计

1.1 系统架构设计

系统架构如图1所示。本系统由设备层、通信层、服务层和应用层组成。设备层由10 kV线圈烘箱、10 kV器身干燥炉、35 kV器身干燥炉和注油设备等10余台设备组成。设备层是整个系统的基础,每台设备都有各种传感器、PLC和工控机,负责感知和采集关键数据及报警信息,并通过MQTT协议发送到服务器。通信层负责连接设备和云服务器,包括路由器和互联网连接。服务层由云服务器构成,主要负责接收、处理和存储来自设备的数据。其中,MQTT Server负责消息的转发;Access Manager负责权限管理及数据访问控制;MySQL负责保存设备数据和权限信息。应用层由多个客户端APP组成,通过与服务层进行通信,实现对设备的远程访问、数据查询和控制等功能。设备层用于数据传输的MQTT Bridge、服务层的Access Manager和应用层的APP三者之间的通信均采用MQTT协议,经MQTT Server转发实现,通过发布和订阅主题的方式进行交互。

设备层的数据采集结构如图2所示。原工控机上装有组态王软件,系统升级时并不修改原有组态程序,只增加了Qt编写的Data Bridge模块、OPC Bridge模块和MQTT Bridge模块。OPC Bridge模块主要用于组态王的数据采集,通过OPC DA协议与组态王进行通信,获取报警信息和关键数据。而MQTT Bridge模块用于将这些采集到的数据通过MQTT协议发送到云端,再由服务器发送给订阅信息的手机APP。

1.2 关键技术选择

电工领域的真空处理装备中,旧系统下位机多种多样,包括不同品牌的PLC和RS 485远程模块。旧系统的数据接口通常不完善,原厂家可能已经倒闭或报价过高,都会影响到设备升级。在不修改原系统程序的基础上进行报警系统升级是问题的关键。该行业大部分系统使用组态王作为上位监控软件,鉴于组态王本身是OPC Server,可以通过OPC Client软件快速找到系统报警变量,因此选择OPC DA作为数据采集技术,并通过OPC Bridge模块实现设备数据的采集。

为了满足设备群报警信息可配置给指定用户的需求,经过对比分析,选择MQTT作为数据传输技术。相较于HTTP、WebSocket、CoAP等通信连接技术,MQTT是需要安全通信环境并同时向多个订阅者发送消息的物联网应用程序的首选[7]。MQTT是一种轻量级通信协议,采用发布-订阅模式,工作原理如图3所示。消息发布者(Publisher)通过消息代理(Broker)将消息发布到特定主题(Topic),订阅者(Subscriber)通过订阅主题接收消息。它的推送机制效率高,功耗低,可以稳定用于Android平台上的应用[8]。同时,它具备高可靠性和稳定性,通过消息持久化和QoS等级确保数据传输的可靠性。重要的是,MQTT具有良好的可扩展性,支持订阅和发布机制,方便管理多个客户端和设备之间的通信。它为设备群报警信息的灵活配置和即时传输提供了优秀的解决方案。

为了实现MQTT的功能,选择Mosquitto作为消息转发服务器软件。Mosquitto是一个开源的MQTT代理服务器,它提供了非常理想的轻量级数据交换的解决方案[9]。MQTT Bridge模块与Mosquitto进行集成,实现实时报警消息和关键数据的传递。

1.3 数据流设计

数据流转图如图4所示。首先,APP登录后获取登录用户的设备权限;然后,根据拥有的设备权限向MQTT Server订阅所需的设备数据信息;最后,MQTT Server将收到的设备信息转发给拥有权限的APP。具体过程如下:APP1将登录的用户名和输入的密码(A)以发布方式发给MQTT Server,MQTT Server转发(A')给已订阅用户信息的Access Manager。然后,Access Manager读取MySQL数据库进行密码比对,将验证信息和设备访问权限(B,可访问设备2和设备3)经MQTT Server转发(B')给APP1。APP1获得权限列表后,发布信息(C和D)分别订阅设备2和设备3的运行数据和报警信息。设备2的数据(F)和设备3的数据(G)定时发布到MQTT Server,并由服务器转发(F'和G')给APP1。由于APP1没有设备1的访问权限,所以APP1无法接收到设备1发送的消息(E)。这样便实现了指定设备报警信息配置给特定用户的功能,可满足不同用户对报警系统的个性化需求。

2 系统的实现

2.1 数据采集模块的实现

开发OPC DA客户端有两种常用方式:基于COM技术和利用第三方动态链接库或工具包[10]。前者需要掌握DCOM技术和复杂的COM设置,可以通过调用OPC基金会提供的API[11]或使用MFC的COM库函数[12]进行开发。后者则具有开发难度低、效率高的优势,但往往需要付费使用第三方OPC动态链接库[13],如Matrikon和Kepware所提供的开发工具包。组态王提供了免费的Kingvewcliend.dll动态链接库,用于与组态王OPC服务器进行连接和交互[14]。为此,本文采用Qt框架基于DLL实现了实时报警信息和关键数据的获取,主要包括以下步骤:

(1)定义函数指针,显式加载动态链接库

定义函数指针startCliend、addTag、readTag、writeTag和stopCliend,分别指向DLL的相应函数,实现连接组态王OPC服务器、添加变量、读取变量、写入变量和断开组态王OPC服务器连接等功能。通过QLibrary myLib (\"kingvewcliend.dll\")加载DLL。

(2)连接OPC服务器

通过startCliend(\"127.0.0.1\")指令连接组态王OPC服务器。

(3)添加采集变量

首先,使用亚控公司提供的OPC客户端软件OPC Client.exe查找原系统中的变量名称。然后,通过循环方式使用addTag(qstr2bstr(tagNames[i]), nTagIDs[i], nTagTypes[i])函数添加到采集列表,tagNames、nTagIDs和nTagTypes分别存放要采集的变量名称、id和类型。需要注意的是,第一个参数需要将变量名称从QString转换为BSTR类型。

(4)定时采集数据并发送到MQTT Bridge

通过readTag(nTagIDs[i], bVal, lVal, fVal, sVal)函数实现数据读取,并存放到相应的变量 bVal/lVal/fVal/sVal 中,具体存放到哪个寄存器取决于 nTagTypes[i] 的值。数据采集完成后,将采集的变量和数值放入 tagAndValueMap键值对变量中,并通过信号发送给MQTT Bridge:emit sendDataToMqtt(tagAndValueMap)。

(5)通过槽的方式接收和处理MQTT Bridge发来的控制指令

使用writeValue(QString tagName, QString sv)函数将指令写入组态王,执行设备的启动或停止动作,实现设备的远程控制。

2.2 数据上传和下载模块的实现

通过Data Bridge模块中的MQTT Bridge模块与MQTT Server交互,实现采集数据的发布和定阅。Qt官方封装的MQTT库(5.13.2)非常方便,具体实现步骤如下:

(1)在Qt官网下载MQTT库源码,进行编译,并将Qt MQTT库部署到项目中。

(2)创建MQTT客户端。代码如下:

QMqttClient *m_client = new QMqttClient();

(3)连接MQTT服务器。设置主机名、访问密码、端口和客户端id,通过m_client-gt;connectToHost()连接服务器。

(4)将OPC Bridge发来的数据发布到MQTT服务器。OPC Bridge模块将组态王中采集的数据(tagAndValueMap)通过信号方式发送给MQTT Bridge模块。MQTT Bridge模块接收到这个键值对变量后,需要将其转换为JSON格式,加密后再通过MQTT协议发布到MQTT Server[15]。代码如下:

QString msg=mapToJson(map);

bool isRetain=true;

int QoS=1;

QString topic=\"Values\";

m_client-gt;publish(topic, msg.toUtf8(), QoS,isRetain);

(5)接收并处理MQTT服务器信息。使用“m_client-gt;subscribe(static_castlt;QStringgt;(\"Control Command\"), 1)”订阅控制命令主题,其中第一个参数为订阅的主题,第二个参数为QoS(Quality of Service)。QoS=0表示最多发送一次,QoS=1表示最少发送一次,QoS=2表示只发送一次。通过修改指令中的主题名即可订阅其他主题。若接收到“ControlCommand”主题,则将信号发送给OPC Bridge模块进行处理。关键代码如下:

connect(m_client, amp;QMqttClient::messageReceived, this, [this,myClientID](const QByteArray amp;message, const QMqttTopicName amp;topic) {if(topic.name() == \"ControlCommand\"){emit sendDataToOpc (message);}});

2.3 云服务器的搭建

本系统将Mosquitto、MySQL和Access Manager统一部署到阿里云ECS云服务器上,这样可以简化部署和管理工作,提高性能和可靠性,并降低成本,为系统提供高效稳定的服务。

Mosquitto是一个MQTT代理服务器,负责接收和转发MQTT消息给订阅者。Access Manager软件既作为MQTT客户端与Mosquitto进行通信,又作为权限管理和数据管理者通过开源的关系型数据库MySQL实现数据的CRUD操作。

确保Mosquitto和Access Manager之间正常通信的关键是配置正确的主机和端口信息,并确保云服务器的网络设置允许MQTT流量通过。这包括入站和出站规则、网络安全组以及防火墙等设置。如果使用了防火墙或网络安全组,需要打开相关的MQTT端口。这样,系统才能顺利地进行MQTT消息传递和数据管理操作。

2.4 权限管理和数据存储模块的实现

权限管理和数据存储模块Access Manager采用Qt开发,使用MQTT协议与MQTT Server进行交互,通过发布和订阅主题实现。该模块主要完成3大功能:用户验证和返回设备权限列表、将设备信息保存到MySQL数据库、根据APP指令查询数据库中指定时间范围的报警信息或历史数据。这3个功能都需要使用MQTT协议与MQTT Server进行交互,并设置好Topic和Payload(消息内容)的内容。在Qt中,可以使用QJsonDocument和QJsonObject来处理JSON字符串中的键值对。当Payload中包含多个数据键值对时,可以使用迭代器来遍历JSON字符串并获取相关数据。主要的Topic信息见表1。

2.5 Android APP的实现

2.5.1 页面布局

手机客户端采用Android Studio原生开发,包括登录页面、主控页面和设备分控页面。登录页面用于验证用户身份,普通用户可修改密码、注销和进入主控界面,系统管理员还能进行用户管理,如创建用户、重置密码和设备权限设置。主控页面如图5所示,展示了实时报警信息,包含设备名称、报警器件、报警描述、类型、代号、报警时间及帮助信息。同时,提供已授权设备群的访问按钮,点击后即可跳转至相应设备的分控页面。设备分控页面如图6所示,在该页面可以选择显示真空系统、加热系统、辅助系统、产品信息、关键参数和报警信息等实时状态和信息,并提供报警确认、远程暂停和启动功能。此外,设备分控页面还设有报警日报表、月报表和年报表的访问按钮。

2.5.2 APP获取设备数据的实现

APP获取设备数据流程如图7所示,用户在APP登录页面输入用户名和密码,经加密后向MQTT服务器发布登录请求主题。MQTT服务器将请求信息传递给订阅了该主题的Access Manager模块。Access Manager在MySQL数据库中验证用户名和密码,验证通过后,查询用户的设备访问权限,加密后发布到MQTT服务器。该主题的信息以JSON格式[16]表示,包括AppID、用户名、管理员权限、可访问设备数量以及可访问设备列表。例如:{\"AppID\":\"App3\",\"UserName\":\"刘明宇\",\"isAdmin\":\"0\",\"DeviceCount\":\"2\",\"Device1\":\"35 kV器身干燥炉\",\"Device2:\"35 kV真空脱气罐\"}。APP订阅该消息并解密后,读取设备列表中的设备名称,并逐个订阅设备的数据信息。当接收到订阅设备的信息后,将报警信息显示在报警信息汇总表中。

2.5.3 可配置设备群的实现

系统管理员可以在登录页面点击“用户配置”按钮,对用户和可访问设备进行配置,配置页面如图8所示;可在“人员”页面配置人员的信息,如姓名、类别、电话等。也可在“设备”页面完成允许访问人员的配置。管理员首先选择设备名称,然后选择人员,点击“添加”按钮,该人员自动添加到允许访问人员列表中。为了保证数据的安全性,APP会对用户权限信息进行加密,并以JSON格式发布到MQTT Server。MQTT Server会将加密后的信息转发给Access Manager。Access Manager在接收到数据后将其解密,并将权限信息写入MySQL数据库中。当该用户登录后,系统会自动将允许访问的设备信息发送到该APP,用户可以通过APP查看自己被授权访问的设备信息。

3 结 语

基于MQTT的可配置设备群远程报警系统,在不修改原控制系统程序的基础上实现了设备群报警信息的采集、配置、上传以及特定用户访问指定设备的功能。系统的可配置性和灵活性使得设备报警信息能够针对不同用户进行个性化配置,满足了不同用户的需求。系统应用效果良好,操作人员和维修人员能够及时了解设备的运行状态和报警信息,提高了设备的管理效率和故障处理速度。

参考文献

[1]江杰,宋宏龙.基于GSM短信的烟雾传感报警系统[J].测控技术,2014,33(1):1-3.

[2]AMIN M T, PEU J S. IoT cloud-based remote patient health monitoring and alarm system [J]. International journal of scientific and engineering research, 2021, 12(4): 221-228.

[3]许景波,秦聪,赵博亮,等.基于云平台的蓄热式电锅炉远程测控系统设计[J].自动化仪表,2023,44(3):60-63.

[4]蔡志端,王培良,顾玉祥,等.网络化倍捻设备群运行状态在线监测[J].毛纺科技,2012,40(6):61-64.

[5]袁明.运架设备群远程安全监控系统的研发与应用[J].铁道工程学报,2015,32(5):54-58.

[6]李旭,吴雪菲,田野,等.基于云平台的综采设备群远程故障诊断系统[J].工矿自动化,2021,47(7):57-62.

[7] BAYILMIS C, EBLEME M, CAVUSOGLU U, et al. A survey on communication protocols and performance evaluations for Internet of Things[J]. Digital communications and networks, 2022, 8(6): 1094-1104.

[8]许金喜,张新有. Android平台基于MQTT协议的推送机制[J].计算机系统应用,2015,24(1):185-190.

[9] LEE S, KIM H, HONG D K, et al. Correlation analysis of MQTT loss and delay according to QoS level [C]// 2013 International Conference on Information Networking (ICOIN). [S.l.]: IEEE Computer Society, 2013.

[10]邹云涛,吴重光. OPC DA客户端的三种实现方式[J].自动化博览,2004,21(1):51-53.

[11]苏磊,李茜,汤伟. OPC数据访问客户端的研究与实现[J].计算机工程,2010,36(11):80-82.

[12]魏森声,田慕琴. VC6.0编程客户端访问组态王OPC服务器的方法[J].工矿自动化,2012,38(8):127-130.

[13]黎邦腾,梁薇,马平.基于Qt平台的OPC服务器的开发及仿真应用[J].计算机测量与控制,2017,25(11):154-158.

[14]尹静涛,刘利平. OPC技术在高炉生产测控系统中的应用[J].制造业自动化,2012,34(1):139-140.

[15]郭翠娟,暴宁,荣锋.基于MQTT的物联网平台研究与设计[J].计算机工程与设计,2022,43(8):2378-2384.

[16]黄良沛,张逸夫,谭姚,等.输送机工况数据APP远程监控系统设计[J].金属矿山,2022(4):169-172.

猜你喜欢
云平台
“云平台+大数据”在高校档案管理中的应用研究
东方教育(2016年13期)2017-01-12 23:14:14
云计算环境下的微课移动云平台设计
智慧城市电子政务云平台构建
软件导刊(2016年11期)2016-12-22 21:53:04
基于云平台MapReduce的Apriori算法研究
基于云平台的输电杆塔滑坡监控系统设计
Docker技术在Web服务系统中的应用研究
云环境下混合式协作学习教学模式研究
科技视界(2016年23期)2016-11-04 23:13:16
高职院校开展基于云平台网络教学的探索与思考
中国市场(2016年36期)2016-10-19 04:43:09
企业云平台建设研究
基于体域网的移动医疗系统的设计
科技视界(2016年17期)2016-07-15 10:15:56