加载中...


一套嵌入式控制器的固件刚刚烧录完成,研发工程师把它接到实车上跑了三天才发现:当车速超过80km/h时,油门响应比预期晚了约120ms。问题出在哪里?追查两轮后才发现,是CAN通信报文丢帧导致的状态机切换延迟。这种本可以在实验室里用几千次迭代复现的故障,却因为缺少一套硬件在环(HIL)测试平台,被拖到了真实样车阶段才暴露。
类似的故事在工业控制、新能源汽车、商业航天等领域几乎每天都在上演。随着嵌入式软件复杂度指数级增长,传统的软件仿真(Software-in-the-Loop)已经无法覆盖真实的电气特性与总线交互,而实物测试又面临成本高、周期长、可重复性差的困境。半实物仿真测试(Hardware-in-the-Loop Testing)正是连接这两端的桥梁。本文将围绕国产实时仿真平台,从环境搭建、协议接口配置、模型部署到自动化测试闭环,系统拆解一套嵌入式软件硬件在环测试的落地最佳实践。

嵌入式软件与通用软件最大的区别,在于它运行在一个"不可见"的目标硬件上。CPU周期中断、外设时序、总线仲裁、信号完整性,这些因素全部会影响代码的实际行为。即便SIT(软件在环)测试100%通过,也无法保证下位机在真实电磁环境下的响应表现。
硬件在环测试的核心价值,在于用实时仿真机替代被控对象,把嵌入式控制器放进一个"虚拟世界"里运行:
对于工业控制ECU、电池管理系统BMS、电机控制器MCU、飞控板卡等场景,硬件在环测试已经从"加分项"变成了"准入门槛"。一套成熟的HIL方案能让回归测试周期从数周压缩到数天,并且可以7×24小时不间断运行——这是任何人工台架测试都无法企及的优势。
一套完整的HIL平台通常由四部分组成:上位机测试软件、实时仿真机、信号接口板卡、被测控制器。在国产化方案中,凯云咨询推荐的整体架构一般如下图所示,ETest负责测试用例编辑与管理,SimuRTS负责实时模型运行环境。
| 层级 | 功能 | 国产方案对应 |
|---|---|---|
| 测试管理层 | 用例编辑、参数配置、报告生成 | 凯云 ETest |
| 实时仿真层 | 解算被控对象模型,μs级步长 | 凯云 SimuRTS + 实时仿真机 |
| 信号接口层 | 模拟量/数字量/计数器/PWM输出 | 多通道 I/O 板卡 |
| 通信协议层 | CAN/1553B/ARINC429/RS422/以太网 | 协议通信板卡 |
| 被测对象 | 嵌入式控制器 / ECU / MCU | 客户自有产品 |

很多团队在自研HIL平台时,会把精力全部放在实时仿真机上,却忽略了上位机软件。一个合格的测试上位机,必须具备以下能力:
以凯云 ETest为例,其内置的协议驱动覆盖了主流工业总线,测试工程师在新建工程时只需选择对应板卡型号与通道号,就能直接在用例中调用数据库(DBC/ICD)文件,显著降低脚本编写工作量。
对于研发团队来说,第一次搭建HIL平台往往是最痛苦的。这里给出经过多个项目验证的"四步落地法"。
在采购任何硬件之前,先拿到被控对象的接口清单,包括:
这份接口清单会直接决定仿真机的板卡选型配置。
通常被控对象的数学模型是用 Simulink/Stateflow 搭建的。在凯云SimuRTS平台下,模型部署流程非常清晰:

这一步是新手最容易出错的地方。每一张板卡都需要在上位机中进行通道映射,把模型中的"虚拟信号"和板卡上的"物理通道"一一对应。以凯云方案中常见的 PXI 板卡为例:
| 配置项 | 示例值 | 说明 |
|---|---|---|
| 板卡型号 | PXI-6224 / PXI-8512 | 选择对应的厂商驱动 |
| 物理通道 | AI0、AI1、DI0、PWM0 | 按硬件手册确认引脚 |
| 信号量程 | ±10V、0~5V | 必须与被测对象电平匹配 |
| 采样率 | 10kHz / 100kHz | 满足奈奎斯特准则即可 |
| 滤波设置 | 均值滤波 / Butterworth | 抑制信号噪声 |
| 错误注入 | 短路 / 开路 / 漂移 | 用于故障模拟 |
通道映射完成后,建议先做一个"开环验证"用例:让模型给板卡输出一个固定的电压值,用万用表实测板卡端电压;反之,给板卡输入端一个电压值,检查模型是否正确读到。这种"模型—硬件—物理信号"三方对照,可以在正式测试前排除绝大多数接线与配置错误。
控制器接入HIL台架有两件事必须做到位:
对于复杂控制器,建议预留至少2小时的"线束晾一晾"时间,让所有波形稳定后再开始测试,否则容易被上电瞬间的毛刺误判为故障。
总线通信是嵌入式软件测试的"重灾区",本节分别讲解三种常用协议在凯云ETest中的配置方法。

CAN 配置的关键在于DBC文件解析。在ETest中创建一个 CAN 设备节点,导入供应商提供的 .dbc 文件后,工具会自动解析出报文帧结构、信号位宽、偏移量、字节序等信息。
一个典型的测试步骤如下:
示例:用 ETest 描述的 CAN 测试片段
1553B 在工业领域常用于高可靠性通信场景,其配置与CAN类似但更复杂——总线控制器(BC)、远程终端(RT)、总线监控器(BM)三种角色需要分别配置。
在 ETest 中:
一个容易被忽略的细节是:1553B 板卡的变压器耦合和终端电阻(典型值75Ω)必须正确接好,否则会出现大量消息传输错误。
ARINC429 采用单向双极性传输,按 32-bit 字格式编码。配置时需要注意:
在 ETest 的 ARINC429 协议驱动中,可以直接以 "Label=203 (VHF Freq)" 这种直观方式配置监控条件,而无需手动解析位段。

当单条用例调试通过后,真正的价值在于"批量回归"。最佳实践推荐采用如下三层测试架构:
| 层级 | 目的 | 覆盖范围 | 执行频率 |
|---|---|---|---|
| 冒烟测试(Smoke) | 快速验证基本功能 | 20~50条关键用例 | 每次代码提交 |
| 系统回归(Regression) | 覆盖全部功能路径 | 500~3000条用例 | 每日构建 |
| 压力与边界测试 | 异常、故障注入 | 专项用例集 | 版本发布前 |
与 CI/CD 平台集成时,建议使用以下流程:
凯云ETest提供了基于 Python/C# 的命令行接口,并支持 JUnit 格式报告输出,可以无缝对接主流 DevOps 平台。
经验上,HIL 项目最容易踩的几个坑包括:
嵌入式软件硬件在环测试并非"买一套设备就能解决"的简单采购问题,而是一套贯穿建模 → 部署 → 协议配置 → 自动化执行 → 持续集成的系统工程。一个项目能否真正用好 HIL 平台,往往取决于三件事:模型的实时性是否经过严格验证、协议与接口配置是否建立了可追溯的基线、测试用例是否覆盖了正常+异常+边界三类工况。
把国产实时仿真平台用好的过程,也是一个团队从"功能验证"向"质量工程"升级的过程。如果希望深入了解凯云 ETest与 SimuRTS 在具体工业场景中的落地路径,或希望申请免费试用与方案咨询,欢迎直接对接凯云咨询的测试工程师团队——从板卡选型、协议配置到自动化用例开发,提供端到端的技术支持。
#半实物仿真测试 #硬件在环HIL #国产替代 #嵌入式软件测试 #实时仿真