孙燕芹,马兴录,郭孔跃
(青岛科技大学 信息科学技术学院,山东 青岛 266061)
基于MQTT协议的在线离子色谱仪远程监控系统设计
孙燕芹,马兴录,郭孔跃
(青岛科技大学 信息科学技术学院,山东 青岛 266061)
在线离子色谱仪是可以对样品进行连续自动分析,并以谱图的形式显示样品中离子含量的化学分析仪器;为确保对样品的连续检测,仪器需要不间断的运行;由于设备经常放在工作室或偏远地区,需要对在线离子色谱仪的运行状况进行远程监控;针对此问题设计在线离子色谱仪的远程监控系统;该系统使用轻量级MQTT协议作为通讯协议,通过在线离子色谱仪中集成MQTT客户端,在云服务器中部署MQTT的消息中间件和短信网关,实现了用户在手机应用客户端查看在线离子色谱仪的运行参数、通过手机短信接收紧急报警信息等功能。
在线离子色谱仪;MQTT协议;远程监控;短信报警
在线离子色谱仪是全自动、全天候运行的离子色谱分析仪器,可连续在线分析阴阳离子、重金属离子。它广泛应用于水质、酸雨、大气和处理后排放的工业废水中的阴阳离子以及重金属离子的连续自动检测,在线离子色谱仪具有广泛的工业应用前景[1]。
目前在线离子色谱仪设备可以在上位机查看在线离子色谱仪的各项参数,但用户不能远程查看设备的各项运行参数和远程接收报警消息。目前实现监控有通过Http协议传输,使用浏览器查看监控参数[2],Http协议实时性差,需要用户主动通过Web浏览器查看监控数据,无法提醒用户查看各项运行参数。目前远程报警功能大多通过集成GSM模块发送短信报警[3],增大了硬件模块投入,并且需要使用移动运营商提供的SIM卡,需要定期缴费,成本较高。
本文设计基于MQTT[4](Message Queuing Telemetry Transport,消息队列遥测传输)协议的在线离子色谱仪远程监控系统。
该系统可以主动推送监控消息至手机应用客户端,短信报警模块采用云短信平台,按需收费,降低硬件维护成本。
在线离子色谱仪为液相色谱仪,可实现三通道检测,可同时检测阴离子、阳离子和重金属。该设备最快可在30分钟内完成一次检测,每天最多可连续检测48次,在线离子色谱仪实现了复杂的谱图识别、数据处理和报表生成等功能。
该设备采用嵌入式系统设计,主要包括嵌入式主机系统和外部控制模块,嵌入式主机控制外部模块正常工作。嵌入式主机系统包括ARM处理器、处理器外围接口硬件电路和嵌入式Linux系统。嵌入式主机系统之外的模块为外部模块,其中色谱柱、电导检测器、伏安检测器,完成离子检测。自动进样器完成进样,泵控制模块完成液体的流速,温控模块保证温度恒定,保证检测结果的正确性[1]。网络模块使用以太网或无线上网卡,实现互联网网络连接。其结构示意图如图1所示。
图1 在线离子色谱仪结构示意图
在线离子色谱仪为连续工作精密仪器,用户需要不受地域时间限制监控在线离子色谱仪当前的运行状态,确定设备是否按照设定进行工作。在线离子色谱仪自动运行过程中,系统会随时检查各种异常情况,一旦遇到异常情况会发出报警信息,如果报警信息不能及时处理将会引起设备自动停机,以保护设备。
在线离子色谱仪需要监控的内容主要包括:进样时间、检测器、档位电压、电流、泵流速、泵压力、温度等信息。
设备报警消息主要分为四类:泵压不足、档位电压异常、上传数据失败和温度异常。其中泵压不足由3种情况造成,分别为淋洗液不足、管路有气泡和管路泄露;档位电压异常由检测淋洗液浓度异常造成;上传数据失败说明网络连接有问题;温度异常由设备工作环境异常造成。针对以上4种异常情况,需要发出报警信息至设备维护人员手机短信,并提示异常原因,便于设备维护人员恢复设备正常运行。
MQTT是基于TCP/IP协议的轻量级、低带宽和易于集成的双向传输协议,客户端与服务端通过订阅和发布消息的模式传输消息。MQTT协议由IBM公司发明的即时通讯协议,支持全平台,并且该协议占用资源较少,客户端易于集成在嵌入式终端设备,并且能够稳定实时传输数据,在机器到机器(M2M)和物联网(IoT)等领域得到了广泛应用[4]。
MQTT消息客户端到客户端的传输需要通过消息中间件来完成,在客户端与消息中间件之间使用发布/订阅的模式,通过消息中间件转发消息[5]。如图2所示,在MQTT的3个客户端与消息中间件建立连接之后,根据自己业务需求按照消息主题订阅和发布消息。图2中MQTT客户端1将消息发布到消息中间件,消息中间件根据订阅主题需求将消息发布到订阅该消息的客户端2和客户端3。同理客户端2和客户端3发布消息的模式与客户端1发布消息的模式相同。
图2 MQTT发布/订阅模式
2.1 MQTT协议报文
MQTT协议通过交换报文进行通信,MQTT协议报文内容包括固定报头、可变报头和有效负载[5]。其中固定报头包括MQTT协议的控制类型和保留位,如图3所示;可变报头包括协议名称、协议级别和连接标志位以及心跳检测时长;负载即为传输消息内容。
图3 固定报头格式
MQTT规范定义了十四种控制报文,主要包括连接相关报文、发布相关报文、订阅相关报文和心跳检测相关报文。
2.2 MQTT通信
MQTT消息使用主题名和负载内容的形式传输。主题为消息名,负载为实际传输消息的内容。客户端首先与中间件建立连接,然后客户端向消息中间件订阅或发送主题消息。
MQTT根据主题区分消息,每条消息都有一个主题。消息中间件通过识别主题判断该消息应该被发送到哪个订阅客户端。
为保证消息的传输,MQTT消息可以设置消息服务质量等级(QoS)。服务质量等级共有3种:当QoS=0时,无论消息接收方是否收到消息,最多发送一次消息;当QoS=1时,为确保消息到达,至少发送一次;当QoS=2时,消息仅发送一次,是最高等级的服务质量,不允许消息丢失和重复。
系统由四部分组成,分别为:在线离子色谱仪、云服务器、云短信平台和手机应用客户端。如图4所示。
图4 在线离子色谱仪远程监控系统的软件架构
在线离子色谱仪连接到云服务器,并发送各项参数和报警信息。云服务器将监控参数发送至手机应用客户端,将报警消息发送至云短信平台,云短信平台将报警消息以短信的形式发送至手机短信。
3.1 在线离子色谱仪数据发送
在线离子色谱仪发送数据至云服务器采用MQTT协议。MQTT协议是应用协议基于TCP/IP协议通信,在线离子色谱仪采用嵌入式Linux系统,MQTT协议调用Linux系统函数进行TCP/IP通信。MQTT客户端函数调用Eclipse Paho的嵌入式C++语言函数包中的函数[6]。其程序流程如图5所示。
图5 在线离子色谱仪集成MQTT客户端流程图
在IPStack栈中封装基于Socket套接字的通信函数,有connect、read和write3种函数。然后使用IPStack函数中的connect函数连接云服务器,connect函数基于Socket套接字的操作,通过IP协议地址和端口号连接云服务器。
MQTT客户端连接云服务器首先使用IPStack栈进行网络初始化,然后调用MQTT客户端connect函数向云服务器中的MQTT消息中间件发送连接报文,连接报文内容包括连接服务器中MQTT消息中间件用户名和密码。云服务器端返回连接确认报文,根据返回连接报文确认是否连接成功。MQTT客户端成功连接之后,调用MQTT客户端中的publish函数发布需要发送的消息主题和内容。其部分实现代码如下:
IPStackipstack = IPStack();
MQTT::Client
(ipstack);
intOnlineClient =ipstack.connect(hostname, port);
OnlineClient = client.connect(data);
OnlineClient = client.publish(topic, message);
如果在线离子色谱仪中发生异常,异常消息通过集成的MQTT客户端发送到云服务器,云服务器会根据消息的主题对消息做相应的处理。云服务器会发送心跳包检测设备端是否在线,这样可以保持设备的长连接。如果设备网络发生中断,服务端无法检测不到设备端,会将设备端的遗嘱消息发出,通知设备维护人员设备发送网络中断已经掉线。
3.2 云服务器设计
云服务器由两部分构成,分别为MQTT的消息中间件和短信网关。
3.2.1 MQTT消息中间件
本系统采用开源的Mosquitto[7]作为消息中间件,支持MQTT协议,提供轻量级的订阅/发布模型。在Mosquitto中配置用户登录模块和访问控制列表(ACL)模块。MQTT客户端连接Mosquitto需要发送用户名和密码进行验证,只有验证通过才能成功连接消息中间件,否则Mosquitto会拒绝连接。
配置用户名和密码前需要新建一个存放用户名和密码的文件,在此文件中,用户名是明文显示,密码显示是经过加密的。然后将此文件的路径加载到配置文件中并在配置文件下将任意连接设置为否。产生用户名密码的命令为:
mosquitto_passwd /etc/mosquitto/passwd admin
Password: ******
Reenter password:******
其中passwd为存放密码文件,admin为用户名,根据提示输入密码。在文件中用户名为明文,密码是经过加密处理的密文文件。
MQTT客户端与服务器建立连接之后,订阅的主题受访问控制列表文件的限制[8],只有订阅访问列表文件中的相应用户下的主题,MQTT客户端才能收到正确的订阅消息。ACL表格式为:
user admin
[read/write]
这种格式只是影响username的客户端订阅相关话题。将ACL相关文件的路径写到配置文件中完成配置。
3.2.1 短信网关
在线离子色谱仪监控系统具有报警功能。在云服务器上部署短信网关,通过短信网关发送需要发送的消息内容到第三方云短信平台发送短信至用户手机。短信网关集成MQTT客户端并调用阿里大于[9]短信接口发送短信,其程序设计流程如图6所示。
图6 短信网关程序设计流程图
集成在短信网关中的MQTT客户端首先订阅报警消息主题,然后使用MQTT的回调函数等待订阅消息。当订阅消息到达时,在MQTT的回调函数中调用发送短信模块,发送短信模块内有预定的手机号码和具体短信内容,发送短信模块会将消息发送至阿里大于云短信平台,云短信平台将消息以短信的形式转发至指定号码的手机中。
该短信模块设计方案避免每个离子色谱仪都集成硬件短信发送模块,多台机器使用第三方短信平台,不需要维护发送短信设备。这种方式既能保持短信发送的实时性,又节省经济成本。
3.3 Android客户端监控数据
用户可以通过手机应用客户端随时随地查看在线离子色谱仪的运行参数。本系统设计监控在线离子色谱仪的Android客户端,客户端连接网络远程查看在线离子色谱仪的运行情况。
手机应用客户端接收消息目前有拉和推两种方式实现,拉是手机应用客户端定期循环向服务器端询问是否有消息发送。推是一旦有消息到达服务器端主动向手机应用客户端发送消息。本设计的监控参数采用推的方式发送消息至Android手机客户端。
云服务器发送消息Android手机客户端采用MQTT协议实现消息推送[10]。在Android客户端添加参数显示界面和消息通知栏。参数显示界面可以显示订阅的各项参数,在通知栏中显示异常参数通知。
在Android客户端程序设计,使用ServicePush模块集成MQTT客户端,连接云服务器成功之后,订阅相关主题。当云服务器中Mosquitto有客户端订阅消息到达时,Android客户端可以查看在线离子色谱仪发出的相关参数。其程序设计流程图如7所示。采用MQTT协议的推送方式既实现消息的实时推送,又节省手机客户端的电量和流量。
图7 Android手机客户端程序设计流程图
使用当下的云计算技术,将服务器端部署在阿里云服务器中,使服务器端不受硬件环境的限制,提高服务器的稳定性和可扩展性。机器配置为Cpu为1核,内存为2 G,带宽为1 M。
在云服务器中安装Mosquitto-1.4.8。在Mosquitto的配置文件中,配置用户登录和访问控制。并将短信网关应用程序部署在云服务器中。
将MQTT嵌入式客户端的C++程序集成到在线离子色谱仪的工作站程序中,在Andriod客户端程序中集成MQTT客户端程序。在线离子色谱仪参数异常触发报警,发送短信至手机,在Android客户端查看在线离子色谱仪各项参数,如图7所示。
图7 手机短信报警和监测数据显示
经测试,系统能够满足远程监控要求,并且对在线离子色谱仪色谱运行参数异常发送报警信息到指定号码手机短信中。参数监控可以满足实时要求,报警短信能及时到达用户手机。
本文论述了基于MQTT协议的在线离子色谱仪监控系统的实现。将MQTT的客户端集成到设备目前运行的系统中非常方便。MQTT协议是轻量级协议,占用系统资源较少,不影响设备的正常运行和其他功能的使用。设备端采用C++语言实现,其中短信网关和手机应用客户端采用Java语言实现,实现了跨语言平台的通信,完成推送在线离子色谱仪各项参数到手机应用客户端和短信报警功能。经过实际使用测试,目前监控系统检测各项参数准确,短信报警实时,能够满足监控设备的需要。该系统实现了嵌入式系统的实时通信,使用软件技术减少设备端硬件的重复部署,提高系统的通信稳定性,降低系统耦合的经济成本。
下一步工作是将在线离子色谱仪的采集的原始数据信息通过MQTT协议加密传输,并可以通过WEB和手机应用对在线离子色谱仪发送控制命令,实现对离子色谱仪的远程控制。
[1] 马兴录, 陈 为. 离子色谱分析仪的嵌入式系统设计[J]. 计算机测量与控制, 2006, 14(10):1426-1427,1430.
[2] 高 嵩.基于HTTP协议的嵌入式远程监控系统的研究[D]. 北京:北京工业大学 2009,3.
[3] 翟 顺,王卫红,张 衎,等.基于SIM900A的物联网短信报警系统[J].现代电子技术,2012,35(5):86-89.
[4] MQ Telemetry Transport.[EB/OL]. http://mqtt.org.2016-09-10.
[5] MQTT Version 3.1.1[EB/OL]. http://mqtt.org/documentation.2014.
[6] Paho MQTT Client.[EB/OL]. https://eclipse.org/paho.
[7] Mosquitto[EB/OL]. https://mosquitto.org.2016-08-25.
[8] 任 亨, 马 跃, 杨海波,等. 基于MQTT协议的消息推送服务器[J]. 计算机系统应用, 2014, 23(3):77-82.
[9] 阿里大于[EB/OL]. http://www.alidayu.com.2016-07-10.
[10] Tang K, Wang Y, Liu H, et al. Design and implementation of push notification system based on the MQTT protocol[A].International Conference on Information Science and Computer Applications (ISCA 2013)[C]. 2013: 116-119.
DesignofaRemoteMonitoringSystemBasedonMQTTProtocolforOn-lineIonChromatographyInstrument
SunYanqin,MaXinglu,GuoKongyue
(CollegeofInformationScienceandTechnology,QingdaoUniversityofScienceandTechnology,Qingdao266061,China)
On-line ion chromatograph Instrument is a chemical analysis instrument,which can make continuous automatic analysis of the sample and display the ion content of the sample in the form of a spectrogram.In order to ensure continuous detection of the sample, the instrument requires non-stop running.As the equipment is often placed in the studio or remote areas, we need to monitor the on-line ion chromatograph instrument at remote.For this problem we design the remote monitoring system for on-line ion chromatograph instrument. The system realizes functions such as viewing running parameters of on-line ion chromatograph instrument on mobile and receiving alarm SMS messages on mobile by integrating the MQTT client in on-line ion chromatograph instrument and deploying broker of MQTT and gateway for SMS.
on-line ion chromatograph instrument; MQTT protocol; remote monitor; SMS alarming
2016-11-11;
2016-11-28。
山东省自然科学基金(ZR2013FL013)。
孙燕芹(1989-),女,山东济宁人,硕士研究生,主要从事嵌入式系统方向的研究。
1671-4598(2017)04-0251-03DOI:10.16526/j.cnki.11-4762/tp
TP
A