创建简单模型
您可以使用 Simulink® 来对系统建模,然后仿真该系统的动态行为。本教程中创建简单模型所使用的基本方法也适用于创建更复杂的模型。此示例对简化的汽车运动进行仿真。当踩下油门踏板时,汽车通常处于行进状态。松开踏板后,汽车怠速并停下来。
Simulink 模块是定义模块输入和模块输出之间数学关系的模型元素。要创建这个简单模型,您需要四个 Simulink 模块。
模块名称 | 模块目的 | 模型目的 |
---|---|---|
Pulse Generator | 为模型生成输入信号 | 表示加速踏板 |
Gain | 将输入信号乘以常量值 | 计算踩下加速踏板后如何影响汽车的加速度 |
Second-Order Integrator | 将输入信号积分两次 | 根据加速度计算汽车位置 |
Outport | 指定一个信号作为模型的输出 | 指定汽车位置做为模型的输出 |
此模型的仿真过程是将一个简短的脉冲信号积分两次,形成一个斜坡。输入脉冲表示是否踩下油门踏板:1 表示踏板踩下,0 表示未踩下。输出斜坡表示与起点之间的距离增加。
打开新模型
使用 Simulink 编辑器构建您的模型。
启动 MATLAB®。在 MATLAB 工具条上,点击 Simulink 按钮
。
点击空白模型模板。
Simulink 编辑器打开。
为了避免遮蔽,Simulink 编辑器会检查路径中加载的模型和文件,并使用下一个可用名称
untitled
、untitled1
、untitled2
等创建一个模型。从仿真选项卡中,选择保存 > 另存为。在文件名文本框中,输入您的模型的名称,例如
simple_model
。点击保存。模型使用文件扩展名.slx
进行保存。
打开 Simulink库浏览器
Simulink 在库浏览器中提供了一系列按功能分类的模块库。大多数工作流常用以下模块库:
Continuous - 表示具有连续状态的系统的模块
Discrete - 表示具有离散状态的系统的模块
Math Operations - 实现代数和逻辑方程的模块
Sinks - 存储并显示所连接信号的模块
Sources - 生成模型的驱动信号值的模块
要打开库浏览器,请在 Simulink 工具条的仿真选项卡上,点击库浏览器。
要浏览模块库,请在库树中展开一个类别,然后展开一个功能区。
要搜索所有可用的模块库,请输入搜索词。
例如,查找 Pulse Generator 模块。在搜索框中,输入 pulse
,然后按 Enter 键。软件在库中搜索名称或描述中包含 pulse
的模块,然后在库浏览器的搜索结果选项卡上显示这些模块。
提示
您可以通过点击库选项卡返回浏览库树。
获取模块的详细信息。在搜索结果选项卡上,右键点击 Pulse Generator 模块,然后选择 Pulse Generator 模块的帮助。文档打开并显示该模块的参考页。
模块通常有几个参数。对于大多数模块,您可以通过双击模块来访问模块参数。
将模块添加到模型
要开始构建模型,请向模型画布添加模块。您可以使用库浏览器或快速插入菜单添加模块。
首先从库浏览器添加一个 Pulse Generator 模块。
从 Sources 库中,将 Pulse Generator 模块拖到 Simulink 编辑器中。振幅参数采用默认值
1
的 Pulse Generator 模块将添加到您的模型中。参数值在整个仿真期间保持不变。
使用快速插入菜单添加一个 Outport 模块。
Double-click anywhere in the model canvas. In the quick insert menu that appears, enter
out
. A list of blocks appears. Verify that the Outport block from the Simulink library is selected. Check the library name listed under the block name and the block description in the details pane to the right of the search results.提示
要隐藏详细信息窗格,请点击箭头
。要显示详细信息窗格,请再次点击该箭头。
通过按下 Enter 键将 Outport 模块添加到模型中。
有关快速插入菜单的详细信息,请参阅使用快速插入菜单向模型添加模块。
使用库浏览器或快速插入菜单将这些模块添加到模型中。
模块 库 参数 Gain Simulink/Math Operations 增益:
2
Second-Order Integrator Simulink/Continuous 初始条件:
0
复制现有 Outport 模块,然后使用键盘快捷方式将其粘贴到另一个点,从而添加第二个 Outport 模块。
您的模型现在已经包含您需要的模块。
通过点击并拖动每个模块来排列模块。要调整模块大小,请拖动模块的一个角。
连接模块
通过在输出端口和输入端口之间创建线条来连接模块。然后,保存您的模型。
将 Pulse Generator 模块的输出端口连接到 Gain 模块的输入端口。
将 Gain 模块的输出端口连接到 Second-Order Integrator 模块的输入端口。
将 Second-Order Integrator 模块的两个输出连接到两个 Outport 模块。
例如,要将 Pulse Generator 模块连接到 Gain 模块,请执行以下操作:
点击 Pulse Generator 模块右侧的输出端口。
该输出端口和所有适合连接的输入端口由蓝色向前符号
指示。
要查看连接提示,请将指针指向向前符号
。
点击提示,用一个线条和一个指示信号流动方向的箭头连接这些模块。
此动画说明如何在模型中连接模块。
运行仿真
指定仿真的停止时间。然后,对模型进行仿真。
在仿真选项卡上,设置仿真停止时间。在 Simulink 工具条的仿真选项卡上,在停止时间文本框中输入值。
默认停止时间
10.0
适合此模型。此时间值没有单位。Simulink 仿真中的时间单位取决于方程的构造方式。此示例对简化的汽车运动进行 10 秒的仿真 - 但其他模型的时间单位可以是毫秒或年。要仿真模型,请点击运行
。
查看仿真数据
要在仿真数据检查器中查看仿真结果,请点击数据检查器 。
要在仿真数据检查器中绘制数据,请从左侧的表中选择信号。例如,要绘制汽车的位置,请选择名为 Out1:1
的信号。
细化模型
更改模块参数
此示例基于现有运动模型 moving_car
对接近传感器进行建模。
在这种情况下,数字传感器用于测量汽车与 10 米(30 英尺)外的障碍物之间的距离。模型基于下列条件来输出传感器的测量值和汽车的位置值:
汽车在到达障碍物时会紧急刹车。
在现实世界中,传感器对距离的测量不够精确,从而导致随机数值误差。
数字传感器以固定时间间隔运行。
打开 moving_car
模型。
open_system("moving_car.slx");
您首先需要对在汽车位置到达 10
时的紧急刹车进行建模。Integrator, Second-Order 模块有用于此目的的参数。
双击 Integrator, Second-Order 模块。将出现“模块参数”对话框。
选择 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 模块的输出已连接到另一个端口。要在该信号中创建分支,请左键点击该信号以突出显示可供连接的端口,然后点击适当的端口。
对信号进行注解
将信号名称添加到模型中。
双击信号并键入信号名称。
要完成输入,请点击文本框外部。
重复上述步骤以添加下图中所示的名称。
查看多个信号
将 actual distance
信号与 measured distance
信号进行比较。measured distance
信号记录为输出。要记录 actual distance
信号,您可以将其标记为信号记录。
选择模型中的信号。
在仿真选项卡上,点击记录信号
。
记录标记 表示该信号已标记为记录。
对模型进行仿真。要在仿真数据检查器中查看仿真结果,请点击数据检查器 。选择
actual distance
和 measured distance
信号以在同一时间图上绘制这两个信号。
该图显示,测量值可偏离实际值达 0.3 米之多。这些信息在设计安全功能(如碰撞预警)时非常有用。
在单独的子图上查看信号
您也可以通过在单独的子图上查看信号来分析结果。例如,您可以为 pedal position
和 velocity
信号添加子图,以查看踏板位置、汽车速度和汽车与障碍物之间距离的关系。
在模型中,右键点击 pedal position
信号并选择记录所选信号,以将 pedal position
信号标记为信号记录。然后,对模型进行仿真。
在仿真数据检查器中,点击“可视化和布局”。然后,通过指定网格中的行数和列数创建一个
3
×1
布局。
将 velocity
信号添加到中间子图,将 pedal position
信号添加到底部子图。要将信号添加到某个子图,请选择该子图,然后从信号表中选择相应信号。
通过在三个子图上可视化数据,您可以看到踩下油门踏板如何影响车速及其与障碍物的距离。要进一步探究这一点,您可以通过调整 Pulse Generator 模块的参数来更改油门踏板的行为。要打开 Pulse Generator 模块的“模块参数”对话框,请双击该模块。例如,通过将周期设置为 5
和将脉冲宽度设置为 20
,对一秒两次踩下油门踏板的情况进行建模。
对模型进行仿真。在仿真数据检查器中,按空格键使信号适合查看。
在仿真数据检查器中,您可以通过自定义绘图和信号外观、缩放和平移以及添加数据游标来进一步检查数据。有关详细信息,请参阅 Create Plots Using the Simulation Data Inspector。
另请参阅
模块
- Pulse Generator | Gain | Second-Order Integrator | Sum | Constant | Zero-Order Hold | Band-Limited White Noise
工具
- 仿真数据检查器 | Simulink 编辑器 | 库浏览器