4. 搭建第一个 MIL 测试框架

MIL(Model-in-the-Loop)测试的核心思路是:把被测模型放在仿真环境中,用一组可重复、可追溯的输入激励驱动它,同时把关键信号记录下来,最后通过波形对比判断模型行为是否符合预期。这一节我们以一个典型的“节气门位置闭环控制”模型为例,搭建第一个可运行的 MIL 测试框架。示例中的参数、数据和波形均为教学假设,用于说明方法,不代表任何实际项目的实测结果。

一、测试框架的四个组成部分

一个最小可用的 MIL 测试框架由四部分构成:测试激励源、被测模型、信号记录与日志、结果判读。激励源负责产生随时间变化的输入信号;被测模型接收输入并计算输出;记录模块把输入、输出和内部关键状态保存下来;结果判读则把记录数据与期望值比较,给出通过或失败的结论。四者缺一不可,缺少记录就无法复盘,缺少判读就无法自动化。

MIL 测试框架数据流与信号记录结构 测试激励源 Signal Builder 信号组 或 Excel 导入数据 t / 踏板开度 / 目标转速 被测模型 节气门位置闭环控制 PID + 执行器 + 传感器 输入 u → 输出 y 信号记录与日志 To Workspace / Scope Signal Logging 勾选 logsout / out.y 激励 输出 结果判读 波形对比 / 容差检查 超调、稳态误差、响应时间 通过 / 失败 记录数据回读 关键配置点: ① 激励时间步长与仿真步长匹配;② 模型输入端口命名与信号组一致;③ 记录信号需勾选 Log signal data; ④ 仿真停止时间覆盖完整激励周期;⑤ 输出数据保存为带时间戳的结构体,便于与期望曲线对齐比较。

二、用 Signal Builder 构造测试激励

Signal Builder 适合手工构造分段信号,例如阶跃、斜坡、脉冲和自定义折线。以节气门测试为例,我们构造一个 10 秒的激励序列:0~2 秒踏板开度为 0%,2~4 秒线性上升到 50%,4~7 秒保持 50%,7~8 秒阶跃到 80%,8~10 秒保持 80%。在 Signal Builder 中新建一个信号组,命名为 ThrottleProfile,添加一条名为 pedal_pct 的信号,按上述时间点输入坐标:

时间(s)   踏板开度(%)
0.0       0
2.0       0
4.0       50
7.0       50
7.0       80
10.0      80

注意 7 秒处有两个点,形成垂直阶跃。Signal Builder 允许同一时刻存在两个数据点,从而产生不连续跳变。配置完成后,把该信号组连接到模型的 pedal_pct 输入端口。若模型输入端口名称不一致,需要先统一命名,否则连接会失败。

三、用 Excel 导入批量激励

当激励点数较多或需要从台架、路谱数据生成时,Excel 导入更高效。准备一个两列或多列的 Excel 文件,第一列为时间,后续列为各信号值。例如 mil_input.xlsx:

time    pedal_pct    target_rpm
0.0     0            800
1.0     10           900
2.0     25           1200
3.0     40           1600
4.0     50           1800
5.0     50           1800
6.0     50           1800
7.0     80           2400
8.0     80           2400
9.0     80           2400
10.0    80           2400

在 Simulink 中使用 From Spreadsheet 模块或 Signal Editor 导入该文件,设置采样时间为 0.01 秒,插值方式选择线性。导入后检查信号维度:pedal_pct 和 target_rpm 应分别对应模型的两个输入端口。若 Excel 中时间列不是单调递增,导入会报错,需要先排序。

四、配置信号记录与日志

记录是 MIL 测试可追溯的基础。推荐同时使用两种方式:

  • Scope 实时观察:把关键输出接入 Scope,仿真过程中实时查看波形,便于快速发现明显异常。
  • To Workspace 或 Signal Logging 持久化:把输入、输出和内部状态保存到 MATLAB 工作区,便于后续脚本自动判读。

具体操作:选中需要记录的信号线,右键选择 Properties,勾选 Log signal data,并命名信号,例如 throttle_pos。在模型配置参数中,Data Import/Export 页面勾选 Signal logging,仿真结束后数据会保存在 logsout 对象中。若使用 To Workspace 模块,变量名设为 simout,保存格式选择 Structure with time,这样每条记录都带时间戳,方便与期望曲线对齐。

建议在模型顶层统一命名记录信号,命名规则与测试用例中的信号名一致,例如 y_throttle、u_pedal、e_track,避免后续脚本中反复查找。

五、运行仿真并检查输出波形

设置仿真停止时间为 10 秒,求解器选择 ode45 或 ode4(定步长),步长 0.01 秒。运行仿真后,打开 Scope 或绘制 logsout 中的信号。以节气门位置为例,期望输出应跟随踏板开度变化,但存在执行器响应延迟和超调。检查时重点关注三个指标:

指标含义示例期望值
上升时间输出从 10% 到 90% 目标值所需时间≤ 0.8 s
超调量峰值超过稳态值的百分比≤ 10%
稳态误差稳定后输出与目标值的偏差≤ 2%

若波形出现持续振荡,优先检查 PID 参数和采样周期;若输出完全不跟随,检查输入端口连接和信号维度;若记录数据为空,检查 Signal logging 是否勾选以及信号是否命名。把每次仿真的输入、输出和判读结果保存为一份测试记录,就形成了第一个可复现的 MIL 测试闭环。

示例中的 0.8 s、10%、2% 均为教学假设阈值,实际项目应根据被控对象特性和需求文档确定,不能直接套用。