房 瑾,覃 燕 ,穆永河
(中國(guó)飛行試驗(yàn)研究院 陜西 西安 710089)
在飛行試驗(yàn)中,試飛員通過觀察飛機(jī)儀表提供的測(cè)試參數(shù)操縱飛機(jī),從而完成試驗(yàn)任務(wù)要求的飛行動(dòng)作達(dá)到試驗(yàn)的目的。隨著新型號(hào)的不斷出現(xiàn),試驗(yàn)內(nèi)容也更加復(fù)雜,經(jīng)常有一些特殊的測(cè)試參數(shù)飛行員需要隨時(shí)觀察,而飛機(jī)儀表又不提供或不能按要求提供的情況。另外有一些測(cè)試參數(shù)飛機(jī)儀表提供顯示但卻分散在不同的表盤中,而某個(gè)試驗(yàn)課題往往要求將幾個(gè)不同的參數(shù)集中顯示在一個(gè)表盤上,以便飛行員能在短時(shí)間內(nèi)及時(shí)觀察到課題所關(guān)心的參數(shù)。還有一些風(fēng)險(xiǎn)課題的測(cè)試參數(shù)需要提供超限報(bào)警或狀態(tài)報(bào)警功能,而這些功能飛機(jī)儀表是不提供的。
針對(duì)以上問題,本文提出了通用試飛參數(shù)顯示儀的設(shè)計(jì)和實(shí)現(xiàn)方法。該設(shè)備能對(duì)飛機(jī)上的測(cè)試參數(shù)按照試驗(yàn)要求進(jìn)行實(shí)時(shí)處理并實(shí)時(shí)顯示。滿足各類試飛課題的特殊需要,為試飛員提供需要的測(cè)試參數(shù)。
通用試飛參數(shù)顯示儀的硬件主要由顯示屏,信號(hào)轉(zhuǎn)接板,CPU板,電源板4部分組成。
在硬件選型及設(shè)計(jì)上嚴(yán)格按照機(jī)載產(chǎn)品的要求指標(biāo),顯示屏選用軍用寬溫、加固型彩色液晶顯示屏,亮度800 cd/m[2],在強(qiáng)烈陽(yáng)光下可讀。該顯示屏水平視角55°/55°,上下視角35°/40°,保證了試飛員在空中強(qiáng)光線及大角度下都可以清晰的觀察到顯示屏上的參數(shù)值。為滿足電磁兼容性要求,定制一款對(duì)頻率為1 GHz以內(nèi)的電磁輻射屏蔽效能達(dá)50 dB的2 mm防暴強(qiáng)化屏蔽玻璃,經(jīng)過電磁兼容性的試驗(yàn),試驗(yàn)數(shù)據(jù)顯示該設(shè)備達(dá)到了國(guó)軍標(biāo)中關(guān)于電磁兼容性相關(guān)項(xiàng)的要求。
該顯示儀主板為一塊PC-104主板,選用一款高性能CPU模塊,在主板上集成了10/100Base-T以太網(wǎng)接口及高性能圖形處理器,最高運(yùn)行速度可達(dá)500 MHz,圖形處理器可支持各種LCD及TFT顯示屏,1M顯存。滿足該顯示儀實(shí)時(shí)性要求。
信號(hào)轉(zhuǎn)接板的功能是將CPU板上的網(wǎng)口、串口信號(hào)引出,轉(zhuǎn)接到機(jī)箱插頭上。使用該板的好處是可以不用在CPU板上直接焊接信號(hào)線,避免焊接時(shí)發(fā)生燒壞CPU板的危險(xiǎn),并且可使CPU板拆卸容易,維護(hù)方便。
電源板直接給PC/104總線供電,也可通過板卡上的電源接口供電,輸出具有連續(xù)短路保護(hù)功能。為了保證電源電路能在特殊情況下不受損壞,以及考慮電磁兼容性,外部28 V在進(jìn)入該電源板前,加裝保險(xiǎn)、反向保護(hù)、EMI濾波等電路,其電路圖如圖1所示。
圖1 28V電源保護(hù)及濾波電路圖Fig.1 power protection and filtration circuit
基于模塊化設(shè)計(jì)的標(biāo)準(zhǔn),按照系統(tǒng)功能,本軟件主要由網(wǎng)絡(luò)通訊、參數(shù)處理、儀表顯示3個(gè)功能模塊組成。該顯示儀的軟件的開發(fā)采用VC++與GL Studio相結(jié)合的方式,流程圖如2所示。
圖2 軟件總體流程Fig.2 Flow chart the software design
網(wǎng)絡(luò)通訊模塊主要完成網(wǎng)絡(luò)端口檢測(cè),根據(jù)配置文件進(jìn)行數(shù)據(jù)包的接收。
機(jī)載測(cè)試網(wǎng)絡(luò)中,負(fù)責(zé)采集數(shù)據(jù)的是數(shù)臺(tái)機(jī)載采集器,采集的數(shù)據(jù)經(jīng)打包通過不同的網(wǎng)絡(luò)端口以UDP廣播形式發(fā)送到機(jī)載測(cè)試網(wǎng)絡(luò)上,測(cè)試網(wǎng)絡(luò)中的各測(cè)試設(shè)備根據(jù)自己的需要取得自己的測(cè)試參數(shù),因此測(cè)試網(wǎng)絡(luò)上有各種各樣的數(shù)據(jù)包,數(shù)據(jù)包中包含很多的測(cè)試參數(shù)。我們就要根據(jù)配置文件去接收所要的數(shù)據(jù)包以及該數(shù)據(jù)包中所需要的參數(shù)。
通用參數(shù)顯示儀作為機(jī)載測(cè)試網(wǎng)絡(luò)上的一部分,需要與該網(wǎng)絡(luò)建立連接,實(shí)現(xiàn)測(cè)試數(shù)據(jù)的接收,并保正數(shù)據(jù)的實(shí)時(shí)性和穩(wěn)定性。該模塊基于Windows Socket開發(fā)了面向無連接的數(shù)據(jù)包通訊程序,為了提高程序的效率,采用了windows底層的API函數(shù)進(jìn)行開發(fā),將API函數(shù)進(jìn)行封裝[1-2],方便程序的調(diào)用。
由于采集器是采用UDP廣播方式發(fā)送數(shù)據(jù),因此如讀取網(wǎng)絡(luò)數(shù)據(jù)的設(shè)備在讀數(shù)據(jù)包時(shí)讀取操作不連續(xù),就有可能造成丟包現(xiàn)象。為了保證數(shù)據(jù)的實(shí)時(shí)性,我們采用多線程技術(shù)。
以下是多線程設(shè)置代碼:
extern DWORDWINAPI readnet(LPVOID lpParameter);
void Maininit()
{/*初始化代碼*/
HANDLE hThreadRec;
hThreadRec=CreateThread(NULL,0,readnet,NULL,0,NULL);
CloseHandle(hThreadRec);}
參數(shù)處理模塊主要進(jìn)行參數(shù)工程量的轉(zhuǎn)化。按照配置文件,根據(jù)各個(gè)參數(shù)不同的校準(zhǔn)類型進(jìn)行數(shù)據(jù)轉(zhuǎn)化,將得到的工程量直接顯示或者進(jìn)行二次處理再顯示。
機(jī)載測(cè)試網(wǎng)路上的數(shù)據(jù)是由一個(gè)個(gè)IENA網(wǎng)絡(luò)數(shù)據(jù)包組成,網(wǎng)絡(luò)上的設(shè)備可通過事先約定好的配置文件,讀取并解算出需要的測(cè)試參數(shù)。每個(gè)網(wǎng)絡(luò)數(shù)據(jù)包的格式根據(jù)采集器的不同可以是不同的,但是必須遵循如表1所示的IENA數(shù)據(jù)定義。
KEY:每種類型數(shù)據(jù)包的識(shí)別字;SIZE:數(shù)據(jù)包的字?jǐn)?shù),從”KEY”到最后一個(gè)傳輸字;TIME:本年度 1月 1日 0時(shí) 0分開始計(jì)算的微秒時(shí)間;STATUS:狀態(tài)字 (同步/異步);SEQ_NUM:數(shù)據(jù)包計(jì)數(shù)器 (記錄每種KEY值的數(shù)據(jù)包的次數(shù));DATA:最多65527個(gè)數(shù)據(jù)字(每種 KEY值的數(shù)據(jù)包所含數(shù)據(jù)字的數(shù)目固定);END:數(shù)據(jù)包結(jié)束特征字(典型值為0xDEAD)[3]。
表1 IENA數(shù)據(jù)包定義Tab.1 definition of IENA packet
根據(jù)數(shù)據(jù)包的結(jié)構(gòu)以及配置文件中參數(shù)的位置定義,解算出測(cè)試參數(shù)的碼值,再根據(jù)配置文件中測(cè)試參數(shù)的校準(zhǔn)類型進(jìn)行碼值到工程量的轉(zhuǎn)化。目前在飛行試驗(yàn)的測(cè)試參數(shù)中,主要采用的校準(zhǔn)類型有直線校準(zhǔn),雙曲線,分段,多項(xiàng)式等校準(zhǔn)類型,針對(duì)每一種校準(zhǔn)類型設(shè)計(jì)相應(yīng)的轉(zhuǎn)化算法。下面以比較常見的分段校準(zhǔn)為例介紹一下參數(shù)工程量轉(zhuǎn)化的實(shí)現(xiàn)。首先將所有的點(diǎn)進(jìn)行按照冒泡法進(jìn)行排序[4],然后計(jì)算每個(gè)分段的斜率及y軸的截距,主要代碼如下:
Initline(const double*p_add,shortnum)
{ /*根據(jù)點(diǎn)對(duì)數(shù)得出斜率m_aa。y軸的截距m_bb*/
for(i=1,j=0;i<num;i++,j++)
{
kk=i*2;
m_aa[j]=(p_a[kk+1]-(p_a[kk-1]))/(p_a[kk]-(p_a[kk-2]));
m_bb[j]=(p_a[kk-1])-(m_aa[j]*p_a[kk-2]);
}
}
根據(jù)碼值所在的分段,以及已經(jīng)計(jì)算的所有分段的斜率和截距,計(jì)算碼值對(duì)應(yīng)的工程量。
通用試飛參數(shù)顯示儀顯示的信息量大,并且紋理要求比較高,因此使用了GL Studio仿真軟件,畫面開發(fā)工具選用GL Studio 3.2。該軟件提供一個(gè)可視化的環(huán)境用于開發(fā)儀表畫面,并且開發(fā)出的畫面可添加紋理,增強(qiáng)了真實(shí)感。畫面中每個(gè)圖像單元都是一個(gè)對(duì)象,對(duì)對(duì)象進(jìn)行操作就可實(shí)現(xiàn)對(duì)畫面的操作,開發(fā)完成后可生成C++語言代碼。該軟件工具使用方便、開發(fā)效率高,儀表畫面顯示效果好。該軟件也是基于OpenGL類庫(kù)的二次開發(fā),其優(yōu)點(diǎn)是該語言為基于“照片級(jí)”的仿真語言,通過將儀表或字符圖片調(diào)入程序,然后對(duì)紋理編程控制,使得基于紋理的開發(fā)變的簡(jiǎn)單,并且圖片拖放容易、易于修改[5-6]。因此選用該語言開發(fā)通用參數(shù)顯示儀的顯示界面,具有開發(fā)周期短、紋理精美、顯示效果良好等優(yōu)點(diǎn),能夠滿足試飛參數(shù)的顯示要求。
在GL Studio中設(shè)計(jì)圖形界面,使用GL Studio代碼生成器把之前設(shè)計(jì)好的圖形界面生成C++源代碼,再將生成的源代碼添加到自己的應(yīng)用程序中,并在Methed里面添加函數(shù)代碼進(jìn)行驅(qū)動(dòng),例如飛機(jī)法向過載的驅(qū)動(dòng)代碼如下:
void InstrumentClass::NzMethod(floatalpha)
{
NzIndicator->DynamicRotate (nz * NzIndicatorRatio,
Z_AXIS);
}
某警示類的顯示如下:
void InstrumentClass::WarnMethod(float fsecu)
{
nzzcWarnDynamic_1->Visibility(true);
nzzcWarnDynamic_2->Visibility(false);
}
按照某試飛課題要求開發(fā)完成的畫面如圖3所示。
本軟件采用了技術(shù)成熟的嵌入式操作系統(tǒng)和先進(jìn)的開發(fā)工具,以較高的效率完成了試飛科目對(duì)飛行參數(shù)的顯示要求,編寫完成的顯示儀軟件畫面美觀、數(shù)據(jù)可靠、修改方便。根據(jù)特定的試飛課題,通過修改配置文件等簡(jiǎn)單設(shè)置,就可以顯示本課題關(guān)心的測(cè)試參數(shù)。目前,本顯示儀已在多架軍機(jī)、民機(jī)上安裝使用,為大迎角、失速、發(fā)動(dòng)機(jī)等風(fēng)險(xiǎn)試飛科目的完成起到了重要作用。
[1]郝蘊(yùn).Visual C++6.0開發(fā)與實(shí)例[M].北京:電子工業(yè)出版社,2011.
[2]Kate Gregory.Visual C++5開發(fā)使用手冊(cè)[M].北京:機(jī)械工業(yè)出版社,1999.
[3]霍朝暉.飛行試驗(yàn)振動(dòng)參數(shù)遙測(cè)實(shí)時(shí)處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[4]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,1997.
[5]于輝,趙經(jīng)成,付戰(zhàn)平,等.GL Studio虛擬儀表技術(shù)應(yīng)用與系統(tǒng)開發(fā)[M].北京:國(guó)防工業(yè)出版社出版,2009.
[6]楊志菊,李洋.GLStudio在武器系統(tǒng)仿真模擬中的應(yīng)用[J].電子測(cè)試,2010,8(12):80-86.YANG Zhi-ju,LIYang.GL Studio’s used in weapon system simulation[J].Electronic Test,2010,8(12):80-86.