周 展,俞振東,張 紅
(中國電子科技集團第二十八研究所,江蘇 南京 210000)
近年來,隨著艙車平臺的不斷發(fā)展壯大,艙車平臺上集成的設(shè)備也越來越多,功能和性能要求也越來越高,但艙車平臺內(nèi)部空間有限,分散控制的方式越來越滿足不了需求,因此,迫切需要一種通用、實時性強和容易操作的綜合運維系統(tǒng)[1]。
綜合運維系統(tǒng)對艙車平臺上裝設(shè)備進行監(jiān)測和控制目前面臨2個研究難題。
一方面,由于綜合運維系統(tǒng)需要實時監(jiān)測艙車平臺上裝設(shè)備的運行狀態(tài),以及實時進行遠程控制,因此保證綜合運維系統(tǒng)的實時性是研究重點和設(shè)計難點之一。
另一方面,區(qū)別于北美和歐洲已有的底層CAN總線通信協(xié)議和在CAN通信協(xié)議基礎(chǔ)上發(fā)展的專有大型貨車和公共機械車輛設(shè)計的J1939協(xié)議,艙車平臺上裝設(shè)備的通信接口缺乏統(tǒng)一的頂層規(guī)范標準,上裝設(shè)備的接口種類繁多,涵蓋RS232、RS485、RS422、CAN以及LAN在內(nèi)的絕大部分通信接口類型[2]。另外,不同設(shè)備的供應(yīng)廠商不同,其提供的通信協(xié)議也是千差萬別。為了能夠和所有的上裝設(shè)備進行數(shù)據(jù)交互,綜合運維系統(tǒng)必須能夠適配所有被控設(shè)備的通信接口和協(xié)議,這就提高了綜合運維系統(tǒng)的定制化程度。當不同艙車平臺上裝設(shè)備不同或者是同一艙車平臺的上裝設(shè)備出現(xiàn)更換或者升級時,綜合運維系統(tǒng)需要進行重新適配,導(dǎo)致系統(tǒng)通用性難以得到保證。在被控設(shè)備可變的條件下,保證綜合運維系統(tǒng)的通用性是研究重點和設(shè)計難點之一。
為了確保系統(tǒng)的實時性和通用性,本文采用B/S架構(gòu),通過引入WebSocket技術(shù)來保證系統(tǒng)的實時性,通過優(yōu)化軟件架構(gòu)設(shè)計來保證系統(tǒng)的通用性,設(shè)計了一套艙車平臺綜合運維系統(tǒng),實現(xiàn)艙車平臺上裝設(shè)備的實時監(jiān)測和控制功能。采用B/S構(gòu)架基于Web技術(shù)設(shè)計的綜合運維系統(tǒng),用戶只需要使用通用的Web瀏覽器就可以完成復(fù)雜的設(shè)備監(jiān)測和控制任務(wù)[3],實現(xiàn)客戶端零維護,極大地方便了系統(tǒng)的實施[4]。在局域網(wǎng)建立的情況下,運維人員可以在任意位置使用瀏覽器訪問綜合運維系統(tǒng),通過可視化界面直觀地展示上裝設(shè)備的實時狀態(tài),同時運維人員可以點擊界面上的按鈕對監(jiān)控設(shè)備進行遠程控制。
艙車平臺綜合運維系統(tǒng)包含了綜合運維設(shè)備和綜合運維系統(tǒng)軟件2個部分,綜合運維系統(tǒng)軟件部署在綜合運維設(shè)備中,綜合運維設(shè)備放置在艙車平臺的設(shè)備柜中,并接入艙車平臺的局域網(wǎng)中。
為了保證綜合運維系統(tǒng)的通用性,將設(shè)備通信接口和通信數(shù)據(jù)分析等定制化工作放在綜合運維軟件中實現(xiàn),盡可能地保留了綜合運維設(shè)備的通用性。因為與變更綜合運維設(shè)備的硬件以及底層驅(qū)動相比,在軟件中進行接口和協(xié)議適配的投入更小,配置更靈活。因此綜合運維系統(tǒng)采用3層架構(gòu),自下而上分別是設(shè)備層、接口層和應(yīng)用層(見圖1)。
圖1 系統(tǒng)架構(gòu)圖
設(shè)備層是指艙車平臺上裝設(shè)備,包含串口設(shè)備、CAN設(shè)備、網(wǎng)絡(luò)設(shè)備和其他設(shè)備。設(shè)備層中的各設(shè)備通過各自的通信接口和設(shè)備私有的通信協(xié)議與綜合運維設(shè)備進行數(shù)據(jù)交付。
接口層是指綜合運維設(shè)備,為了保證綜合運維系統(tǒng)的通用性,綜合運維設(shè)備只完成各個通信接口的數(shù)據(jù)交互和硬件管理,并轉(zhuǎn)化成綜合運維系統(tǒng)內(nèi)部協(xié)議與綜合運維系統(tǒng)軟件進行數(shù)據(jù)交互。
應(yīng)用層是指綜合運維系統(tǒng)軟件。當新的設(shè)備接入或者原有接入設(shè)備變更時,用戶只需要在軟件界面中配置設(shè)備的通信接口類型、接口地址以及通信協(xié)議,即可完成綜合運維系統(tǒng)與新設(shè)備的適配,以此解決通用性問題。綜合運維系統(tǒng)軟件與綜合運維設(shè)備之間采用WebSocket技術(shù)實現(xiàn)數(shù)據(jù)的實時交互,解決了綜合運維系統(tǒng)的實時性問題。
WebSocket是一種協(xié)議,支持在單個TCP連接上進行全雙工通信[5],在本質(zhì)上WebSocket能夠為通信的雙方提供一個基于TCP連接的雙向通道,即服務(wù)器端能夠主動給客戶端推送數(shù)據(jù),同時客戶端也能夠主動向服務(wù)端發(fā)送請求數(shù)據(jù),能夠?qū)崿F(xiàn)在服務(wù)端和客戶端之間高效地互相發(fā)送數(shù)據(jù)。
傳統(tǒng)通信方案中使用的HTTP協(xié)議是單向通信協(xié)議,只有客戶端發(fā)起HTTP請求,服務(wù)端才會返回數(shù)據(jù)。另外HTTP連接步驟復(fù)雜且只提供短鏈接,因此在實際運行時會嚴重影響傳輸實時性[6]。與HTTP協(xié)議相比,WebSocket具有更輕量級的頭信息,減少了大量交互信息和網(wǎng)絡(luò)吞吐量,節(jié)省了帶寬,提高了通信效率[7]。通過WebSocket技術(shù),瀏覽器和服務(wù)器只需要做一個握手的動作,瀏覽器和服務(wù)器之間就形成了一條快速通道,兩者之間就可以直接進行數(shù)據(jù)互相傳輸。
WebSocket是HTML5新增的協(xié)議,屬于應(yīng)用層第7層上的一個應(yīng)用層協(xié)議,它必須依賴HTTP協(xié)議進行第1次握手[8],在JS中創(chuàng)建WebSocket后,會有一個HTTP請求發(fā)送至瀏覽器以發(fā)起請求。在取得服務(wù)器響應(yīng)后,建立的連接會使用HTTP升級將HTTP協(xié)議轉(zhuǎn)換為WebSocket協(xié)議,連接建立之后,客戶端與服務(wù)端之間就可以直接進行數(shù)據(jù)互相傳輸,與HTTP無關(guān)[9-10]。WebSocket服務(wù)端與客戶端的交互圖如圖2所示。
圖2 WebSocket服務(wù)端與客戶端的交互圖
在艙車平臺綜合運維系統(tǒng)中需要對艙車平臺上裝設(shè)備的狀態(tài)進行實時監(jiān)測,同時需要對上裝設(shè)備進行遠程控制,這就要求客戶端和服務(wù)端之間能夠高效、實時地進行數(shù)據(jù)交互,而基于WebSocket的艙車平臺綜合運維系統(tǒng)正好解決了系統(tǒng)實時性的問題。一方面,綜合運維系統(tǒng)服務(wù)端在采集到設(shè)備的狀態(tài)信息時,會同步將狀態(tài)信息發(fā)送給與之建立連接的客戶端,運維人員可以實時掌握設(shè)備的狀態(tài)信息;另一方面,運維人員在客戶端對被控設(shè)備進行控制操作后,服務(wù)端能夠及時收到控制指令并發(fā)送控制指令給相應(yīng)的設(shè)備,實現(xiàn)設(shè)備控制功能。
艙車平臺綜合運維系統(tǒng)的結(jié)構(gòu)圖如圖3所示。艙車平臺綜合運維系統(tǒng)主要采集艙車平臺上環(huán)境類設(shè)備、機電類設(shè)備和電源類設(shè)備等設(shè)備數(shù)據(jù)。其中,環(huán)境類設(shè)備包括溫濕度傳感模塊、空調(diào)和加熱器等,機電類設(shè)備包括調(diào)平機構(gòu)、升降臺和倒伏機構(gòu)等,電源類設(shè)備包括綜合電源和配電箱等。這些設(shè)備的接口為RS232、RS485、CAN和網(wǎng)絡(luò)。服務(wù)端的硬件接口處理模塊負責(zé)與接入系統(tǒng)的被控設(shè)備建立連接,采集被控設(shè)備上報的設(shè)備狀態(tài)信息和故障信息,同時發(fā)送被控設(shè)備的控制信息。消息處理模塊負責(zé)處理接收到的設(shè)備狀態(tài)信息和故障信息以及客戶端發(fā)送的控制指令。WebSocket服務(wù)負責(zé)監(jiān)聽和推送實時數(shù)據(jù),客戶端與WebSocket服務(wù)建立連接之后,WebSocket服務(wù)將采集到的設(shè)備狀態(tài)信息和故障信息實時發(fā)送給客戶端,便于運維人員實時監(jiān)測艙車平臺中上裝設(shè)備的狀態(tài),用戶通過客戶端將對設(shè)備的控制指令發(fā)送給WebSocket服務(wù),由WebSocket服務(wù)將信息逐層發(fā)送給對應(yīng)設(shè)備,實現(xiàn)設(shè)備的控制功能。
圖3 系統(tǒng)結(jié)構(gòu)圖
服務(wù)端監(jiān)測設(shè)備數(shù)據(jù)的流程如圖4所示,綜合運維設(shè)備上電后,服務(wù)端程序啟動初始化后,先進行硬件接口的初始化,根據(jù)人機界面上配置的設(shè)備信息打開對應(yīng)的硬件接口,用于接收RS232設(shè)備、RS485設(shè)備、CAN設(shè)備和網(wǎng)絡(luò)設(shè)備的數(shù)據(jù),硬件接口打開成功即進入數(shù)據(jù)監(jiān)聽狀態(tài),一旦監(jiān)聽到有接入設(shè)備發(fā)送的狀態(tài)數(shù)據(jù),立即按照系統(tǒng)內(nèi)部通信協(xié)議進行數(shù)據(jù)的處理并發(fā)送給已經(jīng)與服務(wù)端建立連接的客戶端,從而在客戶端可以實時地查看接入設(shè)備的狀態(tài)信息和故障信息。
圖4 服務(wù)端監(jiān)測設(shè)備數(shù)據(jù)的流程圖
服務(wù)端控制設(shè)備的流程如圖5所示,服務(wù)端接收到客戶端發(fā)送的連接請求后,與客戶端建立連接,連接建立成功后監(jiān)聽客戶端消息,一旦收到客戶端發(fā)送的設(shè)備控制指令,立即進行處理并通過硬件接口發(fā)送給對應(yīng)的設(shè)備,實現(xiàn)設(shè)備的控制功能。
圖5 服務(wù)端控制設(shè)備的流程圖
客戶端的流程如圖6所示,用戶通過瀏覽器訪問服務(wù)端,提出連接服務(wù)端請求,連接建立后,實時接收服務(wù)端通過WebSocket服務(wù)發(fā)送的設(shè)備狀態(tài)信息和故障信息,并在界面上實時更新顯示;用戶在界面上點擊設(shè)備控制按鈕,客戶端通過WebSocket服務(wù)給服務(wù)端發(fā)送設(shè)備控制指令,以此實現(xiàn)設(shè)備的控制功能。
圖6 客戶端的流程圖
本文設(shè)計了一套基于WebSocket的艙車平臺綜合運維系統(tǒng)的解決方案,該方案在人機交互界面進行接入設(shè)備的配置工作,實現(xiàn)了接入設(shè)備的靈活配置,極大地提高了綜合運維系統(tǒng)的通用性,并且能夠?qū)⒉杉降脑O(shè)備狀態(tài)信息通過WebSocket實時推送至客戶端界面,直觀地將設(shè)備狀態(tài)信息呈現(xiàn)給運維人員,便于運維人員及時掌握艙車平臺上裝設(shè)備的整體運行狀態(tài),同時運維人員也可以方便地通過點擊客戶端上的操作按鈕遠程控制設(shè)備,解決了系統(tǒng)的實時性。這一套系統(tǒng)已經(jīng)在多個項目中進行了使用,極大地簡化了開發(fā)工作量,也提高了系統(tǒng)的穩(wěn)定性。