第二章 模块库与信号线:常用模块库介绍、模块参数设置、信号线连接与分支、信号线标签与颜色
好,咱们进入第二章。这一章我打算聊聊Simulink里最基础、也最核心的东西——模块库和信号线。
你想想看,建模型就像搭积木。模块就是积木块,信号线就是连接积木的卡槽。这两样东西玩不转,后面的仿真根本无从谈起。我刚开始带徒弟的时候,发现很多人一上来就拖模块、连信号线,结果模型跑起来全是红叉,查半天发现是信号线没连对,或者模块参数设错了。嗯,咱们今天就把它彻底讲透。
2.1 常用模块库介绍
Simulink的模块库,说白了就是一个巨大的工具箱。你打开Library Browser,左边那一长串列表就是。我个人习惯把常用模块库分成三类:信号源、运算处理、输出显示。
核心原则: 别被几百个模块吓到。实际工程中,你反复用的也就那二三十个。其他的,用到再查。
2.1.1 信号源模块(Sources)
信号源就是给模型提供输入的地方。我见过有人用正弦波做测试,结果忘了设频率,仿真出来一条直线,查了半天。其实很简单:
- Sine Wave:正弦波,设好幅值、频率、相位就行。我在项目中常用它做系统激励。
- Step:阶跃信号,用来测系统的响应速度。记得设好阶跃时间和初始值。
- Constant:常数信号,给个固定值。比如PID控制器的目标值。
- From Workspace:从MATLAB工作空间导入数据。这个很实用,可以把实测数据喂给模型。
2.1.2 连续与离散模块(Continuous / Discrete)
这是建模的核心区域。连续系统用积分器、传递函数;离散系统用单位延迟、离散传递函数。
- Integrator:积分器。我提醒一句:积分器的初始条件一定要设,不然仿真结果可能从0开始,跟实际对不上。
- Transfer Fcn:传递函数。设分子分母系数,注意系数顺序是从高次到低次。
- Unit Delay:单位延迟。离散系统里,它代表一个采样周期的延迟。
2.1.3 数学运算模块(Math Operations)
加减乘除、三角函数、逻辑运算,都在这里。
- Add:加法器。可以设成加减混合,比如“+ - +”表示第一个加,第二个减,第三个加。
- Gain:增益。就是乘一个常数。注意数据类型,别把double和int混了。
- Product:乘法器。可以乘两个信号,也可以乘多个。
2.1.4 输出显示模块(Sinks)
仿真结果怎么看?靠这些模块。
- Scope:示波器。最常用的,没有之一。双击打开就能看波形。
- To Workspace:把仿真结果存到工作空间,方便后续处理。
- Display:数字显示。调试时特别有用,直接看数值。
我的小技巧: 调试阶段,我习惯在每个关键节点都放一个Display模块。这样一眼就能看出信号值对不对,比看Scope波形快多了。
2.2 模块参数设置
模块拖进来只是第一步。真正让模型跑起来的,是参数设置。我见过最典型的错误:传递函数的分子分母系数写反了,仿真结果完全不对。
2.2.1 双击打开参数对话框
每个模块双击,都会弹出参数设置窗口。以Sine Wave为例:
- Amplitude:幅值,默认1。
- Bias:偏置,默认0。
- Frequency (rad/sec):频率,单位是弧度/秒。注意不是Hz!我刚开始就吃过这个亏,设成1Hz,结果波形慢得像蜗牛。
- Phase (rad):相位,默认0。
- Sample time:采样时间。连续系统设0,离散系统设具体值。
2.2.2 参数的数据类型
这一点容易被忽略。Simulink默认是double类型,但如果你跟硬件交互,可能需要定点数或整数。
- 在参数对话框里,找到Signal Attributes选项卡。
- 设置Output data type,比如uint8、single、fixdt等。
注意: 数据类型不匹配,会导致仿真报错。我曾经在项目中把double信号直接连到uint8的输入上,结果模型跑出来全是截断后的值,查了整整一下午。后来养成了习惯:每次连信号线,先看一眼数据类型。
2.2.3 使用变量作为参数
别把参数写死。在MATLAB工作空间定义变量,然后在模块参数里直接写变量名。比如:
% 在MATLAB命令窗口
Kp = 2.5;
Ki = 0.1;
Kd = 0.05;
然后在Gain模块里直接输入Kp。这样改参数时,只需改变量值,不用一个个模块去改。我所有项目都这么干,省时省力。
2.3 信号线连接与分支
模块放好了,参数设好了,接下来就是连线。信号线是模型的血管,数据在里面流动。
2.3.1 基本连接
从一个模块的输出端口,按住鼠标左键拖到另一个模块的输入端口。松开,线就画好了。
- 输出端口在模块右侧,输入端口在左侧。
- 连线时,Simulink会自动避开其他模块。
- 如果连错了,选中线,按Delete删除。
2.3.2 信号线分支
一个信号要送给多个模块怎么办?用分支。
- 在已有的信号线上,按住Ctrl键,然后点击并拖动鼠标。
- 或者,右键点击信号线,选择Create Branch。
我个人习惯用Ctrl键拖拽,快。分支线会自动带一个圆点,表示信号从这里分出去。
避坑指南: 分支线不要画得太乱。我见过一个模型,信号线像蜘蛛网一样,根本看不清谁连谁。建议:分支点尽量靠近源模块,别在中间乱分。
2.3.3 信号线自动布线
如果模型复杂,手动连线太慢。可以用自动布线:
- 选中源模块的输出端口,按住Shift键,再点击目标模块的输入端口。
- Simulink会自动画出一条最优路径。
嗯,这个功能我用了好几年才发现,后悔没早点知道。
2.4 信号线标签与颜色
模型一大,光靠看线根本分不清哪个信号是哪个。这时候,标签和颜色就派上用场了。
2.4.1 添加信号线标签
双击信号线,直接输入文字。比如输入speed_ref,表示这是速度参考信号。
- 标签会显示在信号线旁边。
- 可以拖动标签位置,避免遮挡。
- 标签支持中文,但我建议用英文,避免编码问题。
2.4.2 信号线颜色设置
颜色能帮你快速区分不同类型的信号。比如:
- 控制信号用蓝色
- 反馈信号用红色
- 参考信号用绿色
设置方法:选中信号线,右键 -> Signal Properties -> Line color,选一个颜色。
我的习惯: 每个项目开始前,先定一个颜色规范。比如:蓝色=控制指令,红色=传感器反馈,绿色=参考输入,黑色=中间变量。这样一眼就能看出信号流向,排查问题快很多。
2.4.3 信号线标签的自动生成
如果你不想手动敲标签,可以让Simulink自动生成。在信号线上右键 -> Signal Properties -> 勾选Propagate name of signal。这样,信号线会自动继承源模块的输出端口名。
但说实话,自动生成的名字往往不够直观。我建议还是手动命名,花一分钟,省后面一小时。
2.5 本章知识体系
为了让你更直观地理解本章内容,我画了一张图。它展示了模块库、参数设置、信号线连接与标签之间的逻辑关系。
这张图把本章四个核心内容串起来了。你从中心出发,沿着四个方向,就能掌握Simulink建模的基石。
最后说一句: 模块库和信号线,看似简单,但真要做到熟练,需要多练。我建议你打开Simulink,随便拖几个模块,连一连,设一设参数。动手试一次,比看十遍书都管用。
公众号:蓝海资料掘金营,微信deep3321