刘 涛,冯 灿,李成浩
(中国商飞民用飞机试飞中心,上海 200232)
民机试飞是指在真实的环境中对飞机进行测试的过程,以验证其功能和性能是否满足相关适航条款规定,也是民机投放市场的必由之路[1]。用于试飞测试的飞机与航空公司运营的飞机不同,会抽引机体上各种总线,并在飞机上安装各种传感器、采集系统和数据处理设备,用于实时获取反映飞机各个关键系统运行状态的参数和影像数据,实现试飞过程中的实时监控,保障飞行安全。试飞实时监控又分为机载监控和遥测地面监控,其中,遥测地面监控是指将采集后参数数据和视频流经过PCM(pulse code modulation,脉冲编码调制)编码,并采用无线传输的方式传递到地面,利用地面系统进行数据的接收和解析,为试飞工程师、地面指挥人员、飞机设计人员等提供决策依据[2-4],是飞行试验开展过程中最重要的监控模式。随着大量先进总线在飞机上的使用以及网络化测试系统的普及,试飞测试参数的数量越发繁多,类型也越发复杂,以某国产大型客机为例,其用于遥测地面监控的试飞测试参数就超过了10 000个。
遥测数据实时处理软件是地面系统中不可或缺的关键组件,主要功能是结合机载测试系统的采集格式、参数测试信息、校准信息和ICD信息,完成遥测数据的实时解算、工程量转换和原始数据保存[5]。但传统的遥测数据实时处理软件功能单一,存在以下不足:
1)实时处理参数量有限,往往不超过2 000个,无法满足当前多参数的实时监控需求;
2)参数和视频流解析一般采用分离模式,对两者的混合编码无法解析;
3)受制于软件性能,无法进行较为复杂的参数计算和分析。
因此,为了满足某大型民机试飞安全监控需求,需要研制一套新的遥测数据实时处理软件,实现试飞过程中遥测参数及视频流的实时解析、计算和存储。
遥测数据实时处理软件由后端解析服务和前端显示软件两部分构成,集成了网络配置、试飞参数配置、数据实时处理、数据记录及监控画面显示等多种功能,用以完成试飞参数的工程量处理及相关计算,并经过网络传输实时驱动可视化监控终端,达到对试飞状态实时监控的目的。软件结构如图1所示。
图1 遥测地面实时数据软件结构示意图
后端解析服务主要由数据接收模块、数据解析模块、数据存储模块、数据传输模块和任务控制模块组成;前端显示软件包括了任务管理模块、界面显示模块、算法处理模块、数据同步模块、异常告警模块和日志信息模块。前端显示软件和后端解析服务之间通过Redis数据库及ZeroMQ消息队列进行数据交互。Redis数据库是非关系型数据库,属于键值型数据存储[6],Redis支持高并发的快速数据访问,在本软件中被用于各类状态信息的前后端传输。ZeroMQ是一个并发框架,提供的套接字支持信息在线程和进程间的多协议传输[7],本软件使用ZeroMQ消息队列用于实现各个模块、各个线程间的数据安全通信。
后端解析服务基于C++编程语言开发,以控制台形式运行,在基础框架上按照功能模块使用多线程进行数据的接收、处理和转发,通过消息队列使用序列化协议进行相关数据消息通信,同时集成了Redis数据库进行实时状态的更新,并使用日志框架,对服务内部运行状态进行监控和存储。图2是后端解析服务内部工作流程图。
图2 后端解析服务流程
在实际工作时,后端解析服务由前端显示软件通过发送开始、暂停、停止等指令控制任务处理过程,并根据各指令执行情况,反馈执行结果给前端显示软件。任务模式包括实时处理和数据回放两种模式。两种模式除了数据源不同,其他处理过程完全一致。其中,数据回放模式是指后端解析服务通过加载IRIG 106 CH10记录文件,进行数据的提取、解析和转发;实时模式则是针对IRIG 106 CH10的实时TCP或UDP数据流的处理。
后端解析服务采用多线程调度实现,各个功能模块与线程的对应关系如表1所示。
表1 功能模块与线程对应表
图3为在实时处理和数据回放模式工作状态下,各线程间指令、数据流从任务开始到结束的交互时序图。
图3 线程调度示意图
在任务启动时,任务控制模块首先会开启主控调度线程,将任务信息发送给数据接收模块,同时将通道ID、遥测参数等结构化配置信息发送至数据解析模块;
数据接收模块通过对任务信息的解析,创建并开启数据接收线程,接收实时数据流或者读取记录文件数据,将IRIG-B码数据、PCM参数数据、PCM视频流数据传输至数据解析模块和数据存储模块;
数据解析模块在收到主调度线程发来的通道ID和参数信息后会自动创建对应的处理线程,用于各类数据包的解析,解析后的数据被发送至数据传输模块;
数据存储模块将持续侦听数据接收线程的PCM参数数据和PCM视频流数据,并根据控制指令按照任务信息完成数据的实时存储。
数据接收模块主要负责实时处理模式下网络数据流的接收或数据回放模式下记录文件中历史数据的读取,该模块是整个软件的数据源,其工作流程如图4所示。
图4 数据接收模块工作流程
无论在实时模式下还是回放模式下,遥测数据的本质均为IRIG 106 CH10数据包,该数据格式由包头、包主体和包尾组成,其结构如图5所示[8-10]。
图5 IRIG 106 CH10数据包格式
其中,数据包包头包含通道ID、数据包同步格式、数据包长度、数据类型等关键要素;数据包包体可存放IRIG-B码数据、PCM参数数据以及PCM视频流数据。
PCM的一般格式如图6所示,每一行为一个子帧,多个子帧组成了主帧[11]。每个子帧均由Sync Word(同步字,一般为FE6B2840)、SFID(计数器)以及多个PCM Word组成。PCM Word可负载常用的航空总线数据(包括ARINC429、ARINC664、IMB总线等)、音频数据和视频数据,总线数据均以消息的形式存放在PCM的格式格栅中[12-14]。
图6 PCM格式格栅
数据解析模块作为本软件的核心功能模块,主要负责数据包的格式解析、PCM帧处理、PCM参数计算和PCM视频流解析。
IRIG 106 CH10数据包在解析过程中,主要结合通道ID和数据类型进行指定数据包的筛选[8]。提取的数据包将按照图7所示的流程进行解析。
图7 PCM参数数据解析流程
本软件集成了IRIG 106 官方提供的解析库,首先根据数据类型关键字(如当数据类型的值为0x09时表示为PCM数据)判断数据包类型。当数据包为PCM数据包时,将按照遥测数据XML配置文件中参数和视频流的描述信息,对数据包体内容进行解析。
遥测数据XML配置信息以层级标签进行描述,标签包括
数据解析模块以PCM子帧为单位,从数据包体中按照参数的位置和取位提取原码,并将原码与对应掩码进行“与”计算,得到参数码值P0,当该子帧内所有参数信息解析完成后实时转发给数据传输模块。
PCM视频流的编码与参数不同,往往以“超采”的形式嵌在PCM数据帧中,如图6所示,该主帧中包括三路嵌入式视频,第一路视频数据即为Word-01、Word-04、Word11、Word-14...Word-n1、Word-n4。在试飞领域,视频编码一般采用H.264压缩算法,经过H.264压缩后的视频流被称为“裸流”由连续的NALU(NAL Unit)组成,并使用Start Code(一般为0x 00 00 00 01)来指示一个NALU的起始或者结束[20]。从功能层面,每一个NALU又可以分为VCL(视频编码层)和NAL(网络适配层)。其中VCL独立于网络,用于影像数据的高效编码,输出的结果为字节数组;NAL的功能是将VCL生产的字节数组适配至网络(例如将字节数组切分为不超过MTU的多个单元)。经过VCL处理的数据在传输或者存储之前,被封装到了NALU中,每一个NALU的结构可以表示为一组原始字节序列负载(RBSP,raw byte sequence payload)和对应视频编码头部信息(NALU Header)的组合。
视频在PCM的编码中可使用裸流和传输流两种形式,当采用传输流编码时,解析只需要将每个子帧中属于同一路视频流的PCM Word按照顺序提取出来,以UDP/IP形式发送至VLC播放器即可完成解码和播放;当采用H.264编码时,软件在完成指定PCM Word提取的基础上,以Start Code为标准提取完整的影像帧序列,最后封装成RTP报文或者传输流。在RTP报文的封装过程中,首先去除Start Code,利用NALU Header转换成Payload Header,加上RBSP成为RTP Payload,配合RTP Header完成报文封装[18];传输流的转换过程是在H.264裸流基础上添加PES数据包头,并将PES数据包按照184字节进行切分,为每一个切片添加4字节TS包头转换成传输流[19]。过程如图8所示。
图8
数据传输模块的主要功能是负责通过消息队列和序列化协议对相关消息进行内部和外部交互,包括PCM参数和PCM视频消息、时间消息、日志消息、交互反馈消息、状态消息、心跳消息等。数据传输模块根据这些消息通过制定相关数据结构,使用Protobuf序列化成二进制数据,并通过类型进行相关区分,然后进行打包,使用ZeroMQ消息队列将数据发送给前端显示软件。Protobuf文件中各数据结构定义如表2所示。
表2 Protobuf数据结构
数据存储模块按照任务信息,以任务名称创建一级目录,并在该目录下创建文件,按照IRIG 106 CH10格式实时存储由数据接收模块转发的所有数据,同时该目录还存储了遥测数据XML配置文件、日志文件和嵌入式视频流文件,如图9所示。视频存储目录作为二级路径以通道ID命名,在该目录下,每路视频文件以”通道ID_视频通道”命名。
图9 数据存储目录
任务控制模块主要负责后端解析服务和前端显示软件任务开始、结束等指令的交互和执行情况的反馈,并对后端解析服务内部各模块、各线程、各数据流进行调度,是整个端解析服务处理流程的调度枢纽。
在收到任务启动指令时,任务控制模块首先进行报文解析,完成遥测XML配置文件的加载,当加载成功后识别工作模式,完成网络初始化和任务信息读取,并启动各功能模块的相关线程,同时完成状态记录;当接收到结束指令时,任务控制模块会停止各个模块的线程,并完成状态记录。
任务控制模块使用了Redis数据库,记录任务运行的相关状态,包括任务运行状态,IRIG-B码处理、PCM参数处理、PCM视频流处理状态。各状态消息的主键和数据类型定义如表3所示。
表3 Redis关键字段
前端显示软件采用C#编程语言和WPF框架进行开发,WPF(windows presentation foundation)是微软推出的基于Windows的用户界面框架,做到了界面设计和业务逻辑的分离[15-17]。前端显示软件的主要功能是负责任务控制、状态可视化显示以及相关信息的配置,分为任务管理模块、界面显示模块、算法处理模块、数据同步模块、异常告警模块、日志信息模块等6个部分。
前端显示软件主要通过数据同步模块与后端解析服务进行数据交互,将同步得到的相关信息提供给各个工作模块进行处理。例如任务管理模块获取得到任务状态信息,用以控制任务的进行;算法处理模块捕获传过来的输入参数,调用对应的算法进行解析处理,得到计算结果并派生出对应的参数信息,流程如图10所示。
图10 前端显示软件各功能模块关系图
任务管理模块主要负责对任务的加载、保存、删除以及进行历史任务的回放。在实时模式下,加载任务主要通过导入遥测XML配置文件机载对应的任务信息,并将数据源、数据流、数据参数和分发终端等任务信息结构化后存储于SQLite数据库;在回放模式下,主要通过访问SQLite数据库,提取相应的任务内容。
界面显示模块主要负责针对数据源、数据流、参数信息以及分发监控终端的状态信息进行可视化展示,展示内容包括IRIG-B码信息、PCM数据流同步状态、PCM参数值、PCM视频流解析状态等。所有展示信息通过WPF框架的数据绑定(DataBinding)进行显示。所谓数据绑定就是在显示控件与其显示的数据之间建立连接的过程,其原理为界面显示模块会将需要显示的信息自动包装成依赖属性,并在其Set方法中实现INotifyPropertyChanged接口,当该属性被更新(赋值)时将值传递给显示控件。
前端显示软件主界面采用TapPage切换模式,包括数据源、IRIG-B数据流、PCM数据流、PCM视频流、数据参数界面和终端状态等6个显示页面:
1)数据源显示界面主要包括数据源名称、输入详细信息、通道等内容。其中,输入详细信息允许用户在回放模式下输入记录文件的路径和类型;通道信息包括了通道编号、通道类型、数据链路名称和通道ID。
图11 数据源显示页
2)数据流显示界面主要显示PCM数据流、PCM视频流、IRIG-B时间流的状态和信息。
3)数据参数界面包括有所有参数的列表,当参数被选中时,则显示当前参数的名称、单位和描述,同时结合PCM格式格栅地图呈现参数的位置(SFID、Word)、取位以及算法编辑子窗口。通过算法编辑子窗口,用户可从预定义算法或者自定义算法库中以拖拽方式拉取一个或多个算法进行运算,形成计算链,如图12所示。
图12 数据参数显示页
4)终端状态显示页主要显示各个监控终端的名称、通信码速率和数据传输状态,当数据传输处于不同状态时,软件会通过不同的颜色进行明显区分。
图13 终端显示页
数据同步模块主要通过ZeroMQ消息队列的方式,从后端解析服务中获得任务状态信息、数据参数信息、异常告警信息和操作日志信息。获取以上信息,并分别提供给任务管理模块、算法处理模块、异常告警模块和日志信息模块使用,最终由界面显示模块完成展示。ZeroMQ通讯协议采用命令码和Protobuf数据格式组成,命令码长度为2个字节。
表4 命令码表
算法处理模块主要完成遥测PCM参数的计算,流程如下:
1)算法处理模块通过任务管理模块加载的遥测XML配置文件,得到参数列表,形成参数集合;
2)通过数据同步模块从后端解析服务获得P0参数后,根据配置信息判断该参数是否有算法绑定,若无,则不作处理,若有,则调用响应的算法链进行计算,得到每一步的计算结果P1、P2、…、Pn;
3)P0以及每一步计算结果P1、P2、…、Pn通过界面显示模块进行显示,同时将结果发送给监控终端。
异常告警模块主要负责对界面、数据操作时的异常告警信息进行捕获和提示,以警告弹窗、日志输出和告警信息文件的形式进行展示和存储。当软件运行过程中出现告警时,前后端的告警信息会形成异常告警集合,并通过时间进行排序,同时输出到显示界面和日志文件中。告警信息分为普通、警告、严重等三个不同的等级,显示时按照等级不同分别显示为白色、琥珀色和红色。
软件运行过程中,相关的操作,特别是异常情况、告警信息,在没有运行日志的情形下,很难排查故障原因,因此日志信息模块至关重要。
本软件采用Log4cplus框架对调试信息、过程警告信息、执行流程记录信息、内部程序断言信息、内部程序错误信息和用户的基本操作信息进行管理。
为了验证遥测实时数据处理软件的功能和性能,分别在实时处理和数据回放模式下开展验证试验。
在实时处理模式下(处理流程如如图14所示),利用国产某大型客机的实时遥测数据作为数据源(数据源信息如表5所示),经移动遥测系统接收后,通过地面帧同步处理工作站完成PCM的位帧同步处理,形成IRIG 106 CH10网络数据流,经网络交换机发送至运行本软件的数据处理服务器进行实时处理,处理后的结果转发至实时监控终端进行可视化显示;在回放模式下通过加载记录的IRIG 106 CH10文件进行测试(数据源信息如表5所示)。
图14 验证试验流程
表5 数据源信息
经测试,结果如表6所示,遥测数据及解析后的视频如图15所示。
表6 数据源信息
图15 监控终端显示结果
本文设计研发了一套用于民机试飞遥测数据实时监控的软件,在实时处理和文件回放两种工作模式下,实现了国产某大型民机不少于15 000个PCM参数和4路高清嵌入视频的实时处理、计算和分发,驱动了实时监控终端的监控应用,为民机试飞的安全监控提供了有力保障。