王海斌,錢 偉
(中國民航飛行學院飛機修理廠,廣漢 618307)
隨著通航產業的發展,新置通用飛機已全部安裝綜合航電系統。綜合航電系統功能先進、操作便捷,但整個系統運行依賴于高速數據傳輸模式,若數據傳輸通道出現異常,將會嚴重影響飛機安全飛行[1-3]。為確保航電系統數據傳輸的安全性,對傳輸通道進行定期檢測顯得十分重要[4]。如何在地面構建一個數據監控平臺,實現對航電系統數據傳輸高效地檢測成為本文研究的重點。便捷高效地實現數據通道檢測不但能夠確保系統安全運行,還能提前發現系統潛在故障,并且能夠通過檢測平臺確認故障子部件,為技術人員維修排故提供重要的依據[5]。
本文針對某型綜合航電系統進行數據監控平臺開發,該型綜合航電系統為目前通航應用最為廣泛的型號,其數據傳輸采用高速以太總線完成[6-7]。本文在搭建相關硬件平臺的基礎上,應用了嵌入式開發技術,并在Android系統下開發了相關驅動及應用程序。下面結合數據監控平臺的研制過程,詳細闡述其系統組成構架、軟硬件關鍵技術及其工程應用結果。
綜合航電系統主要由顯示組件、核心組件、航姿組件、音頻組件、大氣參數組件、發動機參數組件和應答機組件7個部分組成[8-9]。其中,核心組件是交聯綜合航電系統的樞紐,各組件的傳輸數據經過核心組件統一轉換為高速以太數據格式,傳輸給顯示組件。系統控制指令也是通過該高速以太數據經核心組件,傳輸給各功能組件[10]。因此,實現對高速以太數據的監控和測試成為本監控平臺研究的重點。數據監控平臺作為一個節點嵌入到綜合航電系統中,處于實時接收和數據處理的位置,如圖1所示。

圖1 監控平臺與航電系統連接圖Fig.1 Connection of monitoring platform and avionics system
監控平臺硬件結構主要由數據處理模塊、數據采集模塊、電源模塊、存儲模塊等組成。數據采集模塊利用以太總線與航電系統實現連接,該模塊實現了數據接收。平臺通過數據處理模塊進行算法處理,并通過用戶界面實現系統控制,其系統組成如圖2所示。

圖2 系統組成Fig.2 Composition of system
數據處理模塊中CPU處理器采用TI AM3358BZ,其主頻可支持1 GHz,可輕松實現對以太總線數據進行一系列處理[11]。在總線傳輸數據協議方面采用IEEE 802.3標準網絡協議,與航電系統以太協議保持一致。數據采集模塊以太網收發器采用RTL8211E網絡芯片,該芯片由瑞昱最新推出,并支持1000Base-T。電源管理芯片采用TPS65910,該芯片是TI推出的針對CPU供電的電源管理IC,內部集成了3個降壓、1個升壓以及8個差分電壓,滿足了平臺所有特定的電源需求。顯示模塊采用三菱GT1275-VB 10.4寸觸摸屏,功耗較低且操作便捷。平臺的采集數據以及處理結果可自動存至外部存儲模塊,該模塊由SD卡存儲模式實現。
Android是Google開發的基于Linux開源手機平臺,它包括操作系統、應用程序和用戶界面。雖然Android最初作為手機軟件平臺的操作系統,但其本質是一款非常優秀的嵌入式開發平臺[12]。考慮到Android比傳統Linux系統更加強大,在設計開發航電系統監控平臺時采用Android4.0作為操作系統。
但由于Android的系統構架在很大程度上為實現手機功能進行設計,因此,在針對監控平臺開發時,就必須對Android系統構架進行一系列修改。將通話、通訊錄以及短信等模塊刪除,僅留下平臺所需的Android核心模塊,主要包括Package Manager、System Service、Hardware Service 和 System Server等。經過定制和修改后的Android系統架構如圖3所示。

圖3 Android平臺系統架構Fig.3 System architecture of Android
監控平臺軟件系統共分4層:最底層為Linux核心及驅動層,該層封裝了相關硬件設備,為上層提供了統一接口,可移植性極強;第二層為系統運行庫層,提供系統函數庫組件;第三層為應用程序框架層,包含所有開發所用各類庫;頂層為應用程序層,包括系統應用程序模塊的開發。
Android系統驅動程序開發基于Linux內核基礎,使用Java開發,所以應用程序在調用設備驅動時并不能直接調用,必須通過Java虛擬機的本地調用方法JNI實現。另一方面,為增強驅動程序可移植性,在Android架構添加一個硬件抽象層HAL,從而為硬件設備的調用提供一個高級封裝[13]。
監控平臺功能運行最終通過應用程序來實現,在應用層中系統控制程序調用平臺控制服務。平臺控制服務通過JNI方法使虛擬機加載本地庫,然后向HAL層獲取共享庫文件(*.so),由共享庫文件調用在Linux內核中的設備驅動。圖4所示為監控平臺Android驅動程序架構設計。從驅動程序架構來分,整個驅動程序設計可分為底層驅動設計、硬件抽象層HAL設計、本地調用層JNI設計、平臺控制服務層設計4個層次。

圖4 Android驅動程序架構Fig.4 Structure of Android application program
驅動程序的最終目的是為使上層應用程序能夠使用這些硬件提供的服務來為用戶提供軟件功能。其處理過程是,驅動程序將硬件設備抽象成文件,應用程序對這些文件進行處理[14]。
對于Linux標準設備驅動程序可直接使用,只需針對具體設備參數修改相應內核驅動程序,然后再進行配置及編譯,并增加應用層JNI接口。此類驅動包括以太總線驅動、顯示驅動、音頻驅動以及存儲驅動。
本文以以太總線驅動為例進行說明,在Linux內核中已具備基本網卡驅動,但針對平臺采用的DM9000E網卡芯片需要進行一定的修改。
步驟1需在頭文件加入#include

步驟2對相應的MAC地址進行修改:

步驟3配置并編譯內核
利用配置菜單對DM9000E網卡進行配置,主要在 Networking support和Device Drivers兩項進行配置,具體實現如下:

菜單配置完畢,保存并編譯出鏡像,按此方式依次完成平臺所需其余驅動模塊的開發。將修改后內核驅動進行重新編譯生成zImage.bin文件,移植到嵌入式系統并運行,以便軟件系統上層進行調用開發。
硬件抽象層是通過HAL Stub方法實現,HAL Stub是一種代理方法,Stub以共享庫(*.so)格式存在。HAL Stub方法訪問底層驅動是一種間接調用方式,Stub向硬件抽象層提供操作的回調函數。
JNI層訪問HAL層時,通過函數hw_get_module()獲取設備模塊 ID,并向HAL層申請設備 Stub,JNI層獲得Stub對象后,即可把Stub作為一個抽象硬件進行操作。圖5所示為平臺硬件抽象層HAL實現過程。

圖5 平臺硬件抽象層HAL實現過程Fig.5 Implementation process of HAL
下面程序為以太總線Stub的HAL結構體:

將結構體ethernet_module_t初始化,該結構體包含了Stub的模塊信息,主要包括:
Id:Stub的模塊ID,通過id查找相關設備;
methods:定義回調函數 open(),負責申請結構體ethernet_control_device_t的空間,注冊回調函數接口,并打開相關設備驅動。
硬件抽象層編譯后生成“*.so”文件,保存在文件系統 “/sysem/lib/”目錄下。平臺控制服務層運行后,由JNI虛擬機裝載本地庫函數,具體實現過程如圖6所示。

圖6 平臺本地調用層JNI實現過程Fig.6 Implementation process of JNI
平臺控制服務層通過調用System.load()函數,使得JNI虛擬機加載本地庫函數,這一過程是虛擬機通過調用JNI_OnLoad()函數來實現:
(1)把虛擬機信息保存到硬件抽象層結構體中;
(2)建立平臺控制服務層與硬件抽象層JNI函數表;
(3)返回虛擬機、硬件抽象層使用的JNI信息。
加載完后,平臺控制服務層就可以通過JNI函數表把Java函數轉換為本地函數執行。
在本地調用層中定義JNI函數方式代碼段如下:

監控平臺應用程序設計方面考慮模塊化設計,主要分為界面模塊、測試模塊、故障診斷模塊、存儲模塊和告警模塊,如圖7所示。

圖7 系統應用程序架構Fig.7 Structure of application program
界面模塊采用Activity方式實現,由主界面、模塊選擇、用戶設置和幫助組成。模塊選擇用于選擇測試部件、測試模式以及告警事件的顯示和查詢等。用戶設置用于密碼管理、語言切換、時區和時間的設置、網絡地址的設置。幫助模塊用于為使用者提供在線幫助。
測試模塊采用Service方式實現,主要包括數據接收和處理模塊,用于數據的采集和處理。數據接收實現監控平臺與被測系統的數據通信,并將數據進行存儲。數據處理模塊針對采集的以太數據進行一系列算法處理,并與標準數據庫數據進行參數比對,最終實現傳輸數據的監控。
故障診斷模塊通過操作數據實現,是在對測試數據分析、評估基礎上實現的。針對數據異常情況進行處理,將故障進行定位,最終為用戶提供排故指導策略。
告警模塊利用Broadcast Receiver方式實現,負責數據通信異常的告警事件,同時調用告警顯示界面顯示對應的信息。
存儲模塊利用SQLite方式實現,將測試過程和測試結果進行存儲,方便用戶進行查看、調用及打印輸出。
基于Android系統的航電數據監控平臺作為綜合航電系統上的一個關鍵節點,通過以太總線與系統進行通信,對航電系統的航姿、大氣數據、發動機參數等組件進行地面在線監測。最終實現了對綜合航電系統傳輸數據測試,以及對各飛行參數組件的功能測試。經實測,監控平臺以10 Mb/s的通信速率運行,且保持測試狀態穩定。目前,該項目已通過民航局地面測試項目認證,已應用于綜合航電系統定檢達20余套,故障系統檢測2套,取得了良好的應用效果。
[1]周德新,彭妮娜,馬騰達.航電仿真系統集成驗證平臺設計方法的研究[J].自動化與儀表,2015,30(3):1-5.
[2]黃皓,方媛,尹祿高.基于數據庫的飛行器通用測試平臺設計[J].自動化與儀表,2015,30(6):59-63.
[3]周慶,劉斌,余正偉,等.綜合模塊化航電軟件仿真測試環境研究[J].航空學報,2012,33(4):722-733.
[4]孫兵,何瑾,陳廣廈.基于DSP的CAN總線與以太網互聯系統研制[J].儀器儀表學報,2008,29(2):377-380.
[5]滕秋琴.ARM嵌入式系統網絡接口設計[J].電訊技術,2008,48(10):84-86.
[6]Littlefield-Lawwill J,Viswanathan R.Advancing open standards in integrated modular avionics:an industry analysis[C]//AIAA/IEEE Digital Avionics Systems Conference-Proceedings,Piscataway,NJ,2007:2B11-2B114.
[7]梁永生,張基宏,張乃通.IEEE標準容限內以太網轉發時延的測試與分析[J].電子學報,2008,36(1):46-50.
[8]Steve Gorshe,JeffMandin.Introduction to IEEE 802.3 av 10Gbit/s Ethernet passive optical networks(10G EPON)[J].China Communications,2009,6(4):136-147.
[9]熊華鋼,周貴榮,李峭.機載總線網絡及其發展[J].航空學報,2006,27(6):1135-1144.
[10]汪健甄,許宗澤.航空電子高速數據總線性能分析及其實時性仿真[J].南京航空航天大學學報,2008,40(3):345-347.
[11]曾祥文,宋樹祥,賓相邦.嵌入式Linux下波特率自適應的CAN總線驅動的實現[J].測控技術,2015,34(8):104-107.
[12]詹成國,朱偉,徐敏.基于Android的測控裝置人機界面的設計與開發[J].電力自動化設備,2012,32(1):119-122.
[13]農麗萍,王力虎,黃一平.Android在嵌入式車載導航系統的應用研究[J].計算機工程與設計,2010,31(11):2473-2475.
[14]韓迪,潘志宏.基于Android移動設備傳感器的體感應用[J].華南理工大學學報:自然科學版,2012,40(9):75-77.