胡琦,朱國情,陳于濤
(海軍工程大學 動力工程學院,武漢 430033)
新型船舶監控系統具備數據長時間存儲的能力,隨著船舶運營時間的增長,運行數據不斷積累,這些實時/歷史數據中保存了豐富的設備與系統的狀態信息,是一個寶貴的知識源泉[1]。研究面向海量運行數據的監控系統數據抽取和分析方法,對于船舶平臺管理高級應用功能的開發,具有重要的意義和應用價值[2]。
監控組態軟件實時監測船舶動力系統運行狀態,對各傳感器監測點狀態信息進行數據采集,經特定方式壓縮后,存儲至歷史數據庫[3-5]。通常情況下,只能依托監控組態軟件本身來查詢和分析數據信息,技術手段單一,方式相對封閉不夠靈活,難以采用開放式的數據分析工具開展更復雜的查詢和分析。
本文提出一種船舶監控系統外部數據抽取和分析的整體方案,包括數據抽取方式,數據抽取軟件,數據倉庫等環節。采用數據庫接口訪問技術實現監控組態軟件的數據抽取,設計開發數據抽取軟件,設計面向實船監控系統運行數據的數據倉庫基本結構,從而構建運行數據抽取與分析的整體方案。在此基礎上,以某船運行數據為例開展數據分析,驗證方案的有效性。
監控組態軟件運行時,數據采集模塊采集現場設備數據,采集到的數據會被加上時間戳送入內存中的實時數據緩沖區。當存盤時間到了或者緩沖區數據容量達到設定值時,實時數據會被寫入歷史數據庫中。這樣的數據存儲方式既減少數據存儲時頻繁訪問磁盤的次數,又可以減少歷史數據文件的個數,提高數據存儲能力。
數據庫訪問接口是應用程序與數據庫之間的連接部分,方便外部開發應用程序調用數據庫內容。由于每個數據庫管理系統產生的數據文件格式和操作方式各有差異,通常都會為應用程序提供特有的訪問接口API(application programming interface),監控組態軟件有以下兩種接口。
1)OPC接口。OPC接口是系統之間進行信息交換的一種表現形式,基于OLE/DCOM 技術,可實現系統軟件之間相互通信[6]。OPC數據訪問服務器在接口的基礎上運行,分為服務器(server)、組(group)、數據項(item)。服務器包含若干組,組包含若干項,每一數據項與實際硬件裝置上的物理通道相對應,這種包含關系形成了OPC數據訪問服務器的結構樹, OPC接口嵌入在服務器、組、數據項之間,客戶端可在OPC接口的支持下,通過數據訪問服務器獲取數據。
2)CommApi接口。CommApi接口是一系列擴展鏈接庫,包括兩個輸出類:CDbAccBase和CDbAccSynch。CDbAccBase異步接口時序復雜,但效率高,接口反應速度快,對于調用頻繁的函數,應使用異步接口。CDbAccSynch同步接口簡單,調用結果馬上返回,但當無應答時會出現等待,用戶無法進行下一步操作,對于無需應答的請求,可以使用同步接口。此外,借助CommApi接口開發可執行程序訪問數據,可執行程序可獨立運行在沒有安裝組態軟件的PC機上。
結合數據訪問接口的特點和監控組態軟件數據的形式,借助CDbAccBase異步接口獨立開發數據抽取軟件,實現抽取數據的高效性。
結合數據庫訪問接口及船舶動力系統數據的多樣性,API接口選擇CDbAccBase異步接口,滿足抽取數據的高效性。
監控組態軟件通過多種手段組建通信。其中,CommApi是組態軟件提供的對外可編程接口,使用Visual studio 2015建立MFC框架,借助CommApi接口獨立開發可執行程序訪問歷史數據庫。
圖1為數據抽取過程示意圖。

圖1 數據抽取過程示意
圖1中抽取軟件和組態軟件操作界面為通信的指令層,實時數據庫緩沖區和歷史數據庫為存儲層,實時數據庫為數據采集傳輸層,現場設備為數據產生的物理層。抽取軟件實現的是外部數據抽取,通過CommApi通信接口與組態軟件歷史數據庫進行通信,歷史數據庫根據指令發送數據,數據經過通信接口傳輸到抽取軟件,然后以指定文件格式輸出,將文件分析處理后存儲到數據倉庫。操作組態軟件實現內部數據抽取,發出抽取指令后,系統會優先檢查實時數據緩沖區是否有需要抽取的數據,然后再檢查歷史數據庫中有無需要抽取的數據,若所需數據僅在實時數據緩沖區,則避免了數據抽取時對歷史數據庫進行搜索。這樣的抽取方式一定程度提高了組態軟件內部數據抽取的效率。組態軟件雖然具有一定的數據抽取功能,但是抽取能力有限,抽取數據的反應時間較長,而抽取軟件進行外部數據抽取僅調用通信接口,在組態軟件數據庫支持下直接抽取數據,減少數據傳輸過程,提高抽取效率。
抽取軟件在功能設計方面包括軟件初始化功能、數據預處理功能、指定數據路徑功能、自行運行組態軟件數據庫功能、時間設置功能、數據點分區功能、數據庫函數調用功能、單點數據導出及數據批量導出等功能。通過多功能集成實現數據抽取。在軟件起動時初始化通信設置,通過API接口運行組態軟件數據庫,調用函數對數據點進行分區域操作,用戶完成時間設置、點名選擇、導出數據操作時,軟件預處理功能模塊會檢查文件是否為空值,若整個時間段數據為空則不會有文件輸出,同時提醒用戶“歷史數據為空”。預處理功能會識別數據點在某段時間內是否有運行值,只有在系統運行時才會保存歷史記錄,否則抽取時軟件會自動賦予一個壞值(-9999)導出,為了方便數據導出,軟件設計了單點的數據導出和批量數據導出,單點導出只需選擇數據點點擊“導出歷史數據”就可完成數據點信息的抽取,批量導出時需選擇區域,選定區域后點擊“導出歷史數據”,區域內所有點信息可被導出。
建立新的工程項目,項目類型設置為MFC AppWizard(exe),在連接頁中指定連接模塊CommApi.lib,把“DbAcc0.h”API接口頭文件加入到工程中。
創建數據抽取軟件的程序框架后,對用戶主界面進行設計。在設計界面選擇資源視圖選項卡(ResourceView),調出對話框和控件面板來進行主界面內容的添加,添加靜態文本Static Text、編輯框Edit Box、樹形控件Tree Control,對這些控件ID及名稱進行填充。以“年”為例見表1。

表1 界面控件屬性
布置完成的主界面見圖2,圖2中將實船監控系統運行數據進行了分區。

圖2 主界面
對界面中控件對象進行定義,并進行變量的添加,這里對主界面中的編輯框、樹形控件變量信息進行添加,分別添加控件ID、變量類型、變量名稱,具體見表2。

表2 變量信息
主界面的設計完成后,在對話框頭文件中IDD=IDD_REALINFODB_DIALOG定義變量IDD,這個對話框類通過IDD與對話框資源進行連接,直接調用對話框資源。在FileView選項卡源文件下的cpp文件中生成了CRealInfoDBDlg類的構造函數,類向導生成的對話框控件和對應的控件變量映射語句把控件ID與類的成員變量匹配起來。
控件類的變量在添加完成后,調用函數來改寫和確認對話框數據,把每一個定義的變量與相應的控件關聯起來,變量與控件任一方發生變化都可以雙向數據更新。
數據倉庫可以實現船舶信息資源的整合與綜合管理,為實船數據分析提供一體化平臺。數據倉庫的設計包括數據源分析、主題設計、模型設計等部分,每一部分的設計都會影響到后面的深度分析[7-9]。在設計數據倉庫的過程中,選擇MSSQL作為構建數據倉庫的平臺環境。
數據是設計數據倉庫的基礎,船舶監控組態軟件對動力系統運行數據以特定形式記錄后壓縮成固定格式數據包,包含主機、調距槳、齒輪箱及機艙人員操作記錄等一系列數據。抽取動力系統歷史數據后,需對數據進行解壓轉換,以確定抽取的數據能否成為入庫數據,是否具有進一步分析的價值。
數據倉庫是按主題來組織的,面向主題的邏輯設計是其核心部分。一個主題對應一個宏觀的分析領域,對于“船舶動力系統”這個分析領域,數據倉庫應用的主題可設計為“實船動力系統運行數據”。確定好主題后,需要建立合適的模型來組織面向主題的數據,多維數據模型是數據倉庫模型中比較直觀且易于擴展分析。多維數據模型主要有星型模型和雪花型模型,星型模型的維表直接與事實表相連接,沒有層級之分,會造成數據冗余,但是星型模型比較直觀且操作效率高。雪花型模型是星型模型的擴展,各維表按層級連接,使用的是規范化數據,各數據都是組織好的,減少了冗余的產生,降低了數據量,但由于各表連接太多,導致查詢分析效率低。
圖3是星型模型表示的船舶動力系統多維數據模型,其中包括事實表和5個維表,事實表中的每一條元組都與維表關聯,維表通過關鍵字指向事實表,關鍵字作為各維表的主鍵,同時又與事實表中各元組對應,作為事實表中的外鍵。在多維數據模型中,數據以多維邏輯形式關聯,并在各維度之間相互交叉,利用不同維度、不同的度量值來分析事實數據。

圖3 數據倉庫星型模型
根據星型模型中的維表,在系統區域維下選擇右主機運行數據,這些運行數據在經過提取、轉換后轉變為具有一定規律和一定屬性的數據表序列。圖4為右主機數據表序列,這些運行數據是右主機區域下的一部分,“右主機”這個標簽就是這些數據在“區域”這個維表中的共同屬性。數據倉庫的性能直接與維度屬性的質量和深度成正比,詳盡的屬性及良好的運行數據屬性值必定使得數據倉庫的性能更好。

圖4 右主機數據表序列
在數據抽取與分析的整體方案基礎上,以某型船舶動力監控系統的實船運行數據為信息源,結合數據倉庫進行實船數據分析案例研究。
以某型船舶右主機轉速和氣缸排氣溫度數據為例進行數據分析。運行數據抽取軟件,獲取右主機大約1 d的轉速與A、B氣缸排氣溫度數據,數據經過轉換后加載到數據倉庫,將右主機轉速數據繪制成百分比折線,見圖5。

圖5 轉速百分比折線
由圖5折線能看出該船大致運行工況,表3從整體上將各時間段運行工況標出,分析數據發現進二與進四工況運行時間極短,在表中不單獨標出。

表3 各時間段工況
圖6以柱狀圖的形式將該天各工況運行時間占比表示出來。圖5中進一工況運行時間占比超過90%,進三和進五工況占比僅為1.16%,說明正常航行中該船絕大多數時間保持在中低航速。

圖6 運行工況時間占比
為探究各數據點之間聯系,從數據抽取軟件中導出進三工況下右主機轉速數據及A、B兩列氣缸排氣溫度數據,時間取800 s。由于A、B兩列氣缸較多,對比后發現數據趨勢一致,各選4個氣缸排溫進行繪圖說明。圖7是主工況進三的轉速百分比折線,圖8為部分A列氣缸排氣溫度百分比折線,圖9為部分B列氣缸排氣溫度百分比折線。

圖7 進三工況轉速百分比折線

圖8 部分A列氣缸排氣溫度

圖9 部分B列氣缸排氣溫度
圖7中,工況變化過程:進一→進三→進一→進二→進一→空車。將轉速折線與A、B兩列氣缸的排氣溫度折線進行對比,可發現當右主機轉速上升時,排氣溫度也會明顯上升。雖然工況變化導致各缸排溫有較大變化,但是始終滿足各缸溫差百分比≤12%的要求,溫差百分比可作為評估系統正常運行的指標。50~200 s內A列氣缸溫度百分比平均上升約20.2%,B列氣缸溫度百分比平均上升約26.7%,200~550 s內工況穩定在進三,各缸排氣溫度也基本穩定,這個時間段各缸溫度的平均值都可以作為進三工況的特征溫度,即在不清楚轉速等信息的條件下通過排氣溫度大小判斷運行工況。
這一組數據說明轉速雖然與排氣溫度無直接聯系,但是工況調整時,轉速與溫度都會相應變化,變化趨勢相同。一定工況會對應一定轉速和一定各缸排氣溫度,如進三工況對應A1氣缸排溫百分比為60.4%。通過抽取此類數據可以做到數據正確性比對和運行工況分析,利用少量單一數據分析出隱藏的多種信息。
依據該方案對實船監控系統運行數據進行試驗分析,解決了數據查詢分析手段單一的問題,實現了數據的抽取、轉換、加載和分析。通過船舶運行數據抽取與分析方案的設計,對于數據向信息知識轉化的研究有推動作用,為進一步開展船舶運行數據高級應用管理提供基礎。