Simulink的使用.docx
《Simulink的使用.docx》由会员分享,可在线阅读,更多相关《Simulink的使用.docx(16页珍藏版)》请在冰豆网上搜索。
![Simulink的使用.docx](https://file1.bdocx.com/fileroot1/2022-12/9/af3ae78b-e3e1-4df5-8522-423a331372f1/af3ae78b-e3e1-4df5-8522-423a331372f11.gif)
Simulink的使用
Simulink的使用
Matlab的Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。
它使得Matlab的功能得到进一步的扩展,这种扩展表现在三个方面:
(1)实现了可视化建模,在Windows环境下,用户可以通过简单的鼠标操作建立直观的系统模型,进行分析仿真。
(2)实现了多种环境间的文件共享与数据交换,甚至能够与硬件实现实时信息交换。
(3)把理论研究与工程实现有机地结合在一起。
Simulink支持连续、离散及混合的线性系统和非线性系统,并且支持多采样率系统。
其可视化建模体现在为用户提供了用方框图进行系统建模的图形接口.
Simulink具有一个较为完整的模型库,包括源节点(Source)、阱节点(Sink)、线性环节(Linear)、非线性环节(Nonlinear)、连线与接口(Connections)和其他环节(Extra),用户还可以根据需要定制和创建自己的模块。
Simulink模型具有分层的等级结构,用户可以采用由上到下或从下到上的方式构建系统模型。
可以从全局的角度来考察系统,然后用鼠标双击其中的子系统模块,来查看下一级的内容,依此类推,可以看到系统模型的全部细节。
这种方式帮助用户洞察整个系统模型的体系结构及其各个部分的相互关系。
定义完一个模型后,用户可以通过Simulink的菜单或者Matlab命令对它进行仿真。
可以在仿真的同时显示仿真结果,非常实用。
除此之外,还可以在用户改变参数之后迅速观察到系统中发生的变化。
Simulink的仿真结果可以输入到Matlab工作空间,进行事后处理或者可视化输出。
Simulink的实时工作间(Real-TimeWorkshop,以后简称RTW)直接从Simulink的系统框图自动生成C语言代码,这样一来,就允许在更广的计算机平台(包括实时硬件)上执行连续、时间离散及混合系统模型。
SimulinkRTW的Ada扩展的作用是直接从Simulink的系统框图自动生成Ada浯言代码。
1.启动Simulink
启动Simulink通常有三种方式:
1)直接从Matlab指令窗口选取菜单File|New|Modal命令,Matlab将会打开Simulink库浏览器和名为untitled的模型窗口。
2)在Matlab命令窗口中键人Simulink命令,Matlab将会打开Simulink库浏览器。
3)点击Matlab命令窗口工具条的
图标,启动Simulink库浏览器。
由启动Simulink的三种方式,要新建一个模型文件,至少可以采用两种方式:
1)直接从Matlab指令窗口选取菜单File|New|Modal命令。
2)先启动Simulink库浏览器,然后点击Simulink库浏览器的工具条中的“新建模型”图标,建立新的模型文件。
如果模型文件已经存在,至少有三种方法打开模型文件:
1)从Matlab指令窗口选取菜单File|Open命令。
2)先启动Simulink库浏览器,然后点击Simulink库浏览器的工具条中的“打开模型”图标,打开已经存在的模型文件,对它进行编辑、修改和仿真。
3)在Matlab命令窗口中键人模型文件名称,不需要.mdl后缀。
Simulink用不同的窗口显示模块库、模型号和仿真输出图形结果.这些窗口不是Matlab图形窗口,不能用句柄图形命令来操作。
2.Simulink例
本节通过一个实例,先简单地介绍一下Simulink环境,然后介绍如何使用Simulink进行系统建模、系统仿真。
现在需要对一个正弦信号积分,显示正弦信号与积分结果,该模型的框图如图1所示。
图1目标正弦积分模型
要构建一个模型,必须先启动Matlab。
然后在Matlab命令窗口下键人Simulink命令,便打开一个名为SimulinkLibraryBrowser的Simulink模块库浏览器。
将鼠标指针移到Simulink库之上.点击鼠标右键,将出现弹出菜单OpentheSimulinkLibrary;点击左键选择打开,则启动Simulink库的窗口界面。
点击新建模型工具条按钮,创建一个新的系统模型,此时Simulink打开一个名为untitled的空白窗口.
将新模型窗口移到屏幕的右侧,使屏幕上能够同时看到窗口的内容和模块库的内容。
从模型的功能框图可以看出,该模型用到了如下模块库:
源节点库(正弦波模块)。
阱节点库(观测器模块)。
连续信号库(积分器模块)
信号与系统库(多路转换器模块)。
现在需要将所需的模块逐一拷贝到模型窗口中。
在Simulink库浏览器中,将Simulink库浏览树展开,点击Sources选择源节点库,再在右边找到正弦波模块。
将图中的Scope拖放到新建的模型窗口中。
用同样的方法拷贝其他几个模块。
每个模块的图标外面都有符号“>”,表示信号的输入输出,这些端口符号在模块连线以后将消失。
进行模块间连线。
将鼠标指针移到模块端口附近,鼠标指针变为“+”,按下左键,拖动鼠标到另一连接点,松开左键即可。
在模块连线中,有一条线必须分支,分支线的画法与普通线的画法略有不同。
先将鼠标指针移到要分支的线上,按住Ctrl键,再按下左键,将鼠标拖到另一连接点,松开左键即可。
为方便观察各个模块的名称及其数据,鼠标选取菜单View|Blockdatatipsoptions的三个选项。
此时将鼠标指针停在正弦波模块上,弹出窗口显示相应模块的名称、参数名称及参数数值、用户定义字符串。
如果需要修改模块的属性,只需双击该模块,即可在其属性窗口中任意修改。
在本例中,所有模块的属性都使用缺省值,关于如何设置各个模块的属性,后面会专门讨论。
选择窗口菜单Simulation|Start,执行模型仿真。
3.构建模型
●标准模块的选取
构建Simulink模型的许多操作,如拷贝模块或删除连线,都需要准确地选取这些对象。
选取单一对象,鼠标点击即可。
选取多个对象,其操作是按住Shift键,用鼠标逐一点击需要选取的对象。
另外,模型窗口的菜单Edit|SelectAll命令可选择模型窗口中所有的对象。
●模块的编辑
模块的编辑包括模块的移动、拷贝、剪切、粘贴和删除。
所有这些操作都与Windows环境下的操作一样。
●模块属性的修改
对模块进行多种格式设置,格式设置操作均由菜单Format中的命令完成。
下面分别介绍几种常用的操作。
1.改变模块的方向
菜单命令“Format|FlipBlock’,旋转模块180度;菜单命令“Format|RotateBlock",顺时针旋转模块90度。
2.改变模块的尺寸
该操作与在Word中改变图片尺寸的操作一模一样,先选中对象,再移动鼠标到适当位置.按下左键,拖动员标即可。
3.改变模块的名称·
在前面的例子中我们已经看到,模块下面都有相应的标题名称,用户可以根据实际情况对模块的标题进行修改。
其操作相当简单,用鼠标点击模块标题名称,Simulink在模块名称外置一方框,删除现有标题,输入新标题,中西文皆可,最后在窗口的其他位置点击鼠标,修改工作完成。
菜单命令Format|FlipName改变模块名称的位置。
菜单命令Format|HideName/Format|ShowName,显示或隐藏模块名称。
菜单命令Format|Font,显示字体设置对话框,改变模块的字体。
在很多情况下,我们希望在系统框图中的适当位置显示各个模块的参数。
Simulink提供了在模块图标下显示对应参数的功能,在实现时至少有两种方法。
第一种方法:
先选中模块,再运行菜单命令Edit|Blockproperties…显示模块属性对话框,然后在Attributesfrmatstring一栏中输入属性格式化字符串。
在模块上点击鼠标右键,弹出菜单中同样有Blockproperties…项,其功能与前者一样。
第二种方法:
使用函数set_param设置模块的AttributesFormatString为属性格式化字符串。
属性格式化字符串是内嵌参数名称的任意文本字符串(textstring)。
内嵌参数名称由参数名称前力口上“%<”、后面加上“>”构成,如“%”。
Simulink将属性格式化字符串中每个参数名称替换为对应的参数值,显示在模块图标下面。
可以使用换行符(\n)将每个参数显示为单独的一行,如对一个正弦波模块:
.
Amp=%\nFreq=%
如果参数值不是字符串或整数,Simulink将参数值显示为“N/S”;如果参数名无效,则显示为“?
?
?
”。
●模块的连接
将鼠标指针置于模块间连线的适当位置,按下鼠标右键,鼠标指针变为“+”,拖动鼠标到合适的位置,释放右键,窗口中出现一条箭头线;再从此箭头开始,按住鼠标右键或左键,拖动鼠标到合适的位置,依此类推,直到完成整个“折”线。
●构建子系统
在系统模型不断变大、变复杂时,可以采用定义子系统的方式简化系统框图。
运用子系可以减少模型窗口中显示模块的数目,并可将功能相关的模块集中在一起,使建立的系统框层次结构化。
可以采用两种方法构建子系统:
其一是在系统模型中添加Subsystem模块,然后将模块打添加内容;其二是先添加子系统中的模块,再将这些模块组合成子系统。
本小节就分别介绍两种方法。
1.添加Subsystem模块方法
这种方法构建子系统有三个步骤:
1)从信号与系统库中拷贝添加Subsystem模块。
2)双击Subsystem打开Subsystem模块。
3)同构建普通系统一样,为新建的子系统添加所需的模块。
用Input模块表示从子系统外输入;用Output模块表示子系统对外的输出.
2.由现存模块组合子系统
由现存模块组合子系统的操作可以分为两个步骤:
1)将所有希望包括在子系统中的模块和连线选择在同一个框中,注意不可以逐一单独选择,不可以用SelectAll命令.
2)从Edit菜单中选择CreateSubsystem命令,Simulink将选中的模块用一个Subsystem模块代替.
如果打开Subsystem模块,可以看到其内容。
注意Simalink添加了Input和Output模块,表示子系统的输入输出。
●模型文件的保存及其格式
构建好一个模型后,选择菜单命令File|Save或File|SaveAs将模型存盘。
文件是以ASCII形式存储的.mdl文件,文件中包含了该模型的所有信息,既包括数学模型内涵,也包括外部框图的形状位置信息。
如果是第一次保存某个模型,菜单命令Pile|Save将激活标准的文件保存对话框,指定文件路径与名称,点击“保存”按钮即可。
值得注意的是模型文件的名称必须以字母开头,只能使用字母、数字和下划线,长度不大于31个字符。
由于模型文件是以ASCII形式存储的,所以可以用type指令查看其内容,也可以用字处理器对它进行编辑修改。
为了对模型文件有一个比较清楚的了解,现对其简要介绍。
准确地说,模型文件是一种结构化的ASCII文件,包括文件关键字和描述模型的参数、参数值,其结构如下:
Model{
<模型参数名称><模型参数值>
...
BlockDefaults{
<模块参数名称><模块参数值>
...
}
AnnotationDefaults{
<标注参数名称><标注参数值>
...
}
System{
<系统参数名称><系统参数值>
...
Block{
<模块参数名称><模块参数值>
...
}
Line{
<线条参数名称><线条参数值>
Branch{
<分支参数名称><分支参数值>
...
}
}
Annotation{
<标注参数名称><标注参数值>
...
}
}
}
可以用记事本打开某个模型文件看一看,并且动手适当修改。
虽然可以用文字编辑器对模型文件进行修改,而且在有些场合确实比较方便,但是建议不要这么做,除非对此有十分的把握。
●框图的打印
菜单命令File|Print执行打印框图的操作。
当我们运行打印命令时,Simulink首先显示打印对话框,该对话框允许选择需要打印的内容。
打印工作支持以下选项:
●打印当前系统。
●打印当前系统与模型中所有级别比它高的系统。
●打印当前系统与模型中所有级别比它低的系统。
●打印模型中所有的系统。
●打印时为每一框图添加边框。
当选择选项Currentsystemandbelow或Allsystems时,打印对话框中的两个复选框可用.
选择复选框“Frame”,打印时为每一框图添加题头边框。
先用Matlab边框编辑器定义一个有自己特色的题头边框,然后在Frame复选框后指定边框文件的路径,即可在模型框图上添加漂亮的边框。
4.运行Simulink
(1)仿真参数对话框
在介绍运行Simulink之前,先介级仿真参数对话框。
在仿真参数对话框中对各种参数进行设置与使用sim和simset命令的效果是一样的。
Simulation|SimulationParameters
仿真参数设置对话框,包含有5页不同的内容(如果没有安装RTW,将只有前4页内容)。
1.Solver页
Solver页包括三个方面的设置内容:
设置仿真的起止时间;选择算解程序并指定参数;选择输出选项。
仿真时间的缺省值为0秒开始至10秒结束。
注意仿真时间与真实时间是不一样的。
比方说运行一个10秒的仿真通常就不需要10秒时间,仿真实际需要的时间与很多因素有关,包括模型的复杂程度、算解程序的步长、计算机的速度等。
由于Simulink模型的仿真涉及到常微分方程的数值积分,对相同的问题、不同的算法会产生不同的效果,所以Simulink提供了多种算解程序,供用户根据系统的动态特性选择使用。
更为详细的介绍请单击help按钮查阅。
输出选项有三种选择项:
净化输出、产生附加输出、只产生特定输出。
当仿真输出数据过于粗糙时,净化输出将自动产生附加输出点。
净化系数是一个整数,指定任意时间点之间输出数据的数目。
缺省净化系数为1。
产生附加输出选项允许指定算解程序输出特定时间点的结果,当选择此项后,必须在OutputTimes栏中指定输出时间。
这种情况下,输出结果将输出与附加输出融合在一起。
只产生特定输出选项指定算解程序,只输出规定的时间点仿真结果。
例如,某仿真在以下时间点输出:
0,2.5,5,8.5,10
现选择净化输出,并指定净化系数为2,则产生如下时间点的输出:
0,1.25,2.5,3.75,5,6.75,8.5,9.25,10
如果选择产生附加输出,并指定附加输出时间为[0:
10],则产生如下时间点的输出:
0,1,3,4,5,6,7,8,9,10
以及其他一些时间点(取决于算解程序的步长)。
如果选择只产生指定输出,并指定附加输出时间为[0:
10],则产生如下时间点的输出:
1,1,3,4,5,6,7,8,9,10
而不再有其他的输出点。
2.WorkspaceI/O页
在Simulink中进行仿真运算时,可以直接从工作空间中输人数据和初始状态,也可以将仿真结果输出到工作空间的变量中。
所有这些都在仿真参数对话框的WorkspaceI/O页中进行设置,如图7-22所示。
该页的设置包括三部分内容,其一是指定从工作空间中加载的内容,包括输入与初始状态两项内容;其二是指定输出到工作空间的数据,包括时间、状态、输出和最终状态四项内容;其三是保存的选项。
图7-22仿真参数对话框WorkspaceI/O页
从工作空间中加载数据时,先选中Input复选框,然后即可在复选框右边的输入栏中输入已经在工作空间中定义好的数据。
当然用户最关心的是输人数据的格式,Simulink允许多种输入格式,可以是矩阵输入,带时间的结构输入,普通结构输入。
当使用外部矩阵输入时,如果系统模型有n个输人,那么输入矩阵必须是n+l列的。
例如,某模型有两个输入端,其中一个输入端接收两个信号,另一个输入端接收一个信号。
假设在工作空间中如下定义u和t:
t=(0:
0.1:
1);
u=[sin(t),cos(t),4*cos(t)];
现在为该模型指定外部输入,仅需选中Input复选框即可,因为参数设置对话框中为模型设置的外部输入缺省值为[t,u].
如果在输人数据中指定的是工作空间中的一个结构,同样是可以的。
此时的输入结构要求必须包含两个顶级字段:
time和signals,signals字段包含每个输入端对应的信号的子结构,每个子结构必须包含values字段,values字段为对应每个输入端的输入列矢量。
例如某系统模型有两个输入端,每个输入端输人一个信号。
假设在工作空间中如下定义输入矢量a:
a.time=(0:
0.1:
1)’;
a.signals
(1).values=sin(a.time);
a.signals
(2).values=cos(a.time);
现将a指定为该模型的外部输人,选定复选框Input,在其右边的输人框中键人字母a即可。
选定Time、States、Output复选框,并指定相应的返回变量名称,如果需要指定多个返回变量,在变量名称之间加上逗号即可。
在保存输出结果时,Simulink的采样率为模型的基采样速率。
如果希望改变输出结果的采样率,则必须在模型中使用一个名为了ToWorkspace的模块。
保存选项允许指定输出格式、限制输出数量。
3.Diagnostics页
通过Diagnostics(诊断)页,可以指定仿真过程中16种特殊事件和特定条件的理想动作:
不动作,告警或报错,如图7-23所示。
在本页中还提供仿真运算的两个选项:
一致性检查和边界检查。
一致性检查是检查SimulinkODE算解程序的某些假定的有效性的调试工具。
其主要作用是保证模型的S函数与Simulink内建模块遵循相同的规则。
由于一致性检查通常导致仿真性能显著下降,一般情况下将该项设置为off。
边界检查的作用是在仿真过程中,Simulink检查模块是否在分配的内存空间以外执行写操作.这种情况通常主要发生在当用户定义的S函数有bug时。
如果边界检查使能,则每次运行模型中的任意模块时均执行这一检查,其结果是显著降低模型仿真速度。
因此,为了避免不必要地降低仿真速度,仅当怀疑自定义S函数有bugfl寸才使这一选项使能。
4.Advanced页
Advanced页允许用户设置各种影响仿真性能的选项,如图7-24所示。
由于该页涉及的均属于仿真中的高级设置,读者在实际工作需要时,可查看帮助文档进行适当设置,这里不再详细介绍。
(2)用菜单命令运行仿真
用菜单命令运行仿真,首先选择菜单命令Simulation|Simulationparameters,这一命令的快捷键为Ctrl-E,对仿真参数进行设置。
在算解程序页设置仿真的起止时间、选择适当的算解程序、设置算解程序参数,并选择适当的输出选项。
在WorkspaceI/0页设置从Matlab的输入数据及格式,设置输出到Matlab的数据及相关限制;诊断页选择仿真过程中显示警告信息的级别层次:
在选择箅解程序并指定仿真参数之后,点击对话框底部的Apply按钮,使得所有设置生效,最后点击Close按钮结束设置。
选择菜单命令SimulationIStart开始仿真,这一命令的快捷键为Ctrl-T;菜单命令Simulation|Stop终止仿真,这一命令的快捷键同样为Ctrl—T。
这两个命令在模型窗口的工具条都有相应的按钮。
在仿真结束时,计算机有声音提示。
在系统模型的仿真过程中,我们总希望能够修改模型中的各个模块的参数,比方说改变正弦信号的频率和幅度,充分了解系统的性能。
在Simulink中,我们可以通过鼠标双击任意模块,在模块参数框中任意修改模块的参数指标。
仿真过程中,免不了要出错,Simulink在仿真过程中遇到错误即停止仿真,并显示诊断对话框。
点击Open按钮,显示模型错误所在。
(3)用命令行运行仿真
命令行运行仿真命令的完整语法为:
[t,x,y]=sim(model,timespan,options,ut);
所有参数中只有“model”是必须的。
命令set_param可以启动、终止、暂停、继续仿真。
而命令get_param则返回仿真的状态。
命令setparam的用法为:
set_param('sys',’SimulationCommand',’cmd')
其中’sys’为系统的名称,’cmd’为’start’、’stop’、’pause’、
’contlnu’和’update’之一。
命令getparam的用法为:
get_param(‘sys',’SimulationStatus')
该函数的返回值为'stopped’、’initializing’、’running’、
’paused’、’terminating’、’external’之一。
(4)Simulink的调试
Simulinkdebugger是一个定位诊断Simulink模型错误的工具,它允许单步执行仿真,并显示其中各个模块的状态与输入输出。
在Matlab6.0中,既可以采用传统的方式,在命令窗口调式仿真模型,也可以使用集成调试环境,这两种方式的实质是相同的。
为便于读者掌握Simulinkdebugger.
●命令窗口调试
在命令窗口中,有两种方法在调试器下启动模型,第一种方法是使用sldebug命令,第二种方法是使用sim命令设置调试属性。
例如现在调试一个名为deb的模型,就可以使用下面的命令:
sim('deb',[O,10],simset('debug',’on'))
或者
sldebug‘deb’
命令将deb模型调入内存,并且于第一个时间点暂停在第一个模块。
调试器启动模型框图中的初始模块及其相关的输出信号。
调试器还在Matlab命令窗口中打印出仿真开始时间,同时还打印出调试命令提示行。
如前面的命令即在启动模型的同时,还在Matlab命令窗口有如下输出:
>>sldebug’deb’
[Tm=0]**Start**Ofsystem‘deb’outputs
(sldebug@0:
0’deb/SineWave’):
现在,可以在调试命令提示行后输入适当的命令,获取调试帮助、单步运行仿真和其他的仿真调试任务。
●获取调试帮助
在调试命令提示行后输入help或?
,Maclab将打印出调试命令的简短帮助。
如果需要详细的帮助,可以查看相关的文档。
●单步调试
命令step将当前调试的仿真运行到下一个模块。
在执行完某个模块之后,调试器在Matlab命令窗口打印出该模块的输入(用U表示)输出(用Y表示),并再次显示调试命令提示行,准备下一步调试。
当一轮仿真结束即将开始下一轮仿真时,调试器暂停在第一个模块前,并打印当前仿真时间,以作为开始下一轮仿真运算的提示。
(sldebug@0:
0‘deb/SineWave’):
step
Y1=[0.5646424733950355]
(sldebug@0:
1‘deb/Gain’):
step
U1=[0.5646424733950355]
Y1=[1.693927420185106]
[Tm=0.8]**Sta