于麗娜 崔佳璐 王欣怡 王佳逸 傅懿婕
摘要:為了更好的實(shí)現(xiàn)飛機(jī)模擬儀表盤(pán)的仿真,基于GL Studio軟件和VC++6.0進(jìn)行制作,來(lái)進(jìn)一步學(xué)習(xí)研究飛機(jī)儀表盤(pán)的。虛擬儀表通過(guò)應(yīng)用程序?qū)⒂?jì)算機(jī)與設(shè)備結(jié)合起來(lái),用戶(hù)可以利用計(jì)算機(jī)軟件自主設(shè)計(jì)儀表的界面和指針來(lái)模擬飛機(jī)儀表,用程序可以實(shí)現(xiàn)指針轉(zhuǎn)動(dòng),數(shù)字實(shí)時(shí)顯示,圖形閃爍,數(shù)據(jù)傳遞等,更便捷的實(shí)現(xiàn)飛機(jī)模擬儀表的仿真。
隨著我國(guó)通用航空產(chǎn)業(yè)的迅速增長(zhǎng),市場(chǎng)對(duì)通航模擬訓(xùn)練器材的需求巨大。目前,國(guó)內(nèi)在民用航空和通用航空領(lǐng)域逐漸開(kāi)始重視飛行仿真技術(shù)的研究和仿真產(chǎn)品的研制。飛行模擬器儀表仿真系統(tǒng)作為與飛行員主要的交互窗口,它顯示了各種重要的飛行參數(shù)和重要的導(dǎo)航參數(shù)顯示的窗口。GL Studio有內(nèi)建代碼生成器把圖形設(shè)計(jì)創(chuàng)建的文件生成可移植的VC代碼。可進(jìn)行人機(jī)互動(dòng),實(shí)時(shí)顯示儀表之間的動(dòng)態(tài)關(guān)聯(lián),效果直觀逼真。GL Studio開(kāi)發(fā)流程主要包括創(chuàng)建紋理、圖形界面設(shè)計(jì)、軟件設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)四大方面。
一.任務(wù)
依照某直升機(jī)座艙主儀表板,制作仿真儀表。虛擬儀表主要應(yīng)用GL Studio和VC++ 6.0軟件進(jìn)行制作。通過(guò)UDP通訊協(xié)議通訊,實(shí)現(xiàn)數(shù)據(jù)交互。
二.技術(shù)指標(biāo)
2.1統(tǒng)功能
模擬飛機(jī)的真實(shí)座艙儀表環(huán)境,以滿足與飛行有關(guān)數(shù)據(jù)的指示。
2.2仿真系統(tǒng)總體要求
駕駛艙儀表的相對(duì)響應(yīng)密切耦合,可以提供綜合的感覺(jué)提示。這些儀表應(yīng)當(dāng)在規(guī)定時(shí)間內(nèi)對(duì)駕駛員位置上快速有力的輸入做出響應(yīng),但不能短于相應(yīng)飛機(jī)在同樣條件下做出響應(yīng)的時(shí)間。
實(shí)時(shí)性:整體系統(tǒng)響應(yīng)延遲時(shí)間:≯120毫秒。
電源:供電電壓:380/220V
電源頻率:50Hz
電壓波動(dòng):±10%
三.總體設(shè)計(jì)
仿真結(jié)構(gòu)如圖一所示。
該項(xiàng)目制作的虛擬儀表均顯示在LCD上,程序運(yùn)行于航電/接口控制計(jì)算機(jī)上。如圖二所示。
所有仿真的組件,均采用虛擬仿真的形式,其中包含儀表板、儀表、告警燈,按鈕、旋鈕不仿真。
四.開(kāi)發(fā)流程
本次項(xiàng)目的開(kāi)發(fā)流程如下圖三所示:
4.1 圖形設(shè)計(jì)
圖形設(shè)計(jì)是在儀表開(kāi)發(fā)的第一步,要將大量的飛行信息在有限的儀表面板上顯示,特別要注意布局簡(jiǎn)潔、合理、醒目等?,F(xiàn)在應(yīng)用成熟的飛行儀表界面設(shè)計(jì)有很多,可以從中借鑒,取其精華。以主儀表板為例,主要向駕駛員提供飛機(jī)姿態(tài)、飛行航向、飛行高度、飛行速度等信息。
4.2 創(chuàng)建模型
開(kāi)發(fā)儀表和控制面板,根據(jù)模擬真實(shí)飛行,在仿真面板上完成各種圖形、字符及相關(guān)飛行參數(shù)的顯示,因此必須建立標(biāo)準(zhǔn)字符庫(kù)和圖片庫(kù)。
(1)制作紋理。首先要采集真是紋理數(shù)據(jù),然后用Photoshop處理,獲得符合要求的png格式紋理貼圖。由于GL Studio對(duì)中文漢字輸入支持不完善,所以把漢字也制作成紋理圖片,這樣還能提高渲染效率。
(2)實(shí)體模型建立。建立儀表圖形、畫(huà)面顯示符號(hào)的模型,先要把每個(gè)儀表頁(yè)面的模型的位置和內(nèi)部層次關(guān)系弄清楚,進(jìn)行初步規(guī)劃。每個(gè)對(duì)象都是多邊形組成,使用GL Studio提供的基本圖形元組合完成,通過(guò)旋轉(zhuǎn)、剪切、扭曲等操作,能嫁接合成復(fù)雜的實(shí)體。對(duì)于模型中不可模擬的細(xì)節(jié),還可以用圖片紋理替代,以達(dá)到逼真度的要求。顯示模塊畫(huà)面完成,下一步就要給定義邏輯結(jié)構(gòu)、動(dòng)作程序、執(zhí)行用戶(hù)事件、時(shí)間或數(shù)據(jù)事件觸發(fā)的響應(yīng)動(dòng)作,實(shí)現(xiàn)實(shí)時(shí)驅(qū)動(dòng)。這一步一般都是和畫(huà)面模型創(chuàng)建交叉進(jìn)行。
4.3 驅(qū)動(dòng)代碼編寫(xiě)
對(duì)象的行為事件是各個(gè)成員函數(shù)的集合,受外部數(shù)據(jù)的控制,但行為事件本身的驅(qū)動(dòng)程序是在儀表內(nèi)部描述實(shí)現(xiàn),每個(gè)儀表都有自己獨(dú)立的行為。一般旋轉(zhuǎn)可以使用DynamicRotate()函數(shù)進(jìn)行控制。發(fā)動(dòng)機(jī)指示和機(jī)組告警系統(tǒng)中燃油、油量、液壓等的指針旋轉(zhuǎn)可以使用MoveObject()函數(shù)來(lái)完成。讀數(shù)可以使用VaString()函數(shù)來(lái)完成。
下面介紹主要的驅(qū)動(dòng)方式的實(shí)現(xiàn)過(guò)程。
(1)旋轉(zhuǎn)(以橫滾刻度尺為例)。首先在界面的Code區(qū)域,用右鍵選擇“Add”選項(xiàng),然后點(diǎn)擊“Property”選項(xiàng),在出來(lái)的空白表格內(nèi)填入成員函數(shù)的名字為Indicator , 類(lèi)型為float , 然后自動(dòng)派生的成員變量的名字為_(kāi)indicator。在該成員函數(shù)的“set”方法中添加下面代碼:
_clampedValue=CLAMP_VALUE(value,-70.0f,70.0f);
//把輸入值限定在-70至70,這是因?yàn)闄M滾刻度尺的旋轉(zhuǎn)區(qū)間是-70度到70度
_indicator = _clampedValue;
indicator->DynamicRotate(_indicator,Z_AXIS); //橫滾刻度尺實(shí)現(xiàn)繞Z軸旋轉(zhuǎn)
(2)數(shù)字實(shí)時(shí)顯示(以經(jīng)度為例)
成員函數(shù)的名字為L(zhǎng)atitude,類(lèi)型為float,派生的成員變量的名字為_(kāi)latitude。在該成員函數(shù)的“set”方法中添加下面代碼:
_latitude = value;
int degree = (int)_latitude;
int minute =(int)((_latitude - degree)*60);
int second = (int)(((_latitude - degree)*60-minute)*60);
latitude_text1->VaString("%d",degree); //VaString()是數(shù)字顯示的函數(shù)
latitude_text2->VaString("%d",minute);
latitude_text3->VaString("%d",second);
(3)表盤(pán)指針的旋轉(zhuǎn)。
needle_path->MoveObject(needle, value);
output->VaString("%d", (int)value);
(4)數(shù)據(jù)傳遞(以轉(zhuǎn)速為例)。
由于調(diào)用了復(fù)用組件.dll動(dòng)態(tài)鏈接庫(kù),所以數(shù)據(jù)傳遞要用到Resource()函數(shù)。外部數(shù)據(jù)先傳遞到啟動(dòng)畫(huà)面和主畫(huà)面,然后由它們?cè)賯鬟f到轉(zhuǎn)速組件,控制轉(zhuǎn)速的指針和顏色根據(jù)外部數(shù)據(jù)做出相應(yīng)的響應(yīng)。
Float clamp_z1=CLAMP_VALUE((float)z1, 0.0f, 100.0f);
rpm1->Resource("Rotate")< rpm1->Resource("ChangeColor")< 4.4完成最后調(diào)試。 單機(jī)測(cè)試實(shí)際上是簡(jiǎn)化了的系統(tǒng)聯(lián)調(diào),能驗(yàn)證大部分邏輯關(guān)系,但不能杜絕人為的疏忽和排除實(shí)際運(yùn)行的中可能遇到的狀況。為了驗(yàn)證虛擬座艙儀表系統(tǒng)總體設(shè)計(jì)方案的可行性、虛擬座艙的功能特性和性能要求,必須要和整個(gè)演示系統(tǒng)進(jìn)行協(xié)調(diào)測(cè)試運(yùn)行。 五 結(jié)論 通過(guò)GL Studio軟件和VC++6.0可以對(duì)于飛機(jī)模擬儀表盤(pán)的仿真,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單虛擬儀表的設(shè)計(jì),數(shù)據(jù)傳輸和簡(jiǎn)單控制。用軟件和程序?qū)x表盤(pán)實(shí)現(xiàn)更便捷的仿真,表現(xiàn)在:飛機(jī)儀表盤(pán)圖案更加靈活多變,具有很高的逼真性,其次仿真速率更快,效率更高。 參考文獻(xiàn) [1]劉魯峰.基于GL Studio的虛擬儀表的仿真研究[J].甘肅科學(xué)學(xué)報(bào),2015,27(02):15-18. [2]李秀,宋麗梅,周興明,劉長(zhǎng)欽.GL Studio在直升機(jī)儀表面板仿真中的應(yīng)用[J].計(jì)測(cè)技術(shù),2009,29(02):42-44. [3] Microsoft Corporation.Microsoft Visual C++語(yǔ)言參考手冊(cè)[M].前導(dǎo)工作室譯.北京:清華大學(xué)出版社.1998 [4]陸志斌,郭廣利,魏靖彪,趙玉輝.GL Studio在飛行模擬器虛擬儀表仿真中的應(yīng)用[J].電腦編程技巧與維護(hù),2012(12):114-116. [5]孫艷麗,王玲玲,陳佳琪.基于GL Studio的虛擬儀器儀表設(shè)計(jì)與仿真[J].系統(tǒng)仿真技術(shù),2015,11(02):151-155. [6]陳懷民,吳錦雯,黃曉波.基于GL Studio的飛行仿真虛擬儀表軟件設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2013,32(05):89-91+95. [7]李東,呂維濤,雷震,丑力.基于GL Studio的多儀表綜合顯示面板仿真[J].電腦知識(shí)與技術(shù),2010,6(03):674-676. [8]劉麗嬌. 基于GL-Studio的飛行模擬機(jī)虛擬座艙開(kāi)發(fā)[D].哈爾濱工業(yè)大學(xué),2009.