第二讲:模块库与信号线——搭建模型的“砖块”与“水泥”

各位好,欢迎来到第二讲。

上一讲我们认识了Simulink的界面,今天咱们来点实际的——模块库信号线

我经常跟团队里的新人说:
「学Simulink,其实就是学两件事:
第一,知道从哪个库里拿什么模块;
第二,知道怎么把这些模块用线连起来。」

听起来简单吧?
但我在项目里见过太多人,模块拖了一屏幕,线拉得像蜘蛛网,最后仿真报错都不知道错在哪。

好,咱们今天就把这两件事彻底讲透。


2.1 常用模块库介绍

Simulink的模块库,说白了就是一个巨大的工具箱。
你不需要记住所有模块,但最常用的那几个库,你必须闭着眼睛都能找到。

2.1.1 信号源库(Sources)

仿真总得有个输入吧?信号源库就是干这个的。

  • Step(阶跃信号):我最常用的信号源。测试系统响应,用它准没错。
  • Sine Wave(正弦波):做频域分析、滤波器设计时必备。
  • Constant(常数):给个固定值,比如参考电压、设定温度。
  • From Workspace(从工作区导入):这个我重点说一下。实际项目中,我们经常需要把实测数据导入Simulink做验证。用这个模块,直接把MATLAB工作区的变量拖进来就行。
我的小习惯:
我一般会在模型里放一个“Constant”模块,值设为0,用来临时断开某条信号路径。调试时特别方便,不用删线。

2.1.2 连续系统库(Continuous)

控制系统的核心——微分方程、传递函数,都在这里。

  • Integrator(积分器):状态空间模型的基础。我做过一个飞行器仿真,用了十几个积分器串联。
  • Transfer Fcn(传递函数):直接输入分子分母系数,简单粗暴。
  • State-Space(状态空间):多输入多输出系统,用这个最方便。

2.1.3 数学运算库(Math Operations)

加减乘除、三角函数、逻辑判断……

  • Add(加法器):注意它的符号设置。我见过有人把负号搞反,结果控制器输出反了,电机直接飞车。
  • Gain(增益):比例系数。双击可以设置是标量还是矩阵。
  • Product(乘法器):做调制、解调时常用。

2.1.4 接收器库(Sinks)

仿真结果怎么看?靠这些模块。

  • Scope(示波器):最直观。但我建议你别只依赖它,数据量大了会卡。
  • To Workspace(输出到工作区):我个人的习惯——所有关键信号都用这个模块存到MATLAB里,然后用脚本统一画图。这样可重复性高。
  • Display(数值显示):调试时看瞬时值,很方便。
避坑指南:
我曾经在一个项目中,把所有信号都接到Scope上,结果模型运行慢得像蜗牛。
后来改成只接To Workspace,仿真速度提升了10倍。
记住:Scope是给人看的,To Workspace是给数据用的。

2.2 信号线连接与分支

模块选好了,怎么连?
嗯,这里要注意——信号线不是随便拉一拉就完事的。

2.2.1 基本连接操作

  • 单线连接:鼠标左键点住输出端口,拖到输入端口松开。就这么简单。
  • 折线:按住Shift键拖动,可以画出直角折线。我习惯用这个,模型看起来整齐。
  • 信号线分支:这是新手最容易懵的地方。

怎么做分支?
很简单:
在已有的信号线上,按住Ctrl键,然后左键点击并拖出新的线。
或者,右键点击信号线,选择「Create Branch」。

我的经验:
分支太多时,模型会变得很乱。我一般会在分支点加一个Goto/From模块对,把信号「无线传输」到远处。这样主线干净,调试也方便。

2.2.2 信号线命名

双击信号线,就可以输入名字。
我强烈建议你给所有关键信号线命名

为什么?
你想想看,一个模型里有几十条线,如果不命名,你根本分不清哪条是速度指令,哪条是电流反馈。
我曾经接手过一个同事的模型,所有线都是默认的「Signal 1」「Signal 2」……我花了整整一天才理清楚。

命名规范建议:

信号类型 命名示例
参考输入 ref_speed, ref_position
反馈信号 fb_current, fb_angle
控制输出 ctrl_voltage, ctrl_torque
中间变量 err_speed, pid_out

2.3 信号属性设置

线连好了,名字也取了,但仿真还是报错?
大概率是信号属性没设置对。

2.3.1 数据类型

Simulink默认是double类型。但实际项目中,我们经常需要用定点数、单精度、布尔型等。

  • 双击信号线,打开属性对话框。
  • 在「Signal Attributes」选项卡中,可以设置数据类型。
  • 也可以用Data Type Conversion模块强制转换。
注意:
数据类型不匹配是仿真报错的头号原因。
比如你把一个布尔信号直接连到Gain模块上,Simulink会报错。
解决办法:中间加一个Data Type Conversion模块,把boolean转成double。

2.3.2 信号维度

标量、向量、矩阵——信号可以是多维的。

  • 标量:一个数。
  • 向量:一维数组。比如三相电流 [ia, ib, ic]。
  • 矩阵:二维数组。比如状态空间模型的A矩阵。

怎么查看信号维度?
在模型上点击「Format」→「Signal Dimensions」,每条线上都会显示维度信息。
我调试多维信号时,一定会打开这个选项。

2.3.3 信号采样时间

连续系统和离散系统混在一起时,采样时间必须匹配。

  • 连续信号:采样时间设为0或inf。
  • 离散信号:采样时间设为具体值,比如0.001(1ms)。

怎么检查?
点击「Format」→「Sample Time Colors」,不同采样时间的信号线会显示不同颜色。
红色是连续,绿色是离散,黑色是多速率。
这个功能我几乎每次仿真都会用。

核心总结:
信号属性设置,记住三件事:
1. 数据类型对不对?
2. 维度匹不匹配?
3. 采样时间一不一致?
这三条检查完,80%的仿真错误都能解决。

2.4 本章知识体系

下面这张图,是我自己总结的「模块库与信号线」知识框架,你一看就明白。

模块库与信号线 模块库 信号源 连续系统 数学运算 接收器 信号线 连接操作 分支技巧 信号命名 Goto/From 信号属性 数据类型 信号维度 采样时间 颜色标识 核心原则:模块选对、线连好、属性设对 调试时先检查数据类型 → 再检查维度 → 最后检查采样时间

好了,这一讲的内容就是这些。
模块库、信号线、信号属性——这三样东西,是你搭建任何Simulink模型的基础。
我建议你打开Simulink,亲手拖几个模块,连几条线,改改属性试试。
光看是学不会的,动手才是硬道理。