王利偉 劉春光
摘 要: 飛行器的遙測數(shù)據(jù)幀格式隨型號、批次而不同,給遙測數(shù)據(jù)處理帶來很大不便。利用ActiveX Scripting 技術(shù)能實現(xiàn)VBScript引擎嵌入到遙測處理程序中,使得遙測處理程序在不修改程序的情況下能夠通過VBScript腳本靈活處理多變的數(shù)據(jù)幀格式。經(jīng)應(yīng)用證明,該技術(shù)具有配置靈活、可擴(kuò)展性強(qiáng)等特點(diǎn),能夠滿足不同格式遙測數(shù)據(jù)解析的需要。
關(guān)鍵詞: 遙測; 數(shù)據(jù)處理; VBScript; 幀解析模塊
中圖分類號: TN975?34; V557+.3 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)11?0117?02
Research on telemetry data processing technology based on VBScript
WANG Li?wei, LIU Chun?guang
(Detachment of 94, Unit 91550 of PLA, Dalian 116023, China)
Abstract: The frame format of telemetry data for aircraft is different with models and batches, so it is inconvenient for the telemetry data processing. VBScript engine embedded into the telemetry processing program is realized by using ActiveX Scripting technology, with no program modification of the telemetry processing programs, the various data frame formats are processed by VBScript. The application proves that the proposed technology has the advantages of flexible configuration, good extensibility and so on, and can satisfy the demands of analysis for telemetry data in different formats.
Keywords: telemetry; data processing; VBScript; frame analysis module
0 引 言
因飛行器型號不同、批次不同,遙測數(shù)據(jù)幀格式定義也不盡相同。為處理不同格式的遙測數(shù)據(jù)幀,或者需要重新編制遙測處理程序,或者需要修改原有程序,因軟件開發(fā)測試造成的工作量增加、風(fēng)險增大,給遙測數(shù)據(jù)處理工作帶來很大不便。
腳本語言具有強(qiáng)大的描述能力和靈活的語法結(jié)構(gòu),為應(yīng)用程序提供腳本支持及進(jìn)行混合語言開發(fā),是實現(xiàn)可擴(kuò)展和可定制的有效方案[1]。為改變以上不利局面,設(shè)想通過在遙測數(shù)據(jù)處理程序中引入腳本引擎的方式以達(dá)到解決上述問題的目的,并進(jìn)行了有益的嘗試。
1 ActiveX Scripting技術(shù)
腳本語言通過腳本引擎解釋執(zhí)行,通過在應(yīng)用程序中嵌入腳本引擎,可以使應(yīng)用程序解釋執(zhí)行用戶的程序文本,將它譯成計算機(jī)能執(zhí)行的機(jī)器代碼,完成一系列的功能,從而達(dá)到應(yīng)用程序可擴(kuò)展的目的。ActiveX Scripting技術(shù)是Microsoft Automation技術(shù)和Script技術(shù)結(jié)合的產(chǎn)物,是Microsoft ActiveX技術(shù)的一個組成部分[2]。利用ActiveX Scripting技術(shù),通過在遙測數(shù)據(jù)處理軟件中嵌入VBScript引擎,從而在軟件中執(zhí)行VBScript腳本。
現(xiàn)有的腳本引擎的功能不能滿足需要時,可以通過自定義函數(shù)或接口擴(kuò)展腳本。Microsoft Automation技術(shù)以COM(組件對象模型)為基礎(chǔ),所有的Automation對象都實現(xiàn)了標(biāo)準(zhǔn)的IDispatch接口,通過IDispatch接口暴露自定義的屬性和方法,可以在腳本中使用這些屬性和方法,Automation對象提供事件處理。腳本引擎根據(jù)對象的類型信息,把其中對對象屬性和方法的引用解釋為對IDispatch接口成員函數(shù)Invoke的調(diào)用,從而實現(xiàn)對對象的控制。通過這一機(jī)制,可以在遙測數(shù)據(jù)處理軟件中創(chuàng)建Automation對象,將其屬性和方法暴露給腳本引擎,腳本引擎通過IDispatch接口調(diào)用屬性和方法的處理。
2 基于VBScript的遙測數(shù)據(jù)幀解析技術(shù)
2.1 遙測數(shù)據(jù)幀特點(diǎn)
遙測數(shù)據(jù)幀的數(shù)據(jù)定義千差萬別,但其結(jié)構(gòu)一般都包含幀頭、幀標(biāo)志、幀數(shù)據(jù)、幀校驗、幀尾(有些遙測數(shù)據(jù)幀定義中不包含幀校驗)[3],可以用以下形式表示:
其中,
幀數(shù)據(jù)是按一定格式定義的字段組成,用于表示監(jiān)測的各個物理量參數(shù),其結(jié)構(gòu)構(gòu)成和表示的物理量的計算公式差別很大。
遙測數(shù)據(jù)處理過程中一般要經(jīng)過主幀分路、幀解析、分析顯示等過程,如圖1所示。主幀分路模塊依據(jù)分路配置信息進(jìn)行分路,分路后的數(shù)據(jù)幀文件作為幀解析模塊的輸入;幀解析模塊首先依據(jù)幀格式定義解析幀結(jié)構(gòu),之后經(jīng)過物理量還原得到各個參數(shù)的物理量結(jié)果,該結(jié)果作為分析顯示模塊的輸入。
數(shù)據(jù)幀字段經(jīng)解析計算后輸出為表示的物理量的值,這一過程是遙測數(shù)據(jù)處理中非常重要的步驟。由于要處理的遙測數(shù)據(jù)幀格式種類多,變化比較大,解析計算字段并輸出物理量參數(shù)需要經(jīng)常修改遙測數(shù)據(jù)處理軟件。
2.2 基于VBScript的遙測數(shù)據(jù)幀解析技術(shù)
現(xiàn)有的遙測數(shù)據(jù)處理軟件的幀解析模塊使用VC++開發(fā),為了實現(xiàn)通過VBScript腳本靈活處理遙測數(shù)據(jù)幀的目的,需要在幀解析模塊中嵌入VBScript腳本引擎。利用ActiveX Scripting技術(shù)可以方便地實現(xiàn)在解析模塊中嵌入VBScript引擎,從而在軟件中執(zhí)行VBScript腳本,需要對幀解析模塊進(jìn)行如下修改:
(1) 實現(xiàn)回調(diào)接口IActiveScriptSite
腳本引擎通過IActiveScript->SetScriptSite()實現(xiàn)回調(diào),從而在程序中取得引擎的狀態(tài)信息,并提供用戶的自定義變量的自動化對象。
(2) 創(chuàng)建VBScript引擎對象
使用CoCreateInstance()創(chuàng)建VBScript腳本引擎,獲得該引擎的接口IActiveScript。
(3) 擴(kuò)展腳本方法
現(xiàn)有的腳本引擎的功能不能滿足需要時,可以通過自定義函數(shù)或接口擴(kuò)展腳本。為計算字段的值并給字段賦值,至少需要擴(kuò)展字段取原始值和賦計算結(jié)果接口,即:
VARIANT GetVal (VARIANT fieldID, VARIANT fieldLen);
//根據(jù)字段ID取字段原始值,fieldLen表示字段所占字節(jié)數(shù)
SetVal (VARIANT fieldID, VARIANT newValue);
//設(shè)置字段的計算結(jié)果值
如果需要處理非整字節(jié)字段(即bit位字段),還需擴(kuò)展位字段取原始值和賦計算結(jié)果的接口函數(shù),與上面的方法類似,不再一一列舉。
(4) 解釋執(zhí)行用戶代碼
通過IActiveScript->QueryInterface()取得IActiveScriptParse接口,IActiveScriptParse用于解釋執(zhí)行用戶的腳本代碼。
解析軟件內(nèi)部主控模塊與腳本引擎的關(guān)系如圖2所示。
在遙測程序中嵌入VBScript腳本引擎后,通過VBScript腳本能夠進(jìn)行復(fù)雜的邏輯計算,可以實現(xiàn)很靈活的擴(kuò)展和配置,在不修改解析模塊代碼的前提下可以實現(xiàn)對不同格式的遙測數(shù)據(jù)解析。
2.3 應(yīng)用舉例
例一:計算單字段情況
遙測幀中計算壓力字段是較常見的,下面以計算某壓力字段為例進(jìn)行說明,該壓力字段幀內(nèi)ID為1,計算公式如下:
[y=1 000x-200] (1)
式中:[x]為壓力字段的原始值;[y]為該壓力物理量的實際值。
根據(jù)公式(1),該壓力字段的VBScript計算腳本為:
dim rawX
dim y
rawX = GetVal(1)
y=1000* rawX -200
SetVal(1,y)
上述腳本中,通過SetVal()函數(shù)設(shè)置該壓力字段的計算結(jié)果后,該結(jié)果就可作為分析顯示模塊的輸入。
例二:輸出結(jié)果需要多個字段的情況
GPS接收機(jī)偽距觀測值的計算需要表1中的字段。
字段“偽距觀測值”并不是在遙測數(shù)據(jù)幀中的字段,加上該字段的配置是為了輸出最終的“偽距觀測值”這一物理量的需要。
表1 字段表
[字段ID\&字段名稱\&類型\&長度\&備注\&12\&GPS周秒\&double\&4\&\&22\&偽碼相位\&int\&4\&\&125\&偽距觀測值\&double\&\&非幀內(nèi)字段\&]
偽距觀測值計算公式如下:
[p=(S-λ(1 023 000.0×2 048.0))?c] (2)
式中:[p]為偽距觀測值;[S]為GPS周秒;[λ]為偽碼相位;c為光速[4],取為299 792 458.0。
根據(jù)式(2)偽距觀測值的取值腳本如下:
Dim xw=GetValue(22) ‘取偽碼相位字段值
Dim S=GetValue(12) ‘取GPS周秒字段值
Dim p=(S-xw/(1 023 000.0 * 2 048.0))* 299 792 458.0 ‘計算偽距觀測值
SetValue(125,p) ‘向偽距觀測值賦計算結(jié)果
實際上字段的計算公式比較復(fù)雜且格式多,利用VBScript腳本計算不常見公式的字段值大大提高了遙測幀數(shù)據(jù)處理時的靈活性。
3 結(jié) 語
由于工程應(yīng)用中面對的飛行器型號多遙測數(shù)據(jù)幀格式多變,要編制一個通用的遙測數(shù)據(jù)解析軟件存在較大難度,本文在遙測數(shù)據(jù)幀解析的通用性方面做了有益的嘗試。由于將VBScript引擎嵌入到解析模塊,從而可以利用VBScript的靈活性實現(xiàn)對不同遙測幀格式的處理,無需修改解析模塊源代碼。經(jīng)過應(yīng)用證明,該技術(shù)具有配置靈活、可擴(kuò)展性強(qiáng)等特點(diǎn),能夠滿足不同格式遙測數(shù)據(jù)解析的需要。
參考文獻(xiàn)
[1] OUSTERHOUT J K. Scripting: higher level programming for the 21st century [J]. IEEE Computer, 1998, 31(3): 23?30.
[2] 呂思偉,潘愛民.ActiveX Scripting技術(shù)介紹[J].微電腦世界, 1999(1):1?3.
[3] 展勇忠,柯朝祥,舒海濤.靶場試驗遙測數(shù)據(jù)實時處理軟件技術(shù)[J].國防技術(shù)基礎(chǔ),2007(11):52?56.
[4] 熊志昂.GPS技術(shù)與工程應(yīng)用[M].北京:國防工業(yè)出版社,2005.
[5] 羅振貴,鄭永秋,李圣昆.固態(tài)記錄器在遙測數(shù)據(jù)回收中的應(yīng)用研究[J].現(xiàn)代電子技術(shù),2013,36(7):111?114.
[6] 常樹龍.空空導(dǎo)彈遙測數(shù)據(jù)三維實時顯示系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2010,33(4):64?66.