王瑞雪,張振華,張 賓,程子兵,段笑笑
(北方自動控制技術(shù)研究所, 太原 030006)
元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),描述了資源信息所具有的根本特征信息,數(shù)據(jù)字典是一種元數(shù)據(jù)的管理系統(tǒng),為元數(shù)據(jù)提供了一個集中存儲空間。經(jīng)常使用可擴展標記語言(XML)來描述元數(shù)據(jù),將元數(shù)據(jù)描述集中存儲生成數(shù)據(jù)字典。
參考文獻就關(guān)于XML和數(shù)據(jù)字典的開發(fā)與應(yīng)用進行了研究與探討,其中有的針對XML文件在邊境指揮信息系統(tǒng)領(lǐng)域、軍事裝配技術(shù)和武器裝備保障領(lǐng)域中存儲模型數(shù)據(jù)、實現(xiàn)數(shù)據(jù)格式互轉(zhuǎn)和傳輸協(xié)議互通進行了研究。有的基于元數(shù)據(jù)描述語言構(gòu)建了海量實驗數(shù)據(jù)管理平臺[1]、實現(xiàn)格式化數(shù)據(jù)鏈消息向結(jié)構(gòu)化XML文檔的轉(zhuǎn)化[2]和消息字典[3]。有的在工業(yè)控制領(lǐng)域提出了多協(xié)議報文解析方法[4]、通用電文解析技術(shù)[5],在指揮信息系統(tǒng)領(lǐng)域設(shè)計了可變消息格式的報文解析工具,在多平臺數(shù)據(jù)環(huán)境下設(shè)計了解析工具[6]?,F(xiàn)在元數(shù)據(jù)和數(shù)據(jù)字典在指揮系統(tǒng)和工業(yè)等領(lǐng)域多有使用,雖然在國內(nèi)的火控領(lǐng)域也提出了元數(shù)據(jù)和數(shù)據(jù)字典概念,但只是用于規(guī)范數(shù)據(jù)本身。
在炮兵壓制武器領(lǐng)域,指揮信息系統(tǒng)報文變更、報文類型隨炮兵各系列武器差異較大、彈種和設(shè)備擴展改進等導(dǎo)致的報文變更問題較為突出。首先,隨著各級指揮信息系統(tǒng)報文不斷優(yōu)化變更(“067”報文協(xié)議2015年9月版和2016年8月版),導(dǎo)致炮兵壓制武器火控系統(tǒng)報文協(xié)議進行適應(yīng)性改進。其次,不同炮兵武器平臺和不同系列火箭炮、身管炮火控系統(tǒng)往往開發(fā)了各自的報文編解碼應(yīng)用軟件,導(dǎo)致編解碼軟件通用性差。最后,隨著新型傳感器的發(fā)展,火控系統(tǒng)中新增彈種和設(shè)備,也對火控系統(tǒng)報文解碼提出了報文解析的可擴展性要求。
為了解決上述的3個問題,結(jié)合數(shù)據(jù)字典領(lǐng)域的當(dāng)前研究現(xiàn)狀,和數(shù)據(jù)字典可以將數(shù)據(jù)流分解為具有實際含義數(shù)據(jù)值的功能。采用XML描述報文數(shù)據(jù)結(jié)構(gòu)和約束條件的方法,建立指揮信息系統(tǒng)報文變更、炮兵各系列武器平臺火控系統(tǒng)不同以及彈種和設(shè)備擴展等原因?qū)е碌幕鹂叵到y(tǒng)報文變更的通用報文解碼方法。
為了保證火控系統(tǒng)通信的安全可靠與實時性,經(jīng)常使用CAN協(xié)議作為通信報文的傳輸協(xié)議。CAN通信報文的結(jié)構(gòu)如圖1所示。
圖1 CAN報文結(jié)構(gòu)
其中CAN報文由CAN報頭與CAN數(shù)據(jù)組成。其中CAN報頭由報文端口號等信息組成,報文數(shù)據(jù)項里包含真正需要傳輸?shù)臄?shù)據(jù)信息內(nèi)容。一般都為顯示為十六進制數(shù)的二進制原始數(shù)據(jù),具有編碼性質(zhì)和內(nèi)容“塊”的特點,根據(jù)不同的通信協(xié)議,有不同的編碼含義。
對于每一個火控系統(tǒng)數(shù)據(jù)元,都要對它的所有約束信息和火控系統(tǒng)協(xié)議數(shù)據(jù)的組織結(jié)構(gòu)進行規(guī)范化定義。這些信息就是描述報文元數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵信息。包括元數(shù)據(jù)ID、元數(shù)據(jù)名稱、元數(shù)據(jù)長度、長度單位、編碼類型、編碼名稱和編碼描述等內(nèi)容。其中,元數(shù)據(jù)ID用于報文描述時確定元數(shù)據(jù);元數(shù)據(jù)名稱用于報文可視化組裝過程,將數(shù)據(jù)信息注入,是元數(shù)據(jù)全局使用的標識;元數(shù)據(jù)長度用于確定元數(shù)據(jù)在報文中占據(jù)的數(shù)據(jù)長度,長度單位分為Byte和Bit兩種(Byte是1個字節(jié)有8位,而Bit就是一位,是0或1);編碼類型、編碼名稱和編碼描述主要用于報文在可視化組裝過程中,解析代碼的自動生成過程。根據(jù)元數(shù)據(jù)名稱,應(yīng)用元數(shù)據(jù)組建火控系統(tǒng)數(shù)據(jù)池,包含了所有要用到的火控系統(tǒng)元數(shù)據(jù)。
由于炮兵壓制武器領(lǐng)域存在的報文頻繁變更問題,對元數(shù)據(jù)提出了可以進行動態(tài)添加、刪除和修改的操作的需求。同時也要對火控系統(tǒng)數(shù)據(jù)元的約束信息和協(xié)議數(shù)據(jù)的組織結(jié)構(gòu)進行描述和限制??紤]到這些需求,為了達到更好描述火控系統(tǒng)報文數(shù)據(jù)信息和方便對報文數(shù)據(jù)信息進行修改和擴展的目的,結(jié)合XML允許用戶自定義所需標記、可進行無限擴展、定義任意復(fù)雜度結(jié)構(gòu)等性質(zhì),采用XML文件描述對于火控系統(tǒng)元數(shù)據(jù)的所有約束信息和報文數(shù)據(jù)組織結(jié)構(gòu)。
根據(jù)第1節(jié)中的報文的數(shù)據(jù)結(jié)構(gòu),設(shè)計火控系統(tǒng)報文協(xié)議的XML描述格式,使用前需要事先編輯好XML配置文件,保存至本地,等待使用。
由于XML具有良好的可擴展性,XML非常適合用來描述元數(shù)據(jù)。采用XML文件描述元數(shù)據(jù)的約束信息和數(shù)據(jù)結(jié)構(gòu)信息,這樣做的優(yōu)點是:數(shù)據(jù)字典結(jié)構(gòu)清晰,具有良好的可維護性和可擴展性,而且在生成難度較低的同時具有很高的生成效率。下面以定位信息報文為例,展示存儲數(shù)據(jù)字典的XML配置文件內(nèi)容格式。
下面是XML配置文件的一個示例,主要展示了定位信息的XML描述,這段代碼對報文里每個元數(shù)據(jù)的約束信息都清晰詳細的進行了描述:
Protocol>
針對XML協(xié)議配置文件,引用TinyXML開源庫,設(shè)計一種解析原始數(shù)據(jù)流的方法,將數(shù)據(jù)流與配置文件中的內(nèi)容一一匹配,刷新數(shù)據(jù)池中的元數(shù)據(jù)值。流程如下:
1) 讀取XML配置文件后,判斷文件是否存在且格式正確,如果正確進入下一步,如果不正確,直接結(jié)束進程;
2) 讀取報文標識位,計算報文類型ID,判斷與XML配置文件中的默認報文ID是否一致,如果一致則進入下一步,如果不一致,則返回上一步,遍歷報文標識位,匹配相應(yīng)的報文配置段;
3) 校驗報文字段的位置與長度,與元數(shù)據(jù)池中對應(yīng)的元數(shù)據(jù)名的變量相對應(yīng)進行復(fù)制,更新數(shù)據(jù)池中的元數(shù)據(jù)值。
報文解析工具由五個模塊組成:數(shù)據(jù)讀取模塊、數(shù)據(jù)處理模塊、讀取XML配置文件模塊、數(shù)據(jù)字典模塊和結(jié)果顯示模塊。
各個組成模塊的具體功能:
1) 數(shù)據(jù)讀取模塊:訪問數(shù)據(jù)庫,在線查詢數(shù)據(jù),將查詢后的數(shù)據(jù)緩存到內(nèi)存中,進入數(shù)據(jù)處理模塊處理后解析;
2) 數(shù)據(jù)處理模塊:判別原始數(shù)據(jù)中的偽報頭與校驗碼,根據(jù)各個協(xié)議的具體要求,輸出相應(yīng)的數(shù)據(jù)結(jié)構(gòu);
3) 讀取XML配置文件模塊:XML配置文件是數(shù)據(jù)字典的存儲形式,用來描述元數(shù)據(jù)模型,保存了對于元數(shù)據(jù)的所有約束信息和報文數(shù)據(jù)的組織結(jié)構(gòu),通過這個模塊將XML文件讀入;
4) 數(shù)據(jù)字典模塊:數(shù)據(jù)處理模塊輸出的數(shù)據(jù)結(jié)構(gòu)與讀取XML配置文件模塊中的報文數(shù)據(jù)信息進行匹配,同時與數(shù)據(jù)字典對應(yīng)元數(shù)據(jù)進行匹配,將數(shù)據(jù)信息賦值給數(shù)據(jù)池中的元數(shù)據(jù),向結(jié)果顯示模塊輸出數(shù)據(jù)信息,完成二進制數(shù)據(jù)向可視化數(shù)據(jù)轉(zhuǎn)化的解碼工作;
5) 結(jié)果顯示模塊:將數(shù)據(jù)解析的結(jié)果信息顯示在界面,將報文數(shù)據(jù)信息可視化。
Qt是一個用C++編寫的跨平臺開發(fā)框架,具有良好的跨平臺界面開發(fā)軟件,對象主要采用了信號和槽的通信方式,信號和槽機制可實現(xiàn)各模塊間的松耦合,使用Qt編程可以增強軟件的可擴展性和可移植性。
在開發(fā)時,采用Qt軟件開發(fā)C++程序,使用QtCreator完成:使用MySQL與C++的接口函數(shù)操作數(shù)據(jù)庫讀取相應(yīng)數(shù)據(jù);對數(shù)據(jù)庫中查詢到的原始數(shù)據(jù)進行數(shù)據(jù)處理;調(diào)用數(shù)據(jù)字典方法;讀取XML配置文件。采用QtDesigner設(shè)計用戶界面,提高軟件的人機交互性能。
運行系統(tǒng)為Linux系統(tǒng),軟件為已完成的報文解析工具。
數(shù)據(jù)來源為已存儲在數(shù)據(jù)庫的CAN通信原始數(shù)據(jù),是火控系統(tǒng)在正常工作狀態(tài)下,各個單體相互通信的數(shù)據(jù)。
實驗過程是:啟動解析工具,選擇查詢條件參數(shù),從數(shù)據(jù)庫查找出信息后會在界面顯示原始數(shù)據(jù),選中待解析的一條數(shù)據(jù),加載XML配置文件,進行匹配解析,將解析結(jié)果顯示在界面。
功能檢測:可擴展性,改變協(xié)議內(nèi)容,如交換兩個元數(shù)據(jù)的位置,只更改XML配置文件的內(nèi)容,將X,Y位置交換,然后解析數(shù)據(jù),發(fā)現(xiàn)解析后數(shù)據(jù)的值位置發(fā)生變化。
圖2為某火控系統(tǒng)中,兩個單體通信數(shù)據(jù)的解析結(jié)果,可以看出解析工具將元數(shù)據(jù)清晰地解析并顯示。
圖2 數(shù)據(jù)解析結(jié)果
原始配置文件如第二節(jié)所示,修改后的配置文件如下:
圖3為在XML配置文件中修改了經(jīng)度、緯度的相關(guān)描述信息,經(jīng)緯度位置互換,對經(jīng)度和緯度的編碼類型和描述進行了更改,并且刪除了高度信息的描述。
圖3 修改XML后解析結(jié)果
本文按照火控系統(tǒng)協(xié)議的數(shù)據(jù)結(jié)構(gòu),針對火控系統(tǒng)報文信息的組成原則和數(shù)據(jù)特征,結(jié)合XML的優(yōu)勢,用XML配置文件描述元數(shù)據(jù)信息,設(shè)計了通用的協(xié)議解析方法,解決了指揮信息系統(tǒng)報文變更、各系列炮兵壓制武器平臺差異和彈種設(shè)備擴展導(dǎo)致報文解碼擴展性差的問題。同時,基于數(shù)據(jù)字典技術(shù)開發(fā)了一個火控系統(tǒng)報文解析工具,具有界面操作和顯示功能,既可以驗證數(shù)據(jù)字典的可擴展性,又可以作為輔助軟件應(yīng)用在火控系統(tǒng)中。
本文首次將數(shù)據(jù)字典應(yīng)用于火控系統(tǒng)軟件應(yīng)用開發(fā)中,建立了火控系統(tǒng)跨平臺通用報文解析方法;增強了火控系統(tǒng)報文解碼的可擴展性;實現(xiàn)了火控軟件與協(xié)議松耦合,削弱了協(xié)議信息組織方式變化對上層應(yīng)用的影響。