目录
该篇文章介绍创建模型、向模型中添加模块、连接模块以及仿真模型的基础知识。学习如何使用子系统组织模型、为模型的组件命名以及修改模型。
有关如何用鼠标以交互方式连接模块和添加端口的摘要信息,可以参考Simulink 环境基础知识(二)中的内容。
启动 Simulink 并创建模型
(1)在 MATLAB® 主页选项卡中,点击 Simulink。
(2)在 Simulink® Start Page 上,点击 Blank Model 模板。将在 Simulink Editor 中打开一个基于模板的新模型。
(3)打开 Library Browser,以便访问需要添加到模型的模块。在 Simulink Editor 中,点击 Library Browser 按钮 。
向模型中添加模块
一个模型至少要接收一个输入信号,对该信号进行处理,然后输出结果。在 Library Browser 中,Sources 库包含代表输入信号的模块。Sinks 库包含用于捕获和显示输出的模块。其他库包含可用于各种用途(如数学运算)的模块。
在此基本模型示例中,输入信号为正弦波,执行的操作为增益运算(通过乘法增加信号值),结果输出到一个 Scope 窗口。尝试使用不同的方法来浏览库,并向模型中添加模块。
(1)打开 Sources 库。在 Library Browser 的树视图中,点击 Sources 库。
(2)在右窗格中,将光标悬停在 Sine Wave 模块上,以查看描述其用途的工具提示。
(3)为模型添加一个模块。右键点击 Sine Wave 模块并选择 Add block to model untitled。要了解有关该模块的详细信息,请右键点击该模块,然后选择 Help。
(4)通过拖放操作在模型中添加一个模块。在库树视图中,点击 Math Operations。在 Math Operations 库中,找到 Gain 模块,然后将其拖到模型中 Sine Wave 模块的右侧。
(5)在库树视图中,点击 Simulink,查看以图标形式显示在右窗格中的子库。此视图是导航库结构的另一种方法。双击 Sinks 库图标。
(6)在 Sinks 库中,找到 Scope 模块,然后使用上下文菜单或通过拖放操作将其添加到模型中。
模型如下图所示:
注意:Editor 会在添加模块时命名模块。例如,添加的第一个 Gain 模块命名为 Gain,将下一个命名为 Gain1,以此类推。默认情况下,Simulink Editor 会隐藏这些名称。但是,可以通过选择模块来查看其名称。还可以显式命名模块,以便显示名称。可以显示编辑器提供的所有名称。在 Debug 选项卡中,选择 Information Overlays > Hide Automatic Block Names。有关显示模块名称的详细信息,可以参考《调整视觉展示以提高模型的可读性》内容。
对齐和连接模块
连接模块以在模型元素之间建立关系,使模型能够正常工作。根据模块之间的交互方式对齐模块后,模型将更加一目了然。快捷方式可以帮助对齐和连接模块。
(1)拖动 Gain 模块,使其与 Sine Wave 模块对齐。当两个模块水平对齐时,将出现一条对齐参考线。
(2)释放模块,此时将出现一个蓝色箭头,作为建议连接线的预览。
如图所示:
(3)要接受该连接线,请点击箭头。此时参考线将变成一条实线。
(4)采用同样的方法,将 Scope 模块与 Gain 模块对齐并连接起来。当范围内有多个模块时,会出现其他参考线。
如图所示:
设置模块参数
可以设置大多数模块上的参数。参数可以帮助您指定模块如何在模型中工作。可以使用默认值,也可以设置值。可以使用 Property Inspector 设置参数。也可以双击大多数模块,使用模块对话框来设置参数。
在模型中,设置正弦波的幅值和增益值。
(1)显示 Property Inspector。在 Modeling 选项卡上,在 Design 下,点击 Property Inspector。
(2)选择 Sine Wave 模块。
(3)在 Property Inspector 中,将 Amplitude 参数设置为 2
。
(4)对于其值显示在图标上的模块,可以交互方式编辑参数。选择 Gain 模块。将鼠标悬停在模块上方。数字下方会出现蓝色下划线。
(5)将 Gain 参数设置为3。点击带下划线的数字,将其删除,然后键入3。
如图所示:
在模块对话框或 Property Inspector 中,将模块参数值设置为变量或函数时,Simulink 会根据编辑字段中键入的当前文本提供建议列表以供选择。这些建议包括来自对可编辑的模块参数可见的每个工作区(基础、模型和封装)、数据字典和引用字典的相关变量或对象。自动补全功能适用于变量、结构体和对象的字段以及 MATLAB 路径上的函数。
添加更多模块
假设要再执行一个增益运算,但这次针对的是 Sine Wave 模块的输出绝对值。为了实现此目的,需要添加一些模块,可以通过不同的方式找到库中的模块并添加到模型中。
(1)如果知道要添加的模块的名称,可以使用快捷方式。双击要添加模块的位置,然后键入模块名称(在本例中为 Gain)。
如图所示:
显示的建议列表将根据最近的模块使用历史记录进行动态排名。
(2)点击模块名称,或者在突出显示模块名称后按 Enter。如果它不是列表中的第一个模块,可以使用箭头键突出显示模块名称。
(3)某些模块会显示要求为某个模块参数输入值的提示。Gain 模块会提示输入 Gain 值。键入3并按 Enter。
(4)要计算绝对值,请添加一个 Abs 模块。假设不知道模块在哪个库中,也不知道模块的完整名称。可以使用 Library Browser 中的搜索框进行搜索。在搜索框中输入abs并按 Enter。当找到 Abs 模块后,将其添加到新 Gain 模块的左侧。
(5)添加另一个 Scope 模块。可以右键点击并拖动现有的 Scope 模块为其创建一个副本,或使用 Copy 和 Paste 命令。
下图显示模型的当前状态。
如图所示:
建立分支连接
第二个 Gain 模块的输入是 Sine Wave 模块的输出的绝对值。要使用一个 Sine Wave 模块作为两个增益运算的输入,需要从 Sine Wave 模块输出信号上创建一条分支。
(1)对于模型中的第一组模块,使用了水平对齐参考线帮助对齐和连接它们。还可以使用参考线垂直对齐模块。将第二个 Scope 模块拖到第一个模块下面并与之对齐。当垂直对齐参考线显示两个模块已对齐时,释放模块。
如图所示:
(2)可以点击两个端口来连接它们。点击第一个端口后,兼容端口将突出显示。点击另一个要连接的端口。
如图所示:
按下图所示,对齐并连接模块。
(3)从 Sine Wave 模块的输出端口创建一条连接到 Abs 模块的分支线。点击 Abs 模块的输入端口。将光标从 Sine Wave 模块移向输出信号线。预览线将出现。点击以创建分支。
如图所示:
也可以通过点击线段并将光标向端口移动来绘制分支。
(4)命名信号。双击下方的Gain模块和Scope模块之间的信号,然后键入Scope。双击信号线而不是画布的空白区域。
如图所示:
使用下列方法添加或连接模块:
-
从模块端口拖动鼠标并松开,绘制一条红色虚线。双击该线末尾,以快捷方式插入模块。菜单上将列出在当前上下文中建议使用的模块。可以从列出的模块中选择一个。
-
双击,然后键入模块的名称,以获取以键入字符开头的模块列表。对于自定义库模块,如果库编写者指定了模块关键字,则可以键入模块关键字。此列表根据最近的模块使用历史记录排序。
-
点击一个端口后,在连接到另一个端口时按住 Shift 键。按住 Shift 键后,您可以连续进行多次连接。例如,在按住 Shift 键的同时,只需一次点击,即可分支一条新信号线并将其连接到另一个端口或信号线。
-
选择第一个模块,然后按住 Ctrl 键并点击要连接的模块。当需要连接具有多个输入和输出的模块时,此方法很有用,例如将多个模块连接到总线或连接具有多个端口的两个子系统时。就像点击两个端口一样,此方法在不希望对齐模块时很有用。建立连接时,信号线会视需要弯折。
要将线段拉成斜线,请按住 Shift 键并拖动顶点。如图所示:
将模型划分为组件
将模块组合成子系统,并为模块、子系统和信号添加标签。
(1)在 Abs 模块及其旁边的 Gain 模块周围拖动以绘制一个选择框。
(2)将光标移动到结束选择时的框角处显示的省略号上。从操作栏中选择 Create Subsystem。
如图所示:
模型中将出现一个子系统模块,代替所选模块。要调整子系统模块的大小,使其最适合的模型,请拖动模块句柄。
如图所示:
(3)为子系统指定有意义的名称。选择该模块,双击名称,然后键入 Absolute Value
。为模块命名后,该名称即会出现在模型中。
(4)双击 Absolute Value 子系统将其打开。
子系统包含选择作为子系统基础的模块和信号。它们依次连接到两个新模块:一个 Inport 模块和一个 Outport 模块。Inport 模块和 Outport 模块分别对应于子系统上的输入端口和输出端口。基于所选内容(包含命名信号)创建子系统会将信号的名称添加到相应的 Inport 或 Outport 模块。
如图所示:
(5)点击 Up to Parent 按钮 返回到模型顶层。
(6)下图显示了创建子系统并对其命名之后的模型。
如图所示:
对模型进行仿真并查看结果
(1)可以通过点击 Run 按钮 对模型进行仿真。在本示例中,仿真运行 10 秒,此为默认设置。
(2)双击两个 Scope 模块将其打开,然后查看结果。
下图显示了两个结果。在第二个图中,不出所料,正弦波的绝对值始终为正。
修改模型
可以向信号添加模块、从模型中移除模块以及重新绘制连接线。要修改此模型,请为模型中两个分支的输入添加一个偏置。再将其中一个 Scope 替换为另外一种信宿。将更多模块添加到子系统和另一个输出。
(1)在模型中添加一个 Bias 模块,并将 Bias 参数设置为 2
。
(2)将该模块拖动到 Sine Wave 模块后面、分支线前面的信号线上。如果需要为该模块腾出空间,请将 Sine Wave 模块向左拖动,或者拖动分支线的末端,将分支线向右移动。当将模块拖动到信号线上时,模块的两侧将与信号线连接起来。当对位置感到满意时,释放模块。
(3)移除顶层 Scope 模块。如果要断开模块与模型的连接,但不想将其删除,请按住 Shift 并拖动该模块。使用 Ctrl-X 或 Delete 键裁剪或删除它。断开的连接线显示为红色点线。
如图所示:
(4)向模型中添加一个 To Workspace 模块,并将其放在断开的连接线的末端。To Workspace 模块将结果输出给 MATLAB 工作区中的一个变量。
(5)向模型中添加一个 Sine Wave 模块,并将幅值设为 5
。将其放在子系统的左侧。
(6)再向子系统中添加一个输入。拖动鼠标从新的 Sine Wave 模块向子系统的左侧绘制一条线。子系统上将出现一个新端口 In2。
如图所示:
对于某些模块,向其拖动一条信号线会添加一个输入端口或一个输出端口。例如,当一条信号线连接到某子系统时,该子系统上会显示一个端口。会添加端口的其他模块包括 Bus Creator、Scope 以及 Add、Sum 和 Product 模块。
(7)向子系统添加一个输出。向模型中添加另一个 To Workspace 模块,并将其放在子系统的右侧。拖动鼠标从其输入端口向子系统的右侧绘制一条线。子系统上将出现一个新端口 Out2。
如图所示:
(8)打开子系统并重命名 Out2 模块工作区。向子系统添加一个 Manual Switch 模块。调整大小并按下图所示进行连接。在 Gain 模块后绘制分支信号,以将输出指向 To Workspace 模块。
如图所示:
然后,返回到模型的顶层。下图显示了当前模型。
如图所示:
(9)对模型进行仿真。
-
simout和simout1变量出现在 MATLAB 工作区中。双击每个变量以查看结果。
-
如果要使用第二条正弦波作为子系统算法的输入,请打开子系统并双击开关。输入更改为In2。再次进行仿真。
提示
要在使用和不使用 Bias 模块的模型仿真效果之间切换,请右键点击 Bias 模块,然后选择 Comment Through。此模块仍然在模型中,但不影响运算。右键点击 Bias 模块,然后选择 Uncomment 即可启用此模块。Comment Out 命令会注释掉模块的输出信号,因此不传递信号数据。使用上述每个命令进行尝试,以便更好地理解它们的效果。