基于超高速线程并行处理技术的民机试飞数据预处理系统设计
2023-08-03王加熙
王加熙,刘 涛,冯 灿,高 祥
(中国商飞民用飞机试飞中心 测试工程部,上海 200231)
0 引言
试飞是在真实的环境下对飞机的性能和功能进行测试的过程,是民机投放市场前的必经之路[1]。用于试飞的飞机会加装各类传感器和测试设备,对那些表征飞机关键系统状态的参数进行采集、处理和记录,这些参数就是试飞数据[2]。试飞数据是民机试飞中最重要的产物,其应用贯穿了整个试飞过程,是用于判断试飞架次有效性、验证飞机设计合理性以及向局方表明符合性的重要依据。试飞数据经机载采集器采集编码后进行传输,并利用记录设备对所有数据进行实时记录,这类数据被称作原始数据。原始数据必须使用总线的ICD(interface control documentation)和传感器的校线进行解码后才能使用,这个解码过程被称为工程量转换(即将二进制编码的原始数据转换为物理量),也叫试飞数据预处理[3]。试飞数据预处理是进行数据分析、判断飞机状态、决定飞机是否再次飞行的基础,对飞机飞行安全至关重要[4-5]。国内的主流试飞机构一般在飞行试验结束后对机载记录的原始数据进行卸载,并通过相关软件实现过程量转换,最后输出数据文件(为txt或者csv的文本文件)[6]。随着先进航电总线在民机上的大量使用以及网络采集系统的普及,试飞数据的数量越来越多、体量也越发庞大,例如空客380的试飞参数数量就达到了十几万个,而国产某大型客机的试飞数据也突破了80 000个,单个架次的原始数据超过了100 GB,同时试飞数据的类型也更为复杂,包括了总线、各类传感器以及音视频这些结构化、非结构化数据,参数采样率也从1 Hz跨度到了16 kHz,除此之外,为了保证试飞安全、提高试飞效率,人们对试飞数据的时效性要求也越来越高[7-11]。传统的预处理技术往往很难满足以上需求,存在以下不足:
1)试飞数据预处理周期过长。一般情况下,试飞数据的预处理过程往往需要4~5个小时甚至更长的时间,为试飞数据的分析和试验点有效性的快速判断带来了障碍,不利于一天多架次的试飞;
2)试飞数据的监控方式不灵活。试飞数据的监控一般采用被动接收的方式,无法根据实际的试飞状态灵活变化;
3)试飞数据的分析效率较为低下。试飞数据仍以文本文件方式输出,不利于数据的检索、查询和关联分析,这严重制约了试飞数据的分析效率。
国内外的试飞机构在试飞数据的预处理处理方面也在不断的探索和研究,例如中国飞行试验研究院利用VxWorks嵌入式系统实现了110 Mbps带宽下网络数据的接收和处理,但处理能力仅能达到8 000个参数[12-14],空客所研制的预处理设备仍然需要在航后进行二次解析。
因此,为了缩短试飞周期,提高试飞效率,降低试飞运营成本,需要探索一种新的试飞数据预处理技术,实现缩短试飞数据预处理周期、改变监控模式、提高分析效率的目的。
1 系统结构及原理
本文提出了在实时状态下进行试飞数据预处理的理念,研制了一套试飞数据机载在线完全预处理系统,功能是在机载环境下,实现试飞数据的实时接收、工程量转换和数据库存储,达到飞机落地即输出数据文件的目的。
系统包括机载数据处理服务器和实时预处理软件两大部分,其中在线完全预处理软件包括配置信息生成软件、数据实时在线处理软件、监控调试软件、地面数据卸载软件、机载高频监控软件等五大子软件。
主要业务流程如图1所示,分为试飞任务配置、试飞任务运行和试飞任务结束以及数据卸载交付等四大环节:
1)试飞任务配置。测试工程师根据实际试飞任务的具体信息,在地面环境下使用配置信息生成软件以机载配置文件、总线ICD文件、参数组导出文件、监控转发文件为输入,按照既定格式生成试验信息文件,并导入机载数据处理服务器完成系统配置。其中,机载配置文件为XML(extensible markup language)格式,描述了机载测试系统的相关信息,包括系统架构和采集器、交换机等设备信息;总线ICD文件主要记录了ARINC664(aeronautical radio Inc.)、ARINC429以及IMB(inter model bus)等机载总线的信息,如参数的取位、类型和计算方法等,是总线参数解析的关键;参数组导出文件规定了每个数据输出文件所包含的参数名称,可根据实际试飞任务需求动态更新;监控转发文件说明了试飞数据的转发频率和转发顺序。
2)试飞任务运行。在试飞任务开展过程中,数据实时在线处理软件首先加载试验信息文件,完成软件初始化,并启动软件内部各模块,按照设置自动开始进行数据在线处理任务;监控调试软件对整个系统的软硬件状态进行监控、统计和显示;数据实时在线处理软件以机载测试系统原始数据流为输入,完成试飞数据的工程量转换、计算分析、分发和参数组导出以及IoTDB的时序数据库存储;机载高频监视软件以实时数据驱动方式刷新监控画面完成振动、电源等高频数据的实时监控。
3)试飞任务结束时(飞机落地后至切断整机电源系统前),数据实时在线处理软件对落盘存储的数据文件进行在线压缩处理。
4)数据卸载交付。技术人员从机载数据处理服务器取出数据磁盘,并挂载到数据分发设备(即计算机)后,运行在该设备上的地面数据卸载软件识别磁盘及数据文件,结合交付策略使用FTP(file transfer protocol)等方式将数据分发至各目标终端。
2 机载数据处理服务器
机载实时处理服务器是实时预处理软件的运行载体,采用成熟的组件并通过加固方式实现,结构如图2所示。
图2 机载数据处理服务器组成框架
机载数据处理服务器各功能模块如下。
1)主板模块:含CPU(central processing unit)、板载内存、板载RAID(redundant array of independent disks)卡及网卡等组件,其中CPU采用Intel Xeon Gold 6148处理器,内存为DDR4,容量为256 GB,使用板贴芯片替代传统槽加方式,加强主板的抗振动冲击能力;
2)背板模块:由背板、对外/内连接器组成,主要为整个设备各模块间接口提供互联,包括千兆网口、USB、VGA等,各模块间接口采用CPCIE连接器(如图3(a)所示);
3)存储模块:包含硬盘背板及2块模块化硬盘,通过锲块结构与存储模块支架紧固,可方便进行插拔(如图3(b)所示);
4)电源模块:将直流28 V电源转化为主板需要的直流12 V电源和硬盘所需的直流5 V电源;
5)时统模块:提供PTP(precise time protocol)输入对时,IRIG-B码输出功能,用于时间同步;
6)控制模块:提供一路控制信号用于整个系统存储服务的启动和停止。
机载数据处理服务器采用加固模式,设计尺寸如图3(c)所示。
图3 模块及设计尺寸
3 实时预处理软件
实时预处理软件是整个系统的核心,运行时通过组播方式实时接收机载测试系统的原始数据流,按照总线类型和具体参数配置,进行工程量转换、时间对齐,并将转换后的数据进行两路并行输出,一路存储至IoTDB时序数据库,一路以文本文件存储于硬盘中。同时,软件集成了Redis内存数据库,主要负责数据的缓存和转发,用来集中管理预处理阶段各类统计信息,驱动监控调试软件完成状态监控。
3.1 配置信息生成软件
配置信息生成软件工作在试飞准备阶段,主要功能是以机载配置文件、总线ICD文件、传感器校线文件、试飞参数分组文件为输入,生成试验信息文件。软件包括机载配置处理、总线ICD处理、校线文件处理、试验信息处理、日志管理、显示与查询等功能模块,处理流程和架构如图4所示。
图4 处理流程和架构
1)机载配置处理模块主要负责机载配置文件(描述了机载采集系统,如机箱、板卡与参数之间详细结构关系的XML文件)的加载、编辑、解析和保存,并以机箱为单位对试飞参数进行结构化定义;
2)总线ICD处理模块主要负责对ARINC429、ARINC664、IMB等总线的ICD信息进行判读、校验、加载和解析,并对参数的取位、数据类型、系数等基本属性进行编辑,生成参数对象;
3)校线文件处理模块负责对传感器的校线文件进行加载和解析,校准类型主要定义以下四种形式:
(2)Bit Weighted基于比特位进行描述,即比特位与其系数形成映射关系,当码值中比特为1时,取其对应系数,最终得到参数工程量数据,并且按照最低位比特系数保留参数工程量精度;
(3)Lookup Table基于点对之间插值,输入多达32对输入和输出点,输入数据点之间的值将被插值。
4)试验信息处理模块主要完成试验信息文件的生成,通过上述机载配置模块、ICD处理模块、校线模块处理完成后得到的参数关联信息,联合参数组配置文件内容,生成可用于实时预处理软件可加载的配置文件。
3.2 数据实时在线处理软件
3.2.1 总体设计
数据实时在线处理软件包含解析导出和DB存储两个子软件,底层采用了多线程无锁队列基础框架,集成了Tinyxml、NanoMsg消息队列以及Redis内存数据库等成熟组件[15],使用C++11标准编程语言实现。
解析导出子软件作为核心预处理解析软件,包括配置解析、数据接收及处理、数据解析、数据缓存管理、监控转发、参数组导出存储、状态管理、实时数据转发等八个功能模块(DB存储子软件与解析导出子软件共用配置解析、数据接收、数据解析模块、数据缓存管理四个模块,除此之外,集成了IoTDB时序数据库,用于实现试飞数据的数据库存储)。数据工程量转换、参数组导出、监控转发等核心业务流程如图5所示。
首先,软件在启动时分别读取试验信息文件和监控列表文件,使用配置解析模块对试验信息文件内各总线机箱及参数进行处理,在内存中形成“总线-参数”的结构化数据结构,构建所有参数解析所需属性信息,并对监控列表中各参数进行位置映射;
其次,数据接收及预处理模块根据配置对象中关于采集机箱IP端口的描述,创建UDP(user datagram protocol)网络连接,实时接收数据流,调用包头处理线程按照协议格式判读包头类型及通道信息,对数据进行分类转发至解析模块(例如NPD(network packet data)包头类型为0x35A1代表ARINC429总线或模拟量数据,按照机箱通道和SFID(sub frame ID)映射关系转发至子帧处理线程;若是0x35A8则代表ARINC664和总线数据,按VLID(virtual link ID)标识循环提取Message对应数据转发至总线解析线程;如果是0x35B0,代表IMB总线数据,按照Label分类提取Message数据并转发)[16-17];
第三,使用数据解析模块接收经过包头处理、数据区提取后的数据进行工程量转换,其中,针对ARINC429总线或模拟量数据,需要进一步进行单帧提取处理,并按照各总线规则解析,每个参数工程量转换完成后立即转发;
第四,使用数据缓存管理模块对接收所有参数工程量,用链表数据结构方式存储至内存空间中(每个参数对应一个链表结构),每个参数对应的链表存储空间则根据导出完成状态自动删除历史工程量数据;
第五,自动根据事先在试验信息文件中配置好的一个或多个导出参数组设置,从参数链表中按照规定的导出设定进行数据采样提取,并按照规定导出文件格式进行存盘,在导出时,高低频参数组导出分开处理,当预处理完成后,对所有参数组文件进行压缩处理;
图5 核心业务流程
第六,针对需要高频转发、分析的参数,软件在初始化阶段按参数个数和频率申请固定大小内存空间,每次参数工程量解析完成后,改写对应位置数据,满足转发频率的数据长度要求后,按照协议格式进行组包,并使用TCP/UDP实时转发。
3.2.2 软件架构设计
数据实时在线处理软件采用超高速线程并行处理技术在实时状态下完成NPD或者IENA等数据流的实时处理。各个线程与功能模块的映射关系如表1所示。
表1 功能模块与线程对应表
以NPD数据流为例,并行处理的示意图和时序图如图6所示。
图6 数据实时在线处理软件并行处理流程和线程时序示意图
如图6所示,针对网络数据流,软件包括包头处理、数据解析、数据缓存以及数据存储等4大类线程,所有线程通过线程池统一管理和调度,运行原理如下:
1)当软件启动时,主调度线程将试验信息文件中的信息进行对象化,并传递至各个子线程;
2)网络接收线程根据组播地址和端口实时接收NPD数据包;
3)包头处理线程对所有的数据包进行顺序处理,提取有效数据,同时建立数据类型、采集机箱和有效数据之间的映射关系;
4)根据3)所创建的映射关系新建解析线程和数据缓存线程,创建原则是每一个机箱对应一个解析和缓存线程,多个机箱数据进行并行处理;
5)解析后的数据被缓存至内存链表,等待订阅;
6)根据试验信息文件中的参数组信息创建参数导出线程,每一个参数组为一个单独线程;
7)参数导出线程从链表中提取对应数据并写入数据文件。
为了保证软件运行的稳定性,在线程以及资源的使用上做以下优化:
首先,对数据解析、参数导出、时间对齐等高负载线程,与CPU核心数线程进行了绑定,避免系统自动分配抢占计算资源;
其次,参数缓存线程按照试验信息文件中的通道数量进行分配,每个参数缓存线程管理和存储该机箱通道内的所有参数工程量,各参数存储方式使用链表数据结构,减少数据拷贝开销;
第三,针对参数组导出存储线程,区分高频和低频参数,在数据解析前,按照参数组导出配置,根据高、低频参数数量进行线程分配,提升参数导出效率。
3.2.3 配置解析模块
配置解析模块主要对配置信息生成软件产生输出的XML格式文件进行加载,处理机箱与参数属性关系,针对不同的总线,定义不同结构体描述层级关系:
1)针对ARINC429总线,形成机箱通道-Message(SFID)-参数-EuFunction的层级结构;
2)针对ARINC664总线,形成机箱通道-Message(VLID)-参数-数据类型的层级结构;
3)针对IMB总线,形成机箱通道-Label-参数-数据类型的层级结构。
3.2.4 数据接收及处理模块
数据接收及处理模块主要接收网络中各采集机箱发来的NPD或者IENA实时数据流(每个机箱对应一个实时组播流接收线程),按照总线类型和机箱信息对数据进行分组和数据包头处理以及子帧提取,形成总线Message,该处理过程属于试飞数据进行工程量转换前的预处理过程,经预处理后的各个总线Message转发至数据解析模块。
3.2.5 数据解析模块
数据解析模块是软件的核心模块,承担各类总线数据的工程量转换。
3.2.5.1 NPD-ARINC429[18]
1)首先根据配置信息遍历Message下的参数列表,对属于该消息的所有参数源码进行定位;
图7 ARINC429总线参数解析流程
2)对定位源码进行移位操作提取参数源码,并根据参数类型进行补码运算;
3)根据参数类型调用EU Function结构对象完成工程量转换。
表2 试验信息文件解析映射表
3.2.5.2 NPD-ARINC664
ARINC664总线参数的解析过程如图8所示,当VLID+UdpDstID一致时,遍历参数列表,用每个参数内的取位信息在Message对应的数据区中定位原码,数据类型与分辨率系数计算后得到最终的工程量。
图8 ARINC664总此案参数解析流程
3.2.5.3 NPD-IMB
IMB总线参数的解析与ARINC664总线解析过程大致相同,流程如图9所示。
图9 IMB总线参数解析流程
3.2.5.4 IENA
IENA数据包的解析与NPD相似,当从数据流中提取到数据包后,结合试验信息文件中机箱与参数映射关系,从参数列表中遍历各参数的具体位置进行原码定位,并结合参数掩码进行取位,通过参数校准类型进行工程量转换,得到最终物理量。
3.2.6 数据缓存管理模块
数据缓存管理模块以二维数组指针形式维护所有参数工程量在内存中存储,并按照参数在总参数列表中的索引位置,进行链表的插入和删除,且插入和删除过程互斥。
插入操作:总线解析线程产生的参数工程量发送至数据缓存管理线程,线程依据参数名对应的位置定位所有参数在链表指针,进行拼接插入;
删除操作:当完成某一次时间段内参数组导出后,数据缓存管理线程依据从主控线程收到的删除时间段消息从链表中删除线程内所有参数的历史工程量数据,防止历史数据在链表空间累积。
3.2.7 监控转发模块
监控转发模块通过加载多个监控转发列表文件,完成监控参数与总参数列表的位置映射。当数据开始解析后,按照监控转发列表文件设定的固定频率从各参数的链表中获取最新工程量数据,以一定协议打包成二进制数据包,通过UDP组播流形式按照预设转发频率周期性转发。
3.2.8 参数组导出存储模块
参数导出模块的主要功能是按照预设参数组信息,对不同采样率的参数进行时间对齐,完成试飞数据在数据文件中的存储和压缩。导出过程如图10所示。
图10 参数组导出过程
在参数组导出时,假定该组参数参数采样率包括16 Hz和5 Hz,导出采样率为16 Hz。在共同导出时无法得出合理的工程量数据,所以必须将每个参数的采样率进行升序(目标采样率的倍数关系,如80 Hz),然后按照升序后的采样率(80 Hz)与导出时采样率(16 Hz)倍数关系,提取对应的参数数据。由于网络采集器在实际采样过程中,会出现一定采样间隔偏差,为了弥补这一偏差,需要在导出某一参数时,先按照导出后采样率进行时间计算,再根据所得到的时间在参数内存区域查找最接近该时刻的时间戳。原理如图11所示。
图11 时间对齐原理
3.2.9 基于IoTDB的数据存储模块
IoTDB数据存储模块主要是将解析后的工程量数据实时写入IoTDB时序数据库,利用其高压缩比的特性压缩数据体量,方便后续的查询及分析。在IoTDB中,每一个试飞参数就是一个时间序列,命名为“root.飞机型号.架机号.试飞任务单号.试飞地点.试飞日期.试验类型.参数名称”,其中“root.飞机型号.架机号”为存储组。
3.3 监控调试软件
监控调试软件运行在机载监控终端上,主要对机载处理服务器设备和数据实时处理软件的运行状态以及数据存储情况等进行监控、统计和可视化显示,架构如图12所示。
图12 信息交互示意图
实际工作时,监控调试软件从Redis内存数据库获取数据导出子软件、DB存储子软件的状态信息(其中DB存储子软件只发送软件运行状态和日志信息,原始数据流、参数组、监控转发等信息均由数据导出子软件产生)。
监控调试软件的界面采用Qt Widgate框架实现[19],用于人机交互,可展示设备的负载、软件运行状态、数据参数可视化、工作日志以及参数组导出、监控转发等状态信息,软件界面与工作流程如图13所示。
3.4 机载高频参数监控软件
机载高频参数监控软件包括监控画面编辑和监控画面显示两个子软件,主要功能是在机载环境下,实现振动等采样频率超过8 192 Hz高频参数的实时监控和分析。
两个子软件分别对应这监控画面的设计模式和运行模式。在设计模式下,用户使用监控画面编辑软件,通过新建或者打开已有的XML文件,拖拽显示控件进行监控画面的布局设计,在完成基础界面设计后,通过“绑定”的方式为显示控件加载相应的参数和分析算法,并保存为XML文件;在运行模式下,由监控画面显示软件加载并解析XML文件,根据指定的IP地址和端口向IoTDB时序数据库完成数据的订阅和实时显示。
3.5 地面数据卸载软件
地面数据卸载软件工作于地面环境,主要功能是在飞行试验结束后,从机载数据处理服务器中实现数据输出文件的压缩和卸载,并上传至指定的FTP服务器,完成数据的分发和交付,包括数据导出和数据移交两大功能模块。
图14 软件相关信息
地面数据卸载软件启动后,数据导出模块从数据实时在线处理软件中读取数据导出格式信息(如txt、csv等),并按照预设文件名称自动压缩后存储在硬盘中;数据移交模块的功能是将压缩后的数据包自动推送至指定的服务器。
4 实验结果与分析
4.1 试验环境
试飞数据预处理系统按照图15的架构在地面和机载环境进行部署,软件运行环境如表3所示。
图15 试飞数据预处理系统运行架构
4.2 试验步骤
将机载实时处理服务器安装于国产某大型客机,按照以下步骤进行试验:
1)启动机载测试系统的ARINC429、ARINC664、IMB等总线以及模拟量采集器;
表3 测试环境参数
2)启动机载实时处理服务器上的数据实时在线处理软件和机载记录器;
3)启动监控终端上的监控调试软件,对数据流量、数据实时在线处理软件的运行状态以及数据存储状态进行可视化监控;
4)启动监控终端上机载高频参数监控软件,加载监控画面XML文件,观察高频参数的时、频域曲线;
5)NPD数据包包头中解析出高频参数装包绝对时间T1,记录高频数据经频谱分析后的绝对时间T2,计算延时T2-T1;
6)系统持续运行5小时后,将存储模块拆卸至地面,使用地面数据卸载软件卸载数据文件;
7)利用航后预处理系统解析机载记录器中的原始数据,将输出的数据文件与步骤(6)的数据文件进行对比。
试验结果如表4所示。
表4 系统测试结果
经试验测试,机载在线完全预处理系统在实时状态下完成了220 Mbps流量下NPD数据包的解析,实现了78 837个试飞参数350个数据文件的实时存储。
5 结束语
本文利用超高速线程并行处理技术设计研发了一套试飞数据预处理系统,在机载环境下实现了某国产大型客机全量试飞数据的实时预处理,在线完成了200 Mbps带宽下近80 000个参数的工程量转换、在线存储和实时监控,将原先4~5小时的预处理周期压缩到了20分钟,大大提高了民机试飞效率。