摘 要:為在網(wǎng)絡(luò)環(huán)境較差的情況下提供可靠的通信服務(wù),設(shè)計并實現(xiàn)了一種基于消息隊列遙測傳輸(MQTT)協(xié)議的遠程數(shù)據(jù)采集與實時控制系統(tǒng)。MQTT協(xié)議作為一款輕量級的物聯(lián)網(wǎng)通信協(xié)議,為該系統(tǒng)實現(xiàn)高實時性的數(shù)據(jù)交互提供了有力支撐。在系統(tǒng)設(shè)計時引入了訂閱/發(fā)布模式。該設(shè)計模式可以有效地對系統(tǒng)功能進行解耦,并對數(shù)據(jù)進行異步處理,為系統(tǒng)提供靈活的數(shù)據(jù)處理機制。該系統(tǒng)目前已應(yīng)用于工程勘探、地球物理探測等領(lǐng)域,在實際應(yīng)用中驗證了系統(tǒng)的可靠性與穩(wěn)定性。
關(guān)鍵詞:MQTT協(xié)議;訂閱/發(fā)布模式;遠程數(shù)據(jù)采集;實時控制;解耦;消息中間件
中圖分類號:TP393 文獻標識碼:A 文章編號:2095-1302(2025)04-00-04
0 引 言
目前,云計算、大數(shù)據(jù)、物聯(lián)網(wǎng)和人工智能等相關(guān)技術(shù)已逐步成熟,并加速推動各行各業(yè)的數(shù)智化轉(zhuǎn)型。其核心為利用互聯(lián)網(wǎng)信息化技術(shù),提升產(chǎn)品的信息化和智能化水平,提高企業(yè)的生產(chǎn)效率,促進企業(yè)的高質(zhì)量發(fā)展?!吨袊I(yè)互聯(lián)網(wǎng)產(chǎn)業(yè)經(jīng)濟發(fā)展白皮書(2023年)》報告指出,5G技術(shù)具有速率高、時延低、連接數(shù)大等特點。工業(yè)互聯(lián)網(wǎng)可以依托5G技術(shù),實現(xiàn)工業(yè)網(wǎng)絡(luò)安全、效率和自動化水平的提升[1]。5G技術(shù)提供的高速網(wǎng)絡(luò),使得實時數(shù)據(jù)傳輸、實時數(shù)據(jù)處理分析、實時決策成為了可能。施工作業(yè)現(xiàn)場實現(xiàn)了單獨作業(yè)向?qū)<覉F隊協(xié)同作業(yè)模式的轉(zhuǎn)變,縮短了施工現(xiàn)場與辦公室之間的時空距離,完成了設(shè)備數(shù)據(jù)的快速采集、處理、分析、決策、反饋。
本研究設(shè)計并實現(xiàn)了一種基于MQTT的遠程數(shù)據(jù)采集與實時控制系統(tǒng)。MQTT協(xié)議作為一款輕量級物聯(lián)網(wǎng)通信協(xié)議,可以在網(wǎng)絡(luò)環(huán)境較差的情況下提供可靠的通信服務(wù)。依托5G技術(shù)提供的高速網(wǎng)絡(luò),MQTT協(xié)議可以為施工作業(yè)現(xiàn)場設(shè)備與服務(wù)器之間的數(shù)據(jù)傳輸提供高可靠的通信服務(wù)。該系統(tǒng)目前已應(yīng)用于工程勘探、地球物理探測等領(lǐng)域,實現(xiàn)了遠程監(jiān)控設(shè)備狀態(tài)、遠程數(shù)據(jù)傳輸和遠程控制等功能。
1 系統(tǒng)設(shè)計
1.1 MQTT協(xié)議
1999年,IBM公司發(fā)布了MQTT(Message Queuing Telemetry Transport)協(xié)議。該協(xié)議是一種基于訂閱/發(fā)布(Subscribe/Publish)模式的通信協(xié)議,底層采用TCP/IP協(xié)議,其優(yōu)點在于輕量、擴展性強,在物聯(lián)網(wǎng)、移動應(yīng)用等方面應(yīng)用廣泛。
MQTT協(xié)議基于二進制實現(xiàn),是一種低開銷、低帶寬的即時通信協(xié)議,利用極少代碼和有限帶寬提供實時可靠的消息服務(wù)。MQTT協(xié)議可替代TCP Socket部分功能,用于手機推送等領(lǐng)域。相對HTTP和XML,MQTT協(xié)議可自定義數(shù)據(jù)通信格式,解析復(fù)雜度低[2]。
MQTT協(xié)議基于異步發(fā)布/訂閱模式實現(xiàn),通過Broker代理服務(wù)器將二者關(guān)聯(lián)。其功能包括消息存儲和轉(zhuǎn)發(fā),以及訂閱關(guān)系維護。一次典型的MQTT消息通信流程如圖1所示。
消息發(fā)布方將消息發(fā)送至服務(wù)器(Broker)中。當消息抵達服務(wù)器后,根據(jù)訂閱關(guān)系,服務(wù)器將消息轉(zhuǎn)發(fā)給訂閱方。目前有多款支持MQTT協(xié)議的中間件軟件,如ActiveMQ、RocketMQ和RabbitMQ等。
1.2 訂閱/發(fā)布模式
本研究在設(shè)計實時系統(tǒng)時引入了訂閱/發(fā)布模式。訂閱/發(fā)布模式作為一種軟件設(shè)計模式,被廣泛應(yīng)用于基于事件驅(qū)動的軟件系統(tǒng)中。該設(shè)計模式可以對系統(tǒng)內(nèi)復(fù)雜的功能進行解耦,并對數(shù)據(jù)進行異步處理,提高了系統(tǒng)的響應(yīng)速度和可靠性[3]。訂閱/發(fā)布模式由發(fā)布者、訂閱者、消息和消息中間件構(gòu)成,如圖2所示。
1.2.1 發(fā)布者
發(fā)布者為消息的生產(chǎn)者,負責(zé)產(chǎn)生和發(fā)送消息。
1.2.2 訂閱者
訂閱者為消息的消費者,負責(zé)訂閱和接收消息。
1.2.3 消息中間件
消息中間件的職責(zé)是提供消息緩存隊列、記錄消息訂閱關(guān)系以及轉(zhuǎn)發(fā)消息。作為消息中轉(zhuǎn)站,消息中間件對系統(tǒng)進行功能解耦,并對消息進行異步處理[4]。
1.2.4 消息
消息包含消息頭(header)和消息內(nèi)容兩部分,消息頭又包含消息主題和發(fā)送時間等信息,消息中間件用消息主題維護消息訂閱關(guān)系。
系統(tǒng)工作時,發(fā)布者與訂閱者無需關(guān)心對方是否存在,只需與消息中間件連接即可。發(fā)布消息時,要攜帶消息主題。消息首先到達消息中間件,進入緩存隊列;然后根據(jù)訂閱關(guān)系,消息中間件將消息轉(zhuǎn)發(fā)給該消息主題的所有訂閱者。
1.3 系統(tǒng)架構(gòu)
遠程數(shù)據(jù)采集與實時控制系統(tǒng)架構(gòu)如圖3所示。該系統(tǒng)由采集端軟件、控制端軟件與服務(wù)端軟件組成。由于系統(tǒng)采用了訂閱/發(fā)布模式,所以系統(tǒng)允許多個采集端和控制端接入。
1.3.1 采集端軟件
采集端軟件部署在設(shè)備工作現(xiàn)場,與采集設(shè)備在同一現(xiàn)場工作,負責(zé)采集設(shè)備運行產(chǎn)生的各類數(shù)據(jù),可采用ZigBee、CAN總線、串口、TCP/UDP、RS 232、RS 485等通信協(xié)議與設(shè)備進行數(shù)據(jù)交互。采集端軟件采集設(shè)備運行數(shù)據(jù),然后發(fā)送至服務(wù)器消息中間件;消息中間件再把數(shù)據(jù)轉(zhuǎn)發(fā)到控制端,同時接收設(shè)備控制指令。
1.3.2 服務(wù)端軟件
服務(wù)端軟件包括Web軟件、消息中間件和數(shù)據(jù)服務(wù)。
(1)Web軟件
Web軟件用于系統(tǒng)用戶管理和設(shè)備注冊。只有授權(quán)的用戶和設(shè)備才能夠使用Web軟件。同時,Web軟件提供了可視化數(shù)據(jù)大屏,實時展示作業(yè)設(shè)備的運行狀態(tài)和采集的數(shù)據(jù)。
(2)消息中間件
消息中間件是實現(xiàn)高可靠性通信的關(guān)鍵,以及系統(tǒng)實現(xiàn)訂閱/發(fā)布模式的基礎(chǔ)。消息中間件記錄各子系統(tǒng)間消息訂閱的關(guān)系,提供了消息緩存隊列,實現(xiàn)了各子系統(tǒng)間消息中轉(zhuǎn)、消息異步處理以及內(nèi)部功能解耦。
(3)數(shù)據(jù)服務(wù)
數(shù)據(jù)服務(wù)負責(zé)業(yè)務(wù)消息的預(yù)處理和存儲系統(tǒng)運行時產(chǎn)生的關(guān)鍵數(shù)據(jù)。將關(guān)鍵數(shù)據(jù)保存至數(shù)據(jù)庫中,可以回溯設(shè)備歷史數(shù)據(jù),判斷設(shè)備運行狀態(tài)是否存在異常。后續(xù)可以對數(shù)據(jù)進行高級應(yīng)用。
1.3.3 控制端軟件
控制端軟件通常部署在遠程控制大廳的專用計算機上,負責(zé)向采集端軟件發(fā)送控制指令,以及接收遠端設(shè)備回傳的各類數(shù)據(jù)??刂贫塑浖⒉慌c采集端軟件直接通信,而是借助服務(wù)器的消息中間件接收采集端軟件上傳的采集數(shù)據(jù)以及下發(fā)的控制指令。
2 系統(tǒng)實現(xiàn)與關(guān)鍵技術(shù)
系統(tǒng)采用C/S和B/S混合架構(gòu)進行開發(fā),同時各子系統(tǒng)間采用MQTT協(xié)議傳輸數(shù)據(jù)。采集端與控制端使用C#語言開發(fā);服務(wù)端Web軟件采用SpringBoot和Vue開發(fā);消息中間件使用ActiveMQ開發(fā);數(shù)據(jù)服務(wù)軟件使用SpringBoot和MySQL開發(fā)。系統(tǒng)開發(fā)遵循“約定gt;配置gt;編碼”原則,便于系統(tǒng)維護和功能擴展。
2.1 采集端軟件
采集端軟件負責(zé)采集/上傳設(shè)備數(shù)據(jù)、向設(shè)備下發(fā)控制指令以及接收服務(wù)器轉(zhuǎn)發(fā)的消息。采集端軟件支持本地采集和遠程采集。本地采集時無需連接服務(wù)器;遠程采集時使用設(shè)備編號作為自身唯一標識ClientID,服務(wù)器驗證無誤后開始作業(yè)。
采集端軟件內(nèi)部通過多線程調(diào)度來保證系統(tǒng)的實時性。將采集的設(shè)備數(shù)據(jù)持久化存儲到本地硬盤,同時將采集數(shù)據(jù)格式化后上傳至消息中間件。此外,采集軟件還提供了一個指令接收線程,負責(zé)接收控制端發(fā)出的指令。
2.2 Web軟件
Web軟件采用SpringBoot框架+ Vue框架的前后端分離技術(shù)開發(fā),對前后端功能進行解耦,降低后端服務(wù)器的壓力[5]。Web軟件實現(xiàn)了大屏可視化、設(shè)備管理、數(shù)據(jù)查詢、消息推送、權(quán)限管理和用戶管理等功能。Web軟件系統(tǒng)架構(gòu)如圖4所示。
2.2.1 可視化數(shù)據(jù)大屏
可視化數(shù)據(jù)大屏展示設(shè)備的運行狀態(tài)和最新數(shù)據(jù)。系統(tǒng)定時讀取數(shù)據(jù),使用Redis做高速緩存[6],采用可視化報表技術(shù)將數(shù)據(jù)進行渲染,實現(xiàn)了設(shè)備運行狀態(tài)的實時監(jiān)控。
2.2.2 設(shè)備管理
為保證系統(tǒng)安全,只有在系統(tǒng)中注冊過的設(shè)備才能夠接入。通過對設(shè)備數(shù)據(jù)表的增加、刪除、修改、查詢操作,實現(xiàn)設(shè)備的注冊和注銷。
2.2.3 數(shù)據(jù)查詢
將設(shè)備運行期間產(chǎn)生的數(shù)據(jù)存儲到數(shù)據(jù)庫中。為了便于瀏覽設(shè)備歷史數(shù)據(jù),判斷設(shè)備運行是否存在異常,系統(tǒng)提供了數(shù)據(jù)查詢接口和界面,允許用戶根據(jù)指定條件進行相關(guān)查詢。
2.2.4 消息推送
對設(shè)備運行期間的數(shù)據(jù)進行監(jiān)測,通過內(nèi)部數(shù)據(jù)處理機制,判斷設(shè)備運轉(zhuǎn)有無異常。當設(shè)備數(shù)據(jù)存在異常時,系統(tǒng)會主動推送消息給用戶。
2.2.5 權(quán)限管理與用戶管理
采用基于角色的訪問控制權(quán)限(RBAC),實現(xiàn)系統(tǒng)用戶訪問系統(tǒng)資源的權(quán)限控制。創(chuàng)建用戶并分配角色,為角色設(shè)置不同權(quán)限,不同角色用戶只能訪問特定資源。
2.3 消息中間件
本系統(tǒng)采用Apache ActiveMQ消息中間件。ActiveMQ支持JavaScript、C、C++、Python、.Net等編程語言,提供MQTT協(xié)議管理物聯(lián)網(wǎng)設(shè)備,具有強大的功能和靈活性[7]。
本系統(tǒng)采用MQTT+JSON方式,實現(xiàn)各子系統(tǒng)間的通信協(xié)議。JSON結(jié)構(gòu)簡潔,序列化機制使機器易于解析和編碼。實驗表明,相較于XML和FSV,JSON擁有更高的傳輸效率[8]。因此,使用JSON搭配MQTT協(xié)議實現(xiàn)實時、高效的網(wǎng)絡(luò)通信是目前最優(yōu)的方案。
一條基本的MQTT消息包括消息頭和負載(payload)。消息頭包括消息主題、消息發(fā)送時間等。消息主題分為多個層級。本系統(tǒng)設(shè)計的消息主題格式見表1,消息負載格式見表2。
2.4 數(shù)據(jù)服務(wù)軟件
數(shù)據(jù)服務(wù)軟件實現(xiàn)了ActiveMQ轉(zhuǎn)發(fā)、消息接收、消息處理以及設(shè)備狀態(tài)存儲和數(shù)據(jù)測量等功能。數(shù)據(jù)服務(wù)軟件訂閱了系統(tǒng)的所有消息,解析后使用MyBatis-Plus技術(shù)存儲在MySQL數(shù)據(jù)庫中。系統(tǒng)支持多個測量設(shè)備和多個遠程控制終端。若將所有設(shè)備的數(shù)據(jù)存放至一張數(shù)據(jù)表內(nèi),會導(dǎo)致表單數(shù)據(jù)量過大,查詢和存儲的效率低下[9]。因此每一個設(shè)備都獨立建立一張數(shù)據(jù)表。
2.5 控制端軟件
控制端軟件負責(zé)下發(fā)設(shè)備控制指令和接收采集端軟件上傳的數(shù)據(jù),并對數(shù)據(jù)做持久化處理??刂贫塑浖峁┯脩羯矸蒡炞C功能,系統(tǒng)授權(quán)后才能夠遠程操控作業(yè)設(shè)備。
為保證系統(tǒng)的實時性,控制端軟件內(nèi)部提供多線程方式進行數(shù)據(jù)處理。消息接收線程負責(zé)接收ActiveMQ消息。ActiveMQ消息接收后存放至緩存隊列,由數(shù)據(jù)處理線程處理。
3 系統(tǒng)應(yīng)用
基于本研究設(shè)計的軟件系統(tǒng)架構(gòu)已先后運用在遠程測井系統(tǒng)、遠程隨鉆數(shù)據(jù)傳輸系統(tǒng)、遠程錄井測控系統(tǒng)等項目中,涉及地球物理探測、工程勘探等多個領(lǐng)域。
3.1 遠程測井系統(tǒng)
遠程測井系統(tǒng)為XX油田搭建了遠程測井實時測控服務(wù)平臺,實現(xiàn)了現(xiàn)場設(shè)備的遠程操作、測井資料的實時分析和快速評價,并且支持一名操作員對多臺現(xiàn)場測井設(shè)備同時進行實時操控。該系統(tǒng)投入使用之后,已完成了100余口井的遠程測井實驗,使測井資料解釋評價處理的實時性得到了根本改變,同時也提高了操作員的工作效率[10]。
3.2 遠程隨鉆數(shù)據(jù)傳輸系統(tǒng)
遠程隨鉆數(shù)據(jù)傳輸系統(tǒng)是一套服務(wù)于XX能源科技股份有限公司的遠程隨鉆數(shù)據(jù)傳輸服務(wù)云平臺,可以遠程實時監(jiān)控施工現(xiàn)場所有隨鉆測量設(shè)備的在線狀態(tài)、施工進度和實時測量數(shù)據(jù),具備曲線繪制和數(shù)據(jù)查詢等功能。該系統(tǒng)目前已經(jīng)正式投入使用,運行穩(wěn)定可靠,為隨鉆測量服務(wù)的“提質(zhì)增效”做出了較大貢獻。
3.3 遠程錄井測控系統(tǒng)
遠程錄井測控系統(tǒng)是一套服務(wù)于XX油田的遠程錄井測控服務(wù)云平臺,可以對XX公司各類綜合錄井設(shè)備的錄井采集軟件、傳感器采集系統(tǒng),以及色譜分析儀進行遠程控制和遠程診斷,并對現(xiàn)場錄井設(shè)備進行數(shù)據(jù)采集和遠程傳輸。該系統(tǒng)目前已經(jīng)正式投入使用,顯著提高了錄井現(xiàn)場問題的處理效率。
4 結(jié) 語
本文設(shè)計并實現(xiàn)了一種基于MQTT的遠程數(shù)據(jù)采集與實時控制系統(tǒng),設(shè)計時引入了MQTT協(xié)議和訂閱/發(fā)布設(shè)計模式,提高了系統(tǒng)的響應(yīng)速度和可靠性。該系統(tǒng)目前已應(yīng)用于工程勘探、地球物理探測等領(lǐng)域,經(jīng)現(xiàn)場試驗后取得了良好的應(yīng)用效果,證明了該系統(tǒng)軟件架構(gòu)的穩(wěn)定性,為研發(fā)具備遠程數(shù)據(jù)采集和實時控制功能的物聯(lián)網(wǎng)軟件系統(tǒng)提供了借鑒思路。
參考文獻
[1]中國工業(yè)互聯(lián)網(wǎng)研究院.中國工業(yè)互聯(lián)網(wǎng)產(chǎn)業(yè)經(jīng)濟發(fā)展白皮書(2023年)[EB/OL].(2023-12-25).https://caiijs.webtrn.cn/cms/whaty_editor/jsp/upload/file/20231227/1703664546179014747.pdf.
[2]林滸,張家銘,楊海波.基于MQTT協(xié)議的即時消息業(yè)務(wù)設(shè)計與實現(xiàn)[J].計算機系統(tǒng)應(yīng)用,2017,26(3):219-224.
[3]王重楠,王宗陶,鮑忠貴,等.發(fā)布/訂閱模式測控消息中間件系統(tǒng)設(shè)計[J].計算機應(yīng)用,2015,35(3):878-881.
[4]于江浩.面向RDMA高性能網(wǎng)絡(luò)的消息中間件低延遲優(yōu)化研究[D].成都:電子科技大學(xué),2023.
[5]李航,董安明,禹繼國,等.基于前后端分離架構(gòu)的智慧農(nóng)業(yè)物聯(lián)網(wǎng)系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2022,45(14):63-68.
[6]楊開振,周吉文,梁華輝,等. Java EE互聯(lián)網(wǎng)輕量級框架整合開發(fā)[M].北京:電子工業(yè)出版社,2017:136-138.
[7]熊涵.基于Redis分布式消息隊列的報文過濾系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2021.
[8]高靜,段會川. JSON數(shù)據(jù)傳輸效率研究[J].計算機工程與設(shè)計,2011,32(7):2267-2270.
[9]樊榮,鄭剛,植耀玲.基于分表的閃電定位系統(tǒng)數(shù)據(jù)庫設(shè)計[J].計算機應(yīng)用,2021,41(z2):136-138.
[10]劉永戰(zhàn),劉信魯,姜景濤,等.一種網(wǎng)絡(luò)遠程測井實時數(shù)據(jù)傳輸系統(tǒng):CN. 202121029694.3 [P]. 2022-02-01.