3. Simulink基础模块:常用模块库(Sources、Sinks、Math Operations等)的功能与参数设置

Simulink 的建模本质是将复杂的物理系统或控制算法拆解为信号流图,而信号流图的基本构成单元就是模块(Block)。在 Simulink 的模块浏览器(Library Browser)中,模块按功能被组织为不同的库(Library),其中 Sources(信号源)、Sinks(信号接收/显示) 与 Math Operations(数学运算) 是使用频率最高、构成绝大多数模型骨架的三大基础库。本章将深入剖析这三个库中核心模块的功能定位、参数配置方法、信号维度匹配规则,并结合实际工程场景讲解如何避免常见建模错误。

Simulink 三大基础模块库信号流关系 Sources(信号源) Step(阶跃) Sine Wave(正弦波) Constant(常数) Signal Builder / From Workspace Ramp / Pulse Generator 输出信号(数值/时间序列) Math Operations(数学运算) Sum / Add(求和) Gain(增益) Product / Divide(乘除) Math Function(Sqrt/Exp/Log) Abs / Sign / MinMax 信号运算与变换 Sinks(信号接收/显示) Scope(示波器) Display(数值显示) To Workspace(导出变量) Outport(输出端口) Terminator / Stop Simulation 信号显示、存储与终止 信号 处理结果 参数调整与仿真迭代

上图展示了三大模块库在模型中的典型信号流关系:Sources 产生激励信号,Math Operations 对信号进行运算处理,Sinks 负责将结果可视化或导出。理解这一基本链路是掌握 Simulink 建模的起点。下面我们将逐一剖析各库的核心模块。

3.1 Sources(信号源)模块库:为模型注入激励

3.1.1 核心原理与模块分类

Sources 库中的模块用于生成仿真所需的输入信号。这些信号可以是常数、时间函数、随机序列,也可以是从工作区(Workspace)或文件读取的数据。根据信号生成方式,可分为三类:

  • 固定波形发生器:Step(阶跃)、Sine Wave(正弦波)、Ramp(斜坡)、Pulse Generator(脉冲)等,适合标准测试信号。
  • 常数与随机源:Constant(常数)、Random Number(随机数)、Band-Limited White Noise(带限白噪声),用于稳态分析或噪声注入。
  • 外部数据接口:From Workspace(从工作区)、From File(从文件)、Signal Builder(信号构建器),用于导入真实采集数据或复杂自定义波形。

3.1.2 关键参数设置与操作流程

以最常用的 Step(阶跃) 模块为例,双击模块打开参数对话框,需要配置以下核心参数:

参数名含义典型值/示例注意事项
Step time阶跃发生时刻(秒)1.0必须大于等于仿真起始时间
Initial value阶跃前的输出值0可为负数或非零值
Final value阶跃后的输出值1决定信号幅值
Sample time采样周期0(连续)0 表示连续信号;大于 0 表示离散采样

对于 Sine Wave(正弦波),参数包括 Amplitude(幅值)、Bias(偏置)、Frequency(角频率,rad/s)、Phase(初相,rad)和 Sample time。注意:若 Sample time 设为 0,则输出连续正弦波;若设为大于 0 的值,则输出离散采样点。

经验提醒:在控制系统仿真中,阶跃信号常用于测试系统的时域响应(超调量、调节时间)。建议将 Step time 设置为仿真总时长的 10%~20%,以便观察完整的动态过程。例如仿真 10 秒,Step time 设为 1 秒,初始值 0,终值 1。

3.1.3 案例拆解:使用 Signal Builder 构造多段自定义波形

场景:某电机驱动系统需要测试在不同转速指令下的响应。要求输入信号在 0~2s 为 500 rpm,2~5s 线性上升至 1000 rpm,5~8s 保持 1000 rpm,8~10s 阶跃下降至 300 rpm。

操作步骤:

  1. 从 Sources 库拖入 Signal Builder 模块,双击打开信号编辑界面。
  2. 在左侧信号列表中点击 "New Signal",命名为 "Speed_Command"。
  3. 在右侧波形编辑区,使用 "Point" 工具添加关键点:(0,500)、(2,500)、(5,1000)、(8,1000)、(8,300)、(10,300)。
  4. 点击 "File → Save" 保存信号组,关闭编辑器。
  5. 将 Signal Builder 输出连接到后续模型。仿真时,该模块会按时间轴输出插值后的信号。

结果对比:相比使用多个 Step 和 Ramp 模块组合,Signal Builder 将波形定义集中在一个界面,修改方便且直观。但需注意,Signal Builder 输出的是离散时间序列,默认采样时间由 "Sample Time" 参数控制(默认 0.1s),若需要更平滑的曲线,可减小采样步长。

3.1.4 常见误区与总结

风险提示:初学者常将 Constant 模块的 "Sample time" 误设为 0(连续),这在离散模型中会导致代数环错误。若模型其他部分使用离散求解器,Constant 的 Sample time 应设为 -1(继承)或与系统采样时间一致。

另外,From Workspace 模块默认按 "时间-数据" 两列矩阵读取数据,若数据格式不符(如只有一列),会报错。建议使用 timeseries 对象或 [t, data] 两列矩阵。

3.2 Sinks(信号接收/显示)模块库:观测与导出仿真结果

3.2.1 核心原理与模块功能

Sinks 库的模块是信号的终点,用于显示、存储或终止信号。它们不改变信号值,但影响仿真效率与结果可读性。主要模块包括:

  • Scope(示波器):最常用的可视化工具,可显示信号随时间变化的波形,支持多通道、缩放、游标测量。
  • Display(数值显示):在仿真过程中实时显示当前时刻的信号数值,适合快速检查稳态值。
  • To Workspace(导出到工作区):将信号数据保存为 MATLAB 变量,便于后续分析或绘图。
  • Outport(输出端口):用于子系统(Subsystem)的对外接口,将信号传递到模型上层。
  • Terminator(终止器):用于吸收未连接的输出信号,避免警告信息。

3.2.2 参数配置与操作流程

Scope 模块的参数设置重点:

配置项位置说明
Number of input portsScope 工具栏 → 参数设置输入通道数,可同时显示多路信号
Time spanScope 工具栏 → 参数 → Time设置时间轴显示范围,默认 "Auto"
Y-limitsScope 工具栏 → 参数 → Axes手动设置纵轴范围,避免自动缩放导致波形失真
Save data to workspaceScope 参数 → Logging勾选后可将波形数据导出为变量

To Workspace 模块参数:Variable name(变量名)、Save format(Timeseries / Array / Structure)、Sample time(-1 表示继承输入信号采样时间)。推荐使用 Timeseries 格式,因为它保留时间信息,便于后续用 plot() 绘图。

操作流程:将 Scope 连接到信号线 → 双击打开 Scope → 点击工具栏 "Parameters"(齿轮图标)→ 设置输入端口数、时间范围、Y轴范围 → 点击 "Logging" 选项卡勾选 "Log data to workspace" 并命名变量 → 运行仿真 → 在 MATLAB 命令窗口输入变量名查看数据。

3.2.3 案例拆解:多信号对比与数据导出

场景:验证 PID 控制器对阶跃输入的跟踪效果,需要同时观察参考输入、控制输出和系统响应三条曲线。

实施步骤:

  1. 在模型中将参考信号(Step)、控制器输出(PID 模块输出)、系统响应(被控对象输出)分别引出信号线。
  2. 从 Sinks 库拖入一个 Scope,双击打开,点击参数图标,将 "Number of input ports" 改为 3。
  3. 将三条信号线分别连接到 Scope 的三个输入端口。
  4. 在 Scope 参数 → Logging 中勾选 "Log data to workspace",变量名设为 sim_data,格式选 "Timeseries"。
  5. 运行仿真后,在 MATLAB 中执行 plot(sim_data.signals(1).values) 可绘制第一条曲线。

结果对比:通过 Scope 的游标功能,可精确读取超调量峰值时刻与稳态误差。相比使用多个 Display 模块,Scope 能直观展示动态过程,且数据导出后可用 MATLAB 脚本进行量化分析(如计算 ITAE 指标)。

3.2.4 常见误区与总结

风险提示:在大型模型中,过多使用 Scope 会显著降低仿真速度,因为每个 Scope 都需要实时刷新图形。建议在调试阶段使用 Scope,在批量仿真或性能测试时改用 To Workspace 记录数据,仿真结束后统一用 MATLAB 绘图。

另外,Display 模块默认显示的是当前仿真时刻的瞬时值,若需要显示最终值,可在仿真停止后观察。若信号为向量,Display 会显示向量各元素值,注意区分。

3.3 Math Operations(数学运算)模块库:信号处理的核心引擎

3.3.1 核心原理与模块分类

Math Operations 库提供对信号进行数学变换的模块,是构建动态系统方程(如状态空间、传递函数)的基础。主要分类:

  • 基本算术:Sum(求和)、Gain(增益)、Product(乘法)、Divide(除法)、Abs(值)、Unary Minus(取反)。
  • 数学函数:Math Function(支持 sqrt、exp、log、log10、sin、cos 等)、Trigonometric Function(三角函数)、Sign(符号函数)、MinMax(取最值)。
  • 逻辑与关系:Relational Operator(比较)、Logical Operator(与或非)、Combinatorial Logic(组合逻辑)。
  • 复数与矩阵运算:Complex to Magnitude-Angle、Matrix Gain、Dot Product 等。

3.3.2 关键参数设置与信号维度匹配

Sum(求和) 模块的参数设置是重点:

参数说明示例
Icon shape选择 "rectangular"(矩形)或 "round"(圆形)rectangular
List of signs用 + 和 - 指定输入端口符号,如 "+-+" 表示三个输入,中间为负+-
Sample time-1 继承,0 连续,>0 离散-1

Gain(增益) 模块参数:Gain 值可为标量、向量或矩阵。若输入为向量,Gain 为标量时逐元素相乘;Gain 为矩阵时执行矩阵乘法(需满足维度匹配)。

维度匹配规则:Simulink 中信号分为标量(1×1)、向量(1×N)和矩阵(M×N)。Sum 模块要求所有输入维度一致;Product 模块支持逐元素乘法(Element-wise)或矩阵乘法(Matrix),通过参数 "Multiplication" 选择。若维度不匹配,仿真会报错 "Dimension mismatch"。

3.3.3 案例拆解:构建二阶系统的微分方程

场景:使用基础数学模块搭建质量-弹簧-阻尼系统(m=2kg, k=5N/m, c=1N·s/m)的仿真模型,输入为外力 F(t),输出为位移 x(t)。系统方程:m·x'' + c·x' + k·x = F。

建模步骤:

  1. 将方程改写为 x'' = (F - c·x' - k·x) / m。
  2. 使用两个 Integrator 模块(位于 Continuous 库)串联,第一个输出 x',第二个输出 x。
  3. 从 x' 和 x 引出信号线,分别乘以 c 和 k(使用 Gain 模块),再与外力 F(Step 模块)一起输入到 Sum 模块,符号设置为 "+--"(F 正,c·x' 和 k·x 负)。
  4. Sum 输出除以 m(使用 Gain 模块,增益 1/m=0.5),得到 x'',反馈到第一个 Integrator 的输入。
  5. 将 x 连接到 Scope 显示。

参数设置:Gain1 设为 1(对应 c),Gain2 设为 5(对应 k),Gain3 设为 0.5(对应 1/m)。Step 模块 Step time=0,Initial value=0,Final value=10(施加 10N 阶跃力)。

结果分析:仿真 10 秒,观察 Scope 中 x 的波形,应呈现衰减振荡,稳态值约为 F/k = 10/5 = 2m。通过调整 c 值可观察阻尼比对超调量的影响。

3.3.4 常见误区与总结

风险提示:使用 Math Function 模块时,注意函数定义域。例如 sqrt 函数输入为负会报错,log 函数输入必须为正。建议在信号进入函数前使用 Abs 或 Saturation 模块进行限幅保护。

另一个常见错误是 Gain 模块的乘法方向。当输入为行向量时,Gain 为列向量会执行矩阵乘法导致维度错误。建议在模型中使用 size() 函数检查信号维度,或使用 Probe 模块(位于 Signal Attributes 库)查看信号尺寸。

3.4 三大模块库的协同使用与工程实践

3.4.1 模块库协同的典型模式

在实际工程模型中,三大库的模块往往交替使用。例如,一个典型的 PID 控制回路包含:Sources(Step 参考输入)→ Math Operations(Sum 计算误差、Gain 实现 PID 系数)→ 被控对象(由 Integrator、Gain 等构建)→ Sinks(Scope 显示、To Workspace 记录)。

3.4.2 性能优化与调试技巧

  • 减少 Scope 数量:使用 "Signal Logging"(信号记录)功能,右键点击信号线选择 "Log Selected Signals",仿真结束后用 Simulink.sdi.View 查看。
  • 使用 Bus 信号:当多路信号需要同时传递时,使用 Bus Creator(位于 Signal Routing 库)将信号打包,减少连线杂乱。
  • 参数批量修改:使用 MATLAB 脚本批量设置 Gain 参数,例如 set_param('model/Gain','Gain','2.5')。

3.4.3 案例复盘:从模型到代码生成的注意事项

若模型最终需要生成嵌入式代码(使用 Simulink Coder),需注意:

  1. 避免使用 Scope 和 Display 模块,它们不参与代码生成。
  2. To Workspace 模块在代码生成时会被忽略,应改用 Outport 或信号记录。
  3. Math Function 模块中的某些函数(如 log10)在嵌入式目标上可能不支持,需查阅目标硬件支持库。
经验总结:掌握三大基础库的核心模块,是 Simulink 建模的基石。建议初学者通过"信号源 → 运算 → 显示"的最小闭环模型(如正弦波 → Gain → Scope)快速上手,逐步增加复杂度。遇到问题时,优先检查信号维度、采样时间设置和模块参数的单位,这能解决 80% 的仿真错误。

通过本章的学习,读者应能够熟练使用 Sources 库生成各类激励信号,利用 Sinks 库观测和导出仿真结果,并运用 Math Operations 库构建基本的数学运算链路。下一阶段,我们将在此基础上深入连续与离散系统的建模方法,敬请期待。