席志成,李 海,張文亮
(武漢船用機械有限責任公司,武漢 430084)
針對安裝于遠洋船舶的無人值守艙室中的設備,設計了一種基于B/S(Browser/Server)架構的設備遠程健康監測系統。此系統依托設置在艙內的攝像機為使用者提供實時視頻圖像監控功能,依托設置在設備內部的健康信息傳感器提供健康數據采集監控功能,以滿足駕駛臺船員和設備服務商遠程掌握艙室現場實時狀態的需求。
C/S(Client/Server)架構在軟件解決方案中應用較廣,其特點是客戶機前端作為用戶人機交互界面,在用戶界面接收指令后直接向服務器后端發出請求,服務器作為后端負責數據的存儲、管理、查詢,負責根據前端的要求返回指令結果,系統整體呈上述兩層結構。
在遠洋船舶設備領域,船員和設備商通常來自不同國家,如果采用C/S系統架構,客戶機直接與服務器通信對話,則必須為每一個相關方安裝定制客戶端,必然面臨客戶端對安裝載體在硬件、操作系統兩個方面的適應困難。本系統采用B/S架構,利用其無需安裝定制客戶端的優勢,為用戶帶來了最大的自由度,只要用戶擁有一臺能夠接入Internet的計算機,同時計算機上安裝有Firefox、Opera和Safari等任何一種常規瀏覽器,就能夠將其作為本系統的客戶端,實現遠程監控艙室設備狀態的目的。
用戶端的web瀏覽器部分設置為兩層結構,共4個頁面。第一層用于安全控制,設計為登錄頁面;第二層用于功能實現,設計為平行切換功能,包括實時健康數據監測、實時視頻監控及歷史數據查詢共3個平行切換的功能頁面。每臺被設定為監控對象的設備都在其對面的艙室壁上安裝一個專屬攝像頭,數據庫中預先保存了每臺設備及其專屬于攝像頭的的IP地址、端口信息等相關數據,根據實際需要,用戶在相應的前端頁面手動選擇和切換攝像頭。
根據需求,本系統總體框架設計為3個相對獨立的功能模塊,如圖1所示。

圖1 系統總體框架圖Fig.1 Overall framework diagram of the system
賬戶管理模塊。根據登入系統的用戶類別為其分配合適權限,并針對賬號清單依據用戶身份和權限進行分組管理。在用戶入口設置注冊、登錄認證界面,將登入用戶按照預設的類別分配不同的訪問權限。
視頻監控模塊。實現攝像頭輸入的視頻信號上傳、顯示功能。允許網頁端選擇需要顯示的設備編號,網頁嵌入ActiveX控件,根據用戶指令確定對應訪問攝像機的IP地址和端口,調用相應攝像機的視頻信號并將其傳輸至Web服務器。
健康監控模塊。設備運行健康狀態數據的實時采集、顯示和存儲,該數據來源為設備自帶的傳感器,實現對設備健康狀態包括電壓、電流、溫度、濕度等需監控的數據,并對匯總的數據進行簡單的圖像化處理。例如:將選取時間段的歷史數據匯總后,在直角坐標系中以折線、柱狀等不同的圖像形式在客戶端顯示。
系統工作結構如圖2所示,本系統軟件構件模式采用MVC(Model-View -Controller)開發,將后端管理部分與用戶交互界面實現各自代碼獨立,系統架構選擇JavaBean+Hibernate +Struts2+Spring +Jsp。在數據庫錄入攝像頭的IP和端口實現視頻信號通道的切換,在用戶Web端上實現監控視頻的實時顯示,采集的數據能夠實時地動態顯示在用戶Web端。系統在正常登陸的用戶賬戶下,能夠通過用戶Web端查看歷史數據,并選擇輸出歷史數據的圖形形式,如柱狀圖、曲線圖等,以便更好地分析健康狀態變化趨勢。

圖2 信息流結構框圖Fig.2 Block diagram of information flow structure
作為Browser/Server架構,Web用戶需要在非特定的客戶機上采用瀏覽器訪問Web服務器。本系統中,采用SSL數字證書機制引導用戶加載瀏覽器前端的ActiveX控件。當用戶采用Firefox、Opera和Safari等任何一種常規瀏覽器第一次訪問服務器時,在SSL通信過程中,由于檢測到包含ActiveX控件的嵌入代碼,用戶端瀏覽器將提示需下載安裝CA(Certificate Authority)根證書,當用戶確認后,瀏覽器將自動下載并安裝系統前端部分的ActiveX控件。
成功安裝ActiveX控件后,系統前端與服務器建立通信,系統功能被激活。當用戶更換另一臺計算機后,只需再次訪問服務器并下載安裝相應控件,則可在新的工作位置使用本系統。
通常情況下,針對攝像頭視頻數據的采集需求可以采用與HTTP協議類似的RTSP(Real Time Streaming Protocol)協議獲取視頻碼流,或使用Open CV中的VideoCapture讀取視頻,通過TCP傳輸協議上承載RTSP以提高穩定性即可。本系統中使用的攝像頭為國內某品牌的貨架標準產品設備,型號產品配置的SDK包內已配置有成熟的接口函數,在AetiveX控件中直接調用即可獲取所需的視頻數據流。SDK包調用的執行流程如圖3所示。

圖3 SDK調用流程圖Fig.3 SDK transfer flow chart
當用戶端第一次激活視頻監控頁面時,頁面嵌入內置的ActiveX控件代碼將觸發前端瀏覽器的安全規則,隨后用戶端瀏覽器將發送消息提示下載控件,從而引導用戶進入控件安裝流程。
數據庫服務器系統采用最常用的MySQL作為數據庫服務器,經比較選用Hibernate作為數據庫訪問工具。與另一常用的訪問工具MyBatis相比,MyBatis采用SQL與Entity映射,而Hibernate采用數據庫與Entity映射,能夠自動生成SQL,開發工作更加高效。
通過對系統功能需求的細化分析,本系統配置的監控系統數據庫為視頻監控和健康數據監控分別制定了規范格式的數據表頭,即Cam數據表(視頻)和Hel數據表(健康數據)。
Cam數據表(視頻)中設置有ad(地址)、port(端口)、clit(用戶)、pasd(權限密碼)、id(位置編號)5個字段作為該設備的標識,每一條數據對應一臺攝像機,用戶Web端通過查詢Cam數據表中的IP地址和端口信息實現不同攝像頭的查詢和選擇,Cam數據表表頭設置如圖4所示。

圖4Cam數據表頭
Fig.4Camdataheader
Hel數據表(健康數據)用于按固定時間間隔依序存儲從設備傳感器獲取的數據。本系統中,每隔5 min采集一次健康信息數據并在MySQL數據庫服務器中依時間順序存儲歸檔。Hel數據表設置一個獨立的字段“time”來記錄數據的采集時間,以滿足用戶查詢歷史數據的需求,Hel數據表表頭設置如圖5所示。

圖5 Hel數據表頭Fig.5 Hel data header
用戶端瀏覽器是本系統為用戶提供的唯一人機交互界面,用戶端在瀏覽器上下達指令和接收響應,瀏覽器與Web服務器之間設置有Ajax引擎作為中間層,所有請求與響應均通過Ajax引擎完成。用戶訪問與相應的流程如圖6所示。
應用Ajax作為中間層,能夠在不刷新整個頁面的前提下與服務器通信維護數據,這使得Web端能夠更為迅捷地響應用戶交互,減少了未變化數據的無效通信,減少用戶等待時間。所有請求與響應均通過Ajax引擎完成,Ajax與服務器之間特有的異步通信機制,能夠為提供多線程并行工作效果,在用戶操作層上不會產生中斷影響,提升了用戶體驗。而減少了未變化數據的無效數據傳輸,對于通信帶寬的要求進一步降低,特別適用于航運中的船舶類應用場景。

圖6 用戶端Web訪問流程圖Fig.6 User side Web visit flow chart
設計并實現了基于B/S架構的船舶遠程監控系統。系統采用Spring、Hinernate、Struts2三大框架搭建整體系統,并使用MySQL承擔數據庫功能,使用通用型瀏覽器承擔人機交互功能?;贐/S架構本身的特點,系統的交互性較強,維護方便,但是允許用戶通過廣域網訪問設備在帶來便利的同時,也對系統、設備的安全性提出了更高的要求。目前,該技術僅適用于民用船舶的輔機設備,如要將其應用于更加敏感的設備領域,還有待于從安全性角度對該技術開展更深一步的研究。