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,它更多表示正负号与有效性。
二、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为故障态,则维护字本身可能不可信。
五、解析实现要点
在软件中解析ARINC429字时,建议按以下顺序处理:先校验奇偶位,再提取标号并反序还原为八进制,然后根据标号查ICD确定数据类型,最后按类型分派解码。对于BNR,注意补码符号扩展;对于BCD,注意数字位顺序;对于离散量,注意位掩码;对于维护数据,注意SSM有效性判断。只有把位域定义和换算方法都落实到代码中,才能保证数据解析的正确性。