simulink matlab仿真环境教程
Simulink是面向框图的仿真软件。
演示一个Simulink的简单程序
【例1.1】创建一个正弦信号的仿真模型。
步骤如下:
(1) 在MATLAB的命令窗口运行simulink命令,或单击工具栏中的 图标,就可以打开Simulink模块库浏览器(Simulink Library Browser) 窗口,如图1.1所示。
图7.1 Simulink界面 |
(2) 单击工具栏上的 图标或选择菜单“File”——“New”——“Model”,新建一个名为“untitled”的空白模型窗口。
(3) 在上图的右侧子模块窗口中,单击“Source”子模块库前的“+”(或双击Source),或者直接在左侧模块和工具箱栏单击Simulink下的Source子模块库,便可看到各种输入源模块。
(4) 用鼠标单击所需要的输入信号源模块“Sine Wave”(正弦信号),将其拖放到的空白模型窗口“untitled”,则“Sine Wave”模块就被添加到untitled窗口;也可以用鼠标选中“Sine Wave”模块,单击鼠标右键,在快捷菜单中选择“add to 'untitled'”命令,就可以将“Sine Wave”模块添加到untitled窗口,如图1.2所示。
图7.2 Simulink界面 |
(5) 用同样的方法打开接收模块库“Sinks”,选择其中的“Scope”模块(示波器)拖放到“untitled”窗口中。
(6) 在“untitled”窗口中,用鼠标指向“Sine Wave”右侧的输出端,当光标变为十字符时,按住鼠标拖向“Scope”模块的输入端,松开鼠标按键,就完成了两个模块间的信号线连接,一个简单模型已经建成。如图1.3所示。
(7) 开始仿真,单击“untitled”模型窗口中“开始仿真”图标 ,或者选择菜单“Simulink”——“Start”,则仿真开始。双击“Scope”模块出现示波器显示屏,可以看到黄色的正弦波形。如图1.4所示。
图7.3 Simulink模型窗口 |
图7.4 示波器窗口 |
1.2 Simulink的文件操作和模型窗口
1.2.1 Simulink的文件操作
1. 新建文件
新建仿真模型文件有几种操作:
§ 在MATLAB的命令窗口选择菜单“File”à“New”à“Model”。
§ 在图1.1的Simulink模块库浏览器窗口选择菜单“File”à“New”à“Model”,或者单击工具栏的 图标。
§ 在图1.3的Simulink模型窗口选择菜单“File”à“New”à“Model”,或者单击工具栏的 图标。
2. 打开文件
打开仿真模型文件有几种操作:
§ 在MATLAB的命令窗口输入不加扩展名的文件名,该文件必须在当前搜索路径中,例如输入“Ex0701”。
§ 在MATLAB的命令窗口选择菜单“File”àOpen…”或者单击工具栏的 图标打开文件。
§ 在图1.1的Simulink模块库浏览器窗口选择菜单“File”à“Open…”或者单击工具栏的 图标打开“.mdl”文件。
§ 在图1.3的Simulink模型窗口中选择菜单“File”à“Open…”或者单击工具栏的 图标打开文件。
1.2.2 Simulink的模型窗口
模型窗口由菜单、工具栏、模型浏览器窗口、模型框图窗口以及状态栏组成。
状态栏 |
菜单 |
模型框图 |
模型浏览器 |
图7.5 双窗口模型窗口 |
工具栏 |
1. 状态栏
2. 工具栏
模型窗口工具栏如图1.6所示。
开始仿真 |
打开库浏览器 |
结束仿真 |
打开调试器 |
展示父系统 |
单双窗口切换 |
图7.6 工具栏 |
仿真模型 |
更新模块框图 |
创建并编译生成exe文件 |
3. 菜单
Simulink的模型窗口的常用菜单如表1.1所示。
表1.1模型窗口常用菜单表
菜单名 |
菜单项 |
功能 |
File |
New——Model |
新建模型 |
Model properties |
模型属性 | |
Preferences |
SIMULINK界面的默认设置选项 | |
Print… |
打印模型 | |
Close |
关闭当前Simulink窗口 | |
Exit MATLAB |
退出MATLAB系统 | |
Edit |
Create subsystem |
创建子系统 |
Mask subsystem… |
封装子系统 | |
Look under mask |
查看封装子系统的内部结构 | |
Update diagram |
更新模型框图的外观 | |
View |
Go to parent |
显示当前系统的父系统 |
Model browser options |
模型浏览器设置 | |
Block data tips options |
鼠标位于模块上方时显示模块内部数据 | |
Library browser |
显示库浏览器 | |
Fit system to view |
自动选择最合适的显示比例 | |
Normal |
以正常比例(100%)显示模型 | |
Simulation |
Start/Stop |
启动/停止仿真 |
Pause/Continue |
暂停/继续仿真 | |
Simulation Parameters… |
设置仿真参数 | |
Normal |
普通Simulink模型 | |
Accelerator |
产生加速Simulink模型 | |
Format |
Text alignment |
标注文字对齐工具 |
Filp name |
翻转模块名 | |
Show/Hide name |
显示/隐藏模块名 | |
Filp block |
翻转模块 | |
Rotate Block |
旋转模块 | |
Library link display |
显示库链接 | |
Show/Hide drop shadow |
显示/隐藏阴影效果 | |
Sample time colors |
设置不同的采样时间序列的颜色 | |
Wide nonscalar lines |
粗线表示多信号构成的向量信号线 | |
Signal dimensions |
注明向量信号线的信号数 | |
Port data types |
标明端口数据的类型 | |
Storage class |
显示存储类型 | |
Tools |
Data explorer… |
数据浏览器 |
Simulink debugger… |
Simulink调试器 | |
Data class designer |
用户定义数据类型设计器 | |
Linear Analysis |
线性化分析工具 |
1.3 模型的创建
1.3.1模块的操作
1. 对象的选定
§ 选定单个对象
选定对象只要在对象上单击鼠标,被选定的对象的四角处会出现小黑块编辑框。
§ 选定多个对象
如果选定多个对象,可以按下Shift键,然后再单击所需选定的模块;或者用鼠标拉出矩形虚线框,将所有待选模块框在其中,则矩形框中所有的对象均被选中,如图1.7所示。
§
图7.7 选定多个对象 |
选定所有对象
如果要选定所有对象,可以选择菜单“Edit”à“Select all”。
2. 模块的复制
(1) 不同模型窗口(包括模型库窗口)之间的模块复制
§ 选定模块,用鼠标将其拖到另一模型窗口。
§ 选定模块,使用菜单的“Copy”和“Paste”命令。
§ 选定模块,使用工具栏的“Copy”和“Paste”按钮。
(2) 在同一模型窗口内的复制模块(如图1.8所示)
§ 选定模块,按下鼠标右键,拖动模块到合适的地方,释放鼠标。
§ 选定模块,按住Ctrl键,再用鼠标拖动对象到合适的地方,释放鼠标。
§
图7.8 在同一模型窗口复制对象 |
使用菜单和工具栏中的“Copy”和“Paste”按钮。
3. 模块的移动
§ 在同一模型窗口移动模块
选定需要移动模块,用鼠标将模块拖到合适的地方。
§ 在不同模型窗之间移动模块
在不同模型窗之间移动模块,在用鼠标移动的同时按下Shift键。
当模块移动时,与之相连的连线也随之移动。
4. 模块的删除
要删除模块,应选定待删除模块,按Delete键;或者用菜单“Edit”à“Clear”或“Cut”;或者用工具栏的“Cut”按钮。
5. 改变模块大小
选定需要改变大小的模块,出现小黑块编辑框后,用鼠标拖动编辑框,可以实现放大或缩小。
6. 模块的翻转
§ 模块翻转180度
选定模块,选择菜单“Format”à“Flip Block”可以将模块旋转180度,如同1.9中间为翻转180度示波器模块。
§ 模块翻转90度
图7.9 翻转模块 |
选定模块,选择菜单“Format”à“Rotate Block”可以将模块旋转90度,如图1.9右边示波器所示。如果一次翻转不能达到要求,可以多次翻转来实现。
7. 模块名的编辑
§ 修改模块名
单击模块下面或旁边的模块名,出现虚线编辑框就可对模块名进行修改。
§ 模块名字体设置
选定模块,选择菜单“Format”à“Font”,打开字体对话框设置字体。
§ 模块名的显示和隐藏
选定模块,选择菜单“Format”à“Hide /Show name”,可以隐藏或显示模块名。
§ 模块名的翻转
选定模块,选择菜单“Format”à“Flip name”,可以翻转模块名。
1.3.2信号线的操作
1. 模块间连线
先将光标指向一个模块的输出端,待光标变为十字符后,按下鼠标键并拖动,直到另一模块的输入端。
2. 信号线的分支和折曲
(1) 分支的产生
将光标指向信号线的分支点上,按鼠标右键,光标变为十字符,拖动鼠标直到分支线的终点,释放鼠标;或者按住Ctrl键,同时按下鼠标左键拖动鼠标到分支线的终点,如图1.10所示。
图7.10 信号线的分支 |
(2) 信号线的折线
选中已存在的信号线,将光标指向折点处,按住Shift键,同时按下鼠标左键,当光标变成小圆圈时,用鼠标拖动小圆圈将折点拉至合适处,释放鼠标,如图1.11所示。
图7.11 信号线的折线 |
3. 信号线文本注释(label)
§ 添加文本注释
双击需要添加文本注释的信号线,则出现一个空的文字填写框,在其中输入文本。
§ 修改文本注释
单击需要修改的文本注释,出现虚线编辑框即可修改文本。
§ 移动文本注释
单击标识,出现编辑框后,就可以移动编辑框。
§ 复制文本注释
单击需要复制的文本注释,按下Ctrl键同时移动文本注释,或者用菜单和工具栏的复制操作。
4. 在信号线中插入模块
如果模块只有一个输入端口和一个输出端口,则该模块可以直接被插入到一条信号线中。
1.3.3给模型添加文本注释
(1) 添加模型的文本注释
在需要当作注释区的中心位置,双击鼠标左键,就会出现编辑框,在编辑框中就可以输入文字注释。
(2) 注释的移动
在注释文字处单击鼠标左键,当出现文本编辑框后,用鼠标就可以拖动该文本编辑框。
1.4 Simulink的基本模块
1.4.1基本模块
Simulink的基本模块包括9个子模块库。
1. 输入信号源模块库(Sources)
输入信号源模块是用来向模型提供输入信号。常用的输入信号源模块源如表1.2所示。
表1.2 常用的输入信号源模块表
名称 |
模块形状 |
功能说明 |
Constant |
|
恒值常数,可设置数值 |
Step |
|
阶跃信号 |
Ramp |
|
线性增加或减小的信号 |
Sine Wave |
|
正弦波输出 |
Signal Generator |
|
信号发生器,可以产生正弦、方波、锯齿波和随机波信号 |
From File |
|
从文件获取数据 |
From Workspace |
|
从当前工作空间定义的矩阵读数据 |
Clock |
|
仿真时钟,输出每个仿真步点的时间 |
In |
|
输入模块 |
2. 接收模块库(Sinks)
接收模块是用来接收模块信号的,常用的接收模块如表1.3所示。
表1.3 常用的接收模块表
名称 |
模块形状 |
功能说明 |
Scope |
|
示波器,显示实时信号 |
Display |
|
实时数值显示 |
XY Graph |
|
显示X-Y两个信号的关系图 |
To File |
|
把数据保存为文件 |
To Workspace |
|
把数据写成矩阵输出到工作空间 |
Stop Simulation |
|
输入不为零时终止仿真,常与关系模块配合使用 |
Out |
|
输出模块 |
3. 连续系统模块库(Continuous)
连续系统模块是构成连续系统的环节,常用的连续系统模块如表1.4所示。
表1.4 常用的连续系统模块表
名称 |
模块形状 |
功能说明 |
Integrator |
|
积分环节 |
Derivative |
|
微分环节 |
State-Space |
|
状态方程模型 |
Transfer Fcn |
|
传递函数模型 |
Zero-Pole |
|
零—极点增益模型 |
Transport Delay |
|
把输入信号按给定的时间做延时 |
4. 离散系统模块库(Discrete)
离散系统模块是用来构成离散系统的环节,常用的离散系统模块如表1.5所示。
表1.5 常用的离散系统模块表
名称 |
模块形状 |
功能说明 |
Discrete Transfer Fcn |
|
离散传递函数模型 |
Discrete Zero-Pole |
|
离散零极点增益模型 |
Discrete State-Space |
|
离散状态方程模型 |
Discrete Filter |
|
离散滤波器 |
Zero-Order Hold |
|
零阶保持器 |
First-Order Hold |
|
一阶保持器 |
Unit Delay |
|
采样保持,延迟一个周期 |
1.4.2常用模块的参数和属性设置
图7.13 模块的参数设置 |
(1) 正弦信号源(Sine Wave)
双击正弦信号源模块,会出现如图1.13所示的参数设置对话框。
图1.13的上部分为参数说明,仔细阅读可以帮助用户设置参数。Sine type为正弦类型,包括Time-based和Sample-based;Amplitude为正弦幅值;Bias为幅值偏移值;Frequency为正弦频率;Phrase为初始相角;Sample time为采样时间。
(2) 阶跃信号源(Step)
阶跃信号模块是输入信号源,其模块参数对话框如图1.14所示。
图7.14 阶跃信号模块的参数 |
其中:Step time为阶跃信号的变化时刻,initial value为初始值,Final value为终止值,Sample time为采样时间。
(3) 从工作空间获取数据(From workspace)
从工作空间获取数据模块的输入信号源为工作空间。
【例1.2】在工作空间计算变量t和y,将其运算的结果作为系统的输入。
y=sin(t);
t=t';
y=y';
然后将“From Workspace”模块的参数设置对话框打开,如图1.15(a)所示,在“Data”栏填写“[t,y]”,单击“OK”按钮完成。则在模型窗口中该模块就显示为图1.15(b)。用示波器作为接收模块,可以查看输出波形为正弦波。
图7.15 (a) 模块参数设置 (b) 从工作空间获取数据模块 |
“Data”的输入有几种,可以是矩阵、包含时间数据的结构数组。“From Workspace”模块的接收模块必须有输入端口,“Data”矩阵的列数应等于输入端口的个数+1,第一列自动当成时间向量,后面几列依次对应各端口。
t=0:0.1:2*pi;
y=sin(t);
y1=[t;y];
save Ex0702 y1 %保存在“Ex0702.mat”文件中
(4) 从文件获取数据(From file)
从文件获取数据模块是指从mat数据文件中获取数据为系统的输入。
图7.16 From File参数设置 |
y=sin(t);
y1=[t;y];
save Ex0702 y1 %保存在“Ex0702.mat”文件中
然后将“From File”模块的参数设置对话框打开,如图1.16所示,在“File name”栏填写“Ex0702.mat”,单击“OK”按钮完成。用示波器作为接收模块,可以查看输出波形。
(5) 传递函数(Transfer function)
图7.18 |
图7.17 传递函数模块参数设置 |
传递函数模块是用来构成连续系统结构的模块,其模块参数对话框如图1.17所示。
在上图中设置“Denominator”为“[1 1.414 1]”,则在模型窗口中显示为如图1.18所示。
(6) 示波器(Scope)
示波器模块是用来接收输入信号并实时显示信号波形曲线,示波器窗口的工具栏可以调整显示的波形,显示正弦信号的示波器如图1.19所示。
打开参数对话框 |
纵坐标的自动刻度 |
X-Y坐标变焦 |
X坐标变焦 |
图7.19 示波器窗口 |
把当前的坐标设置保存 |
浮动示波器 |
恢复保存过的坐标设置 |
Y坐标变焦 |
2. 模块属性设置
每个模块的属性对话框的内容都相同,如图1.22所示。
图7.22 模块的属性设置 |
(1) 说明(Description)
对模块在模型中用法的注释。
(2) 优先级(Priority)
规定该模块在模型中相对于其它模块执行的优先顺序。
(3) 标记(Tag)
图7.23 模块的属性格式字符串 |
(4) 调用函数(Open function)
当用户双击该模块时调用的MATLAB函数。
(5) 属性格式字符串(Attributes format string)
指定在该模块的图标下显示模块的哪个参数和格式。
1.5复杂系统的仿真与分析
Simulink的模型实际上是定义了仿真系统的微分或差分方程组,而仿真则是用数值解算法来求解方程。
1.5.1仿真的设置
在模型窗口选择菜单“Simulation”à“Simulation parameters…”,则会打开参数设置对话框,如图1.24所示。
图7.24 Solver参数设置 |
1. Solver页的参数设置
(1) 仿真的起始和结束时间
仿真的起始时间(Start time)
仿真的结束时间(Stop time)
(2) 仿真步长
仿真的过程一般是求解微分方程组,“Solve options”的内容是针对解微分方程组的设置。
(3) 仿真解法
Type的右边:设置仿真解法的具体算法类型。
(4) 输出模式
根据需要选择输出模式(Output options),可以达到不同的输出效果。
2. Workspace I/O(工作空间输入输出)页的设置
如图1.25所示,可以设置Simulink从工作空间输入数据、初始化状态模块,也可以把仿真的结果、状态模块数据保存到当前工作空间。
图7.25 Workspace I/O参数设置 |
(1) 从工作空间装载数据(Load from workspace)
(2) 保存数据到工作空间(Save to workspace)
§ Time栏
勾选Time栏后,模型将把(时间)变量以在右边空白栏填写的变量名(默认名为tout)存放于工作空间。
§ States栏
勾选States栏后,模型将把其状态变量在右边空白栏填写的变量名(默认名为xout)存放于工作空间。
§ Output栏
如果模型窗口中使用输出模块“Out”,那么就必须勾选Output栏,并填写在工作空间中的输出数据变量名(默认名为yout)。
§ Final state栏
Final state栏的勾选,将向工作空间以在右边空白栏填写的名称(默认名为xFinal),存放最终状态值。
(3) 变量存放选项(Save options)
Save options必须与Save to workspace配合使用。
1.5.2连续系统仿真
【例1.3】建立二阶系统的仿真模型。
方法一:
输入信号源使用阶跃信号,系统使用开环传递函数 ,接受模块使用示波器来构成模型。
(1) 在“Sources”模块库选择“Step”模块,在“Continuous”模块库选择“Transfer Fcn”模块,在“Math Operations”模块库选择“Sum”模块,在“Sinks”模块库选择“Scope”。
(2) 连接各模块,从信号线引出分支点,构成闭环系统。
图7.26 Sum参数设置 |
(3) 设置模块参数,打开“Sum”模块参数设置对话框,如图1.26所示。将“Icon shape”设置为“rectangular”,将“List of signs”设置为“|+-”,其中“|”表示上面的入口为空。
“Transfer Fcn”模块的参数设置对话框中,将分母多项式“Denominator”设置为“[1 0.6 0]”。
将“Step”模块的参数设置对话框中,将“Step time”修改为0。
(4) 添加信号线文本注释
双击信号线,出现编辑框后,就输入文本。则模型如图1.27所示。
图7.27 二阶系统模型 |
(5) 仿真并分析
单击工具栏的“Start simulation”按钮,开始仿真,在示波器上就显示出阶跃响应。
在Simulink模型窗口,选择菜单“Simulation”——“Simulation parameters…”命令,在“Solver”页将“Stop time”设置为15,然后单击“Start simulation”按钮,示波器显示的就到15秒结束。
打开示波器的Y坐标设置对话框,将Y坐标的“Y-min”改为0,“Y-max”改为2,将“Title”设置为“二阶系统时域响应”,则示波器如图1.28所示。
图7.28 示波器显示 |
方法二:
(1) 系统使用积分模块(Integrator)和零极点模块(zero-pole)串联,反馈使用“Math Operations”模块库中的“Gain”模块构成反馈环的增益为-1。
(2) 连接模块,由于“Gain”模块在反馈环中,因此需要使用“Flip Block”翻转该模块。
(3) 设置模块参数,将“zero-pole”模块参数对话框中的“Zeros”栏改为“[]”,将“Poles”栏改为[-0.6]。
图7.29 二阶系统模型 |
将“Gain”模块的“Gain”参数改为-1。模型如图1.29所示。
如果将示波器换成“Sinks”模块库中的“Out”模块 ;然后在仿真参数设置对话框的“Workspace I/O” 页(工作空间输入输出),将“Time”和“Output”栏勾选,并分别设置保存在工作空间的时间量和输出变量为“tout”和“yout”。仿真后在工作空间就可以使用这两个变量来绘制曲线,如图1.30所示:
plot(tout,yout)
图7.30 plot绘制的时域响应波形 |
1.5.3离散系统仿真
【例1.4】控制部分为离散环节,被控对象为两个连续环节,其中一个有反馈环,反馈环引入了零阶保持器,输入为阶跃信号。
创建模型并仿真:
(1) 选择一个“Step”模块,选择两个“Transfer Fcn”模块,选择两个“Sum”模块,选择两个“Scope”模块,选择一个“Gain”模块,在“Discrete”模块库选择一个“Discrete Filter”和一个“Zero-Order Hold”模块。
(2) 连接模块,将反馈环的“Gain”模块和“Zero-Order Hold”模块翻转。
(3) 设置参数,“Discrete Filter”和“Zero-Order Hold”模块的“Sample time”都设置为0.1s。
图7.31离散系统框图 |
(4) 添加文本注释,系统框图如图1.31所示。
(5) 设置颜色,Simulink为帮助用户方便地跟踪不同采样频率的运作范围和信号流向,可以采用不同的颜色表示不同的采样频率,选择菜单“Format”à“Sample time color”,就可以看到不同采样频率的模块颜色不同。
(6) 开始仿真,在Simulink模型窗口,选择菜单“Simulation”à“Simulation parameters…”,将“Max step size”设置为0.05s,则两个示波器“Scope”和“Scope1”的显示如图1.32所示。
图7.32 T=Tk=0.1 (a) d(k)示波器显示 (b) y(t)示波器显示 |
可以看出当T=Tk=0.1时系统的输出响应较平稳。
图7.33 T=0.6 Tk=0.1 (a) d(k)示波器显示 (b) y(t)示波器显示 |
(7) 修改参数,将“Discrete Filter”模块的“Sample time”设置为0.6s,“Zero-Order Hold”模块的“Sample time”不变;选择菜单“Edit”à“Update diagram”命令修改颜色,就可以看到“Discrete Filter”模块的颜色变化了;然后开始仿真,则示波器显示如图1.33所示。
可以看出当T=0.6而Tk=0.1时,系统出现振荡。
(8) 修改参数,将“Discrete Filter” 和“Zero-Order Hold”模块的“Sample time”都设置为0.6s,更新框图颜色,开始仿真,则示波器显示如图1.34所示。
图7.34 T=0.6 Tk=0.1 (a) d(k)示波器显示 (b) y(t)示波器显示 |
当T=Tk=0.6时,系统出现强烈的振荡。
1.5.4仿真结构参数化
当系统参数需要经常改变或由函数得出时,可以使用变量来作为模块的参数。
【例1.5】将【例1.4】中的模块结构参数用变量表示,结构图如图1.35所示。
图7.35离散系统框图 |
将参数设置放在Ex0705_1.m文件中:
% Ex0705_1 参数设置
T=0.1; %控制环节采样时间
Tk=0.6; %零阶保持器采样时间
k=0.03; %Gain增益
zt1=1.44;zt2=-1.26;zt3=1;zt4=-1;
tf11=6.7;tf12=0.1;tf13=1;
tf21=1;tf22=3;tf23=1
在MATLAB工作空间运行该文件:
Ex0705_1
1.6子系统与封装
1.6.1建立子系统
子系统类似于编程语言中的子函数。建立子系统有两种方法:在模型中新建子系统和在已有的子系统基础上建立。
1. 在已建立的模型中新建子系统
【例1.6】打开【例1.4】建立的模型,将控制对象中的第一个连续环节中的反馈环建立为一个子系统。
在模型窗口中,将控制对象中的第一个连续环节的反馈环用鼠标拖出的虚线框框住,选择菜单“Edit”à“Create subsystem”,则系统如图1.36所示。
图7.36 子系统建立 |
双击子系统,则会出现“Subsystem”模型窗口,如图1.37所示。可以看到子系统模型除了用鼠标框住的两个环节,还自动添加了一个输入模块“In1”和一个输出模块“Out1”。
2. 在已有的子系统基础上建立
【例1.7】在【例1.6】的基础上建立新子系统,将【例1.6】模型的控制对象中的第一个对象环节整个作为一个子系统。
将图1.36中的所有对象都复制到新的空白模型窗口中,双击打开子系统“Subsystem”,则出现如图1.37所示的子系统模型窗口,添加模型构成反馈环形成闭环系统,如图1.38所示。
图7.38 子系统模块窗口 |
图7.37 子系统模型窗口 |
然后将系统模型修改为如图1.39所示的系统。
图7.39 包含子系统的模型 |
创建的子系统可以打开和修改,但不能再解除子系统设置。
1.6.2条件执行子系统
1. 使能子系统(Enabled Subsystem)
图7.41 (a) “Enable”模块参数设置 (b) “Out1”模块参数设置 |
【例1.8】建立一个用使能子系统控制正弦信号为半波整流信号的模型。
模型由正弦信号“Sine wave”为输入信号源,示波器“Scope”为接收模块,使能子系统“Enabled Subsystem”为控制模块,
连接模块,将“Sine wave”模块的输出作为“Enabled Subsystem”的控制信号,模型如图1.42(a)所示。
开始仿真,由于“Enabled Subsystem”的控制为正弦信号,大于零时执行输出,小于零时就停止,则示波器显示为半波整流信号,示波器的显示如图1.42(b)所示。
图7.42 (a) 使能子系统模型 (b) 示波器显示 |
2. 触发子系统(Triggered Subsystem)
图7.43 (a) 触发子系统模型 (b) 示波器显示 |
【例1.9】建立一个用触发子系统控制正弦信号输出阶梯波形的模型。
模型由正弦信号“Sine wave”为输入信号源,示波器“Scope”为接收模块,触发子系统“Triggered Subsystem”为控制模块,选择“Sources”模块库中的“Pulse Generator”模块为控制信号。
连接模块,将“Pulse Generator”模块的输出作为“Triggered Subsystem”的控制信号,模型如图1.43(a)所示。
开始仿真,由于“Triggered Subsystem”的控制为“Pulse Generator”模块的输出,示波器输出如图1.43(b)所示。
3. 使能触发子系统(Enabled and Triggered Subsystem)
使能触发子系统就是触发子系统和使能子系统的组合,含有触发信号和使能信号两个控制信号输入端,触发事件发生后,Simulink检查使能信号是否大于0,大于0就开始执行。
1.6.3子系统的封装
1. 封装子系统的步骤
(1) 选中子系统双击打开,给需要进行赋值的参数指定一个变量名;
(2) 选择菜单“Edit”à“Mask subsystem”,出现封装对话框;
(3) 在封装对话框中的设置参数,主要有“Icon”、“Parameters”、“Initialization”和“Documentation”四个选项卡。
2. Icon选项卡
Icon选项卡用于设定封装模块的名字和外观,如图1.44所示。
图7.44 Icon参数设置 |
(1) Drawing commands栏
用来建立用户化的图标,可以在图标中显示文本、图像、图形或传递函数等。在Drawing commands栏中的命令如上图中“Examples of drawing commands”的下拉列表所示,包括plot、disp、text、port_label、image、patch、color、droots、dploy和fprintf。
(2) Icon Options栏
用于设置封装模块的外观。
3. Parameters选项卡
Parameters选项卡用于输入变量名称和相应的提示,如图1.45所示。
图7.45 Parameters参数设置 |
(1) Add 、Delete 、Move up 和Move down 按钮
用于添加、删除、上移和下移输入变量。
(2) Dialog Parameters
§ Prompt:输入变量的含义,其内容会显示在输入提示中。
§ Variable:输入变量的名称。
§ type:给用户提供设计编辑区的选择。“Edit”提供一个编辑框;“Checkbox”提供一个复选框;“Popup”提供一个弹出式菜单。
§ Evaluate:用于配合“type”的不同选项提供不同的变量值,有两个选项“Evaluate”和“Literal”,其含义如表1.6所示。
表1.6 Assignment选项的不同含义
Evaluate type |
on |
off |
Edit |
输入的文字是程序执行时所用的变量值 |
将输入的内容作为字符串 |
Checkbox |
输出1和0 |
输出为on或off |
Popup |
将选择的序号作为数值,第一项则为1 |
将选择的内容当作字符串 |
(3) Options for selected parameter
§ Pops:当“type”选择“Popup”时,用于输入下拉菜单项。
§ Callback:用于输入回调函数。
4. Initialization选项卡
Initialization选项卡用于初始化封装子系统。
5. Documentation选项卡
Documentation选项卡用于编写与该封装模块对应的Help和说明文字,分别有“Mask type”、“Mask Description”和“Mask help”栏。
(1) Mask type栏
用于设置模块显示的封装类型。
(2) Mask Description栏
用于输入描述文本。
(3) Mask help栏
用于输入帮助文本。
6. 按钮
设置参数设置对话框中的“Apply”按钮用于将修改的设置应用于封装模块;“Unmask”按钮用于将封装撤销,则双击该模块就不会出现定制的对话框。
【例1.10】创建一个二阶系统,并将子系统进行封装。
创建一个二阶系统,将其闭环系统构成子系统,并封装将阻尼系数zeta和无阻尼频率wn作为输入参数。
(1) 创建模型,并将系统的阻尼系数用变量zeta表示,无阻尼频率用变量wn表示,如图1.46所示。
图7.46 二阶系统模型 |
(2) 用虚线框框住反馈环,选择菜单“Edit”à“Create Subsystem”,则产生子系统,如图1.47所示。
图7.47 子系统模型 |
(3) 封装子系统,选择菜单“Edit”à“Mask subsystem”,出现封装对话框,将zeta和wn作为输入参数。
在Icon选项卡中设置的“Drawing commands”栏中写文字并画曲线,命令如下:
disp('二阶系统')
plot([0 1 2 3 10],-exp(-[0 1 2 3 10]))
在Parameters选项卡中,单击“Add” 按钮添加两个输入参数,设置“Prompt”分别为“阻尼系数”和“无阻尼振荡频率”,并设置“type”栏分别为“Popup”和“edit”,对应的“Variable”为“zeta”和“wn” ,设置“Popups”为“0 0.3 0.5 0.707 1 2”,如图1.48(a)所示。
在Initialization选项卡初始化输入参数,如图1.48(b)所示。
图7.48 (a) Parameters选项卡 (b) Initialization选项卡 |
在Documentation选项卡中输入提示和帮助信息,如图1.48(c)所示。
图7.48(c) Documentation选项卡 |
单击“OK”按钮,完成参数设置,然后双击该封装子系统,则出现如图1.49(a)所示的封装子系统,双击该子系统出现图1.49(b)所示的输入参数对话框,在对话框中输入“阻尼系数”zeta和“无阻尼振荡频率”wn的值,再不需要为子系统中的每个模块分别打开参数设置对话框了。
图7.49 (a) 封装子系统外观 (b) 封装子系统参数输入对话框 |
1.7用MATLAB命令创建和运行Simulink模型
7.1.1用MATLAB命令创建Simulink模型
1. Simulink模型与文件
(1) 创建新模型
new_system命令用来在MATLAB的工作空间创建一个空白的Simulink模型。
语法:
new_system(‘newmodel’,option) %创建新模型
说明:‘newmodel’为模型名;option选项可以是’Library’和’Model’两种,也可以省略,默认为’Model’。
(2) 打开模型
open_system命令用来打开逻辑模型,在Simulink模型窗口显示该模型。
语法:
open_system(‘model’) %打开模型
说明:‘model’为模型名。
(3) 保存模型
save_system命令用来保存模型为模型文件,扩展名为.mdl。
语法:
save_system(‘model’,文件名) %保存模型
说明:‘model’为模型名可省略,如果不给出模型名,则自动保存当前的模型;文件名指保存的文件名,是字符串,也可省略,如果不省略则保存为新文件。
【例1.11】用MATLAB命令创建新模型。
new_system('Ex0711model') %创建逻辑模型
open_system('Ex0711model') %打开模型
save_system('Ex0711model','Ex0711') %保存模型文件
2. 添加模块和信号线
(1) 添加模块
使用add_block命令在打开的模型窗口中添加新模块。
语法:
add_block(’源模块名’,’目标模块名’,’属性名1’,属性值1,’属性名2’,属性值2,…)
说明:’源模块名’为一个已知的库模块名,或在其它模型窗口中定义的模块名,Simulink自带的模块为内在模块,例如正弦信号模块为’built-in/Sine Wave’;’目标模块名’为在模型窗口中使用的模块名。
(2) 添加信号线
模块需要用信号线连接起来,添加信号线使用add_line命令。
语法:
add_line(’模块名’,’起始模块名/输出端口号’, ’终止模块名/输入端口号’)
add_line(’模块名’,m)
说明:’模块名’为在模型窗口中的模块名;m为有两列元素的矩阵,每列给出一个转折点坐标。
【例1.11续】用MATLAB命令添加四个模块连接成一个二阶系统模型。
add_block('built-in/Step','Ex0711/Step','position',[20,100,40,120]) %添加阶跃信号模块
add_block('built-in/Sum','Ex0711/Sum','position',[60,100,80,120]) %添加Sum模块
add_block('built-in/Transfer Fcn','Ex0711/Fcn1','position',[120,90,200,130])
%添加传递函数模块
add_block('built-in/Scope','Ex0711/Scope','position',[240,100,260,120]) %添加示波器模块
add_line('Ex0711','Step/1','Sum/1') %添加连线
add_line('Ex0711','Sum/1','Fcn1/1')
add_line('Ex0711','Fcn1/1','Scope/1')
add_line('Ex0711','Fcn1/1','Sum/2')
程序分析:'position'为位置属性,模块名为'Ex0711'。
则出现如图1.50所示的模型。
图7.50 二阶系统模型 |
3. 设置模型和模块属性
(1) 模型属性的获得
【例1.11续】获得模型属性和各属性的含义。
f1=simget('Ex0711')
f1 =
AbsTol: 'auto' %绝对允许误差限
Debug: 'off' %是否允许跟踪调试
Decimation: 1 %输出位数,每个1点输出1次
DstWorkspace: 'current' %输出量工作空间
FinalStateName: '' %状态变量名
FixedStep: 'auto' %定步长
InitialState: [] %初始状态向量
InitialStep: 'auto' %初始步长
MaxOrder: 5 %最高算法阶次
SaveFormat: 'Array' %变量类型
MaxDataPoints: 1000 %最大返回点数
MaxStep: 'auto' %最大步长
MinStep: [] %最小步长
OutputPoints: 'all' %输出点
OutputVariables: 'ty' %输出变量
Refine: 1 %插值点
RelTol: 0.0010 %相对误差
Solver: 'ode45' %仿真算法
SrcWorkspace: 'base' %输入量工作空间
Trace: '' %是否逐步显示
ZeroCross: 'on' 检测过零点
(2) 设置模型属性
(3) 设置模块和信号线属性
【例1.11续】设置各模块的属性,建立一个与【例1.3】模型参数相同的二阶系统模型。
set_param('Ex0711','StopTime','15') %设置采样停止时间
set_param('Ex0711/Step','time','0') %设置阶跃信号上升时间
set_param('Ex0711/Sum','Inputs','+-') %设置Sum模块信号的符号
set_param('Ex0711/Fcn1','Denominator','[1 0.6 0]') %设置传递函数分母
则系统模型框图如图1.51所示。
图7.51 二阶系统模型 |
4. 删除模块和信号线
(1) 删除模块
例如删除示波器模块则使用:
delete_block('Ex0711/Scope')
(2) 删除信号线
7.1.2用MATLAB命令运行Simulink模块
使用sim命令来完成,在命令窗口就可以方便地对模型分析和仿真。
语法:
[t,x,y]=sim(‘model’,timespan,options,ut) %利用输入参数进行仿真,输出矩阵
[t,x,y1,y2,…]=sim(‘model’,timespan,options,ut)%利用输入参数进行仿真,逐个输出
说明:‘model’为模型名;timespan是仿真时间区间,可以是[t0,tf]表示起始时间和终止时间,也可以是[],利用模型对话框设置时间,如果是标量则指终止仿真时间;options参数为模型控制参数;ut为外部输入向量。t为时间列向量;x为状态变量构成的矩阵;y为输出信号构成的矩阵,每列对应一路输出信号。timespan 、options和ut参数都可省略。
【例1.11续】运行二阶系统的阶跃响应,如图1.50所示。
[t,x,y]=sim('Ex0711',[0,15]);
plot(t,x(:,2))
图7.50 二阶系统时间响应 |
1.8以Simulink为基础的模块工具箱简介
在打开Simulink时出现的界面中,如前面的图1.1所示左侧的模块库和工具箱(Block and Toolboxes)栏中列出了各领域开发的仿真环节库。
主要的仿真环节库有:
§ 控制系统工具箱(Control System Toolbox)
§ 通信模块工具箱(Communications Blockset )
§ 数字信号处理模块工具箱(DSP Blockset)
§ 非线性控制模块工具箱(NCD Blockset)
§ 定点处理模块工具箱(Fixed-Point Blockset)
§ 状态流(StateFlow)
§ 系统辨识模块工具箱(System ID Blocks)
§ 神经网络模块工具箱(Neural Network Blockset)
§ 模糊逻辑工具箱(Fuzzy Logic Toolbox)
发表评论 评论 (0 个评论)