胡琦,朱國情,陳于濤
(海軍工程大學(xué) 動(dòng)力工程學(xué)院,武漢 430033)
新型船舶監(jiān)控系統(tǒng)具備數(shù)據(jù)長(zhǎng)時(shí)間存儲(chǔ)的能力,隨著船舶運(yùn)營(yíng)時(shí)間的增長(zhǎng),運(yùn)行數(shù)據(jù)不斷積累,這些實(shí)時(shí)/歷史數(shù)據(jù)中保存了豐富的設(shè)備與系統(tǒng)的狀態(tài)信息,是一個(gè)寶貴的知識(shí)源泉[1]。研究面向海量運(yùn)行數(shù)據(jù)的監(jiān)控系統(tǒng)數(shù)據(jù)抽取和分析方法,對(duì)于船舶平臺(tái)管理高級(jí)應(yīng)用功能的開發(fā),具有重要的意義和應(yīng)用價(jià)值[2]。
監(jiān)控組態(tài)軟件實(shí)時(shí)監(jiān)測(cè)船舶動(dòng)力系統(tǒng)運(yùn)行狀態(tài),對(duì)各傳感器監(jiān)測(cè)點(diǎn)狀態(tài)信息進(jìn)行數(shù)據(jù)采集,經(jīng)特定方式壓縮后,存儲(chǔ)至歷史數(shù)據(jù)庫[3-5]。通常情況下,只能依托監(jiān)控組態(tài)軟件本身來查詢和分析數(shù)據(jù)信息,技術(shù)手段單一,方式相對(duì)封閉不夠靈活,難以采用開放式的數(shù)據(jù)分析工具開展更復(fù)雜的查詢和分析。
本文提出一種船舶監(jiān)控系統(tǒng)外部數(shù)據(jù)抽取和分析的整體方案,包括數(shù)據(jù)抽取方式,數(shù)據(jù)抽取軟件,數(shù)據(jù)倉庫等環(huán)節(jié)。采用數(shù)據(jù)庫接口訪問技術(shù)實(shí)現(xiàn)監(jiān)控組態(tài)軟件的數(shù)據(jù)抽取,設(shè)計(jì)開發(fā)數(shù)據(jù)抽取軟件,設(shè)計(jì)面向?qū)嵈O(jiān)控系統(tǒng)運(yùn)行數(shù)據(jù)的數(shù)據(jù)倉庫基本結(jié)構(gòu),從而構(gòu)建運(yùn)行數(shù)據(jù)抽取與分析的整體方案。在此基礎(chǔ)上,以某船運(yùn)行數(shù)據(jù)為例開展數(shù)據(jù)分析,驗(yàn)證方案的有效性。
監(jiān)控組態(tài)軟件運(yùn)行時(shí),數(shù)據(jù)采集模塊采集現(xiàn)場(chǎng)設(shè)備數(shù)據(jù),采集到的數(shù)據(jù)會(huì)被加上時(shí)間戳送入內(nèi)存中的實(shí)時(shí)數(shù)據(jù)緩沖區(qū)。當(dāng)存盤時(shí)間到了或者緩沖區(qū)數(shù)據(jù)容量達(dá)到設(shè)定值時(shí),實(shí)時(shí)數(shù)據(jù)會(huì)被寫入歷史數(shù)據(jù)庫中。這樣的數(shù)據(jù)存儲(chǔ)方式既減少數(shù)據(jù)存儲(chǔ)時(shí)頻繁訪問磁盤的次數(shù),又可以減少歷史數(shù)據(jù)文件的個(gè)數(shù),提高數(shù)據(jù)存儲(chǔ)能力。
數(shù)據(jù)庫訪問接口是應(yīng)用程序與數(shù)據(jù)庫之間的連接部分,方便外部開發(fā)應(yīng)用程序調(diào)用數(shù)據(jù)庫內(nèi)容。由于每個(gè)數(shù)據(jù)庫管理系統(tǒng)產(chǎn)生的數(shù)據(jù)文件格式和操作方式各有差異,通常都會(huì)為應(yīng)用程序提供特有的訪問接口API(application programming interface),監(jiān)控組態(tài)軟件有以下兩種接口。
1)OPC接口。OPC接口是系統(tǒng)之間進(jìn)行信息交換的一種表現(xiàn)形式,基于OLE/DCOM 技術(shù),可實(shí)現(xiàn)系統(tǒng)軟件之間相互通信[6]。OPC數(shù)據(jù)訪問服務(wù)器在接口的基礎(chǔ)上運(yùn)行,分為服務(wù)器(server)、組(group)、數(shù)據(jù)項(xiàng)(item)。服務(wù)器包含若干組,組包含若干項(xiàng),每一數(shù)據(jù)項(xiàng)與實(shí)際硬件裝置上的物理通道相對(duì)應(yīng),這種包含關(guān)系形成了OPC數(shù)據(jù)訪問服務(wù)器的結(jié)構(gòu)樹, OPC接口嵌入在服務(wù)器、組、數(shù)據(jù)項(xiàng)之間,客戶端可在OPC接口的支持下,通過數(shù)據(jù)訪問服務(wù)器獲取數(shù)據(jù)。
2)CommApi接口。CommApi接口是一系列擴(kuò)展鏈接庫,包括兩個(gè)輸出類:CDbAccBase和CDbAccSynch。CDbAccBase異步接口時(shí)序復(fù)雜,但效率高,接口反應(yīng)速度快,對(duì)于調(diào)用頻繁的函數(shù),應(yīng)使用異步接口。CDbAccSynch同步接口簡(jiǎn)單,調(diào)用結(jié)果馬上返回,但當(dāng)無應(yīng)答時(shí)會(huì)出現(xiàn)等待,用戶無法進(jìn)行下一步操作,對(duì)于無需應(yīng)答的請(qǐng)求,可以使用同步接口。此外,借助CommApi接口開發(fā)可執(zhí)行程序訪問數(shù)據(jù),可執(zhí)行程序可獨(dú)立運(yùn)行在沒有安裝組態(tài)軟件的PC機(jī)上。
結(jié)合數(shù)據(jù)訪問接口的特點(diǎn)和監(jiān)控組態(tài)軟件數(shù)據(jù)的形式,借助CDbAccBase異步接口獨(dú)立開發(fā)數(shù)據(jù)抽取軟件,實(shí)現(xiàn)抽取數(shù)據(jù)的高效性。
結(jié)合數(shù)據(jù)庫訪問接口及船舶動(dòng)力系統(tǒng)數(shù)據(jù)的多樣性,API接口選擇CDbAccBase異步接口,滿足抽取數(shù)據(jù)的高效性。
監(jiān)控組態(tài)軟件通過多種手段組建通信。其中,CommApi是組態(tài)軟件提供的對(duì)外可編程接口,使用Visual studio 2015建立MFC框架,借助CommApi接口獨(dú)立開發(fā)可執(zhí)行程序訪問歷史數(shù)據(jù)庫。
圖1為數(shù)據(jù)抽取過程示意圖。
圖1 數(shù)據(jù)抽取過程示意
圖1中抽取軟件和組態(tài)軟件操作界面為通信的指令層,實(shí)時(shí)數(shù)據(jù)庫緩沖區(qū)和歷史數(shù)據(jù)庫為存儲(chǔ)層,實(shí)時(shí)數(shù)據(jù)庫為數(shù)據(jù)采集傳輸層,現(xiàn)場(chǎng)設(shè)備為數(shù)據(jù)產(chǎn)生的物理層。抽取軟件實(shí)現(xiàn)的是外部數(shù)據(jù)抽取,通過CommApi通信接口與組態(tài)軟件歷史數(shù)據(jù)庫進(jìn)行通信,歷史數(shù)據(jù)庫根據(jù)指令發(fā)送數(shù)據(jù),數(shù)據(jù)經(jīng)過通信接口傳輸?shù)匠槿≤浖?,然后以指定文件格式輸出,將文件分析處理后存?chǔ)到數(shù)據(jù)倉庫。操作組態(tài)軟件實(shí)現(xiàn)內(nèi)部數(shù)據(jù)抽取,發(fā)出抽取指令后,系統(tǒng)會(huì)優(yōu)先檢查實(shí)時(shí)數(shù)據(jù)緩沖區(qū)是否有需要抽取的數(shù)據(jù),然后再檢查歷史數(shù)據(jù)庫中有無需要抽取的數(shù)據(jù),若所需數(shù)據(jù)僅在實(shí)時(shí)數(shù)據(jù)緩沖區(qū),則避免了數(shù)據(jù)抽取時(shí)對(duì)歷史數(shù)據(jù)庫進(jìn)行搜索。這樣的抽取方式一定程度提高了組態(tài)軟件內(nèi)部數(shù)據(jù)抽取的效率。組態(tài)軟件雖然具有一定的數(shù)據(jù)抽取功能,但是抽取能力有限,抽取數(shù)據(jù)的反應(yīng)時(shí)間較長(zhǎng),而抽取軟件進(jìn)行外部數(shù)據(jù)抽取僅調(diào)用通信接口,在組態(tài)軟件數(shù)據(jù)庫支持下直接抽取數(shù)據(jù),減少數(shù)據(jù)傳輸過程,提高抽取效率。
抽取軟件在功能設(shè)計(jì)方面包括軟件初始化功能、數(shù)據(jù)預(yù)處理功能、指定數(shù)據(jù)路徑功能、自行運(yùn)行組態(tài)軟件數(shù)據(jù)庫功能、時(shí)間設(shè)置功能、數(shù)據(jù)點(diǎn)分區(qū)功能、數(shù)據(jù)庫函數(shù)調(diào)用功能、單點(diǎn)數(shù)據(jù)導(dǎo)出及數(shù)據(jù)批量導(dǎo)出等功能。通過多功能集成實(shí)現(xiàn)數(shù)據(jù)抽取。在軟件起動(dòng)時(shí)初始化通信設(shè)置,通過API接口運(yùn)行組態(tài)軟件數(shù)據(jù)庫,調(diào)用函數(shù)對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分區(qū)域操作,用戶完成時(shí)間設(shè)置、點(diǎn)名選擇、導(dǎo)出數(shù)據(jù)操作時(shí),軟件預(yù)處理功能模塊會(huì)檢查文件是否為空值,若整個(gè)時(shí)間段數(shù)據(jù)為空則不會(huì)有文件輸出,同時(shí)提醒用戶“歷史數(shù)據(jù)為空”。預(yù)處理功能會(huì)識(shí)別數(shù)據(jù)點(diǎn)在某段時(shí)間內(nèi)是否有運(yùn)行值,只有在系統(tǒng)運(yùn)行時(shí)才會(huì)保存歷史記錄,否則抽取時(shí)軟件會(huì)自動(dòng)賦予一個(gè)壞值(-9999)導(dǎo)出,為了方便數(shù)據(jù)導(dǎo)出,軟件設(shè)計(jì)了單點(diǎn)的數(shù)據(jù)導(dǎo)出和批量數(shù)據(jù)導(dǎo)出,單點(diǎn)導(dǎo)出只需選擇數(shù)據(jù)點(diǎn)點(diǎn)擊“導(dǎo)出歷史數(shù)據(jù)”就可完成數(shù)據(jù)點(diǎn)信息的抽取,批量導(dǎo)出時(shí)需選擇區(qū)域,選定區(qū)域后點(diǎn)擊“導(dǎo)出歷史數(shù)據(jù)”,區(qū)域內(nèi)所有點(diǎn)信息可被導(dǎo)出。
建立新的工程項(xiàng)目,項(xiàng)目類型設(shè)置為MFC AppWizard(exe),在連接頁中指定連接模塊CommApi.lib,把“DbAcc0.h”API接口頭文件加入到工程中。
創(chuàng)建數(shù)據(jù)抽取軟件的程序框架后,對(duì)用戶主界面進(jìn)行設(shè)計(jì)。在設(shè)計(jì)界面選擇資源視圖選項(xiàng)卡(ResourceView),調(diào)出對(duì)話框和控件面板來進(jìn)行主界面內(nèi)容的添加,添加靜態(tài)文本Static Text、編輯框Edit Box、樹形控件Tree Control,對(duì)這些控件ID及名稱進(jìn)行填充。以“年”為例見表1。
表1 界面控件屬性
布置完成的主界面見圖2,圖2中將實(shí)船監(jiān)控系統(tǒng)運(yùn)行數(shù)據(jù)進(jìn)行了分區(qū)。
圖2 主界面
對(duì)界面中控件對(duì)象進(jìn)行定義,并進(jìn)行變量的添加,這里對(duì)主界面中的編輯框、樹形控件變量信息進(jìn)行添加,分別添加控件ID、變量類型、變量名稱,具體見表2。
表2 變量信息
主界面的設(shè)計(jì)完成后,在對(duì)話框頭文件中IDD=IDD_REALINFODB_DIALOG定義變量IDD,這個(gè)對(duì)話框類通過IDD與對(duì)話框資源進(jìn)行連接,直接調(diào)用對(duì)話框資源。在FileView選項(xiàng)卡源文件下的cpp文件中生成了CRealInfoDBDlg類的構(gòu)造函數(shù),類向?qū)傻膶?duì)話框控件和對(duì)應(yīng)的控件變量映射語句把控件ID與類的成員變量匹配起來。
控件類的變量在添加完成后,調(diào)用函數(shù)來改寫和確認(rèn)對(duì)話框數(shù)據(jù),把每一個(gè)定義的變量與相應(yīng)的控件關(guān)聯(lián)起來,變量與控件任一方發(fā)生變化都可以雙向數(shù)據(jù)更新。
數(shù)據(jù)倉庫可以實(shí)現(xiàn)船舶信息資源的整合與綜合管理,為實(shí)船數(shù)據(jù)分析提供一體化平臺(tái)。數(shù)據(jù)倉庫的設(shè)計(jì)包括數(shù)據(jù)源分析、主題設(shè)計(jì)、模型設(shè)計(jì)等部分,每一部分的設(shè)計(jì)都會(huì)影響到后面的深度分析[7-9]。在設(shè)計(jì)數(shù)據(jù)倉庫的過程中,選擇MSSQL作為構(gòu)建數(shù)據(jù)倉庫的平臺(tái)環(huán)境。
數(shù)據(jù)是設(shè)計(jì)數(shù)據(jù)倉庫的基礎(chǔ),船舶監(jiān)控組態(tài)軟件對(duì)動(dòng)力系統(tǒng)運(yùn)行數(shù)據(jù)以特定形式記錄后壓縮成固定格式數(shù)據(jù)包,包含主機(jī)、調(diào)距槳、齒輪箱及機(jī)艙人員操作記錄等一系列數(shù)據(jù)。抽取動(dòng)力系統(tǒng)歷史數(shù)據(jù)后,需對(duì)數(shù)據(jù)進(jìn)行解壓轉(zhuǎn)換,以確定抽取的數(shù)據(jù)能否成為入庫數(shù)據(jù),是否具有進(jìn)一步分析的價(jià)值。
數(shù)據(jù)倉庫是按主題來組織的,面向主題的邏輯設(shè)計(jì)是其核心部分。一個(gè)主題對(duì)應(yīng)一個(gè)宏觀的分析領(lǐng)域,對(duì)于“船舶動(dòng)力系統(tǒng)”這個(gè)分析領(lǐng)域,數(shù)據(jù)倉庫應(yīng)用的主題可設(shè)計(jì)為“實(shí)船動(dòng)力系統(tǒng)運(yùn)行數(shù)據(jù)”。確定好主題后,需要建立合適的模型來組織面向主題的數(shù)據(jù),多維數(shù)據(jù)模型是數(shù)據(jù)倉庫模型中比較直觀且易于擴(kuò)展分析。多維數(shù)據(jù)模型主要有星型模型和雪花型模型,星型模型的維表直接與事實(shí)表相連接,沒有層級(jí)之分,會(huì)造成數(shù)據(jù)冗余,但是星型模型比較直觀且操作效率高。雪花型模型是星型模型的擴(kuò)展,各維表按層級(jí)連接,使用的是規(guī)范化數(shù)據(jù),各數(shù)據(jù)都是組織好的,減少了冗余的產(chǎn)生,降低了數(shù)據(jù)量,但由于各表連接太多,導(dǎo)致查詢分析效率低。
圖3是星型模型表示的船舶動(dòng)力系統(tǒng)多維數(shù)據(jù)模型,其中包括事實(shí)表和5個(gè)維表,事實(shí)表中的每一條元組都與維表關(guān)聯(lián),維表通過關(guān)鍵字指向事實(shí)表,關(guān)鍵字作為各維表的主鍵,同時(shí)又與事實(shí)表中各元組對(duì)應(yīng),作為事實(shí)表中的外鍵。在多維數(shù)據(jù)模型中,數(shù)據(jù)以多維邏輯形式關(guān)聯(lián),并在各維度之間相互交叉,利用不同維度、不同的度量值來分析事實(shí)數(shù)據(jù)。
圖3 數(shù)據(jù)倉庫星型模型
根據(jù)星型模型中的維表,在系統(tǒng)區(qū)域維下選擇右主機(jī)運(yùn)行數(shù)據(jù),這些運(yùn)行數(shù)據(jù)在經(jīng)過提取、轉(zhuǎn)換后轉(zhuǎn)變?yōu)榫哂幸欢ㄒ?guī)律和一定屬性的數(shù)據(jù)表序列。圖4為右主機(jī)數(shù)據(jù)表序列,這些運(yùn)行數(shù)據(jù)是右主機(jī)區(qū)域下的一部分,“右主機(jī)”這個(gè)標(biāo)簽就是這些數(shù)據(jù)在“區(qū)域”這個(gè)維表中的共同屬性。數(shù)據(jù)倉庫的性能直接與維度屬性的質(zhì)量和深度成正比,詳盡的屬性及良好的運(yùn)行數(shù)據(jù)屬性值必定使得數(shù)據(jù)倉庫的性能更好。
圖4 右主機(jī)數(shù)據(jù)表序列
在數(shù)據(jù)抽取與分析的整體方案基礎(chǔ)上,以某型船舶動(dòng)力監(jiān)控系統(tǒng)的實(shí)船運(yùn)行數(shù)據(jù)為信息源,結(jié)合數(shù)據(jù)倉庫進(jìn)行實(shí)船數(shù)據(jù)分析案例研究。
以某型船舶右主機(jī)轉(zhuǎn)速和氣缸排氣溫度數(shù)據(jù)為例進(jìn)行數(shù)據(jù)分析。運(yùn)行數(shù)據(jù)抽取軟件,獲取右主機(jī)大約1 d的轉(zhuǎn)速與A、B氣缸排氣溫度數(shù)據(jù),數(shù)據(jù)經(jīng)過轉(zhuǎn)換后加載到數(shù)據(jù)倉庫,將右主機(jī)轉(zhuǎn)速數(shù)據(jù)繪制成百分比折線,見圖5。
圖5 轉(zhuǎn)速百分比折線
由圖5折線能看出該船大致運(yùn)行工況,表3從整體上將各時(shí)間段運(yùn)行工況標(biāo)出,分析數(shù)據(jù)發(fā)現(xiàn)進(jìn)二與進(jìn)四工況運(yùn)行時(shí)間極短,在表中不單獨(dú)標(biāo)出。
表3 各時(shí)間段工況
圖6以柱狀圖的形式將該天各工況運(yùn)行時(shí)間占比表示出來。圖5中進(jìn)一工況運(yùn)行時(shí)間占比超過90%,進(jìn)三和進(jìn)五工況占比僅為1.16%,說明正常航行中該船絕大多數(shù)時(shí)間保持在中低航速。
圖6 運(yùn)行工況時(shí)間占比
為探究各數(shù)據(jù)點(diǎn)之間聯(lián)系,從數(shù)據(jù)抽取軟件中導(dǎo)出進(jìn)三工況下右主機(jī)轉(zhuǎn)速數(shù)據(jù)及A、B兩列氣缸排氣溫度數(shù)據(jù),時(shí)間取800 s。由于A、B兩列氣缸較多,對(duì)比后發(fā)現(xiàn)數(shù)據(jù)趨勢(shì)一致,各選4個(gè)氣缸排溫進(jìn)行繪圖說明。圖7是主工況進(jìn)三的轉(zhuǎn)速百分比折線,圖8為部分A列氣缸排氣溫度百分比折線,圖9為部分B列氣缸排氣溫度百分比折線。
圖7 進(jìn)三工況轉(zhuǎn)速百分比折線
圖8 部分A列氣缸排氣溫度
圖9 部分B列氣缸排氣溫度
圖7中,工況變化過程:進(jìn)一→進(jìn)三→進(jìn)一→進(jìn)二→進(jìn)一→空車。將轉(zhuǎn)速折線與A、B兩列氣缸的排氣溫度折線進(jìn)行對(duì)比,可發(fā)現(xiàn)當(dāng)右主機(jī)轉(zhuǎn)速上升時(shí),排氣溫度也會(huì)明顯上升。雖然工況變化導(dǎo)致各缸排溫有較大變化,但是始終滿足各缸溫差百分比≤12%的要求,溫差百分比可作為評(píng)估系統(tǒng)正常運(yùn)行的指標(biāo)。50~200 s內(nèi)A列氣缸溫度百分比平均上升約20.2%,B列氣缸溫度百分比平均上升約26.7%,200~550 s內(nèi)工況穩(wěn)定在進(jìn)三,各缸排氣溫度也基本穩(wěn)定,這個(gè)時(shí)間段各缸溫度的平均值都可以作為進(jìn)三工況的特征溫度,即在不清楚轉(zhuǎn)速等信息的條件下通過排氣溫度大小判斷運(yùn)行工況。
這一組數(shù)據(jù)說明轉(zhuǎn)速雖然與排氣溫度無直接聯(lián)系,但是工況調(diào)整時(shí),轉(zhuǎn)速與溫度都會(huì)相應(yīng)變化,變化趨勢(shì)相同。一定工況會(huì)對(duì)應(yīng)一定轉(zhuǎn)速和一定各缸排氣溫度,如進(jìn)三工況對(duì)應(yīng)A1氣缸排溫百分比為60.4%。通過抽取此類數(shù)據(jù)可以做到數(shù)據(jù)正確性比對(duì)和運(yùn)行工況分析,利用少量單一數(shù)據(jù)分析出隱藏的多種信息。
依據(jù)該方案對(duì)實(shí)船監(jiān)控系統(tǒng)運(yùn)行數(shù)據(jù)進(jìn)行試驗(yàn)分析,解決了數(shù)據(jù)查詢分析手段單一的問題,實(shí)現(xiàn)了數(shù)據(jù)的抽取、轉(zhuǎn)換、加載和分析。通過船舶運(yùn)行數(shù)據(jù)抽取與分析方案的設(shè)計(jì),對(duì)于數(shù)據(jù)向信息知識(shí)轉(zhuǎn)化的研究有推動(dòng)作用,為進(jìn)一步開展船舶運(yùn)行數(shù)據(jù)高級(jí)應(yīng)用管理提供基礎(chǔ)。