曹小華 李泊桓 徐上尉
(武漢理工大學物流工程學院 湖北 武漢 430000)
隨著岸電技術、電能監控和計算機信息技術的不斷發展,針對港口岸電系統的船舶岸電監控系統及其相關研究也受到越來越多的重視[1-4]。船舶在靠港使用港口岸電時,需要對岸電設備的供電過程進行監控,缺失了這一環節,不僅浪費了大量有價值的岸電運行參數資料,而且也具有較大的安全隱患。對岸電系統的監控能夠有效地采集岸電設備的實時運行參數,同時還能在遠程監控平臺上看到岸電設備的用電信息,對其電力參數、環境參數、報警參數等信息進行實時監控,有利于港口岸電管理部門及時了解岸電現場的運行狀況,促進船舶岸電的信息化與智能化發展[5-9]。本文針對某港口岸電系統的現狀和實際需求,研究了船舶岸電監控系統的組成和架構,分析岸電監控系統需求,采用前沿的物聯網、云端技術及MQTT[10-12]通信協議,設計了適合港區岸電系統的遠程監控方案,實現岸電系統與岸電監控系統之間的信息交互功能,包括對岸電設備的地理位置監控、電能信息監控、報警信息監控、實時狀態監控、歷史數據查詢等功能,有助于港口岸電系統的信息化監測和管理,支撐船舶岸電系統的升級開發和智慧港口建設。
船舶岸電監控系統由兩個子系統構成,分別是現場數據采集系統和遠程監控系統,兩個系統間采用MQTT協議作為數據傳輸協議。對船舶岸電監控系統的總體架構設計從邏輯架構和物理架構兩個層面來描述。
船舶岸電監控系統運用邏輯分層的思想可將其架構上分為三層,分別是感知層、傳輸層、應用層,如圖1所示。

圖1 岸電監控系統邏輯分層架構
1) 感知層主要是對系統數據源進行數據采集、接入及處理。這些數據來自于岸電設備PLC作業控制程序內,包含了岸電系統運行時的各項基本數據。
2) 傳輸層是感知層與應用層之間溝通的橋梁,從感知層里采集到的數據通過MQTT通信協議傳輸到應用層。
3) 應用層實現了船舶岸電監控系統的各項監控功能需求,并設計了管理員移動端App,用于岸電設備管理員對所管控設備的實時狀態監控,并可根據需求修改岸電設備的系統參數。
船舶岸電監控系統運用物理分層的思想可將其架構分為兩層,分別是現場數據采集系統和遠程監控系統。現場數據采集系統的硬件組成為數據采集裝置,其由數據采集裝置1和數據采集裝置2組成。遠程監控系統硬件組成為云服務器、本地監控中心和管理員移動端三部分。岸電監控系統物理分層架構如圖2所示。
1) 現場岸電設備包括電源進線柜、岸基供電箱、電纜提升裝置,船舶岸電監控系統的監控對象是岸基供電箱和電纜提升裝置。
2) 現場數據采集系統負責對現場岸電設備的監控數據進行一體式采集傳輸,并執行岸電設備管理員下發的參數修改指令。其實現過程如下:數據采集裝置2采集電纜提升裝置的數據,并通過藍牙模塊將監控數據發送給數據采集裝置1,數據采集裝置1采集岸基供電箱的數據并接收數據采集裝置2發來的監控數據,將這兩部分數據匯集上傳實現對岸電設備監控數據的一體式采集傳輸。數據采集裝置1還可以接收岸電設備管理員下發的參數修改指令,解析指令內容后將其轉發給相連接的岸電設備PLC內的通信控制程序執行。
3) 遠程監控系統。遠程監控系統主要由云服務器、本地監控中心和管理員移動端三部分組成。云服務器負責運行MQTT消息服務器(MQTT Broker),并通過數據交互處理程序完成對監控數據的接收、解析和存儲。本地監控中心用于港口岸電管理部門對船舶岸電系統的遠程監控。管理員移動端用于岸電設備管理員對所管控設備的實時狀態監控,并可根據需求修改岸電設備的系統參數。
岸基供電箱工作時由其內部的西門子PLC(可編程邏輯控制器)來進行系統控制,系統運行時岸基供電箱設備的全部數據都儲存于PLC程序對應的數據塊中,岸基供電箱數據類型如表1所示。

表1 岸基供電箱采集數據類型
電纜提升裝置工作時由其內部的西門子PLC(可編程邏輯控制器)來進行系統控制,系統運行時電纜提升裝置的全部數據都儲存于PLC程序對應的數據塊中,電纜提升裝置數據類型如表2所示。

表2 電纜提升裝置采集數據類型
本文所采用的數據加密算法基于MD5信息摘要算法。MD5算法是由MD4算法導出,是一種被廣泛使用的密碼雜湊函數,其具有以下特性:
1) 易實現且不可逆:MD5算法實現起來流程比較簡易,被當前主流的編程語言所廣泛支持。但MD5算法是不可逆的,因為其使用的hash算法在計算過程中丟失了大量的原文信息,因此我們無法通過MD5值倒推還原原文。
2) 壓縮性:MD5算法能將任意長度的原文處理成統一的32位16進制字符串,相當于超損壓縮,所有原文經MD5算法處理后長度是一致的。
3) 抗修改性:原文出現任何改動,通過MD5算法處理后的MD5值都會有很大變化,因此可以看出原文是否被非法篡改。
4) 強抗碰撞:找到兩個不同的原文,使它們MD5值相同是很困難的。
船舶岸電監控系統中存在一些隱私性和安全性要求較高的數據,包括船舶用電數據、船舶用戶信息、岸電設備系統參數等,這些數據一旦被竊取或修改將會對船舶岸電系統造成重大損失和危害。雖然MQTT協議可以通過設置較高的消息服務質量等級來確保數據安全到達,但是消息傳輸過程中可能會被惡意劫持和篡改。常用于該協議消息傳輸中的安全協議為SSL(Secure Sockets Layer)/TLS(Transport Layer Security)協議,但SSL/TLS協議會占用大量資源且設備支持率不高。因此本文結合MQTT協議的特性,提出一種基于MD5算法的數據加密驗證方案,通過在MQTT消息發送和接收這兩個過程分別對其進行加密和驗證,實現以更低的成本和資源消耗來保障系統數據的安全傳輸。
系統消息分為現場設備監控數據和參數修改指令數據,它們都是由DeviceID、消息體和EncryptCheck組成的JSON數據,DeviceID為發送或接收消息的數據采集裝置編號。消息體在現場設備監控數據中由DataGDX和DataTS及GPSData三部分拼接組成,在參數修改指令數據中由ParaData組成。
EncryptCheck為加密驗簽,通過消息加密步驟生成,系統消息數據結構如圖3所示。

圖3 系統消息數據結構
消息傳輸加密驗證機制由消息加密過程和消息驗證過程兩部分組成,系統消息在發送階段進行加密,在消息接收階段進行驗證,驗證通過才接收消息,否則丟棄。消息加密過程和消息驗證過程原理與步驟如下。
1) 消息加密過程。消息加密過程采取如下思想:對消息的一部分數據拼接上一個特定的字符串進行MD5算法加密,生成一個固定長度為32位字符的EncryptCheck加密驗簽,將EncryptCheck與原有消息包裝成JSON格式發送,消息加密過程如圖4所示。

圖4 消息加密過程
消息加密過程具體加密步驟如下:
(1) 將系統消息中的DeviceID和消息體數據與加密字段PubTopic進行拼接,此PubTopic為該消息對應MQTT消息發布主題。
(2) 對拼接好的消息進行MD5算法加密處理,生成32位固定長度的EncryptCheck加密驗簽。
(3) 打包DeviceID、消息體和EncryptCheck,包裝成JSON格式后發送。
2) 消息驗證過程。消息驗證過程采用如下思想:消息驗證過程也要使用到數據加密。客戶端接收到消息后,首先切分出EncryptCheck作為原始驗簽,采用與消息加密過程一致的加密步驟進行加密,再次得到加密結果,將結果與原始驗簽進行比對,若一致,則消息驗證通過,若不一致則說明消息在傳輸過程中遭到了篡改或損壞,丟棄此條消息,消息驗證過程如圖5所示。

圖5 消息驗證過程示意圖
消息驗證過程具體步驟如下:
(1) 消息到達后查詢加密字段SubTopic,根據消息接收的對象分為兩種情況:當數據為現場設備監控數據時,接收對象為遠程監控系統,此時可通過程序查詢到達消息所對應的Topic屬性來獲取SubTopic;當數據為參數修改指令數據時,驗證對象為現場數據采集系統,此時SubTopic已燒錄進數據采集裝置程序中。對于MQTT消息傳輸模型,同一條消息在兩個客戶端間傳輸,發布者的消息發布主題PubTopic與訂閱者的消息訂閱主題SubTopic在內容上是相同的。
(2) 將要驗證的消息進行JSON解析,切分出DeviceID、消息體與SubTopic進行拼接,將EncryptCheck記為原始驗簽。
(3) 將拼接好的消息進行MD5算法加密,生成臨時驗簽。
(4) 比對臨時驗簽與原始驗簽,若二者一致,則說明消息在傳輸過程中未發生變化,接收消息;否則說明消息被惡意篡改,丟棄消息。
本文設計的消息傳輸加密驗證機制的主要思想如下:在數據發送和數據接收兩個階段對消息進行同樣的加密步驟,再比對這兩個階段的加密結果,來驗證消息在傳輸過程中是否被破壞或惡意篡改。
為增加消息加密驗證機制的兼容性和安全性,可以對消息處理算法進一步設計,設計增加雙重MD5加密算法以及先SHA-1加密,再MD5加密算法,規定根據不同的消息主題使用不同的算法。
在船舶岸電監控系統中,現場數據采集系統與遠程監控系統之間的數據交互處理方案是系統設計的重點。本文以MQTT協議和云服務器為基礎,設計了云端數據交互處理總體方案,保障了現場設備監控數據和參數修改指令數據的安全、高效和穩定地傳輸,云端數據交互處理方案架構如圖6所示。

圖6 云端數據交互處理方案架構
云端數據交互處理架構由MQTT客戶端、MQTT Broker、數據交互處理程序、MySQL數據庫組成。
MQTT客戶端存在于四個位置:數據采集裝置創建的MQTT客戶端負責上傳現場設備監控數據并接收參數修改指令數據;云服務器創建的MQTT客戶端用于接收現場設備監控數據并解析處理并存儲;本地監控中心創建的MQTT客戶端用于接收現場設備監控數據來對岸電設備進行實時監控;管理員移動端App創建的MQTT客戶端用于接收現場設備監控數據來對所管控的岸電設備進行實時監控,并發布參數修改指令數據到系統參數修改主題,完成對岸電設備系統參數的修改。
MQTT Broker位于云服務器上,船舶岸電監控系統采用一個MQTT Boker來實現系統的數據的緩存分發,MQTT Broker上存在兩個消息主題,分別是現場設備監控主題和系統參數修改主題。
數據交互處理程序也位于云服務器上,用來對現場設備監控數據接收、解析并將這些數據分類存儲進MySQL數據庫中,同時對供電記錄進行每日、每月、每年定時匯總計算并存儲進MySQL數據庫中。
MySQL數據庫存在于云服務器和本地監控中心上,云服務器上的作為主數據庫,本地監控中心上的作為從數據庫,并配置數據庫的主從同步和讀寫分離。
本方案通過使用MQTT協議的發布訂閱模式和消息服務質量保證了系統數據傳輸的靈活性和安全性。通過使用云端服務器長期工作的穩定性來保障了系統數據的長期不間斷安全存儲。
在本文設計的船舶岸電監控系統中,系統數據交互性能決定著整個系統的使用性能,系統數據交互性能由系統數據交互的可靠性和MySQL數據庫的并發響應性能決定,遠程監控系統能否可靠且高效地存儲現場設備監控數據將是系統可用性判斷的重要依據。
首先對整個系統數據交互可靠性進行測試,測試用例表如表3所示。

表3 系統數據交互可靠性測試用例表
測試結果與預期一致,數據存儲成功率為100%,表明系統數據交互性能符合使用需求,能夠保證遠程監控系統安全可靠地存儲現場設備監控數據。
系統MySQL數據庫的并發訪問性能決定了系統的抗壓能力和用戶流量上限,采用MySQL自帶的壓力測試工具mysqlslap對云服務器上的主數據庫進行并發訪問性能測試,mysqlslap的測試原理為通過模擬用戶并發登入使用數據庫,利用mysqlslap的查詢語句同時向數據庫發出查詢更新測試,根據結果得到的響應時間來判斷數據庫的并發響應能力,測試用例表如表4所示。

表4 MySQL并發訪問性能測試用例表
10個用戶并發訪問,查詢字段中含有“test10”屬性的所有資源的id,查詢10次,mysqlslap的測試命令如下:
shell 依次執行10次、20次、30次、40次和50次的壓力測試,得到MySQL并發訪問性能測試數據如表5所示。 表5 MySQL并發訪問響應時間表 可以看出,在并發量為50的時候,系統的最長響應時間和平均響應時間較短,具有良好的響應性。本文設計的船舶岸電監控系統監控對象為委托港口10個泊位的岸電設備,因此本系統的MySQL數據庫并發訪問性能能夠滿足系統需求。 完成MySQL數據庫和系統數據交互性能測試之后,需要對岸電系統設備進行地理位置顯示。遠程監控系統的設備地理位置監控模塊通過使用GPS定位模塊和百度地圖API,實現了對設備地理位置的采集和地圖顯示,方便了港口岸電管理部門和岸電設備管理員對岸電設備的地理位置監控。 首先需要將獲得的原始GPS數據轉化成百度GPS坐標,隨后在百度地圖開放平臺上注冊用戶并創建應用獲得AK碼,接著使用JavaScript編寫.htm網頁文件,在.htm文件中創建XML解析器并添加百度地圖界面及其他可視化控件,并將AK碼注入代碼中用于程序的連接與認證,最后在JS代碼中編寫function函數方法實現輸入百度地圖GPS坐標后在界面中顯示地理位置信息,最終實驗測試地圖顯示如圖7所示。 圖7 岸電系統云平臺地理監控界面 在岸電監控系統測試完成之后,正式運行后可以得到圖7所示的云平臺地理監控界面和圖8所示的岸電系統設備電能信息統計界面。 圖8 設備電能信息監控界面 由以上的數據庫性能測試和岸電設備地理位置監控界面以及返回岸電系統實時數據可以驗證該岸電監控系統能夠針對港口岸電系統發揮作用,實時監控岸電設備、按時返回設備及供電相關信息,能夠幫助實現港口岸電系統的信息化監測和管理。 本文基于MQTT協議設計并實現一種基于MQTT協議的物聯網岸電監控系統。本文主要完成了以下工作:1) 提出一種基于MQTT協議和云端的數據交互技術,利用邏輯分層與物理分層思想劃分了監控系統的總體架構。2) 設計適用于岸電監控場景的MQTT消息主題和消息數據格式,采用MD5信息摘要算法設計了數據傳輸的完整性驗證機制,使用MySQL設計云端數據庫,實現了現場數據采集系統和遠程監控系統之間安全、穩定、可靠的數據傳輸。3) 通過功能測試對岸電監控系統進行實際功能測試。 由于岸電監控系統的復雜性和不確定性因素太多,設計的系統仍存在不足,需要進一步改進。下一階段需要進行完善的內容如下:1) 開發更具通用性的基于微信小程序的管理員移動端小程序,來實現管理員對所管控岸電設備的實時監控和系統參數修改功能。2) 本文設計的船舶岸電監控平臺是桌面級應用,不具備Web應用所具有的跨平臺可用性和移動性。


4 結 語