基于缓存结构的民机实时QAR数据译码方法
2023-04-03张怡丰
马 驰,乔 添,王 潇,袭 奇,王 婧,张怡丰
(1.上海飞机客户服务有限公司,上海 200241;2.华南师范大学 数据科学与工程学院,广东 汕尾 516622)
0 引言
目前的民机航线数据分析,航中阶段数据主要为ACARS报文[1],虽然具有实时性,但带宽低、费用高、可供分析数据有限;航后阶段数据主要为QAR(quick access recorder)数据,QAR数据采集参数丰富、采样频率高,能较好满足数据分析的需求。航后QAR数据一般待飞机落地、发动机关车后,通过地面蜂窝基站或Wifi热点将QAR数据下传至航空公司以及飞机主制造商的服务器上[2]。航后数据分析延迟较大,难以用于部署实时性要求较高的分析模型。受限于通信链路带宽限制,基于飞行过程中实时数据的分析尚未普及。
卫星通信的发展和ATG (air to ground)通信技术的日臻完善将突破民机飞行中数据传输的瓶颈[3],使QAR数据实时传输成为可能。目前海事卫星提供基于I4卫星网络的SBB航空数据服务,每路通信速率最高可达432 kbps,且每比特通信成本日益降低[4];ATG技术通过地面专用基站和空中机载设备通信,将4G、5G信号覆盖至空中,实现飞机与地面之间的实时无线宽带互联[5]。
目前,民机航线数据分析主要使用航后QAR数据,即待飞机落地、发动机关车后,通过地面蜂窝基站或Wifi热点将QAR数据下传至航空公司和飞机主制造商的服务器上,对实时QAR数据的相关研究较为有限。QAR数据的实时传输对航线译码技术带来新挑战与新机遇。目前流行的商用QAR译码软件均针对航后数据,如AGS、Airfase等[6],采用逐个航班译码的方式。每个航班数据为一个ARINC 717格式的dat文件,该文件包含一次飞行中的全部参数记录。与航后数据不同,实时QAR数据采用流式传输[7],飞机上每秒采集的传感器记录数据拆被分成若干个IP数据包[8],数据包生成后立即经卫星或ATG等宽带网络发送至地面。地面接收到XML(extensible markup language)格式的流式数据包,译码软件需实现实时接收、实时译码。按照QAR数据记录规则,将XML数据转换为各传感器参数的工程值,并转存至数据库供后续分析使用。实时QAR译码是民航数据分析从航后、事后分析走向全航段、全过程分析的必不可少的环节,相关技术研究和程序开发具有重要意义和价值。
文献[9-10]提出了基于ATG网络的实时数据的应用方案,包括机舱音视频实时监控、客舱无线网络、QAR数据实时译码与监控等模块,但其中QAR译码并没有进针对实时数据的特性进行专门优化。本文提出基于缓存数据结构的实时QAR译码方法,将传统的译码表转换为专门的数据结构进行缓存,避免译码时对配置表的全表搜索,加快译码速度。本文采用Go语言[11]、Redis缓存[12]、Influxdb2数据库[13]和监控系统[14]搭建了实时QAR数据译码平台,对ATG网络的实时QAR测试数据展开模拟测式。测试结果表明,所提方法能够高效处理实时QAR数据。
1 QAR数据格式及传输方式
1.1 QAR数据记录规范
QAR数据,即快速存取记录器数据,是目前民航业用于航后飞行品质监控、燃油效率分析、维修分析等工作的主要数据依据。QAR数据的记录规范由美国航空无线电协会 ARINC(aeronautical radio inc)制定[15]。机载传感器数据通过飞机总线传输,如ARINC 429总线[16]或AFDX总线[17]。QAR记录设备从总线上获取数据,再根据记录配置表将采集到的数据以二进制数据流的形式存储指到记录文件中。
以目前常用的ARINC 717协议为例,记录过程以4秒为一个周期,即 4秒为一个帧,每个帧又分为4个子帧,每个子帧对应1秒钟内的数据记录。子帧内可包含256/512/1024个字槽(Word),每个字槽占12比特(bits)。字槽可记录一个或多个机载传感器数据,数据帧内各字槽记录的数据情况通过译码表进行配置。
1.2 QAR数据传输方式
受通信链路限制,目前商用航班的QAR数据以航后传输为主,即待飞机落地后,通过地面蜂窝或Wifi网络传输数据。卫星通信和ATG通信的发展,为QAR数据在飞行中的实时传输提供了支撑。以4G-ATG网络实际测试为例,各基站的上行(空对地)数据峰值传输速率可达11.74 Mbps,平均速率为6.37 Mbps。各ATG基站的下行(地对空)数据峰值传输速率为16.46 Mbps;平均速率为8.65 Mbps。对于每秒1 024 Words的实时QAR数据,ATG网络完全满足QAR数据实时传输需求。
ATG技术是一种新型空地数据传输解决方案,通过在航路沿线架设地对空通信基站,建立上下行数据传输链路。具有高带宽、低成本、低时延等特点,能够满足飞机航行过程中空地海量数据通信的需求。目前基于ATG技术的空地数据链路传输在民航领域应用已比较成熟。美国GoGo公司所部署的ATG网络已对美国全境和加拿大部分区域实现了立体覆盖,占据了美国各大主流航空公司飞机上网超过50%的市场份额。欧洲Inmarsat公司联合德国电信、泰勒斯、空客等构建EAN(欧洲4G版的ATG)网络,已经完成300个基站的部署,并投入商用。随着国内5G 网络的成熟,5G ATG将进一步加大差异化竞争优势,将会成为民航产业智慧飞行、智慧运营的重要基础保障。2021年4月,民航局正式发布《中国民航新一代航空宽带通信技术路线图》,首次明确提出以5G为代表的新一代航空宽带通信技术应用于中国民航的系统性实施路径。
图1 基于ATG网络的实时QAR传输
2 基于缓存的实时数据译码
对实时QAR数据进行解析,是航线数据译码工作的新挑战。数据译码是指将原始二进制的QAR记录还原为飞行真实数据的过程,还原后的数据也被称为工程值数据,工程值数据可分为两大类,一类是模拟量参数,例如发动机转速、空调出口温度、液压系统压力等关键部件状态,又如飞行高度、空速、滚转角、偏航角、俯仰角度等速度姿态信息,模拟量参数在译码配置时需要记录精度信息;另一类是开关量参数,例如发动机启动活门开关状态、液压系统泵的开关状态、发动机是否出现火警等,开关量参数一般只反映两种状态,在二进制记录中用1个bit表示。模拟量、开关量等参数分别记录在不同的Word和子帧中,每个子帧中的不同Word记录哪些参数,可以通过QAR记录设备进行客户化配置,地面系统再根据不同架次的配置信息将二进制记录还原为工程值。
传统的航后译码是在航班落地后,接收到本次飞行完整的QAR记录,再将整段记录转换为工程值。译码时按照译码配置表,逐个参数地解析二进制记录。由于实时传输情况下,每次传输的数据只包含一秒钟内容部分Word信息,且这些Word并不是按照序号依次排列的,因此传统的航后译码软件并不能直接解析实时QAR数据,需要开发专门的译码工具。
为提升实时QAR数据译码效率,本文提出基于缓存结构的译码方法。传统航后QAR译码方法将译码配置以表格形式存储,例如采用MySQL等关系型数据库中的表结构进行存储。而对于实时数据,需要进行逐个Word的译码,在接收到Word信息后,译码程序对配置表进行全表搜索,匹配到对应的译码信息。以每秒钟收到275个Word的配置情况为例,传统译码方法需要进行275次关系型数据库的全表搜索,效率相对较低。本文提出基于Redis(remote dictionary server )缓存的实时QAR数据译码方法。所提方法将传统译码表转换为索引-参数记录结构,该结构由索引区和记录区构成,在收到实时QAR数据后,根据Word序号和子帧序号,读取对应索引位置上的偏移量,再根据偏移量跳转至记录区,直接读取该Word的译码信息,避免了配置表全表搜索,降低了译码复杂度。本文所提译码配置结构由Redis缓存存储,避免了硬盘读取延迟,可实现配置结构的快速读入。
2.1 实时QAR报文格式
实时QAR数据由机载WQAR设备生成,并由机载传输设备封装为IP数据包,再通过ATG网络或卫星网络传输至地面系统。实时数据的存储形式为XML格式[18],如图2所示。每秒钟的ARINC 717子帧记录被划分为多条XML记录, 每一条XML记录包含多个Words信息。以本文中使用的实验数据为例,每秒的子帧记录分为16条XML文档,每条XML文档中包含16至17个Word记录,每个子帧内共275个Word记录。
图2 . XML格式的实时QAR数据示例
XML记录通过树形结构存储数据, WQAR设备生成的XML记录格式如图2所示。每条XML记录对应的树形结构的根节点名为publishAvionicParameters,子节点refreshperiod记录数据更新频率,为一秒钟一次;context节点记录具体的信息,其TOTAL_MSG_PARTS子节点记录本报文中宗的XML记录个数,SEQUENCE_ID子节点记录本条XML对应的序号;机载传感器参数信息包含在
表1 实时QAR数据
2.2 译码缓存结构
为提升实时QAR数据的译码效率,本文提出了基于缓存数据结构的译码方法。所提译码配置结构由索引区和参数记录区构成,如图3所示。
图3 基于缓存的译码配置结构
不同Word的译码配置信息存储在参数记录区。参数记录区由参数记录单元构成。每个单元记录单个参数的译码配置信息,包括参数名称长度(占用字节数)、参数名称、起始位(lsb)、终止位(msb)、正负情况(sign)、精度(slope)。在一个子帧内,单个Word可存储多个机载传感器参数,因此其译码配置信息中可包含多个参数记录单元,如图3所示。在参数记录区,参数记录单元连续存储,同一子帧同一Word对应的参数记录单元存储在一起,对于单个参数记录单元,所存储内容依次如下:
1)参数名称长度, 占用1字节;
2)参数名称,按其长度以字符型存储;
3)lsb,起始位,占用1字节
4)msb、终止位,占用1字节
5)sign,正负情况,占用1字节
6)slope,精度,解码时将二进制记录转为十进制后再乘以精度,为传感器记录值,采用浮点型存储,占用4字节。
一个Word-子帧中可包含多个参数记录单元。如表2中, Word 283, 子帧1共记录了3个参数,分别为WINDSHST、WSALRTLV和ALERTNO,表示风切变状态、风切变告警级别和风切变告警代码[20]。
表2 Word-子帧对应的译码配置信息示例
参数记录单元连续地存储在参数记录区中。已知记录数据所在子帧和Word序号,可通过索引区查找其对应的译码配置信息在记录区中的位置。索引区总大小为NUM_WORDS × NUM_SUBFRAMES×4字节,其中NUM_WORDS为Word总数,NUM_SUBFRAMES为子帧总数,对于当前主流民航机型,NUM_WORDS=1024,NUM_SUBFRAMES =4。索引区为每个给定的Word和子帧分配4字节存储空间,用于记录所对应的译码信息在记录区的偏移量。根据Word和子帧序号由小到大的次序,偏移量在索引区依次排列。译码时,根据Word序号和子帧序号,从索引区读取偏移量,再跳转到记录区对应位置。由于给定子帧和Word可对应多个参数记录单元,该位置前4个字节记录该子帧和Word记录的参数个数。
以上译码数据结构通过Redis存储。Redis,即远程字典服务,是开源的缓存键-值型数据库,采用ANSI C语言编写,具有存取效率高、支持网络等优势、其数据存储可基于内存,亦可提供持久化保存,并提供多种语言的API接口[12]。
2.3 基于缓存结构的实时译码过程
由于各架次飞机采用的译码配置不同,实时QAR以UDP数据流[19]的形式发送至地面。当地面服务器接收到实时QAR数据报文后,首先获取架次信息,再根据该架飞机的译码配置从Redis中获取译码缓存数据结构,然后解析数据包中各Word的记录值并在缓存结构中匹配到译码信息,将二进制记录值转换为参数工程值。
整体译码流程如图4所示,具体译码过程如下:
1)通过数获取模块接收实时QAR数据报文。机载WQAR设备将从飞机ARINC总线上采集到的机载传感器数据转换为XML记录并以IP数据文的形式发送给机载传输设备,如ATG设备,传输设备对XML数据进行整理,将一秒钟内的XML记录整合成一个UDP(user datagram protocol)格式的数据包;传输设备对数据包进行RSA加密、CRC校验之后通过ATG网络或卫星网络发给网络服务商的地面数据中心;网路服务商对机载传输数据进行解密和校验,并将解密后的数据发送给数据使用方,如航空公司或飞机主制造商,传输过程也采用UDP模式。实时数据的译码工作由数据使用方完成,图4中的UDP Server模块与网络服务商建立传输连接,接收数据报文,并提取报文类型、MSN号、发送时间等信息,再转发至数据解析模块。
图4 译码流程示意
2)实时数据报文内容采用UTF-8编码,具体格式为:
类型&机号&时间&XML 数据体
其中“&”为数据分隔符;“类型”为R或H,R 表示实时数据, H 表示历史数据;“机号”为飞机尾号;“时间”为数据发送时间,时间格式“yyyyMMddHHmmssSSS”(年月日时分秒毫秒);“XML 数据体”:机载QAR数据内容,采用 XML 方式组织数据,具体介绍见上文中2.1小节。数据包格式示例如下:
R&B6556&20170613142130123&
3)根据报文中的飞机尾号信息,如B6556,获取对应架次的译码版本。
4)根据译码版本,从Redis缓存中获取相应的译码数据结构;
5)根据XML记录起始标记,对数据报文中的XML数据体进行分割,依次获取XML记录;
6)对于各条XML记录,根据
7)序号为1的Word为同步字。QAR记录中采用巴克码[8]标识子帧序号。巴克码是一种具有特殊规律的二进制码组,其自相关函数的主瓣峰值是 旁瓣峰值 的13 倍,因此常用于帧同步。根据Word1的记录值可得到当前数据包对应的子帧序号,如表3所示;
表3 Word1记录值所代表的子帧序号
8)根据Word-子帧序号,从译码缓存结构中读取参数个数及各参数的译码信息;
9)根据各参数的起始位和终止位,获取记录中相应的bit信息,再根据正负情况转换为十进制,乘以精度后得到各参数记录的工程值;
10)将译码结果结果写入实时数据库。
2.4 跨子帧参数处理
对于部分精度较高的参数,当其所需的记录bit数超过12位时,采用多个Word或同一Word的多个子帧进行记录。参数记录跨多个子帧时,由于各子帧信息分布在不同的数据报文上,难以在单个报文的译码中中直接计算,本文在采用时序数据库中的聚合功能进行处理。
以某机型经度和纬度参数配置为例,经度参数由Word 228第一子帧和第二子帧记录,纬度参数由Word 228 第三子帧和第四子帧记录。 译码时,分别解析各子帧上的工程值,记为 LATH、LATL、LONGH和LONGL,并写入时序数据库。在使用经度和纬度信息时,对数据库中的记录进行聚合,聚合代码如图5所示。首先提取数据库中的LONGH、LONGL、LATH、LATL字段,通过时序数据库提供的arregateWindow语句[13],进行窗口聚合操作,窗口大小为8秒钟,聚合后计算各字段平均值,再分别将LONGH与LONGL,LATH与LATL的平均值相加,得到经度和纬度计算结果。
图5 跨子帧参数的聚合计算示例
本文采用InfluxDB时序数据库存储译码后的工程值结果。InfluxDB是由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析,数据库中每条记录均带有时间戳。InfluxDB使用场景广泛,在目前主流时序数据库中装机量排名前列,其典型应用包括智慧物联网监控分析,如石油化工、采矿、智能制造等领域内的设备数据采集、分析、告警,以及金融、可穿戴医疗设备、车联网、智慧城市等多种行业。同时,InfluxDB还广泛用于日志数据存储与分析、大数据平台软件及系统监控等业务领域。实时QAR每条数据报文均带有时间戳,符合时序数据库的存储特性,本文将InfluxDB应用于航空实时数据存储,以提升数据的存储和读取效率。InfluxDB中的数据操作可采用InfluxQL语句。InfluxQL是用于在InfluxDB中进行数据增加、查询、探索的类似于SQL的查询语法。在InfluxDB中,每条时序数据被称为一个数据点(point),一系列存储点构成的数据集形成一个存储桶。图5中的示例代码采用FluxQL语句编写,语句from(bucket:”atg”)表示对名为atg的存储桶(bucket)进行数据操作。针对每个存储桶可制定一个保留策略,即每个数据点保留的持续时间,从而减少失去时效性的历史数据对存储空间的挤占。图五中range(start:-2h)表示选取近两个小时内的数据,确定时间段后通过filter语句筛选经纬度字段。由于经度参数和纬度参数记录均跨越了两个子帧。因此采用aggregateWindow语句进行数据聚合,得到8秒钟窗口内的数据记录。由于8秒钟的时间窗口可覆盖一个完整的帧,因此可进行跨子帧数据计算,得到经纬度记录的工程值。
3 译码平台搭建及实验结果
本文采用Python将传统译码配置表转换为缓存译码结构并在Redis中存储;采用Go语言开发译码程序,译码后的工程值采用Influxdb2时序数据库存储, 并搭建了数据监控界面。
为验证本文所提实时译码方案的性能,采用ATG测试飞行中的实测数据作为输入,开展模拟译码实验。实验中Redis、Influxdb2、前端展示平台和译码程序运行在同一台计算上,CPU型号为11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40 GHz,RAM大小16.0 GB。实验结果显示,针对每秒钟的实时QAR数据,平均译码时间约为5 ms,表明本文所提方法能够高效译码实时QAR数据。
图6根据译码参数生成的飞行轨迹监控图。飞行轨迹根据不同时刻的经纬度数据绘制。经纬度的计算方法在2.4小节中给出。
图6 基于实时QAR译码结果的飞行轨迹图
实时QAR数据可用于飞机关键部件的状态监控,与基于ACARS报文的实时监控相比,可利用数据量大幅增长。例如,对于发动机振动,传统报文监控在一次航班中只能发送起飞、巡航的若干固定时刻的数据,或当振动值超出一定门限值时发送告警报文。报文方式数据量的限制分析能力和实时性。
图7为发动机低压转子(N1)振动和转速监控图,可用于发动机性能的实时监控。 在飞行中,发动机振动监控仪接收4个加速度传感信号(每台发动机2个加速度传感器)传来的振动信号和4个发动机转速信号,通过窄幅范围内的振动计算得到发动机的不平衡状态,进而计算出振动值。本文所提方法可用于在飞行过程中监测发动机振动状态,导致发动机振动原因可归为两类:一类属于与转子转速有关的规律性振动,如转子不平衡、以及由转子带动的传动齿轮等其他结构产生的激振力;另一类属于与转速无关的非规律性激振力,如静转子磨损、压气机喘振、振荡燃烧等。通过监控振动异常值及趋势变化,结合用户自定义的预警值提前执行维修工作,将维修关口前移,避免振动异常可能导致的空停风险,降低对发动机叶片、转静子叶片的损耗,延长发动机在翼时间,提升可靠新,降低维修成本,避免AOG,提升旅客舒适度。
图7 基于实时QAR译码结果的发动机转速振动监控
图8为发动机滑油压力实时监控示例,以监控发动机滑油管路堵塞等故障。润滑系统是航空发动机重要子系统,其主要功能包括润滑、冷却、清洁等3个方面。发动机滑油系统设计的目的是保护发动机并将发动机损伤降到最小程度。 发动机异常运行时,多个发动机信号监控发动机滑油系统的性能, 包括滑油位、 滑油压力和滑油温度。滑油压力是航空发动机的重要运行参数,滑油压力过高或过低都会对发动机运行造成影响,尤其是当滑油压力低于门限值时需要飞行机组关停发动机,以避免发动机在润滑不良状态下运行而造成损伤。油压力传感器的作用将相应的直流输出信号( 等于轴承的供油压力) 提供给飞机。 滑油压力传感器一般测量滑油泵出口和齿轮箱之间的压力差。 并将压力差转换成电信号发送到数据总线上。对滑油压力参数的实时监控能够使地面人员及时识别飞机状态,当状态出现异常时协助飞行人员提早采取措施,提升飞行安全性,并提前在地面做好维护准备,以缩短飞机停场时间,提升维护效率。
图8 基于实时QAR译码结果的发动机滑油压力监控
除上述飞机关键部件参数监控应用外,基于本文所提实时数据译码方法,还可以开展空地宽带环境下的实时数据分析服务,解决目前实时监控带宽小(ACARS-5 kHz)、费用贵(800/M)的问题。结合机载端ATG设备取证工作和卫星融合通讯的推进,可面向航司提供含ATG/海事/KaKu卫星等综合地面实时监控和分析能力。特别是针对空中突发的瞬态异常,如滑油急性泄漏、发动机喘振等问题。
4 结束语
本文针对实时QAR数据的特性,设计了基于缓存的译码配置数据结构,基于缓存数据结构设计了实时QAR译码算法。基于Go语言,实现了所提译码算法,译码过程中,根据Word和子帧序号能够直接匹配到相应的译码信息,避免了译码表全表搜索,提升了译码效率。根据真实ATG试飞实验的数据,本文搭建了地面模拟系统,测试结果显示,所提方法能够高效译码实时QAR数据。通过航中实时数据与地面航后数据的融合分析,可对关键参数实现全航段、全周期的连续监控,进一步扩展现有故障识别的范围和精度。实时QAR数据分析是民航领域新兴的技术,也是未来的发展趋势,目前相关研究较少。在本文的研究基础上,还可以进一步开展以下方面的研究:
实时QAR数据清洗技术:能够处理不同记录频率(1/4 Hz、1/2 Hz、8 Hz等)的参数,并对译码结果进行数据校准,识别异常值并处理,对异常值或空值通过算法进行插补;
多架次实时数据并行处理技术:探索基于GPU的加速算法,支持航线多架次、高通量数据的并发QAR数据的实时接收处理,采用多进程等技术并行处理各架机的实时数据,同时对数据丢包、飞行参数不连续、数据安全性等问题逐一研究。
实时数据监测与分析技术:通过机理+数据混合模型,计算能够反映飞机关键部件性能的监控指标,并对超出警戒值的指标告警。通过建立算法、模型对监控的实时数据进行评估。
实时QAR数据动态缓存技术:探索实时数据高效缓存方法,优化实时数据存储结构,能够同步存储译码后的实时数据;提供高效读写接口,能够支持基于实时数据开展实时状态监控、飞行品质分析、燃油效能分析等工作;设计数据动态释放机制,根据数据时效性、系统内存容量、读写耗时等因素,优化存储性能[21]。