本站小編為你精心準備了飛機虛擬儀表建模仿真研究參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《飛機設計雜志》2014年第三期
1軟件結構
本課題研發的通用虛擬儀表設計/仿真系統基于如圖1所示的結構設計思路。面板界面為用戶與虛擬儀表系統的人機接口,提供接受輸入、做出響應并顯示結果的功能,用戶可以通過點擊響應的開關、按鈕等進行人機交互的輸入操作,儀表面板接受用戶的輸入操作,對輸入操作向控制和響應模塊進行數據傳輸,并接受控制和響應模塊的響應反饋。在用戶界面的顯示儀表上做出相應顯示,如指針轉動、數字數據變化、飛行姿態變化等。該模塊對于用戶體驗有著重要意義,必須做到逼真度高,才能達到系統的沉浸性的要求。數據庫模塊有兩方面功能。一方面,接受來自外部數據源的導入和儀表設計人員對數據庫的直接可視化修改。數據源來自文獻資料、飛行器制造商手冊、航空公司、機場、空管局等的來源。另一方面,接受控制和響應模塊的查詢,并反饋出響應的數據信息。數據庫的完善程度和準確性對于虛擬儀表系統的準確性和功能覆蓋率有著重要意義。所以建立完善、準確的數據庫是虛擬儀表設計系統必須要做的工作。控制和響應模塊是虛擬儀表系統的核心部分,接收來自面板界面的消息響應,根據該消息向數據庫模塊發出查詢命令,接收來自數據的返回數據,再向面板界面發出數據顯示命令,控制面板界面的顯示狀態。控制和響應模塊影響到虛擬儀表系統的系統性能,控制和查詢算法的準確性和先進性直接影響到虛擬儀表系統的準確性和運行速度。所以建立準確并采用先進算法的控制和響應模塊也是虛擬儀表設計系統的關鍵部分。COM組件封裝是虛擬儀表系統通用性和可移植性的保證。采用通用、跨平臺的封裝方式,使得虛擬儀表系統可以被多語言、多平臺的軟件調用,而且模塊化設計的思路也為后續的升級、修改提供了便利。本通用虛擬儀表設計軟件基于VC++MFC單文檔,可視化創建儀表面板系統,可視化編輯儀表之間邏輯和函數關系,可視化修改儀表細節,可視化修改數據庫,最后進行DLL模塊封裝,可以跨平臺調用。
2設計思路
2.1靜態元件制作部分為了保證儀表面板的逼真性,本課題在構建儀表面板上靜態元件的時候采用真實照片,然后通過圖片處理軟件使靜態元件的固定部分和撥動部分分離,再重新組合,在仿真控制的時候進行調用加載。采用圖層分層的方法[6],結構圖如圖3所示。圖4為一個靜態元件——由表盤和旋鈕組成,先將表盤和旋轉部分分離,再改變旋鈕位置,指向不同的指示狀態,使用圖像處理軟件進行處理,將各圖保存成BMP格式,以保證在放大和縮小時不影響顯示質量。
2.2儀表的狀態位設定通過紋理制作之后的表盤圖片在虛擬儀表設計軟件中加載,然后在表盤選取各個儀表單元進行單獨定義,彈出信息錄入界面進行各儀表單元的信息錄入,包括名稱、儀表類型、儀表位置、檔位個數、邏輯上層元件、需要載入的該儀表紋理圖片路徑等。在定義完各個儀表單元之后定義各個儀表單元的狀態位,包括狀態位名稱、對應該狀態位的圖片等。軟件界面如圖5所示。
2.3儀表邏輯的可視化編輯儀表元件之間邏輯關系的設定,是創建虛擬儀表系統的重要組成部分。在定義完各個儀表及狀態位后,將數據庫中的儀表元件及狀態位信息整合,在可視化邏輯編輯界面(圖6)進行顯示,采用所見即所得的方法,儀表元件在邏輯樹中可以動態拖曳,元件之間的函數關系可以自由設定,儀表單元之間的邏輯關系隨著邏輯樹中邏輯的變化自動生成,同時也可以查看各器件的詳細信息、器件之間已設定的函數關系等。
2.4動態顯示儀表的多線程創建進程是計算機中已運行程序的實體,進程本身不會運行,是線程的容器。每個進程皆可以同步(循序)或不同步(平行)的方式獨立運行。由于線程是操作系統能夠進行運算調度的最小單位,被包涵在進程之中,是進程中的實際運作單位。本文在動態顯示儀表的創建上選擇多線程技術,考慮如下兩方面:首先,每個進程需要占用很大的系統資源,而且進程之間共享資源、通信等也會增大系統開銷,而線程可以共享同進程的內存等資源,通信也更為方便;其次,存在多個動態顯示儀表需要同時響應的情況,把它們放在同一個進程里面,用不同線程創建可以采用分時的辦法,加快響應速度,增加刷新頻率。在飛機儀表面板上,通常會有多個儀表同時變化的情況,為了能夠準確模擬這種情況,本文采用多線程技術進行虛擬航空儀表動態模擬。若按以往方法,采用單線程既增加了系統負擔,又不能同時響應,不能實時模擬飛機當前狀況;采用多線程既減小了系統負擔,又能同時對當前狀況做出響應。在虛擬航空儀表建模與仿真過程中,涉及的顯示儀表主要有指針表、數字表和飛行姿態表等,儀表單元模塊的結構如圖7所示。仿真進程中的主線程為面板響應程序,該程序基于Windows窗體框架,而虛擬顯示儀表面板則作為輔線程被調用。該進程中的各線程通過線程間相互通信機制實現交互通信[11],由面板響應程序完成該面板變量在各種狀態下的仿真與交互。整個仿真系統的設計包含開發面板響應程序、設計虛擬顯示儀表以及配置編譯環境、設計和集成多線程等幾個主要過程。
2.4.1設計單線程虛擬顯示儀表面板依照上一節中提到的設計過程,遵循設計與實際需求分析結果保持一致的原則,進行面板響應程序的設計,這是構造整套仿真系統的重要步驟。具體說來,就是要確保創建的虛擬顯示儀表面板與實際設備的外觀一致、功能一致,并且對虛擬儀表面板的電表操作、按鍵操作等功能反復進行試驗,直至仿真效果滿足實際需求。
2.4.2實現控制函數和啟動線程添加儀表響應函數主線程中虛擬面板程序過程如下:(1)添加線程控制函數控制函數定義線程。輸入此函數后,線程開始,此函數退出時線程終止。(2)創建輔助線程通過AfxBeginThread創建CWinThread線程,并通過AfxBeginThread的參數傳遞來進行初始化。示例代碼如下:(3)主輔線程間通信與輔線程間同步這里要解決主輔線程間通信與輔線程間同步的問題。由于輔線程中的虛擬顯示儀表只是用作顯示用,只存在主線程對輔線程消息,輔線程對主線程沒有消息[12],因此可以采取全局變量和全局函數的方法,在主線程響應函數中,改變全局變量或全局函數的值即可改變輔線程中虛擬顯示儀表的顯示狀態。由于存在主線程同時調用兩個及以上輔線程的情況,線程有可能和其他線程共享一些資源,如內存,文件,數據庫等。當多個線程同時讀寫同一份共享資源的時候,可能會引起沖突,所以對臨界資源的訪問應當采取互斥的機制。(4)在主線程中定義線程消息響應代碼添加ON_THREAD_MESSAGE消息響應,具體過程分為兩步:①將消息響應函數在CWinApp的頭文件里聲明VoidOnThreadMsgPitch(WPARAM,LPARAM);②在對應的代碼文件里添加對線程消息響應的代碼。
3封裝與
3.1封裝形式虛擬航空儀表系統設計和仿真完成后,使用DLL形式進行封裝,主要有以下優點:可以提高重用性,可以在不同的仿真系統中調用同一套座艙儀表系統,只要它們與座艙儀表一致即可;提高移植性,方便以后座艙儀表系統的升級,只要重新加載封裝好新座艙儀表系統的DLL,即可完成該仿真系統中儀表系統的更新和升級維護,見圖8。
3.2軟件接口函數及功能在本文中,為了方便虛擬維修平臺加載虛擬儀表系統后,能夠很方便地調用該系統,提供多種多樣的接口函數,在虛擬維修平臺中使用這些接口函數可以對虛擬儀表系統進行訪問、控制,可以根據不同的故障狀況控制儀表系統顯示相對應的儀表狀態。本文出于模塊化、封裝性的考慮,設計了主要接口函數。在波音737飛機虛擬維修平臺中的仿真結果如圖10所示。
4仿真效果
在該虛擬儀表設計/仿真軟件中進行的仿真測試結果如下,圖9為空調儀表部分在仿真軟件的仿真效果。5結論本文提出了一種低成本飛機虛擬儀表系統的通用建模方法。該方法注重通用性和可移植性,采用面向對象的設計思想,基于MFC完成儀表系統的設計與封裝,并以COM組件的形式成功應用于仿真、測試等工程中。本文所提出的方法性能良好、設計周期短、代碼重用率高、開發成本低、通用性強,設計者可根據自身情況選用多種集成開發環境,其設計思想亦可沿用至Linux、嵌入式系統等其它操作系統,具有一定實用價值。
作者:邱偉龍陳國興單位:中國民航大學航空工程學院北京首航直升機通用航空服務有限公司