謝曉方劉青松袁琨曹建
(1.海軍航空工程學院兵器科學與技術(shù)系煙臺264001)(2.91395部隊北京100000)
導引頭通用數(shù)據(jù)解析記錄軟件模塊設計
謝曉方1劉青松1袁琨2曹建1
(1.海軍航空工程學院兵器科學與技術(shù)系煙臺264001)(2.91395部隊北京100000)
在通過仿真測試床對導引頭進行性能評估的過程中,需要對導引頭的輸出結(jié)果進行記錄和解析,由于不同導引頭的輸出方式多樣,沒有統(tǒng)一的通訊協(xié)議,導致數(shù)據(jù)解析需要不斷修改解析程序。部分導引頭研制方因為保密問題不愿提供技術(shù)細節(jié),也會給數(shù)據(jù)解析帶來麻煩。針對這一問題,論文設計了通用的數(shù)據(jù)解析記錄軟件。定義了數(shù)據(jù)解析接口類,具體由導引頭研制方實現(xiàn)并提供dll,解析結(jié)果通過回調(diào)函數(shù)返回主程序。該方法能夠解決各類導引頭的數(shù)據(jù)解析問題,并且評估方不需要知道協(xié)議細節(jié),解決了技術(shù)保密問題。
通用數(shù)據(jù)解析;回調(diào)函數(shù);導引頭
Class NumberTP311
在進行導引頭的性能評估過程中,需要對導引頭的輸出結(jié)果進行記錄和解析。由于不同導引頭的輸出方式多樣,沒有統(tǒng)一的通訊協(xié)議,且部分導引頭研制方不愿提供詳細的技術(shù)細節(jié)。這些問題都會給導引頭性能評估中的數(shù)據(jù)解析帶來麻煩。為了解決上述問題,需要合理設計數(shù)據(jù)解析記錄軟件。
文獻[1~5]提出,可以通過XML文件作為通訊協(xié)議配置文件,從而實現(xiàn)數(shù)據(jù)的通用解析,但是部分研究方并不愿意透露通訊協(xié)議等技術(shù)細節(jié),因此不能使用XML配置文件進行配置。文獻[6~10]提出可以設計通用的協(xié)議,并設計協(xié)議轉(zhuǎn)換模塊來進行協(xié)議轉(zhuǎn)換,利用這種方式可以完成數(shù)據(jù)的映射和解析。這種方法是在已知某幾類協(xié)議的基礎上,總結(jié)協(xié)議特點,設計通用協(xié)議。這種通用協(xié)議的通用性較為有限。為了解決導引頭數(shù)據(jù)解析和記錄問題,應該降低數(shù)據(jù)解析部分和數(shù)據(jù)存儲處理部分的耦合程度。本文采用方法是,定義數(shù)據(jù)解析基類,研究方人員給出具體的子類實現(xiàn),并提供dll文件。在數(shù)據(jù)解析過程中,解析出的數(shù)據(jù)結(jié)果通過回調(diào)函數(shù)傳送給主程序。
2.1 記錄解析總體流程
導引頭測試結(jié)果的記錄和解析通常分為兩種方法,一種是實時解析并記錄,一種是先存儲,后解析。第一種方法需要保證每幀數(shù)據(jù)的解析時間和存儲時間要小于數(shù)據(jù)傳遞中兩幀的時間間隔。為了防止數(shù)據(jù)解析和數(shù)據(jù)存儲時間影響仿真速度,出現(xiàn)丟幀現(xiàn)象,本文采用先存儲,后解析的方式進行數(shù)據(jù)的記錄與解析。先記錄原始幀數(shù)據(jù),并存儲到數(shù)據(jù)庫當中。數(shù)據(jù)流圖如圖1所示。

圖1 原始數(shù)據(jù)存儲數(shù)據(jù)流圖
在仿真試驗結(jié)束之后,將數(shù)據(jù)庫中存儲的數(shù)據(jù)進行解析,并將結(jié)果存儲到數(shù)據(jù)庫中。具體的數(shù)據(jù)流圖如圖2所示。

圖2 數(shù)據(jù)解析數(shù)據(jù)流圖
2.2 數(shù)據(jù)解析流程
為了降低數(shù)據(jù)解析模塊和數(shù)據(jù)存儲模塊之間的耦合性,屏蔽數(shù)據(jù)解析的細節(jié),在實際應用中,定義好數(shù)據(jù)解析的虛基類,給出一系列方法,并規(guī)定需要解析返回的數(shù)據(jù)類型,導引頭研制方給出該虛基類的具體實現(xiàn),并通過dll的形式給出代碼文件。在實際的數(shù)據(jù)解析過程中,一旦解析出數(shù)據(jù)結(jié)果,則通過回調(diào)函數(shù)傳送給數(shù)據(jù)存儲主程序,并在回調(diào)函數(shù)中進行相關的處理。具體的數(shù)據(jù)存儲主程序的流程圖如圖3所示。
dll中的解析類由研制方提供,其中的解析函數(shù)的數(shù)據(jù)解析流程圖如圖4所示。
在數(shù)據(jù)解析的過程中,不同導引頭解析的數(shù)據(jù)不同,返回的數(shù)據(jù)類型也不一樣,為了能夠讓解析程序給出一致的數(shù)據(jù)解析結(jié)果,需要對數(shù)據(jù)解析的返回結(jié)果進行定義,并通過回調(diào)函數(shù)來傳遞數(shù)據(jù)記錄結(jié)果,具體的返回類型通過回調(diào)函數(shù)的參數(shù)來確定。并把相應的結(jié)果記錄在數(shù)據(jù)庫中。

圖3 數(shù)據(jù)解析主程序流程圖

圖4 數(shù)據(jù)解析流程圖
為了使主程序能夠直接調(diào)用dll中的解析函數(shù),需要進行數(shù)據(jù)解析類的基類設計。這里給出解析類的虛基類代碼如下:

其中,GetOriginData(unsigned char str)用于獲取原始幀數(shù)據(jù)。SetCallBack(PFCALLBACK gCall-Back)函數(shù)用于設置回調(diào)函數(shù),其中PFCALLBACK為回調(diào)函數(shù)的函數(shù)指針。DataAnalyse()用于進行數(shù)據(jù)解析,這是數(shù)據(jù)解析類的核心函數(shù),其中在函數(shù)中,如果解析出了數(shù)據(jù)結(jié)果,就調(diào)用回調(diào)函數(shù),向數(shù)據(jù)解析主程序傳遞解析數(shù)據(jù)。在編寫數(shù)據(jù)解析dll的時候,首先繼承CAnalyserBase基類,并實現(xiàn)其子類CAnalyser。具體的類圖如圖5所示。

圖5 數(shù)據(jù)解析類
在編寫dll時,需要導出函數(shù),供主程序調(diào)用,這里通過導出CreateObject()函數(shù),用于主程序創(chuàng)建實例對象。具體的函數(shù)聲明為
extern“C”DLL_API bool CreateObject(void**pObj);
回調(diào)函數(shù)用于接收dll中函數(shù)中解析出來的結(jié)果,并在函數(shù)體中進行相關的數(shù)據(jù)處理和存儲操作。由于不同類型導引頭的輸出結(jié)果并不一樣,為了能夠進行統(tǒng)一的性能評估,需要對解析后返回結(jié)果的類型和數(shù)據(jù)結(jié)構(gòu)進行定義。即通過規(guī)定解析類返回內(nèi)容來達到數(shù)據(jù)記錄標準化的作用,進而用于后續(xù)的導引頭和目標檢測跟蹤算法的性能評估。
4.1 返回數(shù)據(jù)設計
在具體的工程應用中,可以根據(jù)性能評估需求來確定需要解析記錄的數(shù)據(jù)結(jié)果。因為性能評估問題涉及到相關專業(yè)領域[11],這里僅給出部分的數(shù)據(jù)定義舉例,結(jié)果如表1所示。

表1 需要解析的返回結(jié)果
在具體的解析過程中,解析數(shù)據(jù)出現(xiàn)順序和次數(shù)未知??赡苣愁悢?shù)據(jù)多次出現(xiàn),例如檢測出目標的位置坐標,也有可能只出現(xiàn)一次,例如目標檢測標志等。所以在進行數(shù)據(jù)記錄的時候,解析出一個數(shù)據(jù)結(jié)果,就調(diào)用一次回調(diào)函數(shù)。
在具體的數(shù)據(jù)解析過程中,不同導引頭的輸出結(jié)果中可能沒有表1中所示的部分數(shù)據(jù),相應也不會解析出對應數(shù)據(jù)結(jié)果。這里,表1中定義的數(shù)據(jù)數(shù)量很多,可以覆蓋各類導引頭的各類返回參數(shù),針對某一型號的數(shù)據(jù)解析dll并不需要完成所有數(shù)據(jù)的解析,只要完成自身能夠解析出的數(shù)據(jù)即可。
4.2 回調(diào)函數(shù)具體定義
具體的回調(diào)函數(shù)定義如下:
typedef int(WINAPI*PFCALLBACK)
(Datatype type,void*pdata,int data_num)
其中Datatype為枚舉類型變量,其具體的定義如下:
enum datatype{detect_symbol,target_x,target_y,angle_x,angle_y,status_index,frame_num,…}
Datatype的作用在于標記解析出數(shù)據(jù)的類型。pdata為空指針,指向解析出的數(shù)據(jù),在回調(diào)函數(shù)中需要根據(jù)Datatype的類型進行指針的強制轉(zhuǎn)換,從而實現(xiàn)通過pdata傳遞各種類型的數(shù)據(jù)。data_num變量的作用在于記錄解析出數(shù)據(jù)的序號,通過序號可以表示出相關數(shù)據(jù)出現(xiàn)的先后順序,便于之后的處理和評估。
在存儲數(shù)據(jù)的過程中,需要將數(shù)據(jù)按照類型分開進行存儲。首先是原始數(shù)據(jù)的記錄,其次是解析后結(jié)果的記錄。對于原始數(shù)據(jù),只需要記錄數(shù)據(jù)幀的內(nèi)容即可,并通過編號標識數(shù)據(jù)幀的先后順序。對于解析之后的數(shù)據(jù),需要存儲到對應的數(shù)據(jù)表中,一張數(shù)據(jù)表對應著一類解析數(shù)據(jù),具體的E-R圖如圖6所示。

圖6 數(shù)據(jù)庫結(jié)構(gòu)E-R圖
其中data_num為dll中數(shù)據(jù)解析類解析出數(shù)據(jù)結(jié)果的順序編號,是數(shù)據(jù)結(jié)果的順序標識,在后續(xù)的性能評估過程中,可以利用data_num來進行數(shù)據(jù)的順序判斷,從而判斷解析數(shù)據(jù)之間邏輯關系。
在利用仿真試驗床進行完導引頭的仿真試驗后,就需要對記錄的原始幀數(shù)據(jù)進行解析。在具體的編程實現(xiàn)過程中,首先顯示加載dll,并獲取函數(shù)CreateObject的地址,并創(chuàng)建Analyser對象實例。具體代碼如下
typedef bool(*CreateObject)(void*pObj);//定義dll導出函數(shù)的函數(shù)指針類型
CreateObject CreateObj=NULL;
HINSTANCE handle;
CAnalyseBase*pObj=NULL;
//創(chuàng)建CAnalyseBase對象指針。
handle=::LoadLibrary(_T(“data_analyse.dll”));
if(handle==NULL)
FreeLibrary(handle);
CreateObj=(CreateObject)GetProcAddress(m_handle,”CreateObject”);
//創(chuàng)建解析類對象
(*CreateObj)((void**)&pObj);
在進行具體的解析時,首先設置回調(diào)函數(shù),從數(shù)據(jù)庫中讀取數(shù)據(jù),然后逐幀進行解析,當解析出數(shù)據(jù)結(jié)果后,就通過回調(diào)函數(shù)把數(shù)據(jù)類型,結(jié)果和結(jié)果序號傳遞給主程序。其中關鍵代碼如下所示:
pObj->SetCallBack(DataCollector);
for(int i=1;i<=num;i++)//遍歷原始數(shù)據(jù)數(shù)據(jù)庫中的數(shù)據(jù)字段
{//從數(shù)據(jù)庫中獲取數(shù)據(jù)
。。。
//向dll中傳送數(shù)據(jù)
pObj->GetOriginData(origindata);
//進行數(shù)據(jù)解析
PObj->DataAnalyse();
}
該方法能夠針對各類導引頭進行數(shù)據(jù)的記錄和解析,并且通過解析接口類的設計使得主程序能夠保持不變,通過更換dll即可實現(xiàn)解析方式的轉(zhuǎn)變。通過dll文件的使用有效地保護了研制方的技術(shù)細節(jié),使得該方法具有工程可行性。通過解析數(shù)據(jù)返回類型和回調(diào)函數(shù)的定義,使得數(shù)據(jù)存儲能夠做到標準化,方便了后續(xù)的性能評估。目前,該數(shù)據(jù)記錄解析方法已經(jīng)成功應用于制導炸彈導引頭性能評估實驗室的建設中,并取得較好的效果。
[1]劉喆,郇極,劉艷強.基于XML的EtherCAT工業(yè)以太網(wǎng)協(xié)議解析技術(shù)[J].北京航空航天大學學報,2011,37(9):1086-1090.
LIU Zhe,HUAN Ji,LIU Yanqiang.Parser of industrial Ethernet EtherCAT based on XML[J].Journal of Beijing University of Aeronautics and Astronautics,2011,37(9):1086-1090.
[2]曾根,呂建國,胡建軍,等.基于XML配置解析的車輛電子FlexRay總線通信技術(shù)的研究[J].車輛與動力技術(shù),2015,11(1):47-54.
ZENG Gen,LV Jianguo,HU Jianjun,et al.Research on FlexRay Communication Technology in Vehicle Electronic System Based on XML File Parsing[J].Vehicle&Power Technology,2015,11(1):47-54.
[3]王鳳連.一種可配置的協(xié)議解析器分析[J].無線互聯(lián)科技,2016,7(14):78-80.
WANG Fenglian.Analysis of a configurable Protocol parser[J].Wireless Internet Technology,2016,7(14):78-80.
[4]張娜,焦東來,吳子杰,等.基于XML遠程數(shù)據(jù)傳輸協(xié)議的研究與應用[J].計算機技術(shù)與發(fā)展,2016,26(5):12-16.
ZHANG Na,JIAO Donglai,WU Zijie,et al.Research and Implementation of Remote Data Transmission Based on XML Protocol[J].Comuputer Technology and Development,2016,26(5):12-16.
[5]桑靜,王宜懷.基于XML文件組織的嵌入式監(jiān)控組態(tài)軟件設計[J].計算機系統(tǒng)應用,2013,22(1):134-137,156.
SANG Jing,WANG Yihuai.Design of Embedded Control Configuration Software Based on XML File Organization[J].Application of computer system,2013,22(1):134-137,156.
[6]賈歡歡,王純.一種業(yè)務無關的通用協(xié)議[J].計算機系統(tǒng)應用,2011,20(2):173-177.
JIA Huanhuan,WANG Chun.Service-Unrelated Communication Protocol[J].Application of computer system,2011,20(2):173-177.
[7]項菲,林山.一種新型通用串口通訊協(xié)議分析器的設計[J].科學技術(shù)與工程,2013,13(7):1992-1995.
XIANG Fei,LIN Shan.Design of a new type of universal serial communication protocol analyzer[J].Science Technology and Engineering,2013,13(7):1992-1995.
[8]葉水生,趙亮.基于通用協(xié)議字典的數(shù)據(jù)封裝與發(fā)送研究[J].信息通訊,2014,12(4):9-11.
YE Shuisheng,ZHAO Liang.Research on data encapsulation and send Based on general protocol dictionary[J].Information&Communications,2014,12(4):9-11.
[9]高國輝.基于通用協(xié)議轉(zhuǎn)換接口的企業(yè)服務總線技術(shù)[J].信息技術(shù),2013,4(12):154-157.
GAO Guohui.Enterprise Service Bus Technology Based on Common Protocol Transform Interface[J].Information Technology,2013,4(12):154-157.
[10]梅勤勇,朱行,陳巍.基于VC++的通用串口控制軟件平臺的設計[J].信息與電腦,2012,10(1):61-62.
MEI Qinyong,ZHU Xing,CHEN Wei.Design of Universal Serial Port Control Software Platform Based on VC++[J].China Computer&Communication,2012,10(1):61-62.
[11]張曉哲,李云霞,馬麗華,等.紅外成像導引頭性能評估系統(tǒng)的分析與設計[J].紅外技術(shù),2008,30(3):136-138,149.
ZHANG Xiaozhe,LI Yunxia,MA Lihua,et al.Analysis and Design of IR Seeker Capability Evaluation System[J].Infrared Technology,2008,30(3):136-138,149.
Design of General Software Module of Data Parsing and Recording for Seeker
XIE Xiaofang1LIU Qingsong1YUAN Kun2CAO Jian1
(1.Department of Ordnance Science and Technology,Naval Aeronautical and Astronautical University,Yantai264001)(2.No.91395 Troops of PLA,Beijing100000)
In the process of performance evaluation of the seeker through simulation test bed,it is necessary to record and analyze the output result of the seeker.Due to the different output models and communication protocols of the seeker,the analytical procedures need to be constantly modified.Because of confidentiality issues,some of the seeker developers don't want to provide technical details,which will also bring trouble to the data analysis.Aiming at this problem,this paper designs a general data record analysis software.Defines the data analysis interface class,which is realized by the seeker developer and provided by the DLL,and the result is returned to the main program through the callback function.This method can solve the data analysis problem of many kinds of seeker,and the evaluator does not need to know the details of the protocol,which solves the problem of technical secrecy.
data analysis,callback function,seeker
TP311
10.3969/j.issn.1672-9722.2017.06.043
2016年12月7日,
2017年1月25日
謝曉方,男,教授,博士生導師,研究方向:武器系統(tǒng)與運用。劉青松,男,碩士研究生,研究方向:軟件工程。袁琨,女,研究方向:軟件工程,無線電。曹建,男,講師,研究方向:虛擬現(xiàn)實、計算機視覺。