2、测试环境搭建:MATLAB/Simulink环境配置、必要的工具箱安装、模型在环测试框架介绍、仿真参数设置
2.1 MATLAB/Simulink环境配置——别小看这一步
说实话,我见过太多工程师一上来就急着写模型,结果环境没配好,后面折腾半天。咱们做MIL测试,第一步就是把MATLAB/Simulink的窝搭舒服了。
我个人习惯用R2021b以上的版本。为什么?因为从这版开始,对汽车电子相关的工具箱支持更稳定了。你想想看,要是用个老版本,装个工具箱还得打补丁,多闹心。
环境配置的几个关键点:
- 工作路径设置:别把项目文件丢在MATLAB默认路径下。我建议单独建一个文件夹,比如
D:\MIL_Project\,然后通过Set Path添加进来。我在项目中遇到过,有人把文件散落在桌面,结果模型引用路径全乱了,排查了一下午。 - 编码格式统一:Simulink模型默认用UTF-8,但有些老项目是GBK。嗯,这里要注意,混用会导致中文注释乱码。我一般统一用UTF-8,省心。
- 版本兼容性检查:如果你团队里有人用R2020a,有人用R2022b,那模型来回传的时候,记得用
slxmlcomp做差异对比。我曾经因为版本不一致,模型里一个模块参数自动变了,仿真结果对不上,差点把锅甩给算法同事。
小技巧:在MATLAB启动时,可以写个
startup.m 脚本,自动加载你常用的工具箱路径和项目配置。这样每次打开MATLAB,环境就自动就绪了。
2.2 必要的工具箱安装——少了哪个都不行
做MIL测试,工具箱就像工具箱里的扳手,少一个你就拧不动螺丝。我列个清单,你看看自己装全了没。
| 工具箱名称 | 用途 | 备注 |
|---|---|---|
| Simulink | 基础建模与仿真 | 必装,不用多说 |
| Simulink Test | 测试用例管理、测试执行、结果评估 | MIL测试的核心工具箱 |
| Simulink Coverage | 代码覆盖率分析 | 判断测试是否充分 |
| Stateflow | 状态机建模 | 做逻辑控制必用 |
| Vehicle Dynamics Blockset | 车辆动力学模型 | 做整车级MIL测试时用 |
| Embedded Coder | 生成嵌入式代码 | 虽然MIL阶段用不到,但为后续SIL/HIL做准备 |
我记得有一次,项目组新来了个同事,装了半天环境,结果Simulink Test没装。他跑测试用例的时候,发现没有 sltest.testmanager 这个命令,急得满头大汗。说白了,工具箱装不全,后面全是坑。
注意:工具箱安装后,记得重启MATLAB。有些工具箱的许可证需要重新激活,尤其是网络版许可证。我遇到过装完工具箱,仿真时提示“License checkout failed”,就是因为忘了激活。
2.3 模型在环测试框架介绍——MIL到底怎么玩
MIL测试,说白了就是把你的控制算法模型,放到一个虚拟的“车”里跑一圈。这个“车”就是被控对象模型,比如发动机模型、电机模型、整车动力学模型。
典型的MIL测试框架长这样:
+-------------------+ +-------------------+
| | | |
| 测试用例生成器 | ----> | 控制器模型 |
| (Test Harness) | | (Controller) |
| | | |
+-------------------+ +--------+----------+
|
v
+-------------------+
| |
| 被控对象模型 |
| (Plant Model) |
| |
+--------+----------+
|
v
+-------------------+
| |
| 测试结果评估器 |
| (Test Assessment)|
| |
+-------------------+
我个人习惯用 Test Harness 来搭建这个框架。Simulink Test里自带这个功能,你只需要右键点击控制器模型,选择“Create Test Harness”,它会自动帮你生成一个包含输入输出接口的测试环境。
你想想看,如果没有这个框架,你得手动搭信号源、手动接示波器、手动比对结果。有了Test Harness,这些活都自动化了。
框架搭建的几个要点:
- 接口对齐:控制器模型的输入输出,必须和被控对象模型一一对应。名字、数据类型、维度都不能错。我曾经因为一个信号名字写成了
speed_ref而不是Speed_Ref,结果仿真报错,查了半天。 - 测试用例独立:每个测试用例应该是一个独立的
.m文件或.xlsx文件,不要写在模型里。这样方便管理和复用。 - 结果自动评估:用
sltest.TestCase里的Assessment模块,设定好通过/失败的条件。比如“信号A的上升时间小于100ms”,或者“稳态误差小于1%”。
核心思想:MIL测试不是“跑一遍看看结果”,而是“用自动化框架,批量跑用例,自动判结果”。这才是工程化的做法。
2.4 仿真参数设置——细节决定成败
仿真参数设置,看着简单,其实门道不少。我见过有人直接用默认参数跑MIL,结果仿真步长太大,信号都失真了,还在那分析结果呢。
几个关键参数,我一个个说:
- 求解器选择:
- 连续系统用
ode45或ode23t。我一般用ode23t,因为它对刚性系统更友好。 - 离散系统用
discrete。如果你的控制器模型是离散的(比如采样时间1ms),那就选这个,别选连续求解器,否则仿真速度会慢得离谱。
- 连续系统用
- 步长设置:
- 固定步长:比如
1e-3(1ms)。适合离散系统,仿真结果可重复。 - 可变步长:适合连续系统,但结果可能因步长变化而略有差异。我建议在MIL阶段用固定步长,保证结果一致性。
- 固定步长:比如
- 仿真时间:
- 别设太短。比如你测一个加速过程,至少得跑10秒以上。我习惯先设个30秒,看看信号是否稳定,再调整。
- 数据记录:
- 勾选
Log signals to workspace,这样仿真结束后,数据会存到MATLAB工作区,方便后续分析。 - 我一般会把关键信号都打勾,比如
speed、torque、current。别怕数据多,后面分析时你就知道好处了。
- 勾选
避坑指南:我曾经因为仿真步长设得太小(比如1e-6),结果一个10秒的仿真跑了半小时。后来发现,对于MIL测试,1ms的步长完全够用。别盲目追求小步长,仿真速度也很重要。
好了,环境搭好了,工具箱装齐了,框架也建起来了,参数也设对了。下一步,咱们就可以开始写测试用例了。别急,下一章我跟你聊聊怎么设计一个靠谱的MIL测试用例。