主要内容

创建简单模型

您可以使用 Simulink® 来对系统建模,然后仿真该系统的动态行为。在此示例中,您需要创建一个简单模型,但您可以使用相同的基本方法来创建复杂模型。该示例对汽车的简化运动进行仿真。当踩下油门踏板时,汽车通常处于行进状态。在踏板松开后,汽车减速至停止并怠速。

Simulink 模块是定义模块输入和模块输出之间数学关系的模型元素。要创建这个简单模型,您需要四个 Simulink 模块。

模块名称模块目的模型目的
Pulse Generator为模型生成输入信号。表示加速踏板。
Gain将输入信号乘以常量值。计算踩下加速踏板后如何影响汽车的加速度。
Second-Order Integrator将输入信号积分两次。从加速度获取位置。
Outport指定一个信号作为模型的输出。指定汽车位置作为模型的输出。

A Simulink model with Pulse Generator, Gain, Second-Order Integrator block, and two Outport blocks.

此模型的仿真过程是将一个简短的脉冲信号积分两次,形成一个斜坡。输入脉冲表示是否踩下油门踏板:1 表示踩下,0 表示未踩下。输出斜坡表示与起点之间的距离增加。

打开新模型

使用 Simulink 编辑器构建您的模型。

  1. 启动 MATLAB®。在 MATLAB 工具条上,点击 Simulink 按钮

    The Simulink start page shows two tabs, New and Examples. The New tab is selected and shows a list of templates you can open.

  2. 选择空白模型模板。

    Simulink 编辑器打开。

    为了避免遮蔽或避免同时打开多个同名模型,Simulink 编辑器会检查路径中加载的模型和文件,并使用下一个可用名称 untitleduntitled1untitled2 等创建一个模型。

    Empty Simulink Editor

  3. 仿真选项卡中,选择保存 > 另存为。在文件名文本框中,输入您的模型的名称,例如 simple_model。点击保存。模型使用文件扩展名 .slx 进行保存。

打开 Simulink库浏览器

Simulink 在库浏览器中提供了一系列按功能分类的模块库。大多数工作流常用以下模块库:

  • Continuous - 表示具有连续状态的系统的模块

  • Discrete - 表示具有离散状态的系统的模块

  • Math Operations - 实现代数和逻辑方程的模块

  • Sinks - 存储并显示所连接信号的模块

  • Sources - 生成模型的驱动信号值的模块

要打开库浏览器,请在 Simulink 工具条的仿真选项卡上,点击库浏览器

Library Browser

要浏览模块库,请在库树中展开库及其子库。

要搜索所有可用的模块库,请输入搜索词。例如,查找 Pulse Generator 模块。在搜索框中,输入 pulse,然后按 Enter 键。软件在库中搜索名称或描述中包含 pulse 的模块,然后在库浏览器的搜索结果选项卡上显示这些模块。您可以通过点击选项卡返回浏览库树。

The Simulink Library Browser displays the results for the search term pulse, which include Pulse Generator and Continuous Pulse Generator blocks.

将模块添加到模型

要开始构建模型,请向模型画布添加模块。您可以使用库浏览器或快速插入菜单添加模块。

  1. 添加一个 Pulse Generator 模块。在库浏览器树中,展开 Simulink 库。展开 Sources 子库。将 Pulse Generator 模块拖到模型画布上。

    Pulse Generator block

  2. 添加一个 Gain 模块。双击模型画布。在出现的快速插入菜单中,输入 gain。将出现模块列表。

    Quick insert menu showing search results for "gain"

    只要多个不同的模块存储在不同的库文件中,这些模块就可以具有相同的名称。模块所属的库会列在模块名称下方。检查来自 Simulink 库的 Gain 模块是否处于选中状态。如果没有,请使用箭头键或点击模块名称选择该模块。

    要了解选定模块,请阅读搜索结果右侧详细信息窗格中的描述。要查看该模块的完整文档,请点击文档。有关涉及该模块的示例,请点击示例下的链接。要隐藏或取消隐藏详细信息窗格,请点击右上角的箭头

    Enter 键或双击选定内容将选定模块添加到模型。

    Gain block

  3. 使用库浏览器或快速插入菜单将这些模块添加到模型中。

    模块
    Out1Simulink 库,Sinks 子库
    Second-Order IntegratorSimulink 库,Continuous 子库

  4. 复制现有 Out1 模块并使用键盘快捷方式 Ctrl+CCtrl+V(在 macOS 上,使用 command+Ccommand+V)将其粘贴到另一个点,从而添加第二个 Out1 模块。您的模型现在已经包含您需要的模块。

连接模块

进行如下连接:

  • Pulse Generator 模块连接到 Gain 模块。

  • Gain 模块连接到 Second-Order Integrator 模块。

  • Second-Order Integrator 模块连接到两个 Out1 模块。

例如,要将 Pulse Generator 模块连接到 Gain 模块,请执行以下操作:

  1. 点击 Pulse Generator 模块右侧的输出端口。

    该输出端口和所有适合连接的输入端口由蓝色向前符号 (>) 指示。

  2. 要查看连接提示,请将指针指向向前符号 (>)。

  3. 点击提示,用一个线条和一个指示信号流动方向的箭头连接这些模块。

有关如何连接模块的详细信息,请参阅连接模块

An animation shows how to connect the Pulse Generator block to the Gain block.

在连接好模块后,通过拖动每个模块来对齐 Pulse GeneratorGainSecond-Order Integrator 模块。要调整模块大小,请拖动模块的一个角。

对于大型模型,您可以使用自动排列来改进模型布局,而不是拖动各个模块。右键点击模型画布。将显示顶层模型上下文菜单。在 Simulink 上下文菜单中,格式设置选项(例如更改颜色或字体,或自动排列模型)位于格式栏中。要展开格式栏,请点击菜单顶部的箭头 。然后,点击“自动排列”按钮

Top Model context menu with the format bar expanded

提示

要查看解释通过按下上下文菜单按钮可执行的操作的工具提示,请将指针悬停在按钮图标上。

The Top Model context menu is open with the format bar expanded. The pointer is paused on the Auto Arrange button, and next to the button is a tooltip with the text "Auto Arrange".

自动排列会对齐模块并拉直信号线。

Block diagram after auto-arrange

编辑模块参数值

模块具有可以修改的参数值。要找出可以为模块修改哪些参数以及参数采用什么类型的值,请打开模块文档。右键点击模块,然后在上下文菜单的右上角,点击“打开帮助文档”按钮

对于某些模块,例如 Constant 模块或 Gain 模块,您可以直接在模块上更改参数值。将示例模型中 Gain 模块的增益值更改为 2。选择模块,点击模块上的值,输入新值,然后按 Enter 键。

您也可以在“模块参数”对话框中更改增益值。要打开“模块参数”对话框,请双击模块。或者,右键点击模块,然后点击“模块参数”按钮 。在打开的对话框中,将增益值更改为 2 并按 Enter 键。

Block parameters dialog box with the Gain value set to 2

第三种选择是使用属性检查器。选择 Gain 模块。要打开属性检查器,请按 Ctrl+Shift+I(在 macOS 上,按 command+option+O)。或者,右键点击模块,然后点击“属性检查器”按钮 。在属性检查器的参数选项卡上,将增益值更改为 2

要更改未显示在模块图标上的参数值,请使用“模块参数”对话框或属性检查器。如果您在“模块参数”对话框中看不到要更改其值的参数的名称,请检查属性检查器,反之亦然。

运行仿真

指定仿真的停止时间。然后,对模型进行仿真。

  1. 仿真选项卡上,设置仿真停止时间。在 Simulink 工具条的仿真选项卡上,在停止时间文本框中输入值。

    Simulation stop time is displayed on the Simulation tab of the toolstrip

    默认停止时间 10.0 适合此模型。此时间值没有单位。Simulink 仿真中的时间单位取决于方程的构造方式。此示例对简化的汽车运动进行 10 秒的仿真 - 但其他模型的时间单位可以是毫秒或年。

  2. 要仿真模型,请按 Ctrl+T(在 macOS 上,按 command+T)。或者,在工具条的仿真选项卡上,点击运行

查看仿真数据

要在仿真数据检查器中查看仿真结果,请右键点击其中一条信号线,然后点击“在数据检查器中查看”按钮

要在仿真数据检查器中绘制数据,请从左侧的检查清单中选择信号。例如,要绘制汽车的位置,请选择名为 Out1:1 的信号。

The Simulation Data Inspector shows the position of the car in a time plot.

细化模型

您可以通过更改模块参数、添加新模块、建立新连接以及注解信号线来细化模型。

更改模块参数

此示例基于名为 moving_car 的现有运动模型对接近传感器进行建模。

在这种情况下,数字传感器用于测量汽车与 10 米(30 英尺)外的障碍物之间的距离。模型基于下列条件来输出传感器的测量值和汽车的位置值:

  • 汽车在到达障碍物时会紧急刹车。

  • 在现实世界中,传感器对距离的测量不够精确,从而导致随机数值误差。

  • 数字传感器以固定时间间隔运行。

打开 moving_car 模型。

open_system("moving_car.slx");

您首先需要对在汽车位置到达 10 时的紧急刹车进行建模。Integrator, Second-Order 模块有用于此目的的参数。

  1. 双击 Integrator, Second-Order 模块。将出现“模块参数”对话框。

  2. 选择 x 限制,然后为 x 上限输入 10。参数的背景色发生变化以指示模型存在未应用的修改。点击确定应用更改并关闭对话框。

添加新模块和连接

修改模型以添加一个用来测量与障碍物之间距离的传感器。根据需要展开模型窗口,以容纳新模块。

  • 要找出车辆与障碍物位置之间的距离,请从 Sources 库中添加 Constant 模块,并将该模块的值设置为 10。要想求出障碍物位置和车辆位置之间的距离,需要从 Math Operations 库中添加 Subtract 模块。

  • 要仿真真实传感器的不完美测量,请使用 Sources 库中的 Band-Limited White Noise 模块向模型添加噪声。双击模块以将噪声功率参数设置为 0.001。通过使用 Math Operations 库中的 Add 模块将噪声添加到距离测量中。

  • 在 Simulink 中,以给定时间间隔对信号进行采样需要一个样本和保持器。从 Discrete 库中添加 Zero-Order Hold 模块。然后,双击该模块以将采样时间参数更改为 0.1

  • 要记录传感器输出,请将 Zero-Order Hold 模块连接到另一个 Outport 模块。

连接新模块。Second-Order Integrator 模块的输出已连接到另一个端口。要在该信号中创建分支,请左键点击该信号以突出显示可供连接的端口,然后点击适当的端口。

The original model connected to a sensor to measure the distance between the car and an obstacle.

对信号进行注解

将信号名称添加到模型中。

  1. 双击信号并键入信号名称。

    A highlighted signal is labeled pedal position

  2. 要完成输入,请点击文本框外部。

  3. 重复上述步骤以添加下图中所示的名称。

    Model with named signals. The signal between Pulse Generator block and the Gain block is named pedal position. The signal between the Gain block and the Integrator, Second-Order block is named acceleration. The signal between the Subtract block and the Add block is named actual distance. The signal between the Zero-Order Hold block and the Outport block is named measured distance. The signal between the first output port of the Integrator, Second-Order block and the first Outport block is named position. The signal between the second output port of the Integrator, Second-Order block and the second Outport block is named velocity.

查看多个信号

actual distance 信号与 measured distance 信号进行比较。measured distance 信号记录为输出。要记录 actual distance 信号,您可以将其标记为信号记录。右键点击信号线,然后点击“记录信号”按钮 。记录标记 表示该信号已标记为记录。

对模型进行仿真。要在仿真数据检查器中查看仿真结果,请右键点击信号线,然后点击“在数据检查器中查看”按钮 。展开输出端口信号检查清单。要在同一时间图上绘制 actual distancemeasured distance 信号,请选择这两个信号。

The Simulation Data Inspector shows the actual distance and the measured distance values.

该图显示,测量值可偏离实际值达 0.3 米之多。这些信息在设计安全功能(如碰撞预警)时非常有用。

在单独的子图上查看信号

您也可以通过在单独的子图上查看信号来分析结果。例如,您可以为 pedal positionvelocity 信号添加子图,以查看踏板位置、汽车速度和汽车与障碍物之间距离的关系。

标记 pedal position 信号以进行信号记录。右键点击 pedal position 信号线,然后点击“记录信号”按钮

对模型进行仿真。当仿真结束时,在仿真数据检查器中,点击“可视化和布局”。然后,通过指定网格中的行数和列数创建一个 3×1 布局。

The Visualizations and layouts menu. In the Grid section, the number of rows is specified as 3 and the number of columns is specified as one.

velocity 信号添加到中间子图,将 pedal position 信号添加到底部子图。要将信号添加到某个子图,请选择该子图,然后从信号表中选择相应信号。

The Simulation Data Inspector with three vertically aligned subplots. The top subplot shows the actual and measured distance of the car from the obstacle. The middle subplot shows the velocity. The bottom subplot shows the gas pedal position.

通过在三个子图上可视化数据,您可以看到踩下油门踏板如何影响车速及其与障碍物的距离。要进一步探究这一点,您可以通过调整 Pulse Generator 模块的参数来更改油门踏板的行为。要打开 Pulse Generator 模块的“模块参数”对话框,请双击该模块。例如,通过将周期设置为 5 和将脉冲宽度设置为 20,对一秒两次踩下油门踏板的情况进行建模。

对模型进行仿真。在仿真数据检查器中,按空格键使信号适合查看。

The Simulation Data Inspector with three vertically aligned subplots with data from a simulation that models pressing the gas pedal for one second twice. The top subplot shows the actual and measured distance of the car from the obstacle. The middle subplot shows the velocity. The bottom subplot shows the gas pedal position.

在仿真数据检查器中,您可以通过自定义绘图和信号外观、缩放和平移以及添加数据游标来进一步检查数据。有关详细信息,请参阅 Create Plots Using the Simulation Data Inspector

另请参阅

模块

工具

主题