(92124部隊(duì) 大連 116023)
在飛行器飛行測(cè)試中,遙測(cè)數(shù)據(jù)處理是測(cè)控系統(tǒng)的重要組成部分,其結(jié)果數(shù)據(jù)是分析和檢驗(yàn)飛行器飛行狀態(tài)和各系統(tǒng)工作性能的重要依據(jù)[1]。發(fā)動(dòng)機(jī)等部位會(huì)安裝溫度傳感器用于監(jiān)測(cè)艙室溫度,這些溫度參數(shù)對(duì)監(jiān)測(cè)飛行器的狀態(tài)非常重要。溫度參數(shù)數(shù)據(jù)一般包含在遙測(cè)數(shù)據(jù)中通過(guò)遙測(cè)系統(tǒng)傳輸?shù)降孛娼邮赵O(shè)備中。由于溫度傳感器的輸出電壓與真實(shí)的溫度值之間的函數(shù)關(guān)系是一個(gè)分段函數(shù)[2],給參數(shù)處理帶來(lái)不便。以往的做法是每次針對(duì)溫度傳感器的分段函數(shù)修改相應(yīng)的遙測(cè)處理軟件代碼。而修改遙測(cè)處理軟件要求修改的人員專業(yè)性比較強(qiáng),參數(shù)處理人員不具備這一能力;軟件修改后需要重新編譯、測(cè)試沒(méi)問(wèn)題后再發(fā)布給使用人員,這種修改模式不能在測(cè)試處理的現(xiàn)場(chǎng)修改,靈活性不強(qiáng),迫切需要一種能靈活處理溫度傳感器參數(shù)數(shù)據(jù)的方法[3]。
徐振濤在研究溫度傳感器時(shí)將溫度感應(yīng)電路的輸出分段線性化,得到的溫度與輸出信號(hào)的關(guān)系是分段函數(shù)[3]。在工程應(yīng)用中,也采用類似方式將溫度傳感器的輸出電壓與溫度之間的函數(shù)關(guān)系表示為一個(gè)分段函數(shù),用公式表示為
其中T為溫度測(cè)量值,ULi、UHi分別為第i個(gè)電壓分段區(qū)間的下限和上限;ai、bi為變換系數(shù)中斜率和截距,n為段數(shù)。
每個(gè)溫度傳感器在使用前會(huì)進(jìn)行嚴(yán)格的測(cè)試,標(biāo)校出其處理式(1)中對(duì)應(yīng)的ULi、UHi、ai、bi及段數(shù)n。根據(jù)工程應(yīng)用經(jīng)驗(yàn),對(duì)于不同的溫度傳感器,其處理公式中ULi、UHi、ai、bi及段數(shù)n不同;同一溫度傳感器在不同時(shí)間內(nèi)標(biāo)校的處理公式也不同。在一次飛行測(cè)試中,可能會(huì)使用多個(gè)溫度傳感器,在不同批次的飛行測(cè)試中使用的同一個(gè)溫度傳感器其處理公式中參數(shù)也可能不同。這就給溫度傳感器參數(shù)的處理帶來(lái)了難度。
飛行器測(cè)試的遙測(cè)數(shù)據(jù)處理流程如圖1所示,地面接收到遙測(cè)數(shù)據(jù)后,首先對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,剔除未接收完全的數(shù)據(jù)幀;預(yù)處理后的數(shù)據(jù)依據(jù)數(shù)據(jù)協(xié)議進(jìn)行分路(使數(shù)據(jù)流中各路數(shù)據(jù)分離的處理就稱為分路[4~5]),將各個(gè)參數(shù)分解為單獨(dú)的數(shù)據(jù)文件;之后對(duì)每個(gè)參數(shù)的每個(gè)采樣點(diǎn)進(jìn)行配時(shí),形成配時(shí)文件;配時(shí)完成后依據(jù)處理公式對(duì)分路的數(shù)據(jù)文件和配時(shí)文件進(jìn)行物理量還原計(jì)算,計(jì)算結(jié)果以文本文件形式輸出。溫度傳感器參數(shù)數(shù)據(jù)的處理流程跟遙測(cè)數(shù)據(jù)的處理大致相同。
圖1 遙測(cè)數(shù)據(jù)處理流程
在還原計(jì)算過(guò)程中,溫度傳感器數(shù)據(jù)還原處理依據(jù)式(1)進(jìn)行。溫度傳感器處理公式經(jīng)常變化導(dǎo)致在遙測(cè)處理軟件中對(duì)溫度傳感器測(cè)試數(shù)據(jù)的處理模塊也需要經(jīng)常變化,以往都是針對(duì)每個(gè)溫度傳感器根據(jù)其標(biāo)校的處理公式編寫(xiě)一個(gè)處理函數(shù),導(dǎo)致在處理飛行測(cè)試數(shù)據(jù)時(shí)需要經(jīng)常修改處理軟件的代碼。修改處理軟件要求修改的人員專業(yè)性比較強(qiáng),數(shù)據(jù)處理人員只是處理軟件的使用人員,一般情況下不具備這一能力;軟件修改后需要重新經(jīng)過(guò)編譯、測(cè)試通過(guò)后,再發(fā)布給使用人員。這種修改模式不能在測(cè)試處理的現(xiàn)場(chǎng)修改,靈活性不強(qiáng),迫切需要一種能靈活處理溫度傳感器參數(shù)數(shù)據(jù)的方法。
JavaScript是一種基于對(duì)象(Object)和事件驅(qū)動(dòng)(Event Driven)并具有安全性能的腳本語(yǔ)言,具有簡(jiǎn)單性、安全性、動(dòng)態(tài)性、跨平臺(tái)性優(yōu)點(diǎn)[6]。JavaScript具有豐富的內(nèi)置函數(shù),它通過(guò)腳本引擎解釋執(zhí)行。利用微軟的ActiveX Scripting技術(shù)可以實(shí)現(xiàn)在應(yīng)用程序中嵌入和擴(kuò)展腳本引擎,使應(yīng)用程序在不被修改的情況下為各種腳本語(yǔ)言所控制[7~10]。嵌入了腳本引擎的應(yīng)用程序,對(duì)于腳本而言就是宿主(Host)程序。
由于JavaScript語(yǔ)言具有相對(duì)簡(jiǎn)單、靈活的優(yōu)點(diǎn),采用在遙測(cè)處理軟件中嵌入JavaScript腳本引擎,在計(jì)算溫度傳感器參數(shù)時(shí),參數(shù)溫度還原計(jì)算模塊創(chuàng)建并啟動(dòng)腳本引擎,控制腳本引擎讀取并裝入JavaScript腳本語(yǔ)句,計(jì)算模塊將原始電壓值傳遞給腳本引擎,腳本引擎計(jì)算完溫度傳感器參數(shù)后再將計(jì)算結(jié)果回傳給計(jì)算模塊,所有的原始值計(jì)算完成后計(jì)算模塊關(guān)閉引擎。軟件計(jì)算模塊與腳本引擎的關(guān)系如圖2所示[11]。
圖2 軟件計(jì)算模塊與腳本引擎的關(guān)系
微軟的ActiveX Scripting技術(shù)通過(guò)一系列接口能使宿主程序和腳本引擎連接起來(lái),從而可以在宿主程序中動(dòng)態(tài)執(zhí)行腳本,利用微軟的ActiveX Scripting 技術(shù)實(shí)現(xiàn)腳本計(jì)算的過(guò)程如下[12~13]:
1)聲明并創(chuàng)建腳本引擎對(duì)象
CComQIPtr<IActiveScript>pAS; // 聲 明腳本引擎對(duì)象
pAS.CoCreateInstance(“JavaScript”);// 創(chuàng) 建腳本引擎對(duì)象
2)創(chuàng)建解析腳本接口對(duì)象
CComQIPtr< IActiveScriptParse > pASP(pAS);
3)設(shè)置解析腳本接口對(duì)象的宿主
pAS->SetScriptSite(this);
4)初始化解析腳本接口
pASP->InitNew();
5)添加腳本命名,以添加傳感器01參數(shù)的腳本名為例。
pAS->AddNamedItem(L“Temper01”,SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE);
6)讀入腳本并計(jì)算腳本
CComBSTR comBstr = ReadFile(Temper01ScriptFile);//讀入傳感器01參數(shù)的腳本
//調(diào)用引擎解釋運(yùn)行腳本,計(jì)算參數(shù)值
hr=pASP->ParseScriptText(comBstr,L“Pack-ageScriptParse”,NULL,NULL,0,0,0,NULL,NULL);
7)關(guān)閉腳本引擎
pAS->Close();
宿主程序?qū)崿F(xiàn)Automation接口,腳本引擎通過(guò)宿主程序的Automation接口,可以在動(dòng)態(tài)執(zhí)行的腳本中訪問(wèn)宿主程序的對(duì)象,從而實(shí)現(xiàn)計(jì)算參數(shù)的值傳遞和計(jì)算結(jié)果的傳出。
在計(jì)算溫度參數(shù)前,事先編輯好計(jì)算各個(gè)溫度參數(shù)的腳本文件,并保存為單個(gè)腳本文件。在配置中保存溫度參數(shù)和其對(duì)應(yīng)腳本文件名,宿主程序根據(jù)待計(jì)算的溫度參數(shù)匹配腳本文件,在計(jì)算開(kāi)始前讀入腳本文件,在計(jì)算過(guò)程中調(diào)用腳本引擎逐點(diǎn)計(jì)算溫度參數(shù)的值,宿主程序?qū)⒂?jì)算結(jié)果保存到結(jié)果文件中。
溫度參數(shù)利用式(1)計(jì)算溫度值的JavaScript腳本的偽代碼如下:
計(jì)算溫度參數(shù)的JavaScript腳本調(diào)試過(guò)程中需要借助宿主程序執(zhí)行計(jì)算過(guò)程進(jìn)行,腳本引擎能夠報(bào)告腳本的錯(cuò)誤信息,宿主程序通過(guò)實(shí)現(xiàn)IActiveScriptSite的OnScriptError()函數(shù)可以捕獲到錯(cuò)誤信息,宿主程序?qū)⑦@些錯(cuò)誤信息顯示到界面中可以有效幫助用戶排查腳本的錯(cuò)誤。
遙測(cè)處理軟件中采用了JavaScript腳本引擎處理遙測(cè)數(shù)據(jù)中溫度參數(shù),可以在不修改處理軟件源代碼、不重新編譯的情況下,僅通過(guò)修改JavaScript腳本就能靈活處理不同的溫度參數(shù)或者公式參數(shù)的變動(dòng)。這一方法具有靈活、適應(yīng)性強(qiáng)的特點(diǎn),數(shù)據(jù)處理人員經(jīng)過(guò)簡(jiǎn)單培訓(xùn)后就能通過(guò)修改和調(diào)試JavaScript腳本處理溫度參數(shù)數(shù)據(jù)。此方法不僅可以用于溫度參數(shù)數(shù)據(jù)的處理,也可以應(yīng)用于公式復(fù)雜多變的其他遙測(cè)參數(shù)的處理,不足之處是處理速度較慢,對(duì)于處理公式簡(jiǎn)單、公式基本不變的參數(shù)不建議采用此方法。