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