
摘 要: 針對現代飛機電子座艙系統實時顯示要求,需要在數據處理和圖形顯示兩方面提高性能。為解決性能問題,在軟件上采用OpenGL結合VxWorks進行開發,針對數據接口特點合理設計多個任務進行數據處理,實際測試數據處理占用CPU小于2%;為提高圖形顯示效率,提出利用OpenGL強大的紋理貼圖功能實現文字、儀表的顯示,實踐表明紋理貼圖較點陣速度快、顯示效果好,顯示刷新率達到20 Hz ,滿足了實時顯示要求。項目驗證采用的軟件設計技術可滿足飛行顯示器實時性要求。
關鍵詞: 電子座艙; 實時顯示; 嵌入式系統; 航空電子
中圖分類號: TN911?34; V241.8 文獻標識碼: A 文章編號: 1004?373X(2013)14?0035?03
Design and implementation of real?time flight display
WEN Sheng?feng
(Aeronautical Computing Technique Research Institute, Xi’an 710119, China)
Abstract: For the real?time display requirements of airplane electronic cockpit, the performances of data processing and graphical display should be improved. To gain the desired performance, a method based on OpenGL and VxWorks is adopted. According to the characteristics of different interfaces, data can be processed by different tasks. The tests show that data processing just occupy less than 2% CPU time. To enhance the graphical display efficiency, the texture mapping techniques of OpenGL is utilized to realize display of texts and instruments. The practice shows that the texture mapping is faster and its display result is better than the dotting technique, and its display refresh rate is up to 20 Hz, which can meet the real?time requirements of flight display.
Keywords: electronic cockpit; real?time display; embedded system; avionics
隨著微電子、計算機、傳感器、自動控制等技術的發展成熟,采用信息集中顯示的飛行顯示器替代傳統分立儀表成為現實。相比以往多個分立儀表的配置,采用飛行顯示器可節省面板空間,提高系統可靠性,降低維護成本;而且通過將相關信息集中顯示,信息顯示更加直觀,大幅減輕飛行員工作強度。因此,采用飛行顯示器的電子座艙系統代表座艙技術的主流發展方向[1]。
飛行顯示器與大氣系統、航姿、導航系統、通信系統、飛行控制系統等系統交聯,實時采集處理交聯設備信息并按規范進行顯示,是飛機航電系統的核心部件。飛行顯示器屬于典型的嵌入式系統,實時性要求高,需實時處理各種交聯設備數據并實時更新顯示畫面。為滿足實時性要求,需要在硬件設計和軟件設計方面進行改進以提高系統性能。相對硬件設計在提高性能所付出的諸如功耗加大、成本上升等代價,軟件設計方面的改進代價較小,而且實踐表明合理的軟件設計對整體的性能提高尤為重要。本文結合筆者在某飛行顯示器中的開發經驗,對項目中采用的實時顯示技術進行詳細介紹,希望能對從事類似工作的人員提供有用參考。
1 系統概述
這里開發的飛行顯示器平臺主要配置如下:主處理器采用Motorola公司PMC8245處理器(PowerPC603e內核),圖形處理器(GPU)采用ATI公司的MOBILITY RADEON 9000,采用PCI總線,32位總線寬度,33 MHz總線頻率,顯示屏分辨率為1024×768,24位色。飛行顯示器與外部設備交聯的ARINC407,ARINC419,ARINC453,ARINC429、模擬量、離散量等接口由專門的接口處理板進行原始數據處理,并利用共享內存方式與主處理器間進行數據交換,與外部交聯的RS 422接口直接由主處理器處理。飛行顯示器作為航電系統核心,與外部設備交聯的接口數量和類型多,例如作者開發的飛行顯示器與外部設備交聯的接口含8路ARINC429,2路ARINC453,4路RS 422,2路ARINC407,其他接口還包括PAL視頻接口、XGA視頻接口、模擬量、離散量接口等。為實現實時處理上述接口的數據,并在高分辨率顯示器上實時顯示各種復雜的電子飛行儀表、導航、維護等畫面,必須對整個飛行顯示器的系統架構進行合理設計,并合理設計軟件架構。通過對比并綜合考慮開發進度、難度、效果,項目系統采用VxWorks 5.5實時操作系統,并在項目所采用的硬件平臺上針對VxWorks操作系統實現OpenGL移植,圖形開發在OpenGL圖形庫基礎上進行。
VxWorks是由風河(Wind River Systems,Inc.)公司開發的微內核、高性能、可伸縮的實時操作系統,采用基于優先級搶占的任務調度方式并支持相同優先級任務的時間片輪轉調度,支持共享內存、信號量、消息隊列、管道等多種任務間通信機制,快速中斷響應,支持廣泛的網絡通信協議[2?3]。VxWorks因其良好的可靠性和卓越的實時性被廣泛地應用于通信、軍事、航空、航天等高精尖及實時性要求極高的領域。OpenGL是一個開放的三維計算機圖形軟件接口,業已成為事實上的工業標準。OpenGL獨立于窗口系統和操作系統,有著強大的圖形功能和良好的跨平臺移植能力,支持建模、變換、顏色模式設置、光照與材質設置、紋理映射等[4]。采用OpenGL進行開發可以在PC機上對繪制的圖形進行驗證,驗證后可以移植到開發的目標機上,因PC機和目標機源代碼兼容,因此相對其他圖形開發庫可大幅加快開發進度。項目的軟件開發基于VxWorks系統和OpenGL圖形庫,下面將對開發中的重要技術問題進行描述。
2 數據處理
數據處理是飛行顯示器重要功能,包括前面所述的機載設備數據采集處理及周邊鍵、旋鈕等人機交互信息的處理。數據處理的要求是及時采集設備信息,及時響應人機交互操作,并將處理后的數據及時提供給顯示更新任務。數據處理部分開發基于VxWorks,利用其強大的多任務功能、消息隊列、信號量等任務間通信機制、看門狗定時器管理等功能可降低開發難度,保證產品的性能和質量。開發中將軟件按功能劃分為多個互相協調的任務,利用信號量、消息隊列等進行任務間通信,多個任務共同完成數據處理功能,并驅動顯示更新。數據處理需要考慮數據的特性,主要有數據更新時機及數據接口是否為阻塞式。按數據的更新時機將數據分為兩類:一類為周期性數據,如大氣機通過ARINC429接口周期發送的空速、氣壓高度、溫度等大氣數據;另一類為事件性數據,比如飛行員操作飛行顯示器周邊鍵產生的按鍵消息。按數據的接口特性可分為阻塞和非阻塞兩類,阻塞式接口在沒有數據時會引起當前任務阻塞,相反非阻塞式接口的調用不會引起任務阻塞。飛行顯示器軟件將數據的接收分為多個任務,一個為周期的非阻塞接口的處理任務,處理周期性數據,例如項目中的ARINC429通信,在驅動層按非阻塞實現,且數據是周期更新。利用定時器實現按接口定義所要求的周期處理數據,系統分兩類時鐘:系統時鐘sysClk和輔助時鐘auxClk,其中系統時鐘因涉及許多的系統調用分辨率設置較低,默認為60 Hz,否則會影響整個系統系能;輔助定時器可以設置為分辨率,用于周期較短的任務。按接口定義文件要求,對各類設備的周期特性進行分類,按不同周期進行處理。
對會引起任務阻塞的接口所對應的數據,分別采用單個任務處理,將處理后的數據發送至消息隊列,由主處理任務進行數據最后的融合,例如項目周邊鍵通過RS 422接口輸出操作信息,因RS 422接口驅動會引起任務阻塞,創建專門任務進行數據接收并將接收到的按鍵消息發送至消息隊列交由主任務處理。通過合理的任務設計,實際運行時CPU空閑時間達98%以上(無運行圖形顯示任務時的測試數據),對每一個準備好的任務可以及時響應,實踐表明數據處理滿足實時性。
3 圖形顯示
飛行顯示器最重要的功能是進行各種飛行參數的顯示,例如俯仰、橫滾、航向、空速、高度等重要飛行參數顯示。上述飛行參數采用圖形化方式進行顯示,如圖1所示,通過圖形符號的相對運動指示飛行參數。為了流暢顯示上述運動畫面,顯示畫面更新速率必須足夠高,通常俯仰和橫滾顯示更新率[5]不低于15 Hz,否則將導致畫面不流暢,信息顯示滯后。因此飛行顯示器圖形顯示除了美觀、準確等功能要求外,性能要求尤為重要,實時性要求為飛行顯示器開發的重要約束。根據顯示元素的特點可將顯示元素分為文字、電子飛行儀表及其他特定圖形,如圖1所示,下文分別介紹上述元素的顯示開發技術。
3.1 文字顯示
在飛行顯示器顯示元素中文字占很大比重,例如提示信息、儀表盤指示讀數、刻度帶讀數等均包含文字顯示。OpenGL標準僅支持點、線、三角形等直接顯示,本身并不提供直接的文字顯示接口,因此在VxWorks環境下進行文字顯示,開發者需自己實現類GUI的文字顯示接口。
按顯示原理通常將文字顯示分為矢量文字、點陣文字兩種,在OpenGL下利用其強大的紋理貼圖功能,文字顯示還可通過紋理貼圖方式進行顯示,稱其為圖片文字。上述三種顯示方式各有優缺點,開發者需根據實際要求進行選擇。
圖1 飛行顯示器典型畫面示意圖
矢量文字的每個字形用數學曲線來描述,它包含了字形邊界上的關鍵點、連線的導數信息等,比如一個筆劃的起始、終止坐標,半徑、弧度等。
渲染引擎讀取這些數學矢量,然后進行一定的數學運算來進行渲染。矢量字體的優點是字體實際尺寸可以任意縮放而筆劃輪廓仍然能保持圓滑,缺點是字體信息提取困難,實現復雜,渲染消耗資源大,速度慢,因此在實時性要求較高的嵌入式系統中較少使用。
點陣字體的每個字形都以一組二維像素信息表示,通過讀取存儲的文字點陣信息,在對應位置打點實現文字顯示。點陣文字原理簡單,實現方便,但很難進行縮放,特定大小的點陣字體只能清晰地顯示在相應的字號下,縮放后會產生馬賽克式的鋸齒。
圖片文字是將文字按一定規律預先繪制在圖片上,將圖片載入顯存,顯示文字時綁定特定圖片至紋理,通過紋理貼圖方式進行文字顯示。因OpenGL對紋理的良好支持,以紋理貼圖方式顯示文字效率高;而且通過選擇線性過濾,文字放大縮小比例恰當時顯示效果較好,系統可只存儲一種大小的字體就可滿足多種字體的顯示,節省存儲空間。
通過比較,項目采用紋理貼圖方式進行文字顯示,實踐驗證此種方式顯示效果較好、顯示效率高,滿足系統要求。
圖片文字的開發大致分為以下幾部分工作:圖片的生成、文字索引編制、文字顯示接口設計。圖片生成指在PC機上生成記錄文字信息的圖片,圖片生成后以紋理加載至顯存,文字顯示時通過控制紋理坐標繪制四邊形實現文字顯示。
圖片生成時按一定規律對文字進行排列,文字索引編制指根據文字編碼計算文字對應的紋理坐標,生成文字編碼與紋理坐標的對應關系。文字顯示接口設計提供對齊方式、顯示大小、顏色、是否帶下劃線等設置功能。
3.2 電子飛行儀表顯示
飛行顯示器顯示常用電子飛行儀表,包括電子地平儀、速度指示帶、高度指示帶、升降速度指示帶、航向指示帶、羅盤卡等,如圖1所示。
電子飛行儀表顯示的特點是刻度帶、表盤固定或只是平移、旋轉,因此飛行儀表顯示可采用紋理貼圖方式顯示。例如,俯仰刻度帶顯示可以預先生成刻度圖片,而后根據俯仰角度進行上下平移,根據橫滾角度進行旋轉一定角度后以貼圖方式進行顯示;羅盤卡可對羅盤卡旋轉后貼圖顯示。采用貼圖方式,在繪制斜線、圓等圖形時,可以避免鋸齒的產生。
3.3 其他圖形顯示
其他圖形指飛機符、游標、指針等簡單圖形,利用OpenGL繪制函數直接繪制。
通過采取上述文字顯示技術、飛行儀表顯示技術,并結合OpenGL的優化方法,可實現實時要求,而且可以達到抗鋸齒等顯示效果。
4 結 語
作為電子座艙系統中最重要的飛行顯示器,實時性要求極高。本文總結了飛行顯示器項目開發中針對實時性要求的設計考慮,分享了OpenGL及VxWorks使用經驗,可作為相關開發人員參考。
參考文獻
[1] MOIR Ian, SEABRIDGE Allan. Civil avionics systems [M]. UK: Professional Engineering Publishing, 2003.
[2] Wind River System, Inc. VxWorks programmer’s guide [M]. US: Wind River System, Inc., 2003.
[3] 孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境Tornado[M].北京:中國電力出版社,2002.
[4] 鄧鄭祥.OpenGL 編程指南[M].4版.北京:人民郵電出版社, 2005.
[5] SAE International. SAE AS8034 minimum performance standard for airborne multipurpose electronic displays [S].USA: SAE International, 2005.
[6] WRIGHT Richard S, Jr., LIPCHAK Benjamin, HAEMEL Nicholas. OpenGL superbible [M]. US: Addison?Wesley, 2007.