版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK第第7讲讲 MATLAB仿真仿真_SIMULINK第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKSimulink仿真仿真 7.1 Simulink仿真入门1.Simulink的特点Simulink是MATLAB中的一个建立系统方框图和基于方框图级的系统仿真环境,是一个对动态系统进行建模、仿真并对仿真结果进行分析的软件包。使用Simulink可以更加方便地对系统进行可视化建模,并进行基于时间流的系统级仿真,使得仿真系统建模与工程中的方框图统一起来。并且仿真结果可以近乎
2、“实时”地通过可视化模块,如示波器模块、频谱仪模块以及数据输入输出模块等显示出来,使得系统仿真工作大为方便。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK Simulink全方位地支持动态系统的建模仿真,它支持连续系统、离散系统、连续离散混合系统、线性系统、非线性系统、时不变系统、时变系统的建模仿真,也支持具有多采样速率的多速率系统。可以说,在通用系统仿真领域,Simulink是无所不包的。 结合MATLAB编程和Simulink可视化建模仿真各自的特点,可以构建更为复杂的系统模型,并进行自动化程度更高的仿真和仿真结果的数据分析,这是MATLAB的高级
3、应用方面。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK2.使用Simulink建模和仿真的过程启动MATLAB之后,在命令窗口中输入命令“simulink”或单击MATLAB工具栏上的Simulink图标,打开Simulink模块库窗口。在Simulink模块库窗口中单击菜单项“”,就可以新建一个Simulink模型文件,如图2-8所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-8 Simulink模块库界面和新建模型文件窗口第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿
4、真SIMULINK以二阶系统为例。其输入输出的传递函数为(2-28)其中,R=3, L=1H,C=0.1F。H(s) 简化为利用鼠标单击Simulink基础库中的Continuous子库,选取传递函数模块,将它拖动到新建模型窗口中的适当位置,如图2-9所示。 11)()()(2ssRCLCsFsUcsH75. 71075. 7)5 . 1(75. 710310)(222ssssH(2-29) 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图图2-9 利用模块库建立仿真模型利用模块库建立仿真模型第第7讲讲 SIMULINKmatlab教学PPT第7讲MA
5、TLAB仿真SIMULINK 如果需要对模型模块进行参数设置和修改,只需选中模型文件中的相应模块,单击鼠标右键,弹出快捷菜单,从中选取相应参数进行修改,如图2-10所示。 单击模块下方的“TransferFun”可以对其进行编辑,例如修改为“传递函数”字样。 从快捷菜单中选取“Transfer Fun parameters.”项修改传递函数参数,在弹出的对话框中的传递函数分子系数“Numerator:”栏填入10;在传递函数分母系数“Denominator”栏填入1,3,10,其余参数使用默认值。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-1
6、0 修改仿真模型的参数第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 采用同样的方法,在Simulink基础库中的Sources子库中选取激励信号源,例如我们选取阶跃信号源,将之拖入建模窗口中。 在Sinks子库中选取示波器作为系统输出波形显示。接下来利用鼠标将这三个模块连接起来。 模块外部的大于符号“”分别表示信号的输入输出节点,为了连接两个模块的输入输出,可以将鼠标置于节点处,这时鼠标显示为“十”字形状,拖动鼠标到另一个模块的端口,然后释放鼠标按钮,则形成了带箭头的连线,箭头方向表示信号的流向。 完成后的建模系统可以通过“File”菜单存盘为模型文
7、件,扩展名为“mdl”,如“lizi1.mdl”,如图2-11所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-11 完成的建模方框图第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 接下来,需要对输入信号源(阶跃)的参数进行设置。将鼠标指向阶跃信号模块双击或通过快捷菜单打开属性设置对话框,设置阶跃信号的参数,如图2-12所示 对于阶跃信号源来说,其参数含义、默认值以及我们根据仿真需要修改后的参数值如表2-1所示。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK表
8、2-1阶跃信号源的参数含义、默认值及修改后的参数值第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-12 阶跃信号源模块的参数设置对话框及其帮助文档第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK根据仿真要求,我们将仿真-210s时间区间内的系统阶跃响应的输出波形,在时间为0s时的跃变。然后设置仿真参数,主要是仿真求解器的选择和仿真步长等参数的选取。通过前面的分析可知,动态系统仿真的本质就是求解其状态方程,而对状态方程的数值求解算法有多种,求解算法的步长也可以不同。不同的算法适用的范围有所不同,而算法的步长也直
9、接影响求解的精度。因此,对求解器的选择以及其仿真步长等参数的设定对系统仿真来说就成为相当重要的事情。从系统建模窗口的状态栏可以看到当前使用的求解器,如图2-11中显示的 仿 真 求 解 器 是 “ o d e 4 5 ” 算 法 。 从 建 模 窗 口 菜 单 项“Simulation|SimulationParameters.”打开仿真参数设置对话框(快捷键为Ctrl+E),我们现在设置求解器标签下的参数部分,如图2-13所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK设置仿真起始时间为-2秒,仿真结束时间为10秒,其余参数为默认值:求解器采用
10、“ode45”算法,步长设定为自适应变步长的,最大步长、最小步长以及初始步长均设为自动选取,相对求解精度为1e-3,绝对求解精度自动选取。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-13 仿真参数设置对话框第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK最后,双击示波器模型图标,打开示波器显示窗口。在显示窗口中单击鼠标右键,通过快捷菜单设置显示坐标范围等属性,这里我们设置为自动刻度,如图2-14所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-14 示
11、波器显示窗口以及参数设置第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK所有这些工作完成之后,就可以进行仿真了。可通过建模窗口菜单项“Simulation|Start”启动仿真,也可以单击工具栏上的小三角按钮或使用快捷键Ctrl+T启动仿真。仿真结果如图2-15所示。读者可以将结果与图2-3所示的结果进行比较。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-15 仿真结果第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 更换信号源为Sources子模块库中的Signa
12、lGenerator,并设置信号源为0.2Hz的方波,幅度为1,如图2-16左边对话框所示。 设置示波器显示窗口的属性(Parameters),使之成为双踪显示,然后将示波器第二输入节点与信号源输出相连,这样我们就可以同时观察系统的输入输出波形了。系统建模如图2-16中间窗口所示。 将仿真时间设定为0秒到20秒,其余参数使用默认参数。运行仿真后的结果如图2-16右边窗口显示。 还可以进一步修改信号源参数,使用三角波、正弦波等作为激励信号,观察输出信号的情况。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图图2-16 更换信号源并使用双踪示波器之后的仿
13、真结果更换信号源并使用双踪示波器之后的仿真结果第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK3. MATLAB命令窗口与Simulink之间的交互 我们还可以通过MATLAB命令来打开Simulink模型并进行仿真。在MATLAB命令窗口中,使用“open lizi1.mdl”,然后使用“sim(lizi1.mdl)”就可以启动对模型lizi1.mdl的仿真计算。而Simulink仿真的数据结果也可以送回MATLAB工作空间中作进一步数值分析。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK仍以上例加以说明。首先
14、设置示波器,使得显示波形数据能够送回MATLAB工作空间。在示波器波形显示窗口单击“参数Parameters”工具图标,打开显示参数设置 对 话 框 。 选 中D a t a h i s t o r y标 签 下 的Savedatatoworkspace,并设传递变量名称,例如设为ScopeData,格式选择为Structurewithtime(带时间的结构型变量)。参数设置的情况如图2-17所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-17 示波器显示窗口的参数设置第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真
15、SIMULINK将建模存盘为lizi1.mdl,然后在MATLAB下运行如下命令(参见图2-18):clear;%工作空间初始化open lizi1.mdl;%这时将看到建模模型文件被打开sim(lizi1.mdl);%启动模型仿真,显示出仿真波形whosNameSizeBytesClassScopeData1x13578structarrayGrandtotalis307elementsusing3578bytes第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-18 通过命令启动Simulink仿真第第7讲讲 SIMULINKmatlab教学PP
16、T第7讲MATLAB仿真SIMULINK可见,仿真完成之后,工作空间中出现了“ScopeData”结构变量,其中包含了示波器显示的全部波形数据。通过“plot”命令可以作出这些数据对应的波形,即 t=ScopeData.time;%仿真的时间变量signal=ScopeData.signals;wave1=signal(1,1).values;wave2=signal(1,2).values;subplot(2,1,1);plot(t,wave1);subplot(2,1,2);plot(t,wave2);axis(0,20,-2,2);作出的波形如图2-19所示。读者可以对比示波器上得到的波
17、形(参见图2-18)。我们在此说明了Simulink与MATLAB工作空间进行数据交换的一种方法。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-19 示波器数据传入工作空间后进行波形作图显示第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 事实上,MATLAB提供了许多途径用于与Simulink的数据交互。 通过Sources子模型库中的FromWorkspace模块可以从工作空间中读入仿真所需要的输入数据 通过Sinks子模型库中的ToWorkspace模块可以将Simulink中产生的数据回送到工作空
18、间,从而可以实现MATLAB编程与Simulink模型相结合的混合仿真。 下面的例子中,我们将从工作空间中读入输入波形数据,通过Simulink建模仿真之后,将仿真结果再送回工作空间中进行处理。通过这种方式,我们可以通过MATLAB程序产生任意的数据送入Simulink中加以处理,然后再利用MATLAB强大的统计分析功能来处理数据。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK首先建立Simulink模型,如图2-20所示。图中使用了Sources子模型库中的FromWorkspace模块,以便从工作 空 间 中 读 入 数 据 。 使 用 S i n
19、 k s 子 模 型 库 中 的ToWorkspace模块,将输出数据回送到工作空间。设计输入为阶跃信号,仿真建模中使用Continuous子库中的微分器来获得系统的阶跃响应的微分冲激响应。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-20 用于测试与MATLAB工作空间进行数据交互的Simulink模型第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-20中,FromWorkspace模块的参数设置如图2-21所示。 其中,Data项使用了两个矢量T,U参数组合。T表示离散时间序列,U表示对应于离散
20、时间序列T的波形取值。Sampletime项设置为0,表示采用仿真求解器的默认采样时间间隔。Interpolatedata选中表示允许数据插值,并且通过数据外插(Extrapolation)方式在最终数值后形成输出。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-21 FromWorkspace模块的参数设置第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK模型中我们使用了两个ToWorkspace模块,分别接不同的输出信号,这两个ToWorkspace模块的输出变量分别为simout1和simout2。数据格
21、式可设置为带时间的结构变量,如图2-22所示。仿真求解器采用ode45算法。但是为了获得更为精细的波形,可以设定求解的初始步长和最大步长为0.01,最小步长为auto,仿真时间段为020s。其余参数采用默认值。建模完成之后,将模型文件存盘为lizi2.mdl文件。然后编写如下的MATLAB仿真程序pro4lizi2.m,对模型进行仿真和分析。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-22 ToWorkspace模块的参数设置第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK程序2-14%pro4 lizi
22、2.mclear;T=(0:0.1:20);%仿真时间段和步进,为列向量U=(T5);%在时间为5秒跃变的阶跃信号sim(lizi2.mdl);%运行仿真lizi2.mdlfigure(1);plot(simout1.time,simout1.signals.values);xlabel(timesec)%阶跃响应figure(2);plot(simout2.time,simout2.signals.values);xlabel(timesec)%冲激响应程序运行结果如图2-23所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-23 MATL
23、AB编程调用Simulink模型的仿真结果(阶跃响应和冲激响应)第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK4.Simulink子系统的构造实际建模过程中,常常会遇到一些较为复杂的系统,难以在一张模型方框图中画出来。这时候,就需要以层次结构来绘制框图。也就是首先将大系统中的一些具有独立功能的部分封装起来,形成一些子系统,然后再利用这些子系统来构成整个系统。Simulink允许构造多层子系统,即在子系统中仍然允许包含若干下层子系统。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKSimulink中子系统的构造方法
24、举例说明如下:中子系统的构造方法举例说明如下:首先将Simulink模块库中Ports&Subsystems子模块库中的Subsystem模块拖动到新建的模型文件窗口中,双击该Subsystem模块,就会打开该子系统,其输入用In模块表示,输出用Out模块表示,一个子系统可以有多个输入、输出。然后利用Simulink模型库中的连续时间Continuous子库中的传递函数TransferFcn模块,数学操作MathOperations子库中的增益Gain模块、求和Sum模块以及乘法模块Product构成子系统。该子系统有两个输入端口,一个输出端口。在子系统外部输入端口加入两个信号源,在其
25、输出端口接上示波器,如图2-24所示。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-24 子系统的构建和仿真第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK系统参数的设置如表2-2所示。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK表2-2 lizi3.mdl模型的参数设置第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK注意,在仿真运行之前,必须将子系统中的以变量表达的参数值确定下来。这些参数值只需在MATLAB命令窗口中输入
26、即可。例如,在命令窗口中输入参数值后运行仿真: G=1;A=1;B=0.001;C=1;sim(lizi3.mdl); 仿真运行结果如图2-25所示。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-25 lizi3.mdl的仿真结果第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 如果结合循环语句来自动修改参数,并将仿真结果送回MATLAB工作空间,则我们可以让计算机在不同系统参数条件下自动仿真若干次,得出响应的结果。 如果不使用命令“sim”来进行仿真,那么我们只好通过Simulink可视化界面来修改系统参
27、数,并通过使用鼠标点击仿真运行工具来启动仿真,这样效率将是十分低下的。由此可见MATLAB编程与Simulink结合进行仿真的优势。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK5.封装子系统 子系统中的参数(如增益G),传递函数系数等等,是通过MATLAB工作空间传入的,这就破坏了子系统内部的隐藏性质。 为此,Simulink中给出了一种解决办法,也就是所谓的模块封装技术。 对子系统封装以后,它就可以像Simulink模块库所提供的模块一样来使用,子系统模块内部的参数可以通过一个设计的对话框来输入。第第7讲讲 SIMULINKmatlab教学PPT
28、第7讲MATLAB仿真SIMULINK对一个用户自己建立的系统模型进行封装,首先要通过上面所讲的方法将系统模型转化为子系统,然后选中该子系统图标,选择“Edit|MaskSubsystem”菜单项(快捷键为Ctrl+M),然后设置所弹出的对话框内容。 下面我们对lizi3.mdl中建立的子系统进行封装。打开lizi3.mdl,另存为lizi4.mdl,然后选中子系统模 块 , 将 其 改 名 为 M y s u b s y s t e m , 选 择“Edit|MaskSubsystem”菜单项,弹出Maskeditor对话框,如图2-26所示。 第第7讲讲 SIMULINKmatlab教学P
29、PT第7讲MATLAB仿真SIMULINK图2-26 封装编辑器对话框(Icon标签和Parameters标签)第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK在Icon标签下主要是对封装模块的图标进行设置,可以设置图标的边框是否可见,图标是否透明,是否旋转,以及绘图单位等,还可使用命令来绘制图标,该标签下部给出了绘制图标的语法举例。在Parameters标签下可以设置子系统的参数,本例中需要设置的参数就是G,A,B,C四个。参数设置可以采用编辑框(Edit)、弹出列表(Popup)或复选框(Checkbox)形式,读者可参考在线帮助。我们这里只使用编辑
30、框。设置参数如图2-26右面对话框所示。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-27所示是设置封装编辑器对话框中的“Initialization(初始化)”标签和“Documentation(文档)”标签的情况。一般情况下,初始化标签可使用默认值;文档标签的三部分将分别显示在封装模块的参数设置对话框和帮助文档中,如图2-28所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 图2-27封装编辑器对话框(Initialization标签和Documentation标签)第第7讲讲 SIMULINK
31、matlab教学PPT第7讲MATLAB仿真SIMULINK图2-28 封装模块的参数设置对话框以及帮助文档第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK对于已经封装的模块,采用“Edit|EditMask”(快捷键为Ctrl+M)菜单项就可以重新编辑封装对话框。在编辑封装对话框的下部有一个Unmask按钮(参见图2-26),单击该按钮可以去除封装。若需要修改子系统的内部结构,可以使用菜单项“Edit|Lookundermask”(快捷键为Ctrl+U)来打开子系统结构,从而对子系统方框图进行修改。 第第7讲讲 SIMULINKmatlab教学PPT第
32、7讲MATLAB仿真SIMULINK6.组建用户自定义模块库如果建立了许多自定义的子系统,并且已经封装好了,而这些已经封装的自定义模块又是会反复使用的,就像Simulink提供的模块库中那些模块一样,在这种情况下,就有必要对这些自定义的重用性较好的模块进行建库,以方便管理和反复使用,同时也可以作为新的专业库提供给其他用户使用。Simulink提供了建库手段,具体方法是:用“simulink”命令打开Simulink库浏览器,从其菜单中选择“New|Library”,新建一个空白的模块库窗口,然后将欲建库的模块用鼠标拖入该库文件窗口中即可。 第第7讲讲 SIMULINKmatlab教学PPT第7
33、讲MATLAB仿真SIMULINK可用“”菜单项来修改自建库的属性,最后存盘,例如存为myku.mdl文件。以后需要使用时,在MATLAB命令窗口中键入“myku.mdl”即可开启该模型库窗口,其中的自定义模块与Simulink提供的标准库中的模块的使用方法完全相同。自定义模块库存盘之后将处于锁定状态,如果要对库中的模块进行修改,可以再次打开该模块库,然后用“Edit|Unlocklibrary”解锁,修改并存盘之后,库自动恢复为锁定状态。图2-29给出了一个用户自定义模块库的例子。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-29 一个用户自
34、定义模块库的例子第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK7.2 S 函 数Simulink进行仿真本质上就是利用某种求解算法对系统状态方程进行求解的过程。 Simulink是如何将系统的状态方程与系统方框图模型联系起来的呢? 事实上,Simulink设计了固定格式的S函数接口,通过S函数可将系统的数学方程表达形式与方框图表达形式联系起来。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 通过编写和使用S函数,用户也可以构建出采用Simulink普通模块难以搭建出来的系统模型,大大增强了Simulink的灵
35、活性。 S函数可以用MATLAB语言书写,也可以采用C、C+、Fortran等语言编写。 S函数还可以进行编译,以提高执行速度。Simulink内建的标准模块库就是用S函数编写并进行编译后形成的。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 1.系统的状态方程描述对于连续系统,其状态方程为 x=f(t,x,u) (2-30) 若系统是线性时不变系统,则状态方程可简化为 x=f(t,x,u)=Ax(t)+Bu(t) (2-31)系统的输出方程为 y=f0(t,x,u) (2-32)若为线性时不变系统,则输出方程可简化为 y=f0(t,x,u) =Cx
36、(t)+Du(t) (2-33)m个输入的情况:u(t)=u1(t),u2(t),um(t)T (2-34)k个输出的情况:y(t)=y1(t),y2(t),yk(t)T (2-35)第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKn个状态数的情况:x(t)=x1(t),x2(t),xn(t)T(2-36)最为简单的是单输入单输出系统,设其状态数为n,则 状态方程为x=f(t,x,u)=Ax(t)+Bu(t) (2-37)输出方程为 y=f0(t,x,u)=Cx(t)+Du(t) (2-38)第第7讲讲 SIMULINKmatlab教学PPT第7讲MAT
37、LAB仿真SIMULINK无记忆系统是一般系统的特例,其状态数为0。例如:设计一个放大器系统,将信号放大2.7倍,则该系统是无记忆的,故状态数为0,状态矩阵x=是空矩阵,而输出方程为y=f0(t,x,u)=Du(t)=2.7u(t)对于离散时间系统,其状态方程表现为差分方程组的形式。对于更一般的系统,都有以下共同特征:一个输入向量u,一个输出向量y,一个状态向量x,这些向量可以是连续的,也可以是离散的,还可以是连续、离散混合的,如图2-30所示。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK图2-30 一般系统的抽象数学模型第第7讲讲 SIMULIN
38、Kmatlab教学PPT第7讲MATLAB仿真SIMULINK输入向量、输出向量和状态向量之间的数学关系可以通过如下方程来表达:y=f0(t,x,u)(输出方程) (2-40)xc=fd(t,x,u)(连续时间系统状态方程微分方程) (2-41)xdk+1=fu(t,x,u)(离散时间系统状态方程差分方程) (2-42)其中,x=xc+xd,xc是连续状态部分,xd是离散状态部分。 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK在Simulink的S函数中,相应地将状态向量分为连续状态部分和离散状态部分,对于没有状态的模块(即无记忆系统),状态向量x为
39、空矩阵。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK2. MATLAB语言的S函数模板 MATLAB语言的S函数编写方法是固定的,MATLAB提供了标准S函数的模板sfuntmpl.m,文件在Toolboxsimulinkblocks目录下。其代码如下:程序functionsys,x0,str,ts=sfuntmpl(t,x,u,flag)switchflag,case0,%初始化部分 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKsys,x0,str,ts=mdlInitializeSizes;case1,
40、%计算导数sys=mdlDerivatives(t,x,u);case2,%差分方程递推更新sys=mdlUpdate(t,x,u);case3,%计算输出sys=mdlOutputs(t,x,u);case4,%取得下一步仿真的时间sys=mdlGetTimeOfNextVarHit(t,x,u);第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKcase9,%终止sys=mdlTerminate(t,x,u);otherwise%Unexpectedflags出错处理error(Unhandledflag=,num2str(flag);end%sfun
41、tmpl函数结束%=%mdlInitializeSizes模型初始化函数,返回:%sys是系统参数第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK%x0是系统初始状态,若没有状态,取%str是系统阶字串,通常设为%ts是取样时间矩阵,对连续取样时间,ts取00%若使用内部取样时间,ts取-10,-1表示继承输入信号的采样周期%=functionsys,x0,str,ts=mdlInitializeSizes%模型初始化函数sizes=simsizes;%取系统默认设置sizes.NumContStates=0;%设置连续状态变量的个数sizes.NumD
42、iscStates=0;%设置离散状态变量的个数第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKsizes.NumOutputs=0;%设置系统输出变量的个数sizes.NumInputs=0;%设置系统输入变量的个数sizes.DirFeedthrough=1;%设置系统是否直通sizes.NumSampleTimes=1;%采样周期的个数,必须大于等于1sys=simsizes(sizes);%设置系统参数x0=;%系统状态初始化str=;%系统阶字串总为空矩阵ts=00;%初始化采样时间矩阵第第7讲讲 SIMULINKmatlab教学PPT第7讲M
43、ATLAB仿真SIMULINK%=%mdlDerivatives模型计算导数连续状态部分的计算,返回连续状态的导数%=functionsys=mdlDerivatives(t,x,u)sys=;%根据状态方程(微分方程部分)修改此处%=%mdlUpdate状态更新计算离散状态部分%=functionsys=mdlUpdate(t,x,u)第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKsys=;%根据状态方程(差分方程部分)修改此处%=%mdlOutputs计算输出信号,返回模块的输出%=functionsys=mdlOutputs(t,x,u)sys=
44、;%根据输出方程修改此处%=%mdlGetTimeOfNextVarHit计算下一步的仿真时刻,该函数仅当在mdlInitializeSizes%函数中的采样时间向量定义了一个可变离散采样时间ts为-20时才被使用 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK%=functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%例如,下一步仿真时间是1s之后sys=t+sampleTime;%=%mdlTerminate终止仿真设定,完成仿真终止时的任务%=functionsys=mdlTerminate(
45、t,x,u)sys=;%程序结束 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKSimulink进行仿真的过程是: 仿真开始时,调用各个模块的初始化函数进行系统初始化,接着进入仿真阶段,反复调用模型中的每一个模块,即调用这些模块对应的S函数,对每个模块执行诸如计算输出、计算连续函数导数以及计算离散函数的更新值等任务。 在仿真结束时,调用终止仿真函数以结束仿真任务。具体某时刻Simulink执行什么任务,取决于当时调用S函数时传入的标志flag的值。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK进入第一次仿真循环
46、之前为仿真初始化阶段,Simulink调用S函数的初始化功能mdlInitializeSizes完成初始化任务:首先初始化一个包含S函数信息的Simulink结构(sys),然后设置输入和输出端口的数量和大小,并设置模块的采样时间、分配存储空间以及估计数组大小等等。进 入 仿 真 循 环 后 , S i m u l i n k 首 先 调 用mdlGetTimeOfNextVarHit计算下一采样点时间(仅仅对于可变离散采样时间的模块),然后计算主要时间同步输出,得出当前时间步的模块的输入输出端口和状态取值。接着更新主要时间步的离散状态,最后进行辅助时间步的积分过程。在辅助时间步调用S函数的输
47、出和导数计算,并定位过零区间,于是完成一次仿真循环。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK当Simulink跳出仿真循环后,就进入了仿真的最后阶段。这一阶段通过调用S函数中的mdlTerminate来执行一些必要的任务,最后结束仿真。第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK3.利用S函数建模和仿真的过程在Simulink模块浏览器中可以打开S函数的编程例子加以学习,如图2-31所示。 这里我们通过几个S函数的建模实例来说明S函数建模和仿真的过程。 第第7讲讲 SIMULINKmatlab教学PPT
48、第7讲MATLAB仿真SIMULINK图2-31 在Simulink模块浏览器中打开S函数的编程例子第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK 例如: 一个单输入、单输出的三阶线性时不变系统,其状态变量设为x1,x2,x3,输入为u(t) ,输出为y(t) ,并有状态空间方程: 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKuxxxxxxxx32133221364(2-45)以及输出方程: y=4x2 (2-46)以矩阵表示为 uxxxxxx100364100010321321(2-47)第第7讲讲 SIM
49、ULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK或简写为通式:其中:(2-49) DuCxyBuAxx321040 xxxy(2-48) 364100010,321321Axxxxxxxx(2-50) 第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINK据此可以编写S函数myHsapp.m如下:程序2-16 functionsys,x0,str,ts=myHsapp(t,x,u,flag)%连续系统状态方程%x=Ax+Bu%y=Cx+Du%定义A,B,C,D矩阵 0,0 4 0,100DCuuB第第7讲讲 SIMULINKmatlab教学PPT第7讲MATLAB仿真SIMULINKA=0 1 0;0 0 1;-4 -6 -3;B=0;0;1;C=0 4 0;D=0;switch flag,case 0 %flag=0初始化sys,x0,str,ts=mdlInitializeSizes(A,B,C,D); %注意要将ABC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论