第二讲:模块库与信号线——搭建模型的“砖块”与“水泥”
各位好,欢迎来到第二讲。
上一讲我们认识了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 本章知识体系
下面这张图,是我自己总结的「模块库与信号线」知识框架,你一看就明白。
好了,这一讲的内容就是这些。
模块库、信号线、信号属性——这三样东西,是你搭建任何Simulink模型的基础。
我建议你打开Simulink,亲手拖几个模块,连几条线,改改属性试试。
光看是学不会的,动手才是硬道理。