于麗娜 崔佳璐 王欣怡 王佳逸 傅懿婕



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