第二章 开发环境搭建: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 及之后 谨慎使用 新功能多,但可能有兼容性问题
注意: 我曾经在项目中期从 R2020a 升级到 R2021b,结果模型里的 Stateflow 图表全部需要重新编译。那叫一个酸爽。所以,项目开始前定好版本,中途别轻易换。

2.1.2 安装步骤

安装过程其实不复杂,但有几个关键点:

  1. 关闭杀毒软件 —— 这个不说你也懂,MATLAB 的安装程序会写注册表,杀毒软件经常拦着。
  2. 选择安装路径 —— 别用中文路径!别用空格!我见过有人装在 "D:\程序\MATLAB" 下面,结果编译 S-Function 的时候各种报错。
  3. 选择产品 —— 别全选。全选的话,硬盘至少得留 50GB。咱们做 MIL 测试,只需要下面这几个核心组件。

2.2 必要的工具箱介绍

工具箱这东西,多了没用,少了不行。我刚开始做 MIL 测试时,以为只要 Simulink 就够了。结果第一次做覆盖率分析,发现没有 Simulink Coverage,只能手动写脚本算。嗯,那几天加班到凌晨两点。

下面这几个工具箱,是咱们做 MIL 测试的标配:

  • Simulink —— 基础中的基础,不用多说。
  • Simulink Test —— 管理测试用例、跑回归测试、生成测试报告,全靠它。
  • Simulink Coverage —— 做覆盖率分析。MIL 测试的核心指标之一。
  • Stateflow —— 状态机建模。下一节会详细讲。
  • MATLAB Coder / Simulink Coder —— 生成代码。虽然 MIL 测试不直接生成代码,但有时候需要对比模型行为和代码行为。
  • Requirements Toolbox —— 需求追溯。做正规 MIL 测试,这个必须有。
小技巧: 安装时可以用 "自定义安装",只勾选上面这几个。我一般还会加一个 "Signal Processing Toolbox",因为有时候需要处理测试数据。但这不是必须的。

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 画出来,一目了然。

重点: 做 MIL 测试时,Stateflow 的覆盖率分析比普通 Simulink 模块要复杂。因为除了语句覆盖,还有状态覆盖、转移覆盖。我建议你从一开始就养成习惯,每个状态和转移都要有对应的测试用例。

2.3.2 数据类型与动作

Stateflow 支持多种数据类型,但做 MIL 测试时,我建议尽量用 booleandouble。为什么?因为定点数在仿真时容易出精度问题,排查起来很麻烦。

动作类型有三种:

  • 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 时很有用
注意: 求解器步长设得太小,仿真速度会慢得让你怀疑人生。设得太大,又会错过关键事件。我一般先设 0.01,跑一遍看看结果,再根据情况调整。

2.4.2 模型检查工具

Simulink 自带了好几个检查工具:

  • Model Advisor —— 最常用的。能检查模型配置、代数环、数据类型不匹配等问题。
  • Simulink Design Verifier —— 这个更高级,能自动生成测试用例,还能检测死逻辑。
  • Slvnv —— 命令行工具,适合批量检查。

我个人习惯是,每次修改模型后,先跑一遍 Model Advisor。它虽然有点慢,但能帮你省掉后面很多调试时间。

2.4.3 避坑指南

最后,分享几个我踩过的坑:

  • 代数环 —— 模型里出现代数环,仿真会报错。解决办法是在环里加一个 Memory 或 Unit Delay 模块。
  • 数据类型不匹配 —— 比如一个 double 信号连到了 boolean 输入口。Simulink 有时候会默默帮你转换,但转换规则可能不是你想要的。
  • 仿真时间设置 —— 别设成 inf。我见过有人设成 inf,结果仿真跑了一晚上还没停。

好了,环境搭好了,模型也检查过了。下一章,咱们就开始真正写测试用例了。到时候你会发现,前面这些准备工作,每一分钟都是值得的。