第二章:黑匣子数据格式解析

ARINC 429——最经典的航空总线

说到航空数据总线,ARINC 429 是我最早接触的协议。说实话,它已经服役几十年了,但至今仍在大量飞机上运行。为什么?因为它简单、可靠。

ARINC 429 是单向传输的。什么意思?就是数据只能从一个发送器流向最多 20 个接收器。你想想看,这种设计天然避免了总线冲突。我在项目中遇到过一位老工程师,他说这玩意儿比后来那些复杂协议靠谱多了——嗯,我部分同意。

它的数据格式是这样的:

每个字 32 位
位 1-8:  标签(Label),标识数据类型
位 9-10: 源/目标标识(SDI)
位 11-29:数据区(Data)
位 30-31:符号状态矩阵(SSM)
位 32:   奇偶校验位(Parity)

我个人习惯把标签号背下来。比如 206(八进制)代表气压高度,210 代表空速。为什么用八进制?因为早期设计就这么定的,改不了。

小技巧:解析 ARINC 429 时,注意字节序。有些设备用大端,有些用小端。我吃过这个亏,一次试飞数据全乱了。

ARINC 717——飞行数据记录器的核心

ARINC 717 是专门为飞行数据记录器(FDR)设计的。说白了,它就是黑匣子里的数据格式标准。

这个协议有意思的地方在于,它把数据打包成固定长度的帧。每帧 64、128、256 或 512 个字。每个字 12 位。你可能会问:为什么是 12 位?不是 8 位也不是 16 位?

嗯,因为早期磁带的记录密度限制。12 位刚好能装下大多数飞行参数,又不浪费空间。

ARINC 717 的帧结构:

帧同步字(0x3C5 或 0x3C6)
子帧 1:参数 1-64
子帧 2:参数 65-128
...
超帧:多个帧组成,用于低速参数

我记得第一次解析 ARINC 717 数据时,被它的同步字搞晕了。0x3C5 和 0x3C6 交替出现,用来区分奇数帧和偶数帧。如果你只搜其中一个,就会丢掉一半数据。

避坑指南:我曾经因为没处理好帧同步,导致回放数据时高度和速度错位了 2 秒。飞行员说这数据不对,我查了三天才发现是帧对齐的问题。

ARINC 664——新时代的航空以太网

ARINC 664,也叫 AFDX(航空全双工交换以太网)。它是新一代飞机的标配,比如 A380、B787 都在用。

说白了,它就是给航空定制的以太网。但和普通以太网不一样,它保证了确定性延迟。什么意思?就是数据包到达时间是可预测的。这在飞行控制中至关重要。

ARINC 664 的数据格式:

以太网帧头(MAC 地址、VLAN 标签)
IP 头
UDP 头
AFDX 头(序列号、时间戳等)
用户数据(最多 1472 字节)
帧尾(FCS 校验)

我个人觉得 ARINC 664 最妙的地方是虚拟链路(VL)的概念。每个 VL 有固定的带宽,互不干扰。你想想看,这就像给每个数据流修了一条专用车道。

协议 传输速率 传输方式 典型应用
ARINC 429 12.5/100 kbps 单向 航电设备通信
ARINC 717 64-1024 wps 单向 飞行数据记录
ARINC 664 10/100 Mbps 全双工 综合航电系统

三种协议的对比与选择

在实际项目中,我经常需要同时处理这三种协议。比如一个典型的黑匣子数据读取系统,可能同时包含:

  • ARINC 429:读取高度、空速、航向等基本参数
  • ARINC 717:获取完整的飞行数据记录
  • ARINC 664:采集高清视频、音频等大数据量信息

为什么要用三种?因为各有各的擅长。ARINC 429 简单可靠,适合关键参数。ARINC 717 专为记录优化,数据密度高。ARINC 664 带宽大,适合现代航电系统。

核心要点:解析黑匣子数据时,先确定用的是哪种协议。看同步头、看帧结构、看校验方式。我一般先抓一段原始数据,用十六进制查看器扫一眼,基本就能判断出来。

实际解析中的常见问题

我总结了几条经验,分享给你:

  1. 字节序问题:ARINC 429 的标签是八进制,但存储时可能是二进制。别搞混了。
  2. 时间同步:不同协议的时间戳格式不同。ARINC 717 用帧序号,ARINC 664 用绝对时间。回放时一定要对齐。
  3. 数据丢失:黑匣子数据可能有丢帧。我习惯用插值算法补全,但别过度拟合。
  4. 校验失败:ARINC 429 的奇偶校验有时会出错。我一般容忍 1% 的错误率,超过就报警。

嗯,这些坑我都踩过。有一次解析 ARINC 717 数据,发现高度值忽高忽低。查了半天,原来是 SDI 位解析错了,把两个通道的数据混在了一起。

所以我的建议是:写解析代码时,先把协议规范打印出来贴在墙上。每写一行代码,就对照一下规范。别嫌麻烦,这能省下后面调试的十倍时间。