1. Simulink 环境搭建与首个 MBD 模型
环境准备与版本确认
MBD 开发的第一步不是画模型,而是让工具链处于可复现的状态。Simulink 模型能否顺利编译,取决于 MATLAB 版本、编译器、求解器与模型配置是否匹配。建议先确认以下三项:
- MATLAB 版本:本例以 R2023b 为示例环境,Simulink 随 MATLAB 一同安装,无需单独授权。
- C 编译器:Simulink 加速模式与代码生成需要编译器。在 MATLAB 命令窗口执行
mex -setup c,选择已安装的编译器(如 MinGW-w64 或 MSVC)。 - 工作路径:新建一个专用文件夹(如
D:\MBD\ex01),并设为当前工作目录,避免模型与脚本散落。
若
mex -setup c 提示未找到编译器,可先安装 MATLAB 支持的 MinGW-w64 附加功能,再重新执行该命令。搭建首个模型:输入 → 增益 → 输出
本例要建立一个最小但完整的 MBD 模型:一个输入端口接收信号,经增益模块放大后送到输出端口。这个结构虽小,却覆盖了 MBD 模型的基本要素——接口、参数与信号流。
- 在 Simulink 起始页选择 Blank Model,保存为
ex01_first_model.slx。 - 从 Library Browser 拖入 Inport、Gain、Outport 三个模块,按从左到右顺序摆放。
- 用信号线依次连接 Inport → Gain → Outport。
- 双击 Gain 模块,将 Gain 参数设为
2.5,其余保持默认。 - 双击 Inport,将 Port number 保持为 1;双击 Outport,确认端口号为 1。
此时模型的数据流是:输入信号 u 乘以增益 K=2.5,得到输出 y = 2.5u。这个关系是后续验证的核心依据。
配置与编译验证
模型搭好后,需要确认求解器与仿真时长设置合理。打开 Modeling → Model Settings,在 Solver 页确认:
| 配置项 | 本例取值 | 说明 |
|---|---|---|
| Start time | 0.0 | 仿真起始时刻 |
| Stop time | 10.0 | 仿真结束时刻 |
| Solver | ode45 (auto) | 变步长,适合连续系统 |
| Type | Variable-step | 默认即可 |
点击工具栏的 Run 按钮进行仿真。若模型存在未连接端口或参数错误,Simulink 会在诊断查看器中报错;若编译通过,仿真会正常结束并生成输出数据。
用脚本验证输入输出关系
为了不依赖手动观察,可以用 MATLAB 脚本给模型一个已知输入,再检查输出是否等于 2.5 × 输入。以下脚本可直接运行:
% ex01_verify.m
mdl = 'ex01_first_model';
load_system(mdl);
% 设置输入信号:常数 4
set_param([mdl '/Inport'], 'SignalType', 'auto');
% 配置仿真时长
set_param(mdl, 'StopTime', '10');
% 运行仿真
simOut = sim(mdl, 'ReturnWorkspaceOutputs', 'on');
% 读取输出
y = simOut.get('yout');
yData = y.Data;
yFinal = yData(end);
% 验证:输入 u = 4,增益 K = 2.5,期望输出 10
u = 4;
K = 2.5;
expected = K * u;
fprintf('输入 u = %.2f\n', u);
fprintf('增益 K = %.2f\n', K);
fprintf('期望输出 = %.2f\n', expected);
fprintf('仿真输出 = %.2f\n', yFinal);
if abs(yFinal - expected) < 1e-6
disp('验证通过:模型输出与理论值一致。');
else
disp('验证失败:请检查增益参数或信号连接。');
end
运行后若打印“验证通过”,说明模型从接口到参数再到仿真链路都是通的。这一步是后续所有 MBD 案例的基线。
若仿真报错“Input port 1 of 'ex01_first_model/Gain' is not connected”,说明信号线未正确连接;若输出恒为 0,检查 Inport 是否被误设为接地或增益参数是否为 0。
常见问题与排查
- 编译报错找不到编译器:重新执行
mex -setup c,或安装 MATLAB 支持的 MinGW-w64。 - 仿真速度极慢:检查 Stop time 是否被误设为很大的值,或求解器是否选成了固定步长且步长过小。
- 输出端口无数据:确认 Outport 已连接,且仿真正常结束;可在
simOut中检查yout是否存在。 - 模型无法保存:确认工作目录有写权限,且文件名不含中文或特殊字符。
完成本例后,你应得到一个可编译、可仿真、可用脚本验证的
ex01_first_model.slx。它包含 Inport、Gain、Outport 三个基本模块,增益为 2.5,输入 4 时输出 10。这个最小闭环是后续接口定义、子系统划分和代码生成的起点。