4. ARINC429数据字类型解析

ARINC429数据字固定为32位,但同样一串比特,按不同“标号(Label)”所声明的数据类型去解读,得到的物理量完全不同。理解数据字类型,本质上就是理解“位域如何划分、比例因子如何选取、符号位如何约定”这三件事。本节围绕最常用的BCD、BNR、离散量和维护数据四类编码,说明其位域定义与数值换算方法。

一、32位数据字的通用位域框架

无论哪种编码,ARINC429字都遵循统一的高层结构:第1~8位为标号(Label),第9~10位为源/目标标识(SDI),第11~29位为数据区(19位),第30~31位为符号/状态矩阵(SSM),第32位为奇偶校验位(P)。标号本身以八进制表示,且传输时按位反序发送,这是初学者最容易出错的地方——软件里看到的“标号”与总线上先出现的比特顺序是相反的。

数据区19位是各编码差异最大的部分。BCD用其中若干位表示十进制数字,BNR用全部或部分位表示二进制补码数值,离散量则把每一位当作独立开关,维护数据往往借用数据区承载状态字或故障码。SSM两位的含义随编码类型变化:对BNR,它表示正常、无计算、功能测试、故障等;对BCD,它更多表示正负号与有效性。

ARINC429 32位数据字位域与四类编码数据区划分 Label 1–8 位 SDI 9–10 数据区 Data Field 11–29 位(19 位) SSM 30–31 P 32 BCD 编码 每 4 位表示 1 个十进制数字 19 位可容纳 4 位数字 + 符号 例:0x1234 → 1234 SSM 表示正负与有效 BNR 编码 二进制补码,MSB 为符号位 19 位含符号,范围 ±2^18 物理量 = 码值 × 比例因子 例:0x0C80 → 3200 × 0.125 离散量 Discrete 每一位独立表示一个开关量 1 = 有效/接通,0 = 无效/断开 19 位可承载 19 个离散状态 按位掩码提取,无需换算 维护数据 故障码 / 状态字 / 计数 常按位域或整字解读 SSM 指示数据有效性 用于地面维护与排故 数值换算核心关系 原始码值 Raw Bits 比例因子 / 位权 Scale Factor 物理量 Engineering Value BCD 按十进制位权展开;BNR 按二进制补码乘比例因子;离散量按位掩码直接判读

二、BCD编码:十进制位权展开

BCD(Binary Coded Decimal)把数据区按每4位一组表示一个十进制数字。以标号203(八进制)传递高度为例,数据区19位中通常用低16位表示4个十进制数字,高3位与SSM配合表示符号和有效性。假设收到数据区比特为 0001 0010 0011 0100,按每4位一组解读为十进制数字1、2、3、4,即数值1234。若该标号定义的单位为英尺,则物理高度为1234英尺。

BCD的换算不需要比例因子,但要注意两点:一是数字位可能从高位到低位排列,也可能相反,必须依据接口控制文件(ICD)确认;二是SSM为“01”通常表示正、“11”表示负,符号不占用数据区数字位。BCD的优点是直观、便于显示,缺点是同样19位能表达的数值范围远小于BNR。

三、BNR编码:补码与比例因子

BNR(Binary Number Representation)是ARINC429中最常见的数值编码。数据区19位中,最高位为符号位,其余18位为数值位,采用二进制补码表示。若符号位为0,数值为正;为1,则为负,负值需按补码规则还原。例如数据区为 0 0000 1100 1000 0000,去掉符号位后数值为0x0C80,即3200。若该标号的比例因子为0.125,则物理量 = 3200 × 0.125 = 400。

比例因子由ICD规定,常见的有2的负幂次(如1/256、1/1024)或工程单位换算系数。BNR的SSM含义为:00正常、01无计算、10功能测试、11故障。当SSM为11时,即使数据区有值,也应视为无效数据,不能参与后续计算。BNR的精度由最低有效位(LSB)决定,LSB = 比例因子,例如比例因子0.125表示分辨率0.125个单位。

四、离散量与维护数据

离散量把数据区的每一位当作独立开关。例如标号270的某一位表示“起落架收上到位”,该位为1表示到位,为0表示未到位。离散量不需要数值换算,但需要按位掩码提取:state = (word >> bitPos) & 0x01。多个离散量可以打包在同一个标号的不同位上,读取时逐位判断即可。

维护数据通常用于地面维护和故障诊断,可能包含故障码、状态字、计数器等。其位域定义完全由ICD决定,常见做法是把数据区划分为若干子字段,每个子字段表示一个故障标识或状态。维护数据的SSM往往用于指示该维护字是否有效,若SSM为故障态,则维护字本身可能不可信。

实际开发中,建议为每个标号建立一张“标号—类型—位域—比例因子—SSM含义”的解析表,解析函数按标号查表后分派到对应解码器,避免把BCD当BNR处理这类低级错误。

五、解析实现要点

在软件中解析ARINC429字时,建议按以下顺序处理:先校验奇偶位,再提取标号并反序还原为八进制,然后根据标号查ICD确定数据类型,最后按类型分派解码。对于BNR,注意补码符号扩展;对于BCD,注意数字位顺序;对于离散量,注意位掩码;对于维护数据,注意SSM有效性判断。只有把位域定义和换算方法都落实到代码中,才能保证数据解析的正确性。