第二章 开发环境搭建:MATLAB/Simulink安装与配置、Stateflow基础、必要的工具箱介绍、模型检查与配置
好,咱们正式开始动手了。这一章,说白了就是搭台子。台子搭不好,后面的戏就没法唱。我见过太多新手,一上来就急着写模型,结果环境没配好,跑个仿真报一堆错,半天找不着北。嗯,咱们别走那条弯路。
2.1 MATLAB/Simulink 安装与配置
安装这事儿,看着简单,其实有不少坑。我个人习惯是,装之前先看一遍 Release Notes。别笑,这习惯救过我不少次。
2.1.1 版本选择
做MIL测试,我建议用 R2020b 之后的版本。为什么?因为从那个版本开始,Simulink Test 和 Simulink Coverage 这两个工具箱的集成度好了很多。你想想看,要是用个太老的版本,连 Test Harness 都得手动搭,多累。
这里有个表格,是我自己总结的版本对应关系:
| MATLAB 版本 | 推荐指数 | 备注 |
|---|---|---|
| R2018b 及之前 | 不推荐 | MIL测试功能不完整,需要大量手动配置 |
| R2019a - R2020a | 可用 | 基本功能都有,但有些新特性不支持 |
| R2020b - R2023b | 强烈推荐 | MIL测试生态最成熟,文档最全 |
| R2024a 及之后 | 谨慎使用 | 新功能多,但可能有兼容性问题 |
2.1.2 安装步骤
安装过程其实不复杂,但有几个关键点:
- 关闭杀毒软件 —— 这个不说你也懂,MATLAB 的安装程序会写注册表,杀毒软件经常拦着。
- 选择安装路径 —— 别用中文路径!别用空格!我见过有人装在 "D:\程序\MATLAB" 下面,结果编译 S-Function 的时候各种报错。
- 选择产品 —— 别全选。全选的话,硬盘至少得留 50GB。咱们做 MIL 测试,只需要下面这几个核心组件。
2.2 必要的工具箱介绍
工具箱这东西,多了没用,少了不行。我刚开始做 MIL 测试时,以为只要 Simulink 就够了。结果第一次做覆盖率分析,发现没有 Simulink Coverage,只能手动写脚本算。嗯,那几天加班到凌晨两点。
下面这几个工具箱,是咱们做 MIL 测试的标配:
- Simulink —— 基础中的基础,不用多说。
- Simulink Test —— 管理测试用例、跑回归测试、生成测试报告,全靠它。
- Simulink Coverage —— 做覆盖率分析。MIL 测试的核心指标之一。
- Stateflow —— 状态机建模。下一节会详细讲。
- MATLAB Coder / Simulink Coder —— 生成代码。虽然 MIL 测试不直接生成代码,但有时候需要对比模型行为和代码行为。
- Requirements Toolbox —— 需求追溯。做正规 MIL 测试,这个必须有。
2.3 Stateflow 基础
Stateflow,说白了就是画状态机。你想想看,一个控制器无非就是几个状态:初始化、正常运行、故障处理。用 Stateflow 画出来,比写一大段 if-else 清晰多了。
2.3.1 状态与转移
Stateflow 里最核心的概念就两个:状态 和 转移。
- 状态 —— 用方框表示。每个状态可以有自己的 entry、during、exit 动作。
- 转移 —— 用箭头表示。转移上可以写条件,比如
[temperature > 100]。
举个例子,一个简单的风扇控制器:
// Stateflow 图表逻辑
State: Off
entry: fan_speed = 0;
on transfer: [temperature > 50] -> State: LowSpeed
State: LowSpeed
entry: fan_speed = 1;
on transfer: [temperature > 80] -> State: HighSpeed
on transfer: [temperature <= 45] -> State: Off
State: HighSpeed
entry: fan_speed = 2;
on transfer: [temperature <= 75] -> State: LowSpeed
你看,这个逻辑用文字描述可能得写半页,用 Stateflow 画出来,一目了然。
2.3.2 数据类型与动作
Stateflow 支持多种数据类型,但做 MIL 测试时,我建议尽量用 boolean 和 double。为什么?因为定点数在仿真时容易出精度问题,排查起来很麻烦。
动作类型有三种:
- entry —— 进入状态时执行一次
- during —— 在状态中每个时间步执行
- exit —— 离开状态时执行一次
我曾经犯过一个错:把复位逻辑写在 during 动作里,结果每个时间步都复位一次,控制器根本没法正常工作。嗯,从那以后,我每次写 Stateflow 都会检查动作类型。
2.4 模型检查与配置
模型写好了,别急着跑仿真。先做模型检查。这就像写代码之前先编译一样,能帮你发现很多低级错误。
2.4.1 模型配置参数
打开 Model Settings,有几个关键配置:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| Solver | Fixed-step, discrete | MIL 测试一般用离散求解器,连续求解器会引入不必要的计算误差 |
| Fixed-step size | 0.01 或 0.001 | 根据你的系统时间常数来定,别随便设 |
| Signal logging | 勾选 | 不勾选的话,仿真完看不到波形 |
| Stateflow chart debugging | 勾选 | 调试 Stateflow 时很有用 |
2.4.2 模型检查工具
Simulink 自带了好几个检查工具:
- Model Advisor —— 最常用的。能检查模型配置、代数环、数据类型不匹配等问题。
- Simulink Design Verifier —— 这个更高级,能自动生成测试用例,还能检测死逻辑。
- Slvnv —— 命令行工具,适合批量检查。
我个人习惯是,每次修改模型后,先跑一遍 Model Advisor。它虽然有点慢,但能帮你省掉后面很多调试时间。
2.4.3 避坑指南
最后,分享几个我踩过的坑:
- 代数环 —— 模型里出现代数环,仿真会报错。解决办法是在环里加一个 Memory 或 Unit Delay 模块。
- 数据类型不匹配 —— 比如一个 double 信号连到了 boolean 输入口。Simulink 有时候会默默帮你转换,但转换规则可能不是你想要的。
- 仿真时间设置 —— 别设成 inf。我见过有人设成 inf,结果仿真跑了一晚上还没停。
好了,环境搭好了,模型也检查过了。下一章,咱们就开始真正写测试用例了。到时候你会发现,前面这些准备工作,每一分钟都是值得的。