simulink.docx
《simulink.docx》由会员分享,可在线阅读,更多相关《simulink.docx(18页珍藏版)》请在冰豆网上搜索。
![simulink.docx](https://file1.bdocx.com/fileroot1/2023-2/2/6375a179-1cbe-419d-89f3-336fd93a2b75/6375a179-1cbe-419d-89f3-336fd93a2b751.gif)
simulink
Matlabsimulink的使用
MATLABSimulink仿真软件
Simulink操作基础
系统仿真模型
系统的仿真
使用命令操作对系统进行仿真
子系统及其封装技术
S函数的设计与应用
ISimulink操作基础
Simulink简介
Simulink是MATLAB的重要组成部分,提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能。
Simulink的启动与退出
1.Simulink的启动
在MATLAB的命令窗口输入simulink或单击MATLAB主窗口工具栏上的Simulink命令按钮即可启动Simulink。
Simulink启动后会显示Simulink模块库浏览器(SimulinkLibraryBrowser)窗口。
在MATLAB主窗口File菜单中选择New菜单项下的Model命令,在出现Simulink模块库浏览器的同时,还会出现一个名字为untitled的模型编辑窗口。
在启动Simulink模块库浏览器后再单击其工具栏中的Createanewmodel命令按钮,也会弹出模型编辑窗口。
利用模型编辑窗口,可以通过鼠标的拖放操作创建一个模型。
模型创建完成后,从模型编辑窗口的File菜单项中选择Save或SaveAs命令,可以将模型以模型文件的格式(扩展名为.mdl)存入磁盘。
如果要对一个已经存在的模型文件进行编辑修改,需要打开该模型文件,其方法是,在MATLAB命令窗口直接输入模型文件名(不要加扩展名.mdl)。
在模块库浏览器窗口或模型编辑窗口的File菜单中选择Open命令,然后选择或输入欲编辑模型的名字,也能打开已经存在的模型文件。
另外,单击模块库浏览器窗口工具栏上的Openamodel命令按钮或模型编辑窗口工具栏上的Openmodel命令按钮,也能打开已经存在的模型文件。
2.Simulink的退出
为了退出Simulink,只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可。
II系统仿真模型
Simulink仿真模型概述
Simulink仿真模型(Model)在视觉上表现为直观的方框图,在文件上则是扩展名为.mdl的ASCII代码,在数学上体现了一组微分方程或者是差分方程,在行为上模拟了物理器件构成的实际系统的动态特性。
模块(Block)是构成系统仿真模型的基本单元。
用适当的方式把各种模块连接在一起就能够建立动态系统的仿真模型。
从宏观角度来看,Simulink模型通常包含了3类模块:
信源(Source)、系统(System)及信宿(Sink)。
Simulink的模块库提供了大量模块。
单击模块库浏览器中Simulink前面的“+”号,将看到Simulink模块库中包含的子模块库,单击所需要的子模块库,在右边的窗口中将看到相应的基本模块,选择所需基本模块,可用鼠标将其拖到模型编辑窗口。
同样,在模块库浏览器左侧的Simulink栏上单击鼠标右键,在弹出的快捷菜单中单击Openthe‘Simulink’Libray命令,将打开Simulink基本模块库窗口。
单击其中的子模块库图标,打开子模块库,找到仿真所需要的基本模块。
模块的编辑
1.添加模块
在libraryBrowser窗口直接点击需要的模块,拖动到model文件中。
2.选取模块
只要用鼠标在模块上单击,模块饺上出现黑色小方块。
若选择多个模块,则鼠标大框选中即可。
3.复制与删除模块
(1)在不同窗口,用鼠标左键点住要复制的模块,按住左键移动到相应窗口,释放。
(2)同一窗口,用鼠标左键点住要复制的模块,按住左键,同时按住ctrl键,到适当位置松开鼠标。
(3)删除模块,选中模块,选择cut或clear命令。
4.模块外形的调整
(1)改变大小:
选定模块,用鼠标左键点住其周围的4个黑方块中的任何一个并拖动。
(2)调整方向。
选定模块,选择format菜单中的RotateBlock命令使模块按顺时针方向旋转90度,FlipBlock命令使模块旋转180度。
(主要是接口变化)
(3)给模块加阴影。
选定模块,选择Format菜单中的showDropShadow命令使模块产生阴影效果。
5.模块名的处理
模块名的显示:
选定模块,Format菜单中的HideName命令,模块名子被隐藏,同时Hidename变为Showname。
修改模块名:
鼠标单击模块名的区域。
改变模块名位置:
当模块接口在上下侧,模块名只能在左右;接口在左右侧,名只能在上下侧,Format中的Flipname。
1.连接两个模块
2.模块间连线的调整
3.连线的分支
4.标注连线
5.删除连线
模块的参数和属性设置
模块的参数设置
Simulink中几乎所有模块的参数都允许用户进行设置,只要*双击要设置的模块或*在模块上按鼠标右键并在弹出的快捷菜单中选择相应模块的参数设置命令就会弹出模块参数对话框。
该对话框分为两部分,上面一部分是模块功能说明,下面一部分用来进行模块参数设置。
*同样,先选择要设置的模块,再在模型编辑窗口Edit菜单下选择相应模块的参数设置命令也可以打开模块参数对话框。
2.模块的属性设置
*选定要设置属性的模块,然后在模块上按鼠标右键并在弹出的快捷菜单中选择Blockproperties,
*或先选择要设置的模块,再在模型编辑窗口的Edit菜单下选择Blockproperties命令,将打开模块属性对话框。
该对话框包括General、Blockannotation和Callbacks3个可以相互切换的选项卡。
其中选项卡中可以设置3个基本属性:
Description(说明)、Priority(优先级)、Tag(标记)。
SIMULINK的模块库介绍
SIMILINK模块库按功能进行分为以下8类子库:
ØContinuous(连续模块)
ØDiscrete(离散模块)
ØFunction&Tables(函数和平台模块)
ØMath(数学模块)
ØNonlinear(非线性模块)
ØSignals&Systems(信号和系统模块)
ØSinks(接收器模块)
ØSources(输入源模块)
连续模块(Continuous)continuous.mdl
ØIntegrator:
输入信号积分
ØDerivative:
输入信号微分
ØState-Space:
线性状态空间系统模型
ØTransfer-Fcn:
线性传递函数模型
ØZero-Pole:
以零极点表示的传递函数模型
ØMemory:
存储上一时刻的状态值
ØTransportDelay:
输入信号延时一个固定时间再输出
ØVariableTransportDelay:
输入信号延时一个可变时间再输出
离散模块(Discrete)discrete.mdl
ØDiscrete-timeIntegrator:
离散时间积分器
ØDiscreteFilter:
IIR与FIR滤波器
ØDiscreteState-Space:
离散状态空间系统模型
ØDiscreteTransfer-Fcn:
离散传递函数模型
ØDiscreteZero-Pole:
以零极点表示的离散传递函数模型
ØFirst-OrderHold:
一阶采样和保持器
ØZero-OrderHold:
零阶采样和保持器
ØUnitDelay:
一个采样周期的延时
函数和平台模块(Function&Tables)function.mdl
ØFcn:
用自定义的函数(表达式)进行运算
ØMATLABFcn:
利用matlab的现有函数进行运算
ØS-Function:
调用自编的S函数的程序进行运算
ØLook-UpTable:
建立输入信号的查询表(线性峰值匹配)
ØLook-UpTable(2-D):
建立两个输入信号的查询表(线性峰值匹配)
数学模块(Math)math.mdl
ØSum:
加减运算
ØProduct:
乘运算
ØDotProduct:
点乘运算
ØGain:
比例运算
ØMathFunction:
包括指数函数、对数函数、求平方、开根号等常用数学函数
ØTrigonometricFunction:
三角函数,包括正弦、余弦、正切等
ØMinMax:
最值运算
ØAbs:
取绝对值
ØSign:
符号函数
ØLogicalOperator:
逻辑运算
ØRelationalOperator:
关系运算
ØComplextoMagnitude-Angle:
由复数输入转为幅值和相角输出
ØMagnitude-AngletoComplex:
由幅值和相角输入合成复数输出
ØComplextoReal-Imag:
由复数输入转为实部和虚部输出
ØReal-ImagtoComplex:
由实部和虚部输入合成复数输出
非线性模块(Nonlinear)nonlinear.mdl
ØSaturation:
饱和输出,让输出超过某一值时能够饱和。
ØRelay:
滞环比较器,限制输出值在某一范围内变化。
ØSwitch:
开关选择,当第二个输入端大于临界值时,输出由第一个输入端而来,否则输出由第三个输入端而来。
ØManualSwitch:
手动选择开关
信号和系统模块(Signal&Systems)sigsys.mdl
ØIn1:
输入端。
ØOut1:
输出端。
ØMux:
将多个单一输入转化为一个复合输出。
ØDemux:
将一个复合输入转化为多个单一输出。
ØGround:
连接到没有连接到的输入端。
ØTerminator:
连接到没有连接到的输出端。
ØSubSystem:
建立新的封装(Mask)功能模块
接收器模块(Sinks)sinks.mdl
ØScope:
示波器。
ØXYGraph:
显示二维图形。
ØToWorkspace:
将输出写入MATLAB的工作空间。
ØToFile(.mat):
将输出写入数据文件。
输入源模块(Sources)sources.mdl
ØConstant:
常数信号。
ØClock:
时钟信号。
ØFromWorkspace:
来自MATLAB的工作空间。
ØFromFile(.mat):
来自数据文件。
ØPulseGenerator:
脉冲发生器。
ØRepeatingSequence:
重复信号。
ØSignalGenerator:
信号发生器,可以产生正弦、方波、锯齿波及随意波。
ØSineWave:
正弦波信号。
ØStep:
阶跃波信号。
SIMULINK简单模型的建立
简单模型的建立
Ø
(1)建立模型窗口
Ø
(2)将功能模块由模块库窗口复制到模型窗口
Ø(3)对模块进行连接,从而构成需要的系统模型
模型的特点
Ø在SIMULINK里提供了许多如Scope的接收器模块,这使得用SIMULNK进行仿真具有像做实验一般的图形化显示效果。
ØSIMULINK的模型具有层次性,通过底层子系统可以构建上层母系统。
ØSIMULINK提供了对子系统进行封装的功能,用户可以自定义子系统的图标和设置参数对话框。
示例1对满足
数学规律的过程进行仿真,结果用示波器显示,仿真时间为10个单位
示例2:
设一定的温度情况下,一病毒得出生率与当前的病毒总数成正比,死亡率与当期的病毒总数平方成正比。
设初始时病毒总数为1000,研究病毒总数及总数的变化率随时间的变换规律(设两个比例系数分别为1和0.5)
步骤1数学模型设时刻t的病毒总数为x
步骤2确定模块为积分模块,2增益模块,求和模块,乘法模块以及示波器
步骤3模块调整和链接
步骤4模块参数设置和仿真运行分析
例有系统的微分方程,
试建立系统仿真模型。
操作过程如下:
(1)在MATLAB主菜单中,选择File菜单中New菜单项的Model命令,打开一个模型编辑窗口。
(2)将所需模块添加到模型中。
(3)设置模块参数并连接各个模块组成仿真模型。
设置模块参数后,用连线将各个模块连接起来组成系统仿真模型。
模型建好后,从模型编辑窗口的File菜单中选择Save或Saveas命令将它存盘。
III系统的仿真
设置仿真参数
打开系统仿真模型,从模型编辑窗口的Simulation菜单中选择Simulationparameters命令,打开一个仿真参数对话框,在其中可以设置仿真参数。
仿真参数对话框包含多个选项页(版本不同,选项也不同),基本选项如下:
(1)Solver:
用于设置仿真起始和停止时间,选择微分方程求解算法并为其规定参数,以及选择某些输出选项。
(2)WorkspaceI/O:
用于管理对MATLAB工作空间的输入和输出。
(3)Diagnostics:
用于设置在仿真过程中出现各类错误时发出警告的等级。
(4)Real-timeWorkshop:
用于设置若干实时工具中的参数。
如果没有安装实时工具箱,则将不出现该选项。
启动系统仿真与仿真结果分析
设置完仿真参数之后,从Simulation中选择Start菜单项或单击模型编辑窗口中的StartSimulation命令按钮,便可启动对当前模型的仿真。
此时,Start菜单项变成不可选,而Stop菜单项变成可选,以供中途停止仿真使用。
从Simulation菜单中选择Stop项停止仿真后,Start项又变成可选。
为了观察仿真结果的变化轨迹可以采用3种方法:
(1)把输出结果送给Scope模块或者XYGraph模块。
(2)把仿真结果送到输出端口并作为返回变量,然后使用MATLAB命令画出该变量的变化曲线。
(3)把输出结果送到ToWorkspace模块,从而将结果直接存入工作空间,然后用MATLAB命令画出该变量的变化曲线。
例2利用Simulink构建函数曲线y=5t2+16。
仿真过程如下:
(1)启动Simulink并打开模型编辑窗口。
(2)将所需模块添加到模型中。
(3)设置模块参数并连接各个模块组成仿真模型。
设置模块参数后,用连线将各个模块连接起来组成仿真模型。
(4)设置系统仿真参数。
(5)开始系统仿真。
(6)观察仿真结果。
例3利用Simulink仿真求定积分
仿真过程如下:
(1)打开一个模型编辑窗口。
(2)将所需模块添加到模型中。
(3)设置模块参数并连接各个模块组成仿真模型。
(4)设置系统仿真参数。
(5)开始系统仿真。
(6)观察仿真结果。
系统仿真实例
至此,可以总结出利用Simulink进行系统仿真的步骤如下:
(1)建立系统仿真模型,这包括添加模块、设置模块参数以及进行模块连接等操作。
(2)设置仿真参数。
(3)启动仿真并分析仿真结果。
例4有初始状态为0的二阶微分方程x“+0.2x‘+0.4x=0.2u(t),其中u(t)是单位阶跃函数,试建立系统模型并仿真。
方法1:
用积分器直接构造求解微分方程的模型。
方法2:
利用传递函数模块建模。
IV使用命令操作对系统进行仿真
从命令窗口运行仿真的函数有4个,即sim、simset、simget和set_param。
1.sim函数
sim函数的作用是运行一个由Simulink建立的模型,其调用格式为:
[t,x,y]=sim(modname,timespan,options,data);
t:
仿真时间向量
x:
状态模块的状态矩阵
y:
仿真输出矩阵,每一列对应一个输出端口的输出数据。
Modname:
指定模型名字
Timespan:
仿真时间区域
Options:
仿真参数
这些参数中,只有Modname是必须的。
2.simset函数
simset函数用来为sim函数建立或编辑仿真参数或规定算法,并把设置结果保存在一个结构变量中。
它有如下4种用法:
(1)options=simset(property,value,…):
把property代表的参数赋值为value,结果保存在结构options中。
(2)options=simset(old_opstruct,property,value,…):
把已有的结构old_opstruct(由simset产生)中的参数property重新赋值为value,结果保存在新结构options中。
(3)options=simset(old_opstruct,new_opstruct):
用结构new_opstruct的值替代已经存在的结构old_opstruct的值。
(4)simset:
显示所有的参数名和它们可能的值。
3.simget函数
simget函数用来获得模型的参数设置值。
如果参数值是用一个变量名定义的,simget返回的也是该变量的值而不是变量名。
如果该变量在工作空间中不存在(即变量未被赋值),则Simulink给出一个出错信息。
该函数有如下3种用法:
(1)struct=simget(modname):
返回指定模型model的参数设置的options结构。
(2)value=simget(modname,property):
返回指定模型model的参数property的值。
(3)value=simget(options,property):
获取options结构中的参数property的值。
如果在该结构中未指定该参数,则返回一个空阵。
用户只需输入能够唯一识别它的那个参数名称的前几个字符即可,对参数名称中字母的大小写不作区别。
4.set_param函数
set_param函数的功能很多,这里只介绍如何用set_param函数设置Simulink仿真参数以及如何开始、暂停、终止仿真进程或者更新显示一个仿真模型。
(1)设置仿真参数
调用格式为:
set_param(modname,property,value,…)
其中modname为设置的模型名,property为要设置的参数,value是设置值。
这里设置的参数可以有很多种,而且和用simset设置的内容不尽相同,相关参数的设置可以参考有关资料。
(2)控制仿真进程
调用格式为:
set_param(modname,'SimulationCommand','cmd')
其中mode为仿真模型名称,而cmd是控制仿真进程的各个命令,包括start、stop、pause、comtinue或update。
在使用这两个函数的时候,需要注意必须先把模型打开。
V子系统及其封装技术
子系统的建立
建立子系统有两种方法:
通过Subsystem模块建立子系统和通过已有的模块建立子系统。
两者的区别是:
前者先建立子系统,再为其添加功能模块;后者先选择模块,再建立子系统。
1.通过Subsystem模块建立子系统
操作步骤为:
(1)先打开Simulink模块库浏览器,新建一个仿真模型。
(2)打开Simulink模块库中的Ports&Subsystems模块库,将Subsystem模块添加到模型编辑窗口中。
(3)双击Subsystem模块打开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要添加输入模块和输出模块,表示子系统的输入端口和输出端口。
这样,一个子系统就建好了。
2.通过已有的模块建立子系统
操作步骤为:
(1)先选择要建立子系统的模块,不包括输入端口和输出端口。
(2)选择模型编辑窗口Edit菜单中的CreateSubsystem命令,这样,子系统就建好了。
在这种情况下,系统会自动把输入模块和输出模块添加到子系统中,并把原来的模块变为子系统的图标。
例5PID控制器是在自动控制中经常使用的模块,在工程应用中其标准的数学模型为
其中采用了一阶环节来近似纯微分动作,为保证有良好的微分近似的效果,一般选N≥10。
试建立PID控制器的模型并建立子系统。
步骤如下:
(1)先建立PID控制器的模型。
(2)建立子系统。
子系统的条件执行
子系统的执行可以由输入信号来控制,用于控制子系统的信号称为控制信号,而由控制信号控制的子系统称为条件执行子系统。
分1使能子系统,2触发子系统,3使能加触发子系统
1.使能子系统:
控制信号由负变正时子系统开始执行,直到控制信号再次变为负时结束
建立使能子系统的方法是:
打开Simulink模块库中的Ports&Subsystems模块库,将Enable模块复制到子系统模型中,则系统的图标发生了变化。
*也可用enablesubsystem模块建构
例6利用使能子系统构成一个正弦半波整流器。
操作步骤如下:
(1)打开Simulink模块库浏览器并新建一个仿真模型。
(2)将SineWave、EnabledSubsystem、Scope3个模块拖至新打开的模型编辑窗口,连接各模块并存盘。
其中使能信号端接SineWave模块。
为了便于比较,除显示半波整流波形外,还显示正弦波,故在示波器属性窗口将Numberofaxes设置为2。
使能子系统建立好后,可对Enable模块进行参数设置。
(3)选择Simulink菜单中的Start命令,就可看到半波整流波形和正弦波形。
2.触发子系统
触发子系统是指当触发事件发生时开始执行子系统。
与使能子系统相类似,触发子系统的建立要把Ports&Subsystems模块库中的Trigger模块添加到子系统中或直接选择TriggeredSubsystem模块来建立触发子系统。
Triggertype:
*rising:
控制信号从负值或者零上升到正值时子系统开始执行
*falling:
从正值或零下降到负值时
*either:
满足上跳沿或者下跳沿触发条件
*functioncall:
函数触发由s函数的内部逻辑确定
例7利用触发子系统将一锯齿波转换成方波。
操作步骤如下:
(1)用SignalGenerator、TriggeredSubsystem和Scope模块构成子系统。
(2)选择Simulink菜单中的Start命令,就可看到波形。
3.使能加触发子系统
所谓使能加触发子系统就是把Enable和Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合。
该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用。
子系统的封装
所谓子系统的封装(Masking),就是为子系统定制对话框和图标,使子系统本身有一个独立的操作界面,把子系统中的各模块的参数对话框合成一个参数设置对话框,在使用时不必打开每个模块进行参数设置,这样使子系统的使用更加方便。
子系统的封装过程很简单,先选中所要封装的子系统,再选择模型编辑窗口Edit菜单中的Masksubsystem命令,这时将出现封装编辑器(MaskEditor)对话框。
MaskEditor对话框中共包括4个选项卡:
Icon、Parameters、Initialization和Documentation。
子系统的封装主要就是对这4页参数进行设置