加载中...


在工业自动化测试领域,半实物仿真测试(Hardware-in-the-Loop,HIL)一直是验证控制系统设计的关键环节。然而,传统的进口HIL测试系统往往价格高昂、授权费用沉重,让许多中小企业和科研团队望而却步。更让人头疼的是,当项目需要紧急交付时,国外厂商的技术支持响应速度往往难以保障。面对这些痛点,国产半实物仿真平台ETest正在打破困局,用更灵活的架构和更低的使用门槛,为国内的测试工程师提供了一个全新的选择。
本文将通过一次完整的实战记录,详细讲解如何使用ETest完成从项目搭建到测试执行的全流程,帮助读者快速掌握这款国产半实物仿真测试平台的核心操作。无论是刚接触HIL测试的新人,还是希望切换到国产方案的老兵,都能从中获得有价值的参考。
ETest是凯云咨询推出的集成开发环境,专为半实物仿真测试场景设计。与传统的重型HIL设备不同,ETest采用了模块化的软硬件架构,能够根据项目需求灵活配置测试资源。这种设计理念让平台既能满足大型科研项目的复杂需求,也能适配中小型团队的轻量化测试场景。
ETest的软件系统由多个核心组件构成,每个组件承担不同的功能职责,共同完成半实物仿真测试的完整链路。
这种分层架构的优势在于,开发环境与运行环境分离,工程师可以在Windows平台上完成测试设计和调试,然后将测试程序部署到Linux实时系统上执行,确保测试的确定性和实时性。

ETest的硬件部分采用CPCI/PXIe总线架构的可插拔板卡,测试工程师可以根据实际需求选择不同功能的板卡组合。常用的硬件模块包括:
| 板卡类型 | 功能描述 | 典型应用场景 |
|---|---|---|
| AI模拟量输入卡 | 16/32通道,16位分辨率,±10V或0-20mA | 传感器信号采集 |
| AO模拟量输出卡 | 8/16通道,16位分辨率,±10V | 执行器驱动信号输出 |
| DI/DO数字量板 | 32通道TTL电平,支持边沿触发 | 开关量信号监控与控制 |
| 1553B通信板卡 | 双通道冗余,支持BC/RT/BM模式 | 航电总线仿真 |
| CAN通信板卡 | 2通道,支持CAN2.0A/B协议 | 汽车电子测试 |
| ARINC429板卡 | 4收4发,支持高速/低速模式 | 民用航空设备测试 |
在实战项目中,我们通常会根据被测件的接口类型选择相应的板卡组合。例如,测试一个民机航电系统的显示器单元,可能需要配置1553B板卡用于总线通信、模拟量输出板用于亮度调节信号、数字量板用于背光控制。

为了更好地展示ETest的使用流程,我们以一个典型的嵌入式控制器测试项目为例,完整记录从项目创建到测试执行的每个关键步骤。该项目模拟的是一套工业控制系统的半实物仿真测试,被测对象是一个采用CAN总线通信的温度控制器。
打开ETest Studio,点击“新建项目”,在弹出的对话框中输入项目名称“TempController_HIL”,选择项目存储路径后点击确定。一个新的测试项目创建完成,默认包含以下几个核心文件夹:
项目创建完成后,首先需要完成的是接口配置环节,这是整个测试系统的基础。
在“接口配置”文件夹中,双击打开“硬件配置”文件。ETest会自动扫描连接在系统中的板卡,并在界面上显示板卡列表。我们需要为每个板卡分配资源并设置参数。
以CAN通信板卡为例,配置步骤如下:
配置完成后,记得点击“应用并保存”。ETest会生成对应的设备驱动文件,供后续测试脚本调用。

CAN总线的测试离不开协议定义。在本项目中,温度控制器使用自定义的CAN协议,消息ID和信号定义如下:
| 消息名称 | CAN ID | 周期 | 信号定义 |
|---|---|---|---|
| 温度采集命令 | 0x101 | 100ms | 通道号(8bit) + 采样使能(8bit) |
| 温度反馈数据 | 0x201 | 50ms | 温度值(16bit,高位在前) + 状态(8bit) |
| 控制指令 | 0x102 | 事件触发 | 开关(8bit) + 目标温度(16bit) |
| 系统状态 | 0x202 | 200ms | 运行状态(8bit) + 报警标志(8bit) |
在ETest中定义协议的步骤:
打开“协议定义”文件夹,右键新建一个CAN协议文件“TempProtocol.can”。协议编辑器支持图形化配置,我们可以逐帧添加消息,并为每个消息添加信号字段。
以“温度反馈数据”帧为例:在编辑器中新建帧,设置帧ID为0x201,帧类型为标准数据帧。然后添加第一个信号“温度值”,数据类型选择Uint16,长度16位,偏移量0。然后添加第二个信号“状态”,数据类型Uint8,长度8位,偏移量16。
协议定义完成后,ETest会自动生成协议解析代码,在测试脚本中可以直接引用信号名称,而无需手动处理字节序和位拼接。
接口和协议配置完成后,就可以开始编写测试用例了。ETest支持两种测试脚本编写方式:图形化序列编辑和Python脚本编程。对于简单的功能测试,图形化序列编辑器足够应付;对于复杂的测试逻辑,建议使用Python脚本。
在“测试用例”文件夹中新建一个序列文件“TC_TempControl.seq”。ETest的序列编辑器提供了丰富的动作块,包括信号输出、期望值检查、延时等待、协议发送、协议接收等。
我们设计一个基本的温度控制测试序列:
每个动作块都可以配置超时时间和重试次数。例如,温度采集命令的超时时间设置为500ms,重试3次。这样,即使被测件响应略有延迟,测试序列也不会轻易失败。
对于需要数据处理和条件判断的测试场景,图形化序列就显得力不从心了。ETest支持在序列中嵌入Python代码块,实现更灵活的测试逻辑。
以下是一个使用Python脚本实现温度曲线采集的示例:
import etest import time # 获取温度反馈数据的协议对象 temp_data = etest.get_protocol("温度反馈数据") # 采集10秒内的温度数据 temperature_samples = [] start_time = time.time() while time.time() - start_time < 10: # 等待CAN消息到达 msg = etest.wait_can_message(0x201, timeout=1000) if msg: temp_value = etest.extract_signal(msg, "温度值") timestamp = etest.get_timestamp() temperature_samples.append({"time": timestamp, "temp": temp_value}) # 计算平均温度和峰值 avg_temp = sum(s["temp"] for s in temperature_samples) / len(temperature_samples) max_temp = max(s["temp"] for s in temperature_samples) min_temp = min(s["temp"] for s in temperature_samples) # 输出测试结果 etest.log_info(f"平均温度: {avg_temp:.2f}°C") etest.log_info(f"温度范围: {min_temp:.2f}°C ~ {max_temp:.2f}°C") # 判断测试是否通过 if abs(avg_temp - 50) <= 2: etest.set_result("PASS") else: etest.set_result("FAIL")
这段脚本完成了温度数据的连续采集和统计分析,并将结果记录到测试报告中。etest模块提供了丰富的API,包括CAN消息收发、信号提取、时间戳获取、日志记录、测试结果判定等功能。

测试用例编写完成后,就可以开始执行了。ETest支持两种执行模式:本地仿真模式和目标机部署模式。
本地仿真模式下,测试脚本在Windows宿主机上运行,CAN通信通过虚拟CAN驱动模拟。这种模式适合测试逻辑的快速验证,不依赖硬件设备。
目标机部署模式下,需要将测试程序部署到装有ETest RT的实时机上。实时机通常运行Linux + Xenomai实时补丁,确保测试任务的确定性执行。部署步骤如下:
测试执行过程中,ETest Studio提供了实时监控窗口,可以查看CAN总线上的收发数据、变量值的变化曲线、以及测试用例的执行进度。对于长时间运行的测试任务,还可以将日志数据实时保存到文件中,方便后续分析。
半实物仿真测试的核心价值在于,将真实的控制器与虚拟的 plant 模型连接起来,在实验室环境下验证控制算法的有效性。ETest支持与MATLAB/Simulink无缝集成,可以将Simulink模型编译为实时可执行文件,在目标机上运行。
首先,需要在Simulink中建立 plant 仿真模型。以我们的温度控制系统为例,plant 模型需要模拟温度传感器的特性和加热器的工作过程。模型输入为加热器功率指令,输出为测量温度值。
模型的配置要点:
模型配置完成后,使用ert.tlc编译器生成C代码。这个步骤需要MATLAB环境支持,生成的代码文件包括模型源文件、rtwtypes.h、rt_model.h等。
将Simulink模型集成到ETest项目中,需要完成以下配置:
部署到目标机后,模型会与测试用例并行执行。测试脚本通过ETest的模型API可以实时读取模型内部状态、修改模型参数、触发模型事件。
半实物仿真的一个重要优势是可以在线调整控制参数。假设在测试过程中发现温度超调量过大,需要降低比例增益,操作步骤如下:
# 读取当前的比例增益 current_kp = etest.get_model_param("Controller/Kp") print(f"当前Kp值: {current_kp}") # 修改比例增益为0.8 etest.set_model_param("Controller/Kp", 0.8) print("Kp已修改为0.8") # 重新运行测试,观察效果 etest.run_sequence("TC_TempControl")
这种在线调参能力极大地加速了控制器参数的整定过程,无需反复修改Simulink模型并重新编译。
除了工业控制领域,ETest在民用航空科研测试中也有广泛应用。以下是一个典型的航电显示单元测试案例,展示ETest在复杂总线仿真场景下的能力。
某科研院所开发了一套民机综合显示系统,需要在实验室环境下进行功能验证。显示单元通过ARINC429总线接收飞行参数数据,通过1553B总线与核心处理计算机通信。测试需求包括:
根据测试需求,硬件配置如下:
| 板卡类型 | 数量 | 配置说明 |
|---|---|---|
| ARINC429板卡 | 1块 | 4收4发,Label配置为ARINC429标准导航数据格式 |
| 1553B板卡 | 1块 | 配置为BC模式,仿真核心处理计算机 |
| 模拟量输入卡 | 1块 | 采集环境光传感器信号 |
| 模拟量输出卡 | 1块 | 输出背光亮度控制电压 |
协议配置的重点是ARINC429和1553B的协议栈。ARINC429协议需要配置Label、SDI、SDI、数据域、SSM等字段的解析规则;1553B协议需要配置命令字、状态字和数据字的格式。
在第一轮测试中,发现显示单元的导航数据更新率异常偏低。ETest的实时监控功能派上了用场:
这个案例展示了ETest在问题诊断方面的便利性。通过实时数据监控和日志回放功能,测试工程师可以快速定位问题根因,而不必在复杂的系统逻辑中盲目排查。
面对国外品牌的HIL系统,许多企业存在“国产不如进口”的刻板印象。实际上,近年来国产半实物仿真平台发展迅速,在许多应用场景下已经能够替代进口方案。以下从几个关键维度进行对比:
| 对比维度 | 国外传统HIL系统 | 凯云ETest平台 |
|---|---|---|
| 采购成本 | 单套系统通常在百万级以上 | 根据配置灵活选型,入门门槛低 |
| 授权模式 | 年费制或永久授权+年维护费 | 一次性买断,后续维护费透明 |
| 技术支持 | 国外工程师响应慢,时差问题突出 | 本地团队快速响应,远程调试支持 |
| 定制开发 | 定制周期长,费用高昂 | 可根据项目需求灵活定制 |
| 协议支持 | 通用协议完善,国产专用协议支持有限 | 深度支持国产总线协议 |
| 培训服务 | 原厂培训费用高,场次有限 | 提供免费入门培训和技术文档 |
选型建议:对于科研院所和高校实验室,ETest的低门槛和灵活性是明显优势;对于中小企业,ETest的模块化设计可以按需采购,控制初期投入;对于大型国企和总包单位,ETest的国产化背景有助于满足信创要求和供应链安全。

通过本次实战记录,我们系统性地了解了ETest半实物仿真测试平台的核心能力:从项目创建、硬件配置、协议定义,到测试用例设计、Simulink模型集成,再到实际的测试执行和问题诊断。ETest作为一款国产半实物仿真平台,在功能完备性和易用性上都表现出色,能够有效支撑工业控制、民用航空、科研实验等多个领域的测试需求。
对于正在考虑HIL系统建设或切换到国产方案的团队,建议先从轻量化场景入手,逐步验证平台能力,再扩展到更复杂的测试任务。
如果想第一时间拿到凯云ETest的免费试用名额或获取行业解决方案资料,欢迎直接联系我们的技术工程师团队!我们提供在线技术支持和定制化方案咨询服务,帮助您快速搭建适合项目需求的半实物仿真测试环境。
#半实物仿真测试 #硬件在环测试 #国产替代 #HIL #实时仿真 #ETest #凯云咨询