諶華金,喻敏敏,馬洪波,高軍保,錢漢明
(中船海洋探測技術(shù)研究院有限公司 研發(fā)中心,江蘇 無錫 214000)
海洋面積遼闊,資源豐富[1],對人類的發(fā)展具有舉足輕重的作用。海洋科學(xué)技術(shù)的研究對環(huán)境保護、災(zāi)害預(yù)警、生態(tài)循環(huán)、資源開發(fā)和可持續(xù)發(fā)展至關(guān)重要。但由于海洋的水下環(huán)境與陸地迥異,科學(xué)勘探、監(jiān)測保護和可持續(xù)利用開發(fā)難度大,人類目前對海洋的認識和探測手段也極其有限。加快開發(fā)和利用海洋資源,促進自身發(fā)展已成為世界各國的戰(zhàn)略目標[2]。
海底觀測網(wǎng)絡(luò)由于具備對海底、水體等復(fù)雜水下環(huán)境的連續(xù)、實時、原位觀測能力,并能實現(xiàn)跨學(xué)科、多要素綜合觀測,成為了海洋科學(xué)技術(shù)研究的熱點和重要技術(shù)手段。世界各國爭先建立起眾多海底觀測網(wǎng)絡(luò)[3-6],廣泛應(yīng)用于軍用、民用領(lǐng)域。
接駁盒是海底觀測網(wǎng)絡(luò)的重要節(jié)點和核心裝備[7],包括主接駁盒、次接駁盒、濕插拔、水下電源模塊、海底光電復(fù)合纜等。其中,主接駁盒實現(xiàn)對岸站高壓電源的高低轉(zhuǎn)換,為次接駁盒、傳感器提供通信和電力接口,次接駁盒也可以外接傳感器采集各類數(shù)據(jù)。系統(tǒng)依靠設(shè)備內(nèi)部的嵌入式軟件監(jiān)測、采集水下設(shè)備的實時數(shù)據(jù)和狀態(tài)信息,上傳接駁盒上位機軟件供用戶研究分析,并接收接駁盒上位機軟件指令對水下設(shè)備進行控制調(diào)優(yōu),以保證軟硬件系統(tǒng)能夠長期穩(wěn)定運行。
海底觀測網(wǎng)接駁盒上位機軟件主要包括后臺服務(wù)軟件和前端界面軟件兩部分。借鑒文獻[8-10]的設(shè)計實現(xiàn)方法,提出本項目接駁盒上位機軟件總體架構(gòu),如圖1所示。后臺服務(wù)軟件(以下簡稱服務(wù)軟件)部署于Linux服務(wù)器(操作系統(tǒng)為CentOS release 7.7,64位),主要用于監(jiān)測和控制岸基站高壓電源,岸站服務(wù)器,水下主、次接駁盒,接駁盒外接傳感器以及岸站和水下通信設(shè)備。通過對這些設(shè)備運行參數(shù)和環(huán)境變量參數(shù)的采集、解析、存儲管理,進而讓用戶方便地查看實時數(shù)據(jù)或?qū)v史數(shù)據(jù)進行調(diào)閱和統(tǒng)計分析,掌握諸多設(shè)備的運行情況、設(shè)備運行所處環(huán)境的情況,并可對設(shè)備故障及時上報、告警,供前端界面軟件展示輸出或者以手機短信、郵件、微信等方式推送給運維人員,以便運維人員及時處置。
圖1 軟件總體架構(gòu)
服務(wù)軟件與岸基站高壓電源以TCP Socket方式通信,依據(jù)廠家自定義的通信協(xié)議實現(xiàn)對輸出電壓(含電源電壓和相電壓)、輸出電流、機柜和水冷板溫濕度等運行狀態(tài)數(shù)據(jù)和故障告警信息的實時采集監(jiān)控,同步輸出到前端界面軟件,并批量加載到后臺數(shù)據(jù)庫供后期排查故障、生成統(tǒng)計報表和分析歷史數(shù)據(jù)。同時服務(wù)軟件還可以對岸基站高壓電源進行控制,實現(xiàn)遙控開關(guān)電源、切換操作模式、操控水冷機、復(fù)位故障等功能。
服務(wù)軟件與主、次接駁盒以TCP Socket方式通信,采用類MODBUS或各傳感器廠家自定義的通信協(xié)議進行報文交互。對主、次接駁盒電子艙內(nèi)溫濕度、氣壓、漏水檢測、絕緣電阻、各接口通斷信息、各接口輸出電壓電流、艙體姿態(tài)信息以及電源艙內(nèi)輸入輸出電壓電流、油壓、溫濕度、漏水檢測、故障告警信息等參數(shù)進行實時采集監(jiān)測,也可以依據(jù)外接傳感器的通信協(xié)議采集相應(yīng)專業(yè)化數(shù)據(jù)(如海水的溫度、鹽度、密度、pH值、溶解氧濃度、水聲、振動等),并同步輸出到前端界面軟件,批量加載到后臺數(shù)據(jù)庫。服務(wù)軟件還可對主、次接駁盒執(zhí)行各接口通斷使能、喚醒與休眠、報警閾值調(diào)整、數(shù)據(jù)采集頻率調(diào)整等控制指令。
服務(wù)軟件與通信設(shè)備測試儀器以TCP Socket方式通信,用于路由器、交換機、光纖等通信設(shè)備性能監(jiān)測測試。這類測試依賴于相應(yīng)設(shè)備的專用協(xié)議或者廠家自定義的協(xié)議,過程復(fù)雜,得到的數(shù)據(jù)種類繁多、數(shù)據(jù)量也較大。
服務(wù)軟件與前端界面軟件采用B/S架構(gòu)實現(xiàn),以WebSocket方式通信,依據(jù)自定義的通信協(xié)議對設(shè)備狀態(tài)信息、控制指令、故障告警信息進行數(shù)據(jù)交換。
(1)狀態(tài)信息:如岸基站高壓電源運行狀態(tài)數(shù)據(jù),主、次接駁盒以及外接傳感器的實時狀態(tài)數(shù)據(jù),通信設(shè)備狀態(tài)信息,岸站各服務(wù)器運行狀態(tài)信息(CPU、內(nèi)存利用率,磁盤剩余空間,磁盤讀寫速度及網(wǎng)卡發(fā)送/接收速率等)。
(2)控制指令:如岸基站高壓電源控制指令,主、次接駁盒以及外接傳感器的控制指令。
(3)故障告警信息:如岸基站高壓電源故障告警信息,主、次接駁盒以及外接傳感器故障告警信息,通信設(shè)備故障告警信息以及岸基站服務(wù)器故障告警信息。
考慮到項目成本、數(shù)據(jù)規(guī)模、存儲周期以及系統(tǒng)復(fù)雜度,現(xiàn)階段采用單臺數(shù)據(jù)庫服務(wù)器(MySQL 5.7,Linux版)。服務(wù)軟件設(shè)計有線程類,用于保存實時采集的數(shù)據(jù)或者控制命令執(zhí)行情況,采用批量加載技術(shù)以減少對數(shù)據(jù)庫的頻繁寫操作并提高穩(wěn)定性。先將前期預(yù)處理后的數(shù)據(jù)緩存到內(nèi)存,當緩存數(shù)據(jù)達到一定量級后,一次性加載到數(shù)據(jù)庫。
前端界面軟件在登錄、注銷、對數(shù)據(jù)庫進行增刪改操作、查詢歷史數(shù)據(jù)時,都要通過服務(wù)軟件才能訪問數(shù)據(jù)庫,從而實現(xiàn)相應(yīng)功能。并且由于涉及光纖實時數(shù)據(jù)查詢、其他歷史數(shù)據(jù)查詢事件等,數(shù)據(jù)量較大,因此服務(wù)軟件與前端界面軟件客戶端中的每一個WebSocket連接采用不同的數(shù)據(jù)庫連接對數(shù)據(jù)庫進行操作,確保各客戶端高效同步運行,互不干擾。
為提高服務(wù)軟件資源利用率和數(shù)據(jù)加載到數(shù)據(jù)庫的速率以及前端界面軟件的登錄、注銷、數(shù)據(jù)查詢響應(yīng)速度,服務(wù)軟件采用多線程技術(shù)設(shè)計實現(xiàn),主要包括以下子線程。
(1)主、次接駁盒通信子線程:本項目主、次接駁盒與服務(wù)軟件建立的TCP連接僅有6個,并且每個TCP連接每秒傳輸?shù)臄?shù)據(jù)量最大不超過1 200 B,一般情況下每秒不超過400 B。為此設(shè)計1個子線程統(tǒng)一處理主、次各接駁盒的通信交互,實現(xiàn)數(shù)據(jù)的上傳下達。
(2)主、次接駁盒外接傳感器子線程:主、次接駁盒外接傳感器主要通過串口(連接串口服務(wù)器可實現(xiàn)網(wǎng)口通信)、網(wǎng)口、光纖等與服務(wù)軟件建立TCP連接,針對傳感器數(shù)據(jù)量較大、實時響應(yīng)要求高的特點,為每個TCP連接建立1個子線程實現(xiàn)通信交互。
(3)通信設(shè)備子線程:這類通信處理的數(shù)據(jù)種類繁多、數(shù)據(jù)量較大,加之前端界面軟件對實時響應(yīng)要求較高,為此專門設(shè)計子線程進行處理。
(4)前端界面軟件通信子線程:考慮到前端界面軟件可能從服務(wù)軟件獲取大量數(shù)據(jù),且用戶對前端界面實時響應(yīng)速度要求較高,因此專為每個WebSocket連接建立了子線程,確保各前端界面軟件高效同步運行,互不干擾。
(5)數(shù)據(jù)庫訪問子線程:該線程主要是為了提高數(shù)據(jù)庫訪問速度,避免受其他線程影響而設(shè)計的,特別是批量加載數(shù)據(jù)耗時較長,因此獨立設(shè)計該線程。
為實時監(jiān)測光纖的狀態(tài)參數(shù),項目組采用某公司出品的光時域反射儀,該儀器自動化程度高,具有高速信號處理、測量時間短、結(jié)果分析快等優(yōu)點,并且采用無硬盤設(shè)計,防振、防潮,適合復(fù)雜、野外環(huán)境操作。其自帶的RJ 45網(wǎng)口可實現(xiàn)與服務(wù)器、工控機及PC機的通信,實現(xiàn)光纖狀態(tài)的實時測試與維護。服務(wù)軟件獲取光纖測試數(shù)據(jù)流程如下:
(1)手動修改光時域反射儀IP地址,使服務(wù)軟件所在的工控機實現(xiàn)網(wǎng)絡(luò)通信,該步驟僅限服務(wù)軟件首次獲取光纖測試數(shù)據(jù)時才會用到。
(2)手動修改光時域反射儀測量時間(默認值較長,可以修改)等參數(shù),該步驟僅限服務(wù)軟件首次獲取光纖測試數(shù)據(jù)時才會用到。
(3)服務(wù)軟件作為TCP連接客戶端與光時域反射儀。
(4)服務(wù)軟件發(fā)送通信握手命令,打開儀器的網(wǎng)口通信功能。
(5)服務(wù)軟件發(fā)送讀取光時域反射儀IP地址、網(wǎng)關(guān)、子網(wǎng)掩碼等基本配置信息的命令。
(6)服務(wù)軟件發(fā)送測量請求命令。
(7)服務(wù)軟件依據(jù)接收的測量請求應(yīng)答報文作不同處理,如果光時域反射儀正在測量中,則服務(wù)軟件等待5 s,然后轉(zhuǎn)步驟(6),繼續(xù)發(fā)送測量請求命令;如果光時域反射儀處于空閑等待狀態(tài),則進入步驟(8),發(fā)送自動測量請求命令。
(8)服務(wù)軟件發(fā)送自動測量請求命令。(9)服務(wù)軟件發(fā)送讀取數(shù)據(jù)請求命令。
(10)服務(wù)軟件依據(jù)接收到的讀取數(shù)據(jù)請求應(yīng)答報文作不同處理,如果光時域反射儀正在測量中,不能讀取數(shù)據(jù),則服務(wù)軟件等待10 s,然后轉(zhuǎn)步驟(9),繼續(xù)發(fā)送讀取數(shù)據(jù)請求命令;如果光時域反射儀測量結(jié)束,則轉(zhuǎn)步驟(11),直接讀取測量結(jié)果;如果光時域反射儀反饋的應(yīng)答報文為其他形式,則說明測量結(jié)果有問題或者測量異常被終止,測量無效,服務(wù)軟件主動斷開TCP連接,等待10 s后轉(zhuǎn)步驟(3),重新與光時域反射儀建立TCP連接。
(11)服務(wù)軟件發(fā)送讀取光纖長度測量結(jié)果命令,獲得光纖長度數(shù)據(jù)。
(12)服務(wù)軟件發(fā)送讀取光纖功率曲線數(shù)據(jù)命令,由服務(wù)軟件發(fā)送命令獲得光纖功率曲線數(shù)據(jù)的總數(shù)據(jù)包數(shù)和數(shù)據(jù)的總個數(shù),然后按照數(shù)據(jù)包號從小到大依次發(fā)送讀取光纖功率曲線數(shù)據(jù)命令,讀取每個數(shù)據(jù)包的功率曲線數(shù)據(jù)。光時域反射儀反饋的最后一個數(shù)據(jù)包可能會有多余無效數(shù)據(jù),最后根據(jù)獲得的功率曲線數(shù)據(jù)和數(shù)據(jù)的總個數(shù),剔除最后一個數(shù)據(jù)包中的無效數(shù)據(jù)。
(13)服務(wù)軟件發(fā)送讀取事件參數(shù)命令,首先由服務(wù)軟件發(fā)送命令獲得事件數(shù)據(jù)包總數(shù)和事件的總個數(shù),然后按照事件數(shù)據(jù)包號從小到大依次發(fā)送讀取事件數(shù)據(jù)命令,讀取每個數(shù)據(jù)包的事件數(shù)據(jù)。
(14)測量結(jié)束,服務(wù)軟件主動斷開與光時域反射儀的TCP連接,并通過WebSocket主動將獲得的光纖長度數(shù)據(jù)、光纖功率曲線數(shù)據(jù)、光纖事件參數(shù)等傳給前端界面軟件,供其繪制二維圖形、電子表格,并進行界面展示。
考慮項目在實際應(yīng)用中,對主、次接駁盒上傳數(shù)據(jù)的可靠性和連續(xù)性要求高,特別是故障告警信息和控制命令,而TCP自帶的心跳包機制無法及時檢測到網(wǎng)線拔出、機器斷電、操作系統(tǒng)故障、防火墻斷線等突發(fā)情況。項目中設(shè)計實現(xiàn)了自定義心跳包機制,由服務(wù)軟件每2 s定時向主、次接駁盒發(fā)送心跳包短報文,以便主、次接駁盒及時掌握實時通信狀態(tài),確保TCP連接的有效性,降低數(shù)據(jù)丟失概率。
參考文獻[11-12]的方法,服務(wù)軟件與主、次接駁盒通信采用自定義、類MODBUS協(xié)議設(shè)計,格式如圖2所示。
圖2 通信協(xié)議格式
通信協(xié)議幀頭為2 B,接駁盒地址為1 B,每個主、次接駁盒(指電子艙、電源艙)有唯一的地址,通道編號為1 B,指數(shù)據(jù)上傳所用通道。數(shù)據(jù)幀類型為1 B,主要分為數(shù)據(jù)幀、控制命令幀、心跳信號幀、控制命令反饋幀等類別。數(shù)據(jù)幀長度為1 B,表示數(shù)據(jù)幀內(nèi)容字節(jié)長度,數(shù)據(jù)幀內(nèi)容為具體數(shù)據(jù)。CRC校驗碼為2 B,采用CRC-16算法進行檢錯校驗。
服務(wù)軟件與前端界面軟件涉及大量的網(wǎng)絡(luò)報文交換,如前端界面軟件查詢主、次接駁盒實時數(shù)據(jù),查詢主、次接駁盒外接傳感器數(shù)據(jù),下發(fā)控制命令,服務(wù)軟件主動上報系統(tǒng)故障信息、反饋控制命令執(zhí)行結(jié)果等,本項目采用自定義的、特定格式的JSON字符串實現(xiàn)。
項目中用到的數(shù)據(jù)庫表主要有用戶表,權(quán)限表,設(shè)備信息表,故障類型表,主、次接駁盒數(shù)據(jù)表,主、次接駁盒外接傳感器數(shù)據(jù)表,故障告警表等,主要庫表結(jié)構(gòu)見表1所列。
表1 數(shù)據(jù)庫表結(jié)構(gòu)
為驗證所設(shè)計的服務(wù)軟件的連續(xù)運行穩(wěn)定性、可靠性,項目組進行了軟硬件聯(lián)調(diào)實驗。將服務(wù)軟件部署于岸上控制機柜中的工控機中,前端界面軟件分別部署于岸上控制機柜中的工控機、岸上普通臺式辦公電腦、岸上便攜式筆記本電腦3個終端中,前端界面軟件部署采用的電腦操作系統(tǒng)均為Windows 7企業(yè)版。
主、次接駁盒及外界傳感器在陸上經(jīng)過幾個月的連續(xù)測試運行,在水池中進行了為期1個月的測試運行,順利通過了天津國家海洋技術(shù)中心組織的現(xiàn)場測試,系統(tǒng)綜合測評結(jié)果在國內(nèi)處于領(lǐng)先。在這些軟硬件聯(lián)調(diào)實驗過程中,服務(wù)軟件、前端界面軟件各子模塊均能正常、穩(wěn)定運行,各類數(shù)據(jù)無丟失,采集的數(shù)據(jù)、故障告警信息可及時上報輸出。實驗結(jié)果表明:所設(shè)計的服務(wù)軟件完全可以在實驗室環(huán)境下進行長期且連續(xù)的實時在線監(jiān)測控制及故障告警。
文中設(shè)計了一種基于物聯(lián)網(wǎng)技術(shù)的海底觀測網(wǎng)服務(wù)軟件,詳細闡述了系統(tǒng)軟件的總體架構(gòu)、通信協(xié)議和數(shù)據(jù)庫表結(jié)構(gòu)及多線程實現(xiàn)等關(guān)鍵技術(shù)。經(jīng)過陸上和水池的軟硬件聯(lián)調(diào)實驗,驗證了服務(wù)軟件能夠?qū)崿F(xiàn)對各類設(shè)備的數(shù)據(jù)采集、處理、存儲管理以及前端界面軟件展示輸出。實驗室環(huán)境的長期運行檢驗了服務(wù)軟件的穩(wěn)定性、可靠性和實用性。
但需要指出的是,該軟件目前是在實驗室環(huán)境下部署測試的,沒有在高壓艙等模擬深海環(huán)境下以及真實海上水下環(huán)境進行長期、連續(xù)的軟硬件聯(lián)調(diào)實驗,因此其穩(wěn)定性、可靠性有待進一步深入研究。并且目前的前端界面軟件并發(fā)用戶數(shù)較少,接駁盒以及外接傳感器中的底層嵌入式軟件上傳的數(shù)據(jù)量也較小,服務(wù)軟件負載壓力不大。隨著數(shù)據(jù)量和并發(fā)用戶數(shù)的增加,服務(wù)軟件必須結(jié)合消息中間件、負載均衡技術(shù),利用集群技術(shù)或者分布式系統(tǒng)方案才能解決大數(shù)據(jù)處理問題。同時,目前的數(shù)據(jù)庫是單庫,數(shù)據(jù)可靠性和冗余備份存在問題,擴展性和性能上也存在瓶頸,隨著業(yè)務(wù)數(shù)據(jù)和聯(lián)機事務(wù)的增加,性能將有所下降。下一步將運用集群數(shù)據(jù)庫提高系統(tǒng)性能,另外還會對重要數(shù)據(jù)做加密處理,確保數(shù)據(jù)安全可靠。