孫燕芹,馬興錄,郭孔躍
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
基于MQTT協(xié)議的在線離子色譜儀遠程監(jiān)控系統(tǒng)設(shè)計
孫燕芹,馬興錄,郭孔躍
(青島科技大學(xué) 信息科學(xué)技術(shù)學(xué)院,山東 青島 266061)
在線離子色譜儀是可以對樣品進行連續(xù)自動分析,并以譜圖的形式顯示樣品中離子含量的化學(xué)分析儀器;為確保對樣品的連續(xù)檢測,儀器需要不間斷的運行;由于設(shè)備經(jīng)常放在工作室或偏遠地區(qū),需要對在線離子色譜儀的運行狀況進行遠程監(jiān)控;針對此問題設(shè)計在線離子色譜儀的遠程監(jiān)控系統(tǒng);該系統(tǒng)使用輕量級MQTT協(xié)議作為通訊協(xié)議,通過在線離子色譜儀中集成MQTT客戶端,在云服務(wù)器中部署MQTT的消息中間件和短信網(wǎng)關(guān),實現(xiàn)了用戶在手機應(yīng)用客戶端查看在線離子色譜儀的運行參數(shù)、通過手機短信接收緊急報警信息等功能。
在線離子色譜儀;MQTT協(xié)議;遠程監(jiān)控;短信報警
在線離子色譜儀是全自動、全天候運行的離子色譜分析儀器,可連續(xù)在線分析陰陽離子、重金屬離子。它廣泛應(yīng)用于水質(zhì)、酸雨、大氣和處理后排放的工業(yè)廢水中的陰陽離子以及重金屬離子的連續(xù)自動檢測,在線離子色譜儀具有廣泛的工業(yè)應(yīng)用前景[1]。
目前在線離子色譜儀設(shè)備可以在上位機查看在線離子色譜儀的各項參數(shù),但用戶不能遠程查看設(shè)備的各項運行參數(shù)和遠程接收報警消息。目前實現(xiàn)監(jiān)控有通過Http協(xié)議傳輸,使用瀏覽器查看監(jiān)控參數(shù)[2],Http協(xié)議實時性差,需要用戶主動通過Web瀏覽器查看監(jiān)控數(shù)據(jù),無法提醒用戶查看各項運行參數(shù)。目前遠程報警功能大多通過集成GSM模塊發(fā)送短信報警[3],增大了硬件模塊投入,并且需要使用移動運營商提供的SIM卡,需要定期繳費,成本較高。
本文設(shè)計基于MQTT[4](Message Queuing Telemetry Transport,消息隊列遙測傳輸)協(xié)議的在線離子色譜儀遠程監(jiān)控系統(tǒng)。
該系統(tǒng)可以主動推送監(jiān)控消息至手機應(yīng)用客戶端,短信報警模塊采用云短信平臺,按需收費,降低硬件維護成本。
在線離子色譜儀為液相色譜儀,可實現(xiàn)三通道檢測,可同時檢測陰離子、陽離子和重金屬。該設(shè)備最快可在30分鐘內(nèi)完成一次檢測,每天最多可連續(xù)檢測48次,在線離子色譜儀實現(xiàn)了復(fù)雜的譜圖識別、數(shù)據(jù)處理和報表生成等功能。
該設(shè)備采用嵌入式系統(tǒng)設(shè)計,主要包括嵌入式主機系統(tǒng)和外部控制模塊,嵌入式主機控制外部模塊正常工作。嵌入式主機系統(tǒng)包括ARM處理器、處理器外圍接口硬件電路和嵌入式Linux系統(tǒng)。嵌入式主機系統(tǒng)之外的模塊為外部模塊,其中色譜柱、電導(dǎo)檢測器、伏安檢測器,完成離子檢測。自動進樣器完成進樣,泵控制模塊完成液體的流速,溫控模塊保證溫度恒定,保證檢測結(jié)果的正確性[1]。網(wǎng)絡(luò)模塊使用以太網(wǎng)或無線上網(wǎng)卡,實現(xiàn)互聯(lián)網(wǎng)網(wǎng)絡(luò)連接。其結(jié)構(gòu)示意圖如圖1所示。
圖1 在線離子色譜儀結(jié)構(gòu)示意圖
在線離子色譜儀為連續(xù)工作精密儀器,用戶需要不受地域時間限制監(jiān)控在線離子色譜儀當(dāng)前的運行狀態(tài),確定設(shè)備是否按照設(shè)定進行工作。在線離子色譜儀自動運行過程中,系統(tǒng)會隨時檢查各種異常情況,一旦遇到異常情況會發(fā)出報警信息,如果報警信息不能及時處理將會引起設(shè)備自動停機,以保護設(shè)備。
在線離子色譜儀需要監(jiān)控的內(nèi)容主要包括:進樣時間、檢測器、檔位電壓、電流、泵流速、泵壓力、溫度等信息。
設(shè)備報警消息主要分為四類:泵壓不足、檔位電壓異常、上傳數(shù)據(jù)失敗和溫度異常。其中泵壓不足由3種情況造成,分別為淋洗液不足、管路有氣泡和管路泄露;檔位電壓異常由檢測淋洗液濃度異常造成;上傳數(shù)據(jù)失敗說明網(wǎng)絡(luò)連接有問題;溫度異常由設(shè)備工作環(huán)境異常造成。針對以上4種異常情況,需要發(fā)出報警信息至設(shè)備維護人員手機短信,并提示異常原因,便于設(shè)備維護人員恢復(fù)設(shè)備正常運行。
MQTT是基于TCP/IP協(xié)議的輕量級、低帶寬和易于集成的雙向傳輸協(xié)議,客戶端與服務(wù)端通過訂閱和發(fā)布消息的模式傳輸消息。MQTT協(xié)議由IBM公司發(fā)明的即時通訊協(xié)議,支持全平臺,并且該協(xié)議占用資源較少,客戶端易于集成在嵌入式終端設(shè)備,并且能夠穩(wěn)定實時傳輸數(shù)據(jù),在機器到機器(M2M)和物聯(lián)網(wǎng)(IoT)等領(lǐng)域得到了廣泛應(yīng)用[4]。
MQTT消息客戶端到客戶端的傳輸需要通過消息中間件來完成,在客戶端與消息中間件之間使用發(fā)布/訂閱的模式,通過消息中間件轉(zhuǎn)發(fā)消息[5]。如圖2所示,在MQTT的3個客戶端與消息中間件建立連接之后,根據(jù)自己業(yè)務(wù)需求按照消息主題訂閱和發(fā)布消息。圖2中MQTT客戶端1將消息發(fā)布到消息中間件,消息中間件根據(jù)訂閱主題需求將消息發(fā)布到訂閱該消息的客戶端2和客戶端3。同理客戶端2和客戶端3發(fā)布消息的模式與客戶端1發(fā)布消息的模式相同。
圖2 MQTT發(fā)布/訂閱模式
2.1 MQTT協(xié)議報文
MQTT協(xié)議通過交換報文進行通信,MQTT協(xié)議報文內(nèi)容包括固定報頭、可變報頭和有效負載[5]。其中固定報頭包括MQTT協(xié)議的控制類型和保留位,如圖3所示;可變報頭包括協(xié)議名稱、協(xié)議級別和連接標志位以及心跳檢測時長;負載即為傳輸消息內(nèi)容。
圖3 固定報頭格式
MQTT規(guī)范定義了十四種控制報文,主要包括連接相關(guān)報文、發(fā)布相關(guān)報文、訂閱相關(guān)報文和心跳檢測相關(guān)報文。
2.2 MQTT通信
MQTT消息使用主題名和負載內(nèi)容的形式傳輸。主題為消息名,負載為實際傳輸消息的內(nèi)容??蛻舳耸紫扰c中間件建立連接,然后客戶端向消息中間件訂閱或發(fā)送主題消息。
MQTT根據(jù)主題區(qū)分消息,每條消息都有一個主題。消息中間件通過識別主題判斷該消息應(yīng)該被發(fā)送到哪個訂閱客戶端。
為保證消息的傳輸,MQTT消息可以設(shè)置消息服務(wù)質(zhì)量等級(QoS)。服務(wù)質(zhì)量等級共有3種:當(dāng)QoS=0時,無論消息接收方是否收到消息,最多發(fā)送一次消息;當(dāng)QoS=1時,為確保消息到達,至少發(fā)送一次;當(dāng)QoS=2時,消息僅發(fā)送一次,是最高等級的服務(wù)質(zhì)量,不允許消息丟失和重復(fù)。
系統(tǒng)由四部分組成,分別為:在線離子色譜儀、云服務(wù)器、云短信平臺和手機應(yīng)用客戶端。如圖4所示。
圖4 在線離子色譜儀遠程監(jiān)控系統(tǒng)的軟件架構(gòu)
在線離子色譜儀連接到云服務(wù)器,并發(fā)送各項參數(shù)和報警信息。云服務(wù)器將監(jiān)控參數(shù)發(fā)送至手機應(yīng)用客戶端,將報警消息發(fā)送至云短信平臺,云短信平臺將報警消息以短信的形式發(fā)送至手機短信。
3.1 在線離子色譜儀數(shù)據(jù)發(fā)送
在線離子色譜儀發(fā)送數(shù)據(jù)至云服務(wù)器采用MQTT協(xié)議。MQTT協(xié)議是應(yīng)用協(xié)議基于TCP/IP協(xié)議通信,在線離子色譜儀采用嵌入式Linux系統(tǒng),MQTT協(xié)議調(diào)用Linux系統(tǒng)函數(shù)進行TCP/IP通信。MQTT客戶端函數(shù)調(diào)用Eclipse Paho的嵌入式C++語言函數(shù)包中的函數(shù)[6]。其程序流程如圖5所示。
圖5 在線離子色譜儀集成MQTT客戶端流程圖
在IPStack棧中封裝基于Socket套接字的通信函數(shù),有connect、read和write3種函數(shù)。然后使用IPStack函數(shù)中的connect函數(shù)連接云服務(wù)器,connect函數(shù)基于Socket套接字的操作,通過IP協(xié)議地址和端口號連接云服務(wù)器。
MQTT客戶端連接云服務(wù)器首先使用IPStack棧進行網(wǎng)絡(luò)初始化,然后調(diào)用MQTT客戶端connect函數(shù)向云服務(wù)器中的MQTT消息中間件發(fā)送連接報文,連接報文內(nèi)容包括連接服務(wù)器中MQTT消息中間件用戶名和密碼。云服務(wù)器端返回連接確認報文,根據(jù)返回連接報文確認是否連接成功。MQTT客戶端成功連接之后,調(diào)用MQTT客戶端中的publish函數(shù)發(fā)布需要發(fā)送的消息主題和內(nèi)容。其部分實現(xiàn)代碼如下:
IPStackipstack = IPStack();
MQTT::Client
(ipstack);
intOnlineClient =ipstack.connect(hostname, port);
OnlineClient = client.connect(data);
OnlineClient = client.publish(topic, message);
如果在線離子色譜儀中發(fā)生異常,異常消息通過集成的MQTT客戶端發(fā)送到云服務(wù)器,云服務(wù)器會根據(jù)消息的主題對消息做相應(yīng)的處理。云服務(wù)器會發(fā)送心跳包檢測設(shè)備端是否在線,這樣可以保持設(shè)備的長連接。如果設(shè)備網(wǎng)絡(luò)發(fā)生中斷,服務(wù)端無法檢測不到設(shè)備端,會將設(shè)備端的遺囑消息發(fā)出,通知設(shè)備維護人員設(shè)備發(fā)送網(wǎng)絡(luò)中斷已經(jīng)掉線。
3.2 云服務(wù)器設(shè)計
云服務(wù)器由兩部分構(gòu)成,分別為MQTT的消息中間件和短信網(wǎng)關(guān)。
3.2.1 MQTT消息中間件
本系統(tǒng)采用開源的Mosquitto[7]作為消息中間件,支持MQTT協(xié)議,提供輕量級的訂閱/發(fā)布模型。在Mosquitto中配置用戶登錄模塊和訪問控制列表(ACL)模塊。MQTT客戶端連接Mosquitto需要發(fā)送用戶名和密碼進行驗證,只有驗證通過才能成功連接消息中間件,否則Mosquitto會拒絕連接。
配置用戶名和密碼前需要新建一個存放用戶名和密碼的文件,在此文件中,用戶名是明文顯示,密碼顯示是經(jīng)過加密的。然后將此文件的路徑加載到配置文件中并在配置文件下將任意連接設(shè)置為否。產(chǎn)生用戶名密碼的命令為:
mosquitto_passwd /etc/mosquitto/passwd admin
Password: ******
Reenter password:******
其中passwd為存放密碼文件,admin為用戶名,根據(jù)提示輸入密碼。在文件中用戶名為明文,密碼是經(jīng)過加密處理的密文文件。
MQTT客戶端與服務(wù)器建立連接之后,訂閱的主題受訪問控制列表文件的限制[8],只有訂閱訪問列表文件中的相應(yīng)用戶下的主題,MQTT客戶端才能收到正確的訂閱消息。ACL表格式為:
user admin
[read/write]
這種格式只是影響username的客戶端訂閱相關(guān)話題。將ACL相關(guān)文件的路徑寫到配置文件中完成配置。
3.2.1 短信網(wǎng)關(guān)
在線離子色譜儀監(jiān)控系統(tǒng)具有報警功能。在云服務(wù)器上部署短信網(wǎng)關(guān),通過短信網(wǎng)關(guān)發(fā)送需要發(fā)送的消息內(nèi)容到第三方云短信平臺發(fā)送短信至用戶手機。短信網(wǎng)關(guān)集成MQTT客戶端并調(diào)用阿里大于[9]短信接口發(fā)送短信,其程序設(shè)計流程如圖6所示。
圖6 短信網(wǎng)關(guān)程序設(shè)計流程圖
集成在短信網(wǎng)關(guān)中的MQTT客戶端首先訂閱報警消息主題,然后使用MQTT的回調(diào)函數(shù)等待訂閱消息。當(dāng)訂閱消息到達時,在MQTT的回調(diào)函數(shù)中調(diào)用發(fā)送短信模塊,發(fā)送短信模塊內(nèi)有預(yù)定的手機號碼和具體短信內(nèi)容,發(fā)送短信模塊會將消息發(fā)送至阿里大于云短信平臺,云短信平臺將消息以短信的形式轉(zhuǎn)發(fā)至指定號碼的手機中。
該短信模塊設(shè)計方案避免每個離子色譜儀都集成硬件短信發(fā)送模塊,多臺機器使用第三方短信平臺,不需要維護發(fā)送短信設(shè)備。這種方式既能保持短信發(fā)送的實時性,又節(jié)省經(jīng)濟成本。
3.3 Android客戶端監(jiān)控數(shù)據(jù)
用戶可以通過手機應(yīng)用客戶端隨時隨地查看在線離子色譜儀的運行參數(shù)。本系統(tǒng)設(shè)計監(jiān)控在線離子色譜儀的Android客戶端,客戶端連接網(wǎng)絡(luò)遠程查看在線離子色譜儀的運行情況。
手機應(yīng)用客戶端接收消息目前有拉和推兩種方式實現(xiàn),拉是手機應(yīng)用客戶端定期循環(huán)向服務(wù)器端詢問是否有消息發(fā)送。推是一旦有消息到達服務(wù)器端主動向手機應(yīng)用客戶端發(fā)送消息。本設(shè)計的監(jiān)控參數(shù)采用推的方式發(fā)送消息至Android手機客戶端。
云服務(wù)器發(fā)送消息Android手機客戶端采用MQTT協(xié)議實現(xiàn)消息推送[10]。在Android客戶端添加參數(shù)顯示界面和消息通知欄。參數(shù)顯示界面可以顯示訂閱的各項參數(shù),在通知欄中顯示異常參數(shù)通知。
在Android客戶端程序設(shè)計,使用ServicePush模塊集成MQTT客戶端,連接云服務(wù)器成功之后,訂閱相關(guān)主題。當(dāng)云服務(wù)器中Mosquitto有客戶端訂閱消息到達時,Android客戶端可以查看在線離子色譜儀發(fā)出的相關(guān)參數(shù)。其程序設(shè)計流程圖如7所示。采用MQTT協(xié)議的推送方式既實現(xiàn)消息的實時推送,又節(jié)省手機客戶端的電量和流量。
圖7 Android手機客戶端程序設(shè)計流程圖
使用當(dāng)下的云計算技術(shù),將服務(wù)器端部署在阿里云服務(wù)器中,使服務(wù)器端不受硬件環(huán)境的限制,提高服務(wù)器的穩(wěn)定性和可擴展性。機器配置為Cpu為1核,內(nèi)存為2 G,帶寬為1 M。
在云服務(wù)器中安裝Mosquitto-1.4.8。在Mosquitto的配置文件中,配置用戶登錄和訪問控制。并將短信網(wǎng)關(guān)應(yīng)用程序部署在云服務(wù)器中。
將MQTT嵌入式客戶端的C++程序集成到在線離子色譜儀的工作站程序中,在Andriod客戶端程序中集成MQTT客戶端程序。在線離子色譜儀參數(shù)異常觸發(fā)報警,發(fā)送短信至手機,在Android客戶端查看在線離子色譜儀各項參數(shù),如圖7所示。
圖7 手機短信報警和監(jiān)測數(shù)據(jù)顯示
經(jīng)測試,系統(tǒng)能夠滿足遠程監(jiān)控要求,并且對在線離子色譜儀色譜運行參數(shù)異常發(fā)送報警信息到指定號碼手機短信中。參數(shù)監(jiān)控可以滿足實時要求,報警短信能及時到達用戶手機。
本文論述了基于MQTT協(xié)議的在線離子色譜儀監(jiān)控系統(tǒng)的實現(xiàn)。將MQTT的客戶端集成到設(shè)備目前運行的系統(tǒng)中非常方便。MQTT協(xié)議是輕量級協(xié)議,占用系統(tǒng)資源較少,不影響設(shè)備的正常運行和其他功能的使用。設(shè)備端采用C++語言實現(xiàn),其中短信網(wǎng)關(guān)和手機應(yīng)用客戶端采用Java語言實現(xiàn),實現(xiàn)了跨語言平臺的通信,完成推送在線離子色譜儀各項參數(shù)到手機應(yīng)用客戶端和短信報警功能。經(jīng)過實際使用測試,目前監(jiān)控系統(tǒng)檢測各項參數(shù)準確,短信報警實時,能夠滿足監(jiān)控設(shè)備的需要。該系統(tǒng)實現(xiàn)了嵌入式系統(tǒng)的實時通信,使用軟件技術(shù)減少設(shè)備端硬件的重復(fù)部署,提高系統(tǒng)的通信穩(wěn)定性,降低系統(tǒng)耦合的經(jīng)濟成本。
下一步工作是將在線離子色譜儀的采集的原始數(shù)據(jù)信息通過MQTT協(xié)議加密傳輸,并可以通過WEB和手機應(yīng)用對在線離子色譜儀發(fā)送控制命令,實現(xiàn)對離子色譜儀的遠程控制。
[1] 馬興錄, 陳 為. 離子色譜分析儀的嵌入式系統(tǒng)設(shè)計[J]. 計算機測量與控制, 2006, 14(10):1426-1427,1430.
[2] 高 嵩.基于HTTP協(xié)議的嵌入式遠程監(jiān)控系統(tǒng)的研究[D]. 北京:北京工業(yè)大學(xué) 2009,3.
[3] 翟 順,王衛(wèi)紅,張 衎,等.基于SIM900A的物聯(lián)網(wǎng)短信報警系統(tǒng)[J].現(xiàn)代電子技術(shù),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協(xié)議的消息推送服務(wù)器[J]. 計算機系統(tǒng)應(yīng)用, 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。
山東省自然科學(xué)基金(ZR2013FL013)。
孫燕芹(1989-),女,山東濟寧人,碩士研究生,主要從事嵌入式系統(tǒng)方向的研究。
1671-4598(2017)04-0251-03DOI:10.16526/j.cnki.11-4762/tp
TP
A