3. 硬件在环测试基本原理

硬件在环(Hardware-in-the-Loop,HIL)测试的本质,是把真实被测件(DUT)放进一个由实时仿真器构建的虚拟环境中,让被测件“以为”自己正工作在真实飞机或真实航电总线上。要做到这一点,测试平台必须同时满足四个基本条件:闭环仿真构成环境、实时性保证时间可信、信号接口匹配保证物理连通、故障注入机制保证异常可复现。本节围绕这四条主线展开。

一、闭环仿真:让被测件与虚拟环境互相驱动

开环测试只能给被测件灌入固定激励、观察输出,无法反映被测件动作对环境的反作用。HIL 的核心是闭环:仿真模型根据被测件的输出实时计算环境响应,再把响应作为新的激励送回被测件,形成“被测件→仿真模型→被测件”的回路。

以某型飞控计算机(FLCC)HIL 测试为例,闭环回路包含以下环节:实时仿真机运行六自由度飞行动力学模型与大气模型,根据舵面偏度、发动机推力等输入解算飞机姿态与角速度;传感器仿真板卡把解算出的角速率、过载、大气数据转换为 FLCC 可接收的信号;FLCC 依据这些信号计算舵面指令;舵机仿真模型再根据舵面指令更新气动面位置,反馈给动力学模型。整个回路在一个实时步长内完成一次迭代。

闭环是否“闭合”,可用一个简单判据检查:断开被测件输出、仅保留模型自激励时,系统应保持稳定或按预期发散;接入被测件后,若回路增益、相位或接口方向接错,会出现持续等幅振荡或迅速饱和。因此调试闭环时通常先做“模型自闭环”验证,再接入被测件。

二、实时性约束:时间必须可信

HIL 与纯软件仿真的根本区别在于:仿真时间必须与物理时间同步。被测件是真实硬件,它按自己的时钟运行,如果仿真模型解算慢于真实时间,被测件收到的环境信息就会滞后,闭环特性被扭曲,测试结论失效。

实时性约束通常用三个指标描述:步长(每个仿真周期的时长)、抖动(实际周期与标称周期的偏差)、超时(单步未在步长内完成)。航电 HIL 常见步长为 1 ms 或 0.5 ms,对应 1 kHz 或 2 kHz 的模型解算与 I/O 刷新频率。抖动一般要求控制在步长的 5%~10% 以内,例如 1 ms 步长下抖动不超过 50 μs。

实时性不是“越快越好”,而是“确定地按时完成”。工程上通过以下手段保证:把模型按计算量分配到多个实时核并行解算;把 I/O 读写放在独立任务中与模型解算流水化;对超过步长的任务做优先级排序,保证关键回路优先。若某步出现超时,实时系统应记录超时计数并触发保护,而不是静默丢步。

三、信号接口匹配:物理层与逻辑层都要对齐

被测件只认它设计时规定的信号形式。接口匹配要同时解决物理层和逻辑层两类问题。物理层包括信号类型(模拟电压/电流、离散量、ARINC 429、CAN、RS-422、1553B 等)、电平范围、阻抗、参考地与屏蔽;逻辑层包括数据格式、标度、更新率、字长、校验与帧结构。

下表给出一组典型航电接口的匹配要点(示例参数,用于说明匹配维度):

接口类型物理层要点逻辑层要点常见失配现象
模拟量(±10 V)差分/单端、输入阻抗、参考地标度 V/单位、滤波带宽读数偏移、噪声大、量程截断
离散量(28 V/地)开漏/推挽、上拉电阻有效电平定义、去抖时间状态反相、抖动误判
ARINC 429双绞差分、速率 12.5/100 kbps标签、SDI、SSM、奇偶校验标签解析错、SSM 无效
CAN120 Ω 终端、共模范围波特率、报文 ID、周期总线错误帧、报文丢失
1553B变压器耦合、 stub 长度RT 地址、子地址、命令字无响应、状态字异常

匹配验证的顺序建议是:先静态核对信号定义表,再用万用表/示波器确认电平与参考地,最后用总线分析仪确认帧结构与更新率。任何一层未对齐,闭环都会表现为“数据看似有、但语义不对”。

四、故障注入机制:把异常变成可复现的激励

HIL 的价值之一,是能在不损坏真实设备的前提下复现故障。故障注入按作用位置可分为三类:信号层故障(开路、短路、漂移、噪声、超范围)、总线层故障(丢帧、错帧、延迟、标签错误、总线负载突增)、环境层故障(传感器失效、大气数据跳变、电源跌落)。

实现方式上,信号层故障通常由故障注入板卡或可编程电阻网络完成,例如在模拟通道串联继电器实现开路、并联电阻实现偏移;总线层故障由总线仿真卡在发送前修改帧内容或按概率丢弃;环境层故障则直接修改仿真模型中的参数或状态。故障注入必须可配置、可定时、可记录,否则无法复现。

下面给出一个故障注入配置的示例片段,用于说明“何时、对谁、注入什么、持续多久”四个要素:

fault_injection:
  - id: FI-001
    target: "ARINC429_CH2"
    type: "label_error"
    trigger: { time_s: 12.0 }
    duration_ms: 500
    params: { label: 0x1A3, expected: 0x1A2 }
  - id: FI-002
    target: "AI_PITCH_RATE"
    type: "gain_drift"
    trigger: { time_s: 20.0 }
    duration_ms: 2000
    params: { gain: 1.15 }

注入后要观察被测件的反应是否符合设计预期:是否在规定时间内检测到故障、是否进入降级或重构、是否给出正确告警。判断依据应来自被测件的接口定义与适航/设计文档,而不是测试人员的直觉。

五、四者如何协同

闭环仿真提供“环境”,实时性提供“时间可信”,接口匹配提供“物理与语义连通”,故障注入提供“异常可控”。四者缺一不可:没有闭环,故障注入只是单向灌数据;没有实时性,闭环特性失真;没有接口匹配,信号进不去或语义错;没有故障注入,只能测正常工况。实际调试中,建议按“接口静态核对→模型自闭环→接入被测件闭环→实时性压测→故障注入”的顺序推进,每一步都保留可回退的配置与记录。

航电 HIL 闭环仿真与故障注入原理示意 实时仿真机 飞行动力学 / 大气 / 舵机模型 步长 1 ms · 抖动 ≤ 50 μs 信号接口匹配 物理层:电平 / 阻抗 / 参考地 逻辑层:标度 / 帧结构 / 更新率 总线:ARINC 429 / CAN / 1553B 故障注入机制 信号层:开路 / 漂移 / 超范围 总线层:丢帧 / 错帧 / 延迟 环境层:传感器失效 / 电源跌落 被测件 DUT 飞控计算机 FLCC 输入:角速率 / 过载 / 大气数据 输出:舵面指令 / 告警 / 状态字 环境激励 舵面 / 状态反馈 注入异常 异常信号送达 实时性约束 步长 1 ms · 抖动 ≤ 50 μs 超时计数 · 关键回路优先 仿真时间 = 物理时间 闭环提供环境 · 实时保证时间可信 · 接口保证连通 · 故障注入保证异常可复现

把上述四条主线落实到测试用例时,一个可复用的检查思路是:先确认闭环回路方向与增益正确,再确认步长与抖动满足要求,然后逐条核对接口定义表,最后按故障清单逐项注入并记录被测件响应。只有这四步都通过,HIL 测试结果才具备工程可信度。