Simulink 是什么:把系统画成方块图

MATLAB 本身是写脚本做数值计算的;Simulink 是它旁边那套用鼠标拖模块、连线搭系统的可视化仿真环境。你不再写一行行代码描述"信号怎么传",而是把信号源、增益、积分器这些模块拖到画布上,用线连起来,整个系统就变成一张看得见的方块图。

这种方式特别适合搞控制系统、信号处理、电力电子——这些领域的系统本来就是由"输入—环节—输出"串起来的,画出来比写代码直观得多。Simulink 会自动帮你按时间一步步算,把每个模块的输出传给下一个,最后画出波形。

Simulink 的本质:把一个连续动态系统拆成模块网络,然后数值积分它、按时间往前推,看每个量怎么随时间演化。
本文核心知识点
  • 模块库正弦波、增益、求和、积分器、Scope 是最常用的几类积木。
  • 连线模块之间用信号线连接,信号从左往右、从上往下流动。
  • solver求解器决定"按多大步长积分",是仿真准确度与速度的开关。
  • Scope示波器窗口,把信号随时间画成波形,是观察结果的眼睛。
MATLAB Simulink 配图:蓝调渐变背景上中央一个发光的主处理方块,左右两侧连接多个不同形状的功能模块方块(圆形、梯形、三角),模块之间用发光连线连接,连线上有信号波形曲线和数据流光点
中央主模块向外连接多个功能方块,信号沿连线流动——这就是 Simulink 模型的拓扑形态。

搭第一个模型:信号源与示波器

新建一个 Simulink 模型(File → New → Model),打开左侧库浏览器,从 Sources 库拖一个 Sine Wave(正弦波信号源)到画布,再从 Sinks 库拖一个 Scope(示波器)。然后用鼠标从 Sine Wave 右边的输出端口拖一条线,连到 Scope 的输入端口。

点一下模型窗口上的"运行"按钮(绿色三角),等它跑完,双击 Scope,就能看到一条正弦波画出来。这就是最最小的一个 Simulink 模型:一个信号源、一个观察者,中间没有任何处理。

% 等价的 MATLAB 脚本写法(帮助你理解 Simulink 在算什么)
t = 0:0.01:10;          % 时间轴 0 到 10 秒
y = sin(t);             % 正弦信号
plot(t, y); grid on;    % 画出来

脚本和仿真做的是同一件事:按时间轴算每一点的 sin 值。只不过 Simulink 让你拖模块、连线,还能在中间插入各种处理环节,而不用改代码。

常用模块:增益、求和、积分

真正搭系统时,你会反复用到这几类基础模块:

  • Gain(增益):把信号乘以一个常数。比如把输入放大 2 倍,就放一个 Gain 模块、把增益值改成 2。
  • Sum(求和):把多路信号加起来。正负号在模块参数里设,比如 "+−" 就一路加、一路减——反馈回路常用。
  • Integrator(积分器):对信号做时间积分。这是 Simulink 最核心的模块之一——几乎所有连续动态系统(弹簧、电路、转动)都靠它来描述。
  • Scope / To Workspace:前者实时画波形,后者把仿真结果输出到 MATLAB 工作区,方便你事后用 plot 处理。

把这些积木串起来,就能拼出相当复杂的动态系统模型。

跑仿真:solver 与时间步长

点运行之前,先在 Model Settings(齿轮图标)里看一下 Solver 这一页。两个关键参数:仿真停止时间(Stop time,比如设 10 秒)和求解器类型。

% 常用 solver 选择
% ode45  : 默认,自适应步长,适合大多数连续系统
% ode1   : 定步长,步长最小,速度慢但稳
% ode3   : 用于仿真需要固定步长的场合(如生成嵌入式代码前)
%
% 一般先用 ode45 跑通;要速度或对接硬件时再换定步长

solver 干的活:从 t=0 开始,每往前推一个小步长 dt,就根据当前状态算下一个时刻的状态。步长越小越准但越慢,自适应 solver 会自动在"变化快的地方走小步、平缓的地方走大步"。

看波形:Scope 里发生了什么

仿真结束后双击 Scope,你看到的横轴是时间、纵轴是信号值。常见要关注几件事:波形稳不稳定(有没有振荡发散)、响应快慢(从阶跃到稳定用了多久)、稳态误差(最后离目标差多少)。

如果波形看着"锯齿很粗糙",多半是步长太大了,把 solver 步长上限调小重跑;如果波形直接飞到几万几十万,那就是系统不稳定,要么反馈符号接反了、要么增益太大。

调参数:让系统响应更理想

Simulink 最大的价值就是改参数、重跑、立刻看波形的循环。比如你搭了一个反馈控制系统,响应太慢,就把控制器的增益调大;结果它振荡了,再把增益调小一点。这种"仿真—看波形—调参"的迭代,是工程上做控制器设计的标准动作。

% 在 MATLAB 命令行里改参数再重跑,比手动点快
set_param('my_model/Gain','Gain','5');   % 把某个 Gain 改成 5
sim('my_model');                         % 重跑仿真
% 仿真结果自动存在 your_model_out 之类的变量里,直接 plot

把这套脚本写下来,你就拥有了一个"批量扫参数、自动出图"的小工具——一次跑 20 组增益,把 20 条响应曲线叠在一张图上对比,比手动点高效得多。