综合航电数据监控平台的设计与实现

2016-01-18 02:43王海斌
自动化与仪表 2016年4期
关键词:航电驱动程序调用

王海斌,钱 伟

(中国民航飞行学院飞机修理厂,广汉 618307)

随着通航产业的发展,新置通用飞机已全部安装综合航电系统。综合航电系统功能先进、操作便捷,但整个系统运行依赖于高速数据传输模式,若数据传输通道出现异常,将会严重影响飞机安全飞行[1-3]。为确保航电系统数据传输的安全性,对传输通道进行定期检测显得十分重要[4]。如何在地面构建一个数据监控平台,实现对航电系统数据传输高效地检测成为本文研究的重点。便捷高效地实现数据通道检测不但能够确保系统安全运行,还能提前发现系统潜在故障,并且能够通过检测平台确认故障子部件,为技术人员维修排故提供重要的依据[5]。

本文针对某型综合航电系统进行数据监控平台开发,该型综合航电系统为目前通航应用最为广泛的型号,其数据传输采用高速以太总线完成[6-7]。本文在搭建相关硬件平台的基础上,应用了嵌入式开发技术,并在Android系统下开发了相关驱动及应用程序。下面结合数据监控平台的研制过程,详细阐述其系统组成构架、软硬件关键技术及其工程应用结果。

1 系统结构

综合航电系统主要由显示组件、核心组件、航姿组件、音频组件、大气参数组件、发动机参数组件和应答机组件7个部分组成[8-9]。其中,核心组件是交联综合航电系统的枢纽,各组件的传输数据经过核心组件统一转换为高速以太数据格式,传输给显示组件。系统控制指令也是通过该高速以太数据经核心组件,传输给各功能组件[10]。因此,实现对高速以太数据的监控和测试成为本监控平台研究的重点。数据监控平台作为一个节点嵌入到综合航电系统中,处于实时接收和数据处理的位置,如图1所示。

图1 监控平台与航电系统连接图Fig.1 Connection of monitoring platform and avionics system

2 监控平台硬件组成

监控平台硬件结构主要由数据处理模块、数据采集模块、电源模块、存储模块等组成。数据采集模块利用以太总线与航电系统实现连接,该模块实现了数据接收。平台通过数据处理模块进行算法处理,并通过用户界面实现系统控制,其系统组成如图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卡存储模式实现。

3 监控平台软件开发

3.1 监控平台Android系统架构

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核心及驱动层,该层封装了相关硬件设备,为上层提供了统一接口,可移植性极强;第二层为系统运行库层,提供系统函数库组件;第三层为应用程序框架层,包含所有开发所用各类库;顶层为应用程序层,包括系统应用程序模块的开发。

3.2 监控平台驱动开发

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

3.2.1 底层驱动设计

驱动程序的最终目的是为使上层应用程序能够使用这些硬件提供的服务来为用户提供软件功能。其处理过程是,驱动程序将硬件设备抽象成文件,应用程序对这些文件进行处理[14]。

对于Linux标准设备驱动程序可直接使用,只需针对具体设备参数修改相应内核驱动程序,然后再进行配置及编译,并增加应用层JNI接口。此类驱动包括以太总线驱动、显示驱动、音频驱动以及存储驱动。

本文以以太总线驱动为例进行说明,在Linux内核中已具备基本网卡驱动,但针对平台采用的DM9000E网卡芯片需要进行一定的修改。

步骤1需在头文件加入#include,再添加如下驱动描述:

步骤2对相应的MAC地址进行修改:

步骤3配置并编译内核

利用配置菜单对DM9000E网卡进行配置,主要在 Networking support和Device Drivers两项进行配置,具体实现如下:

菜单配置完毕,保存并编译出镜像,按此方式依次完成平台所需其余驱动模块的开发。将修改后内核驱动进行重新编译生成zImage.bin文件,移植到嵌入式系统并运行,以便软件系统上层进行调用开发。

3.2.2 硬件抽象层HAL设计

硬件抽象层是通过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的空间,注册回调函数接口,并打开相关设备驱动。

3.2.3 本地调用层JNI设计

硬件抽象层编译后生成“*.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函数方式代码段如下:

3.3 应用程序设计

监控平台应用程序设计方面考虑模块化设计,主要分为界面模块、测试模块、故障诊断模块、存储模块和告警模块,如图7所示。

图7 系统应用程序架构Fig.7 Structure of application program

界面模块采用Activity方式实现,由主界面、模块选择、用户设置和帮助组成。模块选择用于选择测试部件、测试模式以及告警事件的显示和查询等。用户设置用于密码管理、语言切换、时区和时间的设置、网络地址的设置。帮助模块用于为使用者提供在线帮助。

测试模块采用Service方式实现,主要包括数据接收和处理模块,用于数据的采集和处理。数据接收实现监控平台与被测系统的数据通信,并将数据进行存储。数据处理模块针对采集的以太数据进行一系列算法处理,并与标准数据库数据进行参数比对,最终实现传输数据的监控。

故障诊断模块通过操作数据实现,是在对测试数据分析、评估基础上实现的。针对数据异常情况进行处理,将故障进行定位,最终为用户提供排故指导策略。

告警模块利用Broadcast Receiver方式实现,负责数据通信异常的告警事件,同时调用告警显示界面显示对应的信息。

存储模块利用SQLite方式实现,将测试过程和测试结果进行存储,方便用户进行查看、调用及打印输出。

4 结语

基于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.

猜你喜欢
航电驱动程序调用
岷江犍为航电枢纽三期工程实施方案研究
民用飞机综合模块化航电系统资源状态监控技术研究
核电项目物项调用管理的应用研究
阻止Windows Update更新驱动程序
民用飞机航电系统虚拟教学资源建设
系统虚拟化环境下客户机系统调用信息捕获与分析①
计算机硬件设备驱动程序分析
C919飞机航电系统与飞机系统动态集成试验台交付
利用RFC技术实现SAP系统接口通信
妙用鼠标驱动