王海斌,錢 偉
(中國民航飛行學(xué)院飛機(jī)修理廠,廣漢 618307)
隨著通航產(chǎn)業(yè)的發(fā)展,新置通用飛機(jī)已全部安裝綜合航電系統(tǒng)。綜合航電系統(tǒng)功能先進(jìn)、操作便捷,但整個(gè)系統(tǒng)運(yùn)行依賴于高速數(shù)據(jù)傳輸模式,若數(shù)據(jù)傳輸通道出現(xiàn)異常,將會嚴(yán)重影響飛機(jī)安全飛行[1-3]。為確保航電系統(tǒng)數(shù)據(jù)傳輸?shù)陌踩?,對傳輸通道進(jìn)行定期檢測顯得十分重要[4]。如何在地面構(gòu)建一個(gè)數(shù)據(jù)監(jiān)控平臺,實(shí)現(xiàn)對航電系統(tǒng)數(shù)據(jù)傳輸高效地檢測成為本文研究的重點(diǎn)。便捷高效地實(shí)現(xiàn)數(shù)據(jù)通道檢測不但能夠確保系統(tǒng)安全運(yùn)行,還能提前發(fā)現(xiàn)系統(tǒng)潛在故障,并且能夠通過檢測平臺確認(rèn)故障子部件,為技術(shù)人員維修排故提供重要的依據(jù)[5]。
本文針對某型綜合航電系統(tǒng)進(jìn)行數(shù)據(jù)監(jiān)控平臺開發(fā),該型綜合航電系統(tǒng)為目前通航應(yīng)用最為廣泛的型號,其數(shù)據(jù)傳輸采用高速以太總線完成[6-7]。本文在搭建相關(guān)硬件平臺的基礎(chǔ)上,應(yīng)用了嵌入式開發(fā)技術(shù),并在Android系統(tǒng)下開發(fā)了相關(guān)驅(qū)動(dòng)及應(yīng)用程序。下面結(jié)合數(shù)據(jù)監(jiān)控平臺的研制過程,詳細(xì)闡述其系統(tǒng)組成構(gòu)架、軟硬件關(guān)鍵技術(shù)及其工程應(yīng)用結(jié)果。
綜合航電系統(tǒng)主要由顯示組件、核心組件、航姿組件、音頻組件、大氣參數(shù)組件、發(fā)動(dòng)機(jī)參數(shù)組件和應(yīng)答機(jī)組件7個(gè)部分組成[8-9]。其中,核心組件是交聯(lián)綜合航電系統(tǒng)的樞紐,各組件的傳輸數(shù)據(jù)經(jīng)過核心組件統(tǒng)一轉(zhuǎn)換為高速以太數(shù)據(jù)格式,傳輸給顯示組件。系統(tǒng)控制指令也是通過該高速以太數(shù)據(jù)經(jīng)核心組件,傳輸給各功能組件[10]。因此,實(shí)現(xiàn)對高速以太數(shù)據(jù)的監(jiān)控和測試成為本監(jiān)控平臺研究的重點(diǎn)。數(shù)據(jù)監(jiān)控平臺作為一個(gè)節(jié)點(diǎn)嵌入到綜合航電系統(tǒng)中,處于實(shí)時(shí)接收和數(shù)據(jù)處理的位置,如圖1所示。
圖1 監(jiān)控平臺與航電系統(tǒng)連接圖Fig.1 Connection of monitoring platform and avionics system
監(jiān)控平臺硬件結(jié)構(gòu)主要由數(shù)據(jù)處理模塊、數(shù)據(jù)采集模塊、電源模塊、存儲模塊等組成。數(shù)據(jù)采集模塊利用以太總線與航電系統(tǒng)實(shí)現(xiàn)連接,該模塊實(shí)現(xiàn)了數(shù)據(jù)接收。平臺通過數(shù)據(jù)處理模塊進(jìn)行算法處理,并通過用戶界面實(shí)現(xiàn)系統(tǒng)控制,其系統(tǒng)組成如圖2所示。
圖2 系統(tǒng)組成Fig.2 Composition of system
數(shù)據(jù)處理模塊中CPU處理器采用TI AM3358BZ,其主頻可支持1 GHz,可輕松實(shí)現(xiàn)對以太總線數(shù)據(jù)進(jìn)行一系列處理[11]。在總線傳輸數(shù)據(jù)協(xié)議方面采用IEEE 802.3標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議,與航電系統(tǒng)以太協(xié)議保持一致。數(shù)據(jù)采集模塊以太網(wǎng)收發(fā)器采用RTL8211E網(wǎng)絡(luò)芯片,該芯片由瑞昱最新推出,并支持1000Base-T。電源管理芯片采用TPS65910,該芯片是TI推出的針對CPU供電的電源管理IC,內(nèi)部集成了3個(gè)降壓、1個(gè)升壓以及8個(gè)差分電壓,滿足了平臺所有特定的電源需求。顯示模塊采用三菱GT1275-VB 10.4寸觸摸屏,功耗較低且操作便捷。平臺的采集數(shù)據(jù)以及處理結(jié)果可自動(dòng)存至外部存儲模塊,該模塊由SD卡存儲模式實(shí)現(xiàn)。
Android是Google開發(fā)的基于Linux開源手機(jī)平臺,它包括操作系統(tǒng)、應(yīng)用程序和用戶界面。雖然Android最初作為手機(jī)軟件平臺的操作系統(tǒng),但其本質(zhì)是一款非常優(yōu)秀的嵌入式開發(fā)平臺[12]??紤]到Android比傳統(tǒng)Linux系統(tǒng)更加強(qiáng)大,在設(shè)計(jì)開發(fā)航電系統(tǒng)監(jiān)控平臺時(shí)采用Android4.0作為操作系統(tǒng)。
但由于Android的系統(tǒng)構(gòu)架在很大程度上為實(shí)現(xiàn)手機(jī)功能進(jìn)行設(shè)計(jì),因此,在針對監(jiān)控平臺開發(fā)時(shí),就必須對Android系統(tǒng)構(gòu)架進(jìn)行一系列修改。將通話、通訊錄以及短信等模塊刪除,僅留下平臺所需的Android核心模塊,主要包括Package Manager、System Service、Hardware Service 和 System Server等。經(jīng)過定制和修改后的Android系統(tǒng)架構(gòu)如圖3所示。
圖3 Android平臺系統(tǒng)架構(gòu)Fig.3 System architecture of Android
監(jiān)控平臺軟件系統(tǒng)共分4層:最底層為Linux核心及驅(qū)動(dòng)層,該層封裝了相關(guān)硬件設(shè)備,為上層提供了統(tǒng)一接口,可移植性極強(qiáng);第二層為系統(tǒng)運(yùn)行庫層,提供系統(tǒng)函數(shù)庫組件;第三層為應(yīng)用程序框架層,包含所有開發(fā)所用各類庫;頂層為應(yīng)用程序?qū)?,包括系統(tǒng)應(yīng)用程序模塊的開發(fā)。
Android系統(tǒng)驅(qū)動(dòng)程序開發(fā)基于Linux內(nèi)核基礎(chǔ),使用Java開發(fā),所以應(yīng)用程序在調(diào)用設(shè)備驅(qū)動(dòng)時(shí)并不能直接調(diào)用,必須通過Java虛擬機(jī)的本地調(diào)用方法JNI實(shí)現(xiàn)。另一方面,為增強(qiáng)驅(qū)動(dòng)程序可移植性,在Android架構(gòu)添加一個(gè)硬件抽象層HAL,從而為硬件設(shè)備的調(diào)用提供一個(gè)高級封裝[13]。
監(jiān)控平臺功能運(yùn)行最終通過應(yīng)用程序來實(shí)現(xiàn),在應(yīng)用層中系統(tǒng)控制程序調(diào)用平臺控制服務(wù)。平臺控制服務(wù)通過JNI方法使虛擬機(jī)加載本地庫,然后向HAL層獲取共享庫文件(*.so),由共享庫文件調(diào)用在Linux內(nèi)核中的設(shè)備驅(qū)動(dòng)。圖4所示為監(jiān)控平臺Android驅(qū)動(dòng)程序架構(gòu)設(shè)計(jì)。從驅(qū)動(dòng)程序架構(gòu)來分,整個(gè)驅(qū)動(dòng)程序設(shè)計(jì)可分為底層驅(qū)動(dòng)設(shè)計(jì)、硬件抽象層HAL設(shè)計(jì)、本地調(diào)用層JNI設(shè)計(jì)、平臺控制服務(wù)層設(shè)計(jì)4個(gè)層次。
圖4 Android驅(qū)動(dòng)程序架構(gòu)Fig.4 Structure of Android application program
驅(qū)動(dòng)程序的最終目的是為使上層應(yīng)用程序能夠使用這些硬件提供的服務(wù)來為用戶提供軟件功能。其處理過程是,驅(qū)動(dòng)程序?qū)⒂布O(shè)備抽象成文件,應(yīng)用程序?qū)@些文件進(jìn)行處理[14]。
對于Linux標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)程序可直接使用,只需針對具體設(shè)備參數(shù)修改相應(yīng)內(nèi)核驅(qū)動(dòng)程序,然后再進(jìn)行配置及編譯,并增加應(yīng)用層JNI接口。此類驅(qū)動(dòng)包括以太總線驅(qū)動(dòng)、顯示驅(qū)動(dòng)、音頻驅(qū)動(dòng)以及存儲驅(qū)動(dòng)。
本文以以太總線驅(qū)動(dòng)為例進(jìn)行說明,在Linux內(nèi)核中已具備基本網(wǎng)卡驅(qū)動(dòng),但針對平臺采用的DM9000E網(wǎng)卡芯片需要進(jìn)行一定的修改。
步驟1需在頭文件加入#include
步驟2對相應(yīng)的MAC地址進(jìn)行修改:
步驟3配置并編譯內(nèi)核
利用配置菜單對DM9000E網(wǎng)卡進(jìn)行配置,主要在 Networking support和Device Drivers兩項(xiàng)進(jìn)行配置,具體實(shí)現(xiàn)如下:
菜單配置完畢,保存并編譯出鏡像,按此方式依次完成平臺所需其余驅(qū)動(dòng)模塊的開發(fā)。將修改后內(nèi)核驅(qū)動(dòng)進(jìn)行重新編譯生成zImage.bin文件,移植到嵌入式系統(tǒng)并運(yùn)行,以便軟件系統(tǒng)上層進(jìn)行調(diào)用開發(fā)。
硬件抽象層是通過HAL Stub方法實(shí)現(xiàn),HAL Stub是一種代理方法,Stub以共享庫(*.so)格式存在。HAL Stub方法訪問底層驅(qū)動(dòng)是一種間接調(diào)用方式,Stub向硬件抽象層提供操作的回調(diào)函數(shù)。
JNI層訪問HAL層時(shí),通過函數(shù)hw_get_module()獲取設(shè)備模塊 ID,并向HAL層申請?jiān)O(shè)備 Stub,JNI層獲得Stub對象后,即可把Stub作為一個(gè)抽象硬件進(jìn)行操作。圖5所示為平臺硬件抽象層HAL實(shí)現(xiàn)過程。
圖5 平臺硬件抽象層HAL實(shí)現(xiàn)過程Fig.5 Implementation process of HAL
下面程序?yàn)橐蕴偩€Stub的HAL結(jié)構(gòu)體:
將結(jié)構(gòu)體ethernet_module_t初始化,該結(jié)構(gòu)體包含了Stub的模塊信息,主要包括:
Id:Stub的模塊ID,通過id查找相關(guān)設(shè)備;
methods:定義回調(diào)函數(shù) open(),負(fù)責(zé)申請結(jié)構(gòu)體ethernet_control_device_t的空間,注冊回調(diào)函數(shù)接口,并打開相關(guān)設(shè)備驅(qū)動(dòng)。
硬件抽象層編譯后生成“*.so”文件,保存在文件系統(tǒng) “/sysem/lib/”目錄下。平臺控制服務(wù)層運(yùn)行后,由JNI虛擬機(jī)裝載本地庫函數(shù),具體實(shí)現(xiàn)過程如圖6所示。
圖6 平臺本地調(diào)用層JNI實(shí)現(xiàn)過程Fig.6 Implementation process of JNI
平臺控制服務(wù)層通過調(diào)用System.load()函數(shù),使得JNI虛擬機(jī)加載本地庫函數(shù),這一過程是虛擬機(jī)通過調(diào)用JNI_OnLoad()函數(shù)來實(shí)現(xiàn):
(1)把虛擬機(jī)信息保存到硬件抽象層結(jié)構(gòu)體中;
(2)建立平臺控制服務(wù)層與硬件抽象層JNI函數(shù)表;
(3)返回虛擬機(jī)、硬件抽象層使用的JNI信息。
加載完后,平臺控制服務(wù)層就可以通過JNI函數(shù)表把Java函數(shù)轉(zhuǎn)換為本地函數(shù)執(zhí)行。
在本地調(diào)用層中定義JNI函數(shù)方式代碼段如下:
監(jiān)控平臺應(yīng)用程序設(shè)計(jì)方面考慮模塊化設(shè)計(jì),主要分為界面模塊、測試模塊、故障診斷模塊、存儲模塊和告警模塊,如圖7所示。
圖7 系統(tǒng)應(yīng)用程序架構(gòu)Fig.7 Structure of application program
界面模塊采用Activity方式實(shí)現(xiàn),由主界面、模塊選擇、用戶設(shè)置和幫助組成。模塊選擇用于選擇測試部件、測試模式以及告警事件的顯示和查詢等。用戶設(shè)置用于密碼管理、語言切換、時(shí)區(qū)和時(shí)間的設(shè)置、網(wǎng)絡(luò)地址的設(shè)置。幫助模塊用于為使用者提供在線幫助。
測試模塊采用Service方式實(shí)現(xiàn),主要包括數(shù)據(jù)接收和處理模塊,用于數(shù)據(jù)的采集和處理。數(shù)據(jù)接收實(shí)現(xiàn)監(jiān)控平臺與被測系統(tǒng)的數(shù)據(jù)通信,并將數(shù)據(jù)進(jìn)行存儲。數(shù)據(jù)處理模塊針對采集的以太數(shù)據(jù)進(jìn)行一系列算法處理,并與標(biāo)準(zhǔn)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行參數(shù)比對,最終實(shí)現(xiàn)傳輸數(shù)據(jù)的監(jiān)控。
故障診斷模塊通過操作數(shù)據(jù)實(shí)現(xiàn),是在對測試數(shù)據(jù)分析、評估基礎(chǔ)上實(shí)現(xiàn)的。針對數(shù)據(jù)異常情況進(jìn)行處理,將故障進(jìn)行定位,最終為用戶提供排故指導(dǎo)策略。
告警模塊利用Broadcast Receiver方式實(shí)現(xiàn),負(fù)責(zé)數(shù)據(jù)通信異常的告警事件,同時(shí)調(diào)用告警顯示界面顯示對應(yīng)的信息。
存儲模塊利用SQLite方式實(shí)現(xiàn),將測試過程和測試結(jié)果進(jìn)行存儲,方便用戶進(jìn)行查看、調(diào)用及打印輸出。
基于Android系統(tǒng)的航電數(shù)據(jù)監(jiān)控平臺作為綜合航電系統(tǒng)上的一個(gè)關(guān)鍵節(jié)點(diǎn),通過以太總線與系統(tǒng)進(jìn)行通信,對航電系統(tǒng)的航姿、大氣數(shù)據(jù)、發(fā)動(dòng)機(jī)參數(shù)等組件進(jìn)行地面在線監(jiān)測。最終實(shí)現(xiàn)了對綜合航電系統(tǒng)傳輸數(shù)據(jù)測試,以及對各飛行參數(shù)組件的功能測試。經(jīng)實(shí)測,監(jiān)控平臺以10 Mb/s的通信速率運(yùn)行,且保持測試狀態(tài)穩(wěn)定。目前,該項(xiàng)目已通過民航局地面測試項(xiàng)目認(rèn)證,已應(yīng)用于綜合航電系統(tǒng)定檢達(dá)20余套,故障系統(tǒng)檢測2套,取得了良好的應(yīng)用效果。
[1]周德新,彭妮娜,馬騰達(dá).航電仿真系統(tǒng)集成驗(yàn)證平臺設(shè)計(jì)方法的研究[J].自動(dòng)化與儀表,2015,30(3):1-5.
[2]黃皓,方媛,尹祿高.基于數(shù)據(jù)庫的飛行器通用測試平臺設(shè)計(jì)[J].自動(dòng)化與儀表,2015,30(6):59-63.
[3]周慶,劉斌,余正偉,等.綜合模塊化航電軟件仿真測試環(huán)境研究[J].航空學(xué)報(bào),2012,33(4):722-733.
[4]孫兵,何瑾,陳廣廈.基于DSP的CAN總線與以太網(wǎng)互聯(lián)系統(tǒng)研制[J].儀器儀表學(xué)報(bào),2008,29(2):377-380.
[5]滕秋琴.ARM嵌入式系統(tǒng)網(wǎng)絡(luò)接口設(shè)計(jì)[J].電訊技術(shù),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標(biāo)準(zhǔn)容限內(nèi)以太網(wǎng)轉(zhuǎn)發(fā)時(shí)延的測試與分析[J].電子學(xué)報(bào),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ī)載總線網(wǎng)絡(luò)及其發(fā)展[J].航空學(xué)報(bào),2006,27(6):1135-1144.
[10]汪健甄,許宗澤.航空電子高速數(shù)據(jù)總線性能分析及其實(shí)時(shí)性仿真[J].南京航空航天大學(xué)學(xué)報(bào),2008,40(3):345-347.
[11]曾祥文,宋樹祥,賓相邦.嵌入式Linux下波特率自適應(yīng)的CAN總線驅(qū)動(dòng)的實(shí)現(xiàn)[J].測控技術(shù),2015,34(8):104-107.
[12]詹成國,朱偉,徐敏.基于Android的測控裝置人機(jī)界面的設(shè)計(jì)與開發(fā)[J].電力自動(dòng)化設(shè)備,2012,32(1):119-122.
[13]農(nóng)麗萍,王力虎,黃一平.Android在嵌入式車載導(dǎo)航系統(tǒng)的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(11):2473-2475.
[14]韓迪,潘志宏.基于Android移動(dòng)設(shè)備傳感器的體感應(yīng)用[J].華南理工大學(xué)學(xué)報(bào):自然科學(xué)版,2012,40(9):75-77.