諶華金,喻敏敏,馬洪波,高軍保,錢(qián)漢明
(中船海洋探測(cè)技術(shù)研究院有限公司 研發(fā)中心,江蘇 無(wú)錫 214000)
海洋面積遼闊,資源豐富[1],對(duì)人類的發(fā)展具有舉足輕重的作用。海洋科學(xué)技術(shù)的研究對(duì)環(huán)境保護(hù)、災(zāi)害預(yù)警、生態(tài)循環(huán)、資源開(kāi)發(fā)和可持續(xù)發(fā)展至關(guān)重要。但由于海洋的水下環(huán)境與陸地迥異,科學(xué)勘探、監(jiān)測(cè)保護(hù)和可持續(xù)利用開(kāi)發(fā)難度大,人類目前對(duì)海洋的認(rèn)識(shí)和探測(cè)手段也極其有限。加快開(kāi)發(fā)和利用海洋資源,促進(jìn)自身發(fā)展已成為世界各國(guó)的戰(zhàn)略目標(biāo)[2]。
海底觀測(cè)網(wǎng)絡(luò)由于具備對(duì)海底、水體等復(fù)雜水下環(huán)境的連續(xù)、實(shí)時(shí)、原位觀測(cè)能力,并能實(shí)現(xiàn)跨學(xué)科、多要素綜合觀測(cè),成為了海洋科學(xué)技術(shù)研究的熱點(diǎn)和重要技術(shù)手段。世界各國(guó)爭(zhēng)先建立起眾多海底觀測(cè)網(wǎng)絡(luò)[3-6],廣泛應(yīng)用于軍用、民用領(lǐng)域。
接駁盒是海底觀測(cè)網(wǎng)絡(luò)的重要節(jié)點(diǎn)和核心裝備[7],包括主接駁盒、次接駁盒、濕插拔、水下電源模塊、海底光電復(fù)合纜等。其中,主接駁盒實(shí)現(xiàn)對(duì)岸站高壓電源的高低轉(zhuǎn)換,為次接駁盒、傳感器提供通信和電力接口,次接駁盒也可以外接傳感器采集各類數(shù)據(jù)。系統(tǒng)依靠設(shè)備內(nèi)部的嵌入式軟件監(jiān)測(cè)、采集水下設(shè)備的實(shí)時(shí)數(shù)據(jù)和狀態(tài)信息,上傳接駁盒上位機(jī)軟件供用戶研究分析,并接收接駁盒上位機(jī)軟件指令對(duì)水下設(shè)備進(jìn)行控制調(diào)優(yōu),以保證軟硬件系統(tǒng)能夠長(zhǎng)期穩(wěn)定運(yùn)行。
海底觀測(cè)網(wǎng)接駁盒上位機(jī)軟件主要包括后臺(tái)服務(wù)軟件和前端界面軟件兩部分。借鑒文獻(xiàn)[8-10]的設(shè)計(jì)實(shí)現(xiàn)方法,提出本項(xiàng)目接駁盒上位機(jī)軟件總體架構(gòu),如圖1所示。后臺(tái)服務(wù)軟件(以下簡(jiǎn)稱服務(wù)軟件)部署于Linux服務(wù)器(操作系統(tǒng)為CentOS release 7.7,64位),主要用于監(jiān)測(cè)和控制岸基站高壓電源,岸站服務(wù)器,水下主、次接駁盒,接駁盒外接傳感器以及岸站和水下通信設(shè)備。通過(guò)對(duì)這些設(shè)備運(yùn)行參數(shù)和環(huán)境變量參數(shù)的采集、解析、存儲(chǔ)管理,進(jìn)而讓用戶方便地查看實(shí)時(shí)數(shù)據(jù)或?qū)v史數(shù)據(jù)進(jìn)行調(diào)閱和統(tǒng)計(jì)分析,掌握諸多設(shè)備的運(yùn)行情況、設(shè)備運(yùn)行所處環(huán)境的情況,并可對(duì)設(shè)備故障及時(shí)上報(bào)、告警,供前端界面軟件展示輸出或者以手機(jī)短信、郵件、微信等方式推送給運(yùn)維人員,以便運(yùn)維人員及時(shí)處置。

圖1 軟件總體架構(gòu)
服務(wù)軟件與岸基站高壓電源以TCP Socket方式通信,依據(jù)廠家自定義的通信協(xié)議實(shí)現(xiàn)對(duì)輸出電壓(含電源電壓和相電壓)、輸出電流、機(jī)柜和水冷板溫濕度等運(yùn)行狀態(tài)數(shù)據(jù)和故障告警信息的實(shí)時(shí)采集監(jiān)控,同步輸出到前端界面軟件,并批量加載到后臺(tái)數(shù)據(jù)庫(kù)供后期排查故障、生成統(tǒng)計(jì)報(bào)表和分析歷史數(shù)據(jù)。同時(shí)服務(wù)軟件還可以對(duì)岸基站高壓電源進(jìn)行控制,實(shí)現(xiàn)遙控開(kāi)關(guān)電源、切換操作模式、操控水冷機(jī)、復(fù)位故障等功能。
服務(wù)軟件與主、次接駁盒以TCP Socket方式通信,采用類MODBUS或各傳感器廠家自定義的通信協(xié)議進(jìn)行報(bào)文交互。對(duì)主、次接駁盒電子艙內(nèi)溫濕度、氣壓、漏水檢測(cè)、絕緣電阻、各接口通斷信息、各接口輸出電壓電流、艙體姿態(tài)信息以及電源艙內(nèi)輸入輸出電壓電流、油壓、溫濕度、漏水檢測(cè)、故障告警信息等參數(shù)進(jìn)行實(shí)時(shí)采集監(jiān)測(cè),也可以依據(jù)外接傳感器的通信協(xié)議采集相應(yīng)專業(yè)化數(shù)據(jù)(如海水的溫度、鹽度、密度、pH值、溶解氧濃度、水聲、振動(dòng)等),并同步輸出到前端界面軟件,批量加載到后臺(tái)數(shù)據(jù)庫(kù)。服務(wù)軟件還可對(duì)主、次接駁盒執(zhí)行各接口通斷使能、喚醒與休眠、報(bào)警閾值調(diào)整、數(shù)據(jù)采集頻率調(diào)整等控制指令。
服務(wù)軟件與通信設(shè)備測(cè)試儀器以TCP Socket方式通信,用于路由器、交換機(jī)、光纖等通信設(shè)備性能監(jiān)測(cè)測(cè)試。這類測(cè)試依賴于相應(yīng)設(shè)備的專用協(xié)議或者廠家自定義的協(xié)議,過(guò)程復(fù)雜,得到的數(shù)據(jù)種類繁多、數(shù)據(jù)量也較大。
服務(wù)軟件與前端界面軟件采用B/S架構(gòu)實(shí)現(xiàn),以WebSocket方式通信,依據(jù)自定義的通信協(xié)議對(duì)設(shè)備狀態(tài)信息、控制指令、故障告警信息進(jìn)行數(shù)據(jù)交換。
(1)狀態(tài)信息:如岸基站高壓電源運(yùn)行狀態(tài)數(shù)據(jù),主、次接駁盒以及外接傳感器的實(shí)時(shí)狀態(tài)數(shù)據(jù),通信設(shè)備狀態(tài)信息,岸站各服務(wù)器運(yùn)行狀態(tài)信息(CPU、內(nèi)存利用率,磁盤(pán)剩余空間,磁盤(pán)讀寫(xiě)速度及網(wǎng)卡發(fā)送/接收速率等)。
(2)控制指令:如岸基站高壓電源控制指令,主、次接駁盒以及外接傳感器的控制指令。
(3)故障告警信息:如岸基站高壓電源故障告警信息,主、次接駁盒以及外接傳感器故障告警信息,通信設(shè)備故障告警信息以及岸基站服務(wù)器故障告警信息。
考慮到項(xiàng)目成本、數(shù)據(jù)規(guī)模、存儲(chǔ)周期以及系統(tǒng)復(fù)雜度,現(xiàn)階段采用單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器(MySQL 5.7,Linux版)。服務(wù)軟件設(shè)計(jì)有線程類,用于保存實(shí)時(shí)采集的數(shù)據(jù)或者控制命令執(zhí)行情況,采用批量加載技術(shù)以減少對(duì)數(shù)據(jù)庫(kù)的頻繁寫(xiě)操作并提高穩(wěn)定性。先將前期預(yù)處理后的數(shù)據(jù)緩存到內(nèi)存,當(dāng)緩存數(shù)據(jù)達(dá)到一定量級(jí)后,一次性加載到數(shù)據(jù)庫(kù)。
前端界面軟件在登錄、注銷(xiāo)、對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改操作、查詢歷史數(shù)據(jù)時(shí),都要通過(guò)服務(wù)軟件才能訪問(wèn)數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)相應(yīng)功能。并且由于涉及光纖實(shí)時(shí)數(shù)據(jù)查詢、其他歷史數(shù)據(jù)查詢事件等,數(shù)據(jù)量較大,因此服務(wù)軟件與前端界面軟件客戶端中的每一個(gè)WebSocket連接采用不同的數(shù)據(jù)庫(kù)連接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,確保各客戶端高效同步運(yùn)行,互不干擾。
為提高服務(wù)軟件資源利用率和數(shù)據(jù)加載到數(shù)據(jù)庫(kù)的速率以及前端界面軟件的登錄、注銷(xiāo)、數(shù)據(jù)查詢響應(yīng)速度,服務(wù)軟件采用多線程技術(shù)設(shè)計(jì)實(shí)現(xiàn),主要包括以下子線程。
(1)主、次接駁盒通信子線程:本項(xiàng)目主、次接駁盒與服務(wù)軟件建立的TCP連接僅有6個(gè),并且每個(gè)TCP連接每秒傳輸?shù)臄?shù)據(jù)量最大不超過(guò)1 200 B,一般情況下每秒不超過(guò)400 B。為此設(shè)計(jì)1個(gè)子線程統(tǒng)一處理主、次各接駁盒的通信交互,實(shí)現(xiàn)數(shù)據(jù)的上傳下達(dá)。
(2)主、次接駁盒外接傳感器子線程:主、次接駁盒外接傳感器主要通過(guò)串口(連接串口服務(wù)器可實(shí)現(xiàn)網(wǎng)口通信)、網(wǎng)口、光纖等與服務(wù)軟件建立TCP連接,針對(duì)傳感器數(shù)據(jù)量較大、實(shí)時(shí)響應(yīng)要求高的特點(diǎn),為每個(gè)TCP連接建立1個(gè)子線程實(shí)現(xiàn)通信交互。
(3)通信設(shè)備子線程:這類通信處理的數(shù)據(jù)種類繁多、數(shù)據(jù)量較大,加之前端界面軟件對(duì)實(shí)時(shí)響應(yīng)要求較高,為此專門(mén)設(shè)計(jì)子線程進(jìn)行處理。
(4)前端界面軟件通信子線程:考慮到前端界面軟件可能從服務(wù)軟件獲取大量數(shù)據(jù),且用戶對(duì)前端界面實(shí)時(shí)響應(yīng)速度要求較高,因此專為每個(gè)WebSocket連接建立了子線程,確保各前端界面軟件高效同步運(yùn)行,互不干擾。
(5)數(shù)據(jù)庫(kù)訪問(wèn)子線程:該線程主要是為了提高數(shù)據(jù)庫(kù)訪問(wèn)速度,避免受其他線程影響而設(shè)計(jì)的,特別是批量加載數(shù)據(jù)耗時(shí)較長(zhǎng),因此獨(dú)立設(shè)計(jì)該線程。
為實(shí)時(shí)監(jiān)測(cè)光纖的狀態(tài)參數(shù),項(xiàng)目組采用某公司出品的光時(shí)域反射儀,該儀器自動(dòng)化程度高,具有高速信號(hào)處理、測(cè)量時(shí)間短、結(jié)果分析快等優(yōu)點(diǎn),并且采用無(wú)硬盤(pán)設(shè)計(jì),防振、防潮,適合復(fù)雜、野外環(huán)境操作。其自帶的RJ 45網(wǎng)口可實(shí)現(xiàn)與服務(wù)器、工控機(jī)及PC機(jī)的通信,實(shí)現(xiàn)光纖狀態(tài)的實(shí)時(shí)測(cè)試與維護(hù)。服務(wù)軟件獲取光纖測(cè)試數(shù)據(jù)流程如下:
(1)手動(dòng)修改光時(shí)域反射儀IP地址,使服務(wù)軟件所在的工控機(jī)實(shí)現(xiàn)網(wǎng)絡(luò)通信,該步驟僅限服務(wù)軟件首次獲取光纖測(cè)試數(shù)據(jù)時(shí)才會(huì)用到。
(2)手動(dòng)修改光時(shí)域反射儀測(cè)量時(shí)間(默認(rèn)值較長(zhǎng),可以修改)等參數(shù),該步驟僅限服務(wù)軟件首次獲取光纖測(cè)試數(shù)據(jù)時(shí)才會(huì)用到。
(3)服務(wù)軟件作為T(mén)CP連接客戶端與光時(shí)域反射儀。
(4)服務(wù)軟件發(fā)送通信握手命令,打開(kāi)儀器的網(wǎng)口通信功能。
(5)服務(wù)軟件發(fā)送讀取光時(shí)域反射儀IP地址、網(wǎng)關(guān)、子網(wǎng)掩碼等基本配置信息的命令。
(6)服務(wù)軟件發(fā)送測(cè)量請(qǐng)求命令。
(7)服務(wù)軟件依據(jù)接收的測(cè)量請(qǐng)求應(yīng)答報(bào)文作不同處理,如果光時(shí)域反射儀正在測(cè)量中,則服務(wù)軟件等待5 s,然后轉(zhuǎn)步驟(6),繼續(xù)發(fā)送測(cè)量請(qǐng)求命令;如果光時(shí)域反射儀處于空閑等待狀態(tài),則進(jìn)入步驟(8),發(fā)送自動(dòng)測(cè)量請(qǐng)求命令。
(8)服務(wù)軟件發(fā)送自動(dòng)測(cè)量請(qǐng)求命令。(9)服務(wù)軟件發(fā)送讀取數(shù)據(jù)請(qǐng)求命令。
(10)服務(wù)軟件依據(jù)接收到的讀取數(shù)據(jù)請(qǐng)求應(yīng)答報(bào)文作不同處理,如果光時(shí)域反射儀正在測(cè)量中,不能讀取數(shù)據(jù),則服務(wù)軟件等待10 s,然后轉(zhuǎn)步驟(9),繼續(xù)發(fā)送讀取數(shù)據(jù)請(qǐng)求命令;如果光時(shí)域反射儀測(cè)量結(jié)束,則轉(zhuǎn)步驟(11),直接讀取測(cè)量結(jié)果;如果光時(shí)域反射儀反饋的應(yīng)答報(bào)文為其他形式,則說(shuō)明測(cè)量結(jié)果有問(wèn)題或者測(cè)量異常被終止,測(cè)量無(wú)效,服務(wù)軟件主動(dòng)斷開(kāi)TCP連接,等待10 s后轉(zhuǎn)步驟(3),重新與光時(shí)域反射儀建立TCP連接。
(11)服務(wù)軟件發(fā)送讀取光纖長(zhǎng)度測(cè)量結(jié)果命令,獲得光纖長(zhǎng)度數(shù)據(jù)。
(12)服務(wù)軟件發(fā)送讀取光纖功率曲線數(shù)據(jù)命令,由服務(wù)軟件發(fā)送命令獲得光纖功率曲線數(shù)據(jù)的總數(shù)據(jù)包數(shù)和數(shù)據(jù)的總個(gè)數(shù),然后按照數(shù)據(jù)包號(hào)從小到大依次發(fā)送讀取光纖功率曲線數(shù)據(jù)命令,讀取每個(gè)數(shù)據(jù)包的功率曲線數(shù)據(jù)。光時(shí)域反射儀反饋的最后一個(gè)數(shù)據(jù)包可能會(huì)有多余無(wú)效數(shù)據(jù),最后根據(jù)獲得的功率曲線數(shù)據(jù)和數(shù)據(jù)的總個(gè)數(shù),剔除最后一個(gè)數(shù)據(jù)包中的無(wú)效數(shù)據(jù)。
(13)服務(wù)軟件發(fā)送讀取事件參數(shù)命令,首先由服務(wù)軟件發(fā)送命令獲得事件數(shù)據(jù)包總數(shù)和事件的總個(gè)數(shù),然后按照事件數(shù)據(jù)包號(hào)從小到大依次發(fā)送讀取事件數(shù)據(jù)命令,讀取每個(gè)數(shù)據(jù)包的事件數(shù)據(jù)。
(14)測(cè)量結(jié)束,服務(wù)軟件主動(dòng)斷開(kāi)與光時(shí)域反射儀的TCP連接,并通過(guò)WebSocket主動(dòng)將獲得的光纖長(zhǎng)度數(shù)據(jù)、光纖功率曲線數(shù)據(jù)、光纖事件參數(shù)等傳給前端界面軟件,供其繪制二維圖形、電子表格,并進(jìn)行界面展示。
考慮項(xiàng)目在實(shí)際應(yīng)用中,對(duì)主、次接駁盒上傳數(shù)據(jù)的可靠性和連續(xù)性要求高,特別是故障告警信息和控制命令,而TCP自帶的心跳包機(jī)制無(wú)法及時(shí)檢測(cè)到網(wǎng)線拔出、機(jī)器斷電、操作系統(tǒng)故障、防火墻斷線等突發(fā)情況。項(xiàng)目中設(shè)計(jì)實(shí)現(xiàn)了自定義心跳包機(jī)制,由服務(wù)軟件每2 s定時(shí)向主、次接駁盒發(fā)送心跳包短報(bào)文,以便主、次接駁盒及時(shí)掌握實(shí)時(shí)通信狀態(tài),確保TCP連接的有效性,降低數(shù)據(jù)丟失概率。
參考文獻(xiàn)[11-12]的方法,服務(wù)軟件與主、次接駁盒通信采用自定義、類MODBUS協(xié)議設(shè)計(jì),格式如圖2所示。

圖2 通信協(xié)議格式
通信協(xié)議幀頭為2 B,接駁盒地址為1 B,每個(gè)主、次接駁盒(指電子艙、電源艙)有唯一的地址,通道編號(hào)為1 B,指數(shù)據(jù)上傳所用通道。數(shù)據(jù)幀類型為1 B,主要分為數(shù)據(jù)幀、控制命令幀、心跳信號(hào)幀、控制命令反饋幀等類別。數(shù)據(jù)幀長(zhǎng)度為1 B,表示數(shù)據(jù)幀內(nèi)容字節(jié)長(zhǎng)度,數(shù)據(jù)幀內(nèi)容為具體數(shù)據(jù)。CRC校驗(yàn)碼為2 B,采用CRC-16算法進(jìn)行檢錯(cuò)校驗(yàn)。
服務(wù)軟件與前端界面軟件涉及大量的網(wǎng)絡(luò)報(bào)文交換,如前端界面軟件查詢主、次接駁盒實(shí)時(shí)數(shù)據(jù),查詢主、次接駁盒外接傳感器數(shù)據(jù),下發(fā)控制命令,服務(wù)軟件主動(dòng)上報(bào)系統(tǒng)故障信息、反饋控制命令執(zhí)行結(jié)果等,本項(xiàng)目采用自定義的、特定格式的JSON字符串實(shí)現(xiàn)。

項(xiàng)目中用到的數(shù)據(jù)庫(kù)表主要有用戶表,權(quán)限表,設(shè)備信息表,故障類型表,主、次接駁盒數(shù)據(jù)表,主、次接駁盒外接傳感器數(shù)據(jù)表,故障告警表等,主要庫(kù)表結(jié)構(gòu)見(jiàn)表1所列。

表1 數(shù)據(jù)庫(kù)表結(jié)構(gòu)
為驗(yàn)證所設(shè)計(jì)的服務(wù)軟件的連續(xù)運(yùn)行穩(wěn)定性、可靠性,項(xiàng)目組進(jìn)行了軟硬件聯(lián)調(diào)實(shí)驗(yàn)。將服務(wù)軟件部署于岸上控制機(jī)柜中的工控機(jī)中,前端界面軟件分別部署于岸上控制機(jī)柜中的工控機(jī)、岸上普通臺(tái)式辦公電腦、岸上便攜式筆記本電腦3個(gè)終端中,前端界面軟件部署采用的電腦操作系統(tǒng)均為Windows 7企業(yè)版。
主、次接駁盒及外界傳感器在陸上經(jīng)過(guò)幾個(gè)月的連續(xù)測(cè)試運(yùn)行,在水池中進(jìn)行了為期1個(gè)月的測(cè)試運(yùn)行,順利通過(guò)了天津國(guó)家海洋技術(shù)中心組織的現(xiàn)場(chǎng)測(cè)試,系統(tǒng)綜合測(cè)評(píng)結(jié)果在國(guó)內(nèi)處于領(lǐng)先。在這些軟硬件聯(lián)調(diào)實(shí)驗(yàn)過(guò)程中,服務(wù)軟件、前端界面軟件各子模塊均能正常、穩(wěn)定運(yùn)行,各類數(shù)據(jù)無(wú)丟失,采集的數(shù)據(jù)、故障告警信息可及時(shí)上報(bào)輸出。實(shí)驗(yàn)結(jié)果表明:所設(shè)計(jì)的服務(wù)軟件完全可以在實(shí)驗(yàn)室環(huán)境下進(jìn)行長(zhǎng)期且連續(xù)的實(shí)時(shí)在線監(jiān)測(cè)控制及故障告警。
文中設(shè)計(jì)了一種基于物聯(lián)網(wǎng)技術(shù)的海底觀測(cè)網(wǎng)服務(wù)軟件,詳細(xì)闡述了系統(tǒng)軟件的總體架構(gòu)、通信協(xié)議和數(shù)據(jù)庫(kù)表結(jié)構(gòu)及多線程實(shí)現(xiàn)等關(guān)鍵技術(shù)。經(jīng)過(guò)陸上和水池的軟硬件聯(lián)調(diào)實(shí)驗(yàn),驗(yàn)證了服務(wù)軟件能夠?qū)崿F(xiàn)對(duì)各類設(shè)備的數(shù)據(jù)采集、處理、存儲(chǔ)管理以及前端界面軟件展示輸出。實(shí)驗(yàn)室環(huán)境的長(zhǎng)期運(yùn)行檢驗(yàn)了服務(wù)軟件的穩(wěn)定性、可靠性和實(shí)用性。
但需要指出的是,該軟件目前是在實(shí)驗(yàn)室環(huán)境下部署測(cè)試的,沒(méi)有在高壓艙等模擬深海環(huán)境下以及真實(shí)海上水下環(huán)境進(jìn)行長(zhǎng)期、連續(xù)的軟硬件聯(lián)調(diào)實(shí)驗(yàn),因此其穩(wěn)定性、可靠性有待進(jìn)一步深入研究。并且目前的前端界面軟件并發(fā)用戶數(shù)較少,接駁盒以及外接傳感器中的底層嵌入式軟件上傳的數(shù)據(jù)量也較小,服務(wù)軟件負(fù)載壓力不大。隨著數(shù)據(jù)量和并發(fā)用戶數(shù)的增加,服務(wù)軟件必須結(jié)合消息中間件、負(fù)載均衡技術(shù),利用集群技術(shù)或者分布式系統(tǒng)方案才能解決大數(shù)據(jù)處理問(wèn)題。同時(shí),目前的數(shù)據(jù)庫(kù)是單庫(kù),數(shù)據(jù)可靠性和冗余備份存在問(wèn)題,擴(kuò)展性和性能上也存在瓶頸,隨著業(yè)務(wù)數(shù)據(jù)和聯(lián)機(jī)事務(wù)的增加,性能將有所下降。下一步將運(yùn)用集群數(shù)據(jù)庫(kù)提高系統(tǒng)性能,另外還會(huì)對(duì)重要數(shù)據(jù)做加密處理,確保數(shù)據(jù)安全可靠。
物聯(lián)網(wǎng)技術(shù)2021年12期