欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    matlab教学PPT第7讲MATLAB仿真SIMULINK.ppt

    • 资源ID:6511895       资源大小:4.54MB        全文页数:94页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    matlab教学PPT第7讲MATLAB仿真SIMULINK.ppt

    第7讲 MATLAB仿真_SIMULINK,Simulink仿真,7.1 Simulink仿真入门1.Simulink的特点Simulink是MATLAB中的一个建立系统方框图和基于方框图级的系统仿真环境,是一个对动态系统进行建模、仿真并对仿真结果进行分析的软件包。使用Simulink可以更加方便地对系统进行可视化建模,并进行基于时间流的系统级仿真,使得仿真系统建模与工程中的方框图统一起来。并且仿真结果可以近乎“实时”地通过可视化模块,如示波器模块、频谱仪模块以及数据输入输出模块等显示出来,使得系统仿真工作大为方便。,Simulink全方位地支持动态系统的建模仿真,它支持连续系统、离散系统、连续离散混合系统、线性系统、非线性系统、时不变系统、时变系统的建模仿真,也支持具有多采样速率的多速率系统。可以说,在通用系统仿真领域,Simulink是无所不包的。结合MATLAB编程和Simulink可视化建模仿真各自的特点,可以构建更为复杂的系统模型,并进行自动化程度更高的仿真和仿真结果的数据分析,这是MATLAB的高级应用方面。,2.使用Simulink建模和仿真的过程启动MATLAB之后,在命令窗口中输入命令“simulink”或单击MATLAB工具栏上的Simulink图标,打开Simulink模块库窗口。在Simulink模块库窗口中单击菜单项“File|New|Model”,就可以新建一个Simulink模型文件,如图2-8所示。,图2-8 Simulink模块库界面和新建模型文件窗口,以二阶系统为例。其输入输出的传递函数为(2-28)其中,R=3,L=1H,C=0.1F。H(s)简化为利用鼠标单击Simulink基础库中的Continuous子库,选取传递函数模块,将它拖动到新建模型窗口中的适当位置,如图2-9所示。,(2-29),图2-9 利用模块库建立仿真模型,如果需要对模型模块进行参数设置和修改,只需选中模型文件中的相应模块,单击鼠标右键,弹出快捷菜单,从中选取相应参数进行修改,如图2-10所示。单击模块下方的“TransferFun”可以对其进行编辑,例如修改为“传递函数”字样。从快捷菜单中选取“Transfer Fun parameters.”项修改传递函数参数,在弹出的对话框中的传递函数分子系数“Numerator:”栏填入10;在传递函数分母系数“Denominator”栏填入1,3,10,其余参数使用默认值。,图2-10 修改仿真模型的参数,采用同样的方法,在Simulink基础库中的Sources子库中选取激励信号源,例如我们选取阶跃信号源,将之拖入建模窗口中。在Sinks子库中选取示波器作为系统输出波形显示。接下来利用鼠标将这三个模块连接起来。模块外部的大于符号“”分别表示信号的输入输出节点,为了连接两个模块的输入输出,可以将鼠标置于节点处,这时鼠标显示为“十”字形状,拖动鼠标到另一个模块的端口,然后释放鼠标按钮,则形成了带箭头的连线,箭头方向表示信号的流向。完成后的建模系统可以通过“File”菜单存盘为模型文件,扩展名为“mdl”,如“lizi1.mdl”,如图2-11所示。,图2-11 完成的建模方框图,接下来,需要对输入信号源(阶跃)的参数进行设置。将鼠标指向阶跃信号模块双击或通过快捷菜单打开属性设置对话框,设置阶跃信号的参数,如图2-12所示对于阶跃信号源来说,其参数含义、默认值以及我们根据仿真需要修改后的参数值如表2-1所示。,表2-1阶跃信号源的参数含义、默认值及修改后的参数值,图2-12 阶跃信号源模块的参数设置对话框及其帮助文档,根据仿真要求,我们将仿真-210s时间区间内的系统阶跃响应的输出波形,在时间为0s时的跃变。然后设置仿真参数,主要是仿真求解器的选择和仿真步长等参数的选取。通过前面的分析可知,动态系统仿真的本质就是求解其状态方程,而对状态方程的数值求解算法有多种,求解算法的步长也可以不同。不同的算法适用的范围有所不同,而算法的步长也直接影响求解的精度。因此,对求解器的选择以及其仿真步长等参数的设定对系统仿真来说就成为相当重要的事情。从系统建模窗口的状态栏可以看到当前使用的求解器,如图2-11中显示的仿真求解器是“ode45”算法。从建模窗口菜单项“Simulation|SimulationParameters.”打开仿真参数设置对话框(快捷键为Ctrl+E),我们现在设置求解器标签下的参数部分,如图2-13所示。,设置仿真起始时间为-2秒,仿真结束时间为10秒,其余参数为默认值:求解器采用“ode45”算法,步长设定为自适应变步长的,最大步长、最小步长以及初始步长均设为自动选取,相对求解精度为1e-3,绝对求解精度自动选取。,图2-13 仿真参数设置对话框,最后,双击示波器模型图标,打开示波器显示窗口。在显示窗口中单击鼠标右键,通过快捷菜单设置显示坐标范围等属性,这里我们设置为自动刻度,如图2-14所示。,图2-14 示波器显示窗口以及参数设置,所有这些工作完成之后,就可以进行仿真了。可通过建模窗口菜单项“Simulation|Start”启动仿真,也可以单击工具栏上的小三角按钮或使用快捷键Ctrl+T启动仿真。仿真结果如图2-15所示。读者可以将结果与图2-3所示的结果进行比较。,图2-15 仿真结果,更换信号源为Sources子模块库中的SignalGenerator,并设置信号源为0.2Hz的方波,幅度为1,如图2-16左边对话框所示。设置示波器显示窗口的属性(Parameters),使之成为双踪显示,然后将示波器第二输入节点与信号源输出相连,这样我们就可以同时观察系统的输入输出波形了。系统建模如图2-16中间窗口所示。将仿真时间设定为0秒到20秒,其余参数使用默认参数。运行仿真后的结果如图2-16右边窗口显示。还可以进一步修改信号源参数,使用三角波、正弦波等作为激励信号,观察输出信号的情况。,图2-16 更换信号源并使用双踪示波器之后的仿真结果,3.MATLAB命令窗口与Simulink之间的交互 我们还可以通过MATLAB命令来打开Simulink模型并进行仿真。在MATLAB命令窗口中,使用“open lizi1.mdl”,然后使用“sim(lizi1.mdl)”就可以启动对模型lizi1.mdl的仿真计算。而Simulink仿真的数据结果也可以送回MATLAB工作空间中作进一步数值分析。,仍以上例加以说明。首先设置示波器,使得显示波形数据能够送回MATLAB工作空间。在示波器波形显示窗口单击“参数Parameters”工具图标,打开显示参数设置对话框。选中Data history标签下的Savedatatoworkspace,并设传递变量名称,例如设为ScopeData,格式选择为Structurewithtime(带时间的结构型变量)。参数设置的情况如图2-17所示。,图2-17 示波器显示窗口的参数设置,将建模存盘为lizi1.mdl,然后在MATLAB下运行如下命令(参见图2-18):clear;%工作空间初始化open lizi1.mdl;%这时将看到建模模型文件被打开sim(lizi1.mdl);%启动模型仿真,显示出仿真波形whosNameSizeBytesClassScopeData1x13578structarrayGrandtotalis307elementsusing3578bytes,图2-18 通过命令启动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所示。读者可以对比示波器上得到的波形(参见图2-18)。我们在此说明了Simulink与MATLAB工作空间进行数据交换的一种方法。,图2-19 示波器数据传入工作空间后进行波形作图显示,事实上,MATLAB提供了许多途径用于与Simulink的数据交互。通过Sources子模型库中的FromWorkspace模块可以从工作空间中读入仿真所需要的输入数据通过Sinks子模型库中的ToWorkspace模块可以将Simulink中产生的数据回送到工作空间,从而可以实现MATLAB编程与Simulink模型相结合的混合仿真。下面的例子中,我们将从工作空间中读入输入波形数据,通过Simulink建模仿真之后,将仿真结果再送回工作空间中进行处理。通过这种方式,我们可以通过MATLAB程序产生任意的数据送入Simulink中加以处理,然后再利用MATLAB强大的统计分析功能来处理数据。,首先建立Simulink模型,如图2-20所示。图中使用了Sources子模型库中的FromWorkspace模块,以便从工作空间中读入数据。使用Sinks子模型库中的ToWorkspace模块,将输出数据回送到工作空间。设计输入为阶跃信号,仿真建模中使用Continuous子库中的微分器来获得系统的阶跃响应的微分冲激响应。,图2-20 用于测试与MATLAB工作空间进行数据交互的Simulink模型,图2-20中,FromWorkspace模块的参数设置如图2-21所示。其中,Data项使用了两个矢量T,U参数组合。T表示离散时间序列,U表示对应于离散时间序列T的波形取值。Sampletime项设置为0,表示采用仿真求解器的默认采样时间间隔。Interpolatedata选中表示允许数据插值,并且通过数据外插(Extrapolation)方式在最终数值后形成输出。,图2-21 FromWorkspace模块的参数设置,模型中我们使用了两个ToWorkspace模块,分别接不同的输出信号,这两个ToWorkspace模块的输出变量分别为simout1和simout2。数据格式可设置为带时间的结构变量,如图2-22所示。仿真求解器采用ode45算法。但是为了获得更为精细的波形,可以设定求解的初始步长和最大步长为0.01,最小步长为auto,仿真时间段为020s。其余参数采用默认值。建模完成之后,将模型文件存盘为lizi2.mdl文件。然后编写如下的MATLAB仿真程序pro4lizi2.m,对模型进行仿真和分析。,图2-22 ToWorkspace模块的参数设置,程序2-14%pro4 lizi2.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所示。,图2-23 MATLAB编程调用Simulink模型的仿真结果(阶跃响应和冲激响应),4.Simulink子系统的构造实际建模过程中,常常会遇到一些较为复杂的系统,难以在一张模型方框图中画出来。这时候,就需要以层次结构来绘制框图。也就是首先将大系统中的一些具有独立功能的部分封装起来,形成一些子系统,然后再利用这些子系统来构成整个系统。Simulink允许构造多层子系统,即在子系统中仍然允许包含若干下层子系统。,Simulink中子系统的构造方法举例说明如下:首先将Simulink模块库中Ports&Subsystems子模块库中的Subsystem模块拖动到新建的模型文件窗口中,双击该Subsystem模块,就会打开该子系统,其输入用In模块表示,输出用Out模块表示,一个子系统可以有多个输入、输出。然后利用Simulink模型库中的连续时间Continuous子库中的传递函数TransferFcn模块,数学操作MathOperations子库中的增益Gain模块、求和Sum模块以及乘法模块Product构成子系统。该子系统有两个输入端口,一个输出端口。在子系统外部输入端口加入两个信号源,在其输出端口接上示波器,如图2-24所示。,图2-24 子系统的构建和仿真,系统参数的设置如表2-2所示。,表2-2 lizi3.mdl模型的参数设置,注意,在仿真运行之前,必须将子系统中的以变量表达的参数值确定下来。这些参数值只需在MATLAB命令窗口中输入即可。例如,在命令窗口中输入参数值后运行仿真:G=1;A=1;B=0.001;C=1;sim(lizi3.mdl);仿真运行结果如图2-25所示。,图2-25 lizi3.mdl的仿真结果,如果结合循环语句来自动修改参数,并将仿真结果送回MATLAB工作空间,则我们可以让计算机在不同系统参数条件下自动仿真若干次,得出响应的结果。如果不使用命令“sim”来进行仿真,那么我们只好通过Simulink可视化界面来修改系统参数,并通过使用鼠标点击仿真运行工具来启动仿真,这样效率将是十分低下的。由此可见MATLAB编程与Simulink结合进行仿真的优势。,5.封装子系统子系统中的参数(如增益G),传递函数系数等等,是通过MATLAB工作空间传入的,这就破坏了子系统内部的隐藏性质。为此,Simulink中给出了一种解决办法,也就是所谓的模块封装技术。对子系统封装以后,它就可以像Simulink模块库所提供的模块一样来使用,子系统模块内部的参数可以通过一个设计的对话框来输入。,对一个用户自己建立的系统模型进行封装,首先要通过上面所讲的方法将系统模型转化为子系统,然后选中该子系统图标,选择“Edit|MaskSubsystem”菜单项(快捷键为Ctrl+M),然后设置所弹出的对话框内容。下面我们对lizi3.mdl中建立的子系统进行封装。打开lizi3.mdl,另存为lizi4.mdl,然后选中子系统模块,将其改名为Mysubsystem,选择“Edit|MaskSubsystem”菜单项,弹出Maskeditor对话框,如图2-26所示。,图2-26 封装编辑器对话框(Icon标签和Parameters标签),在Icon标签下主要是对封装模块的图标进行设置,可以设置图标的边框是否可见,图标是否透明,是否旋转,以及绘图单位等,还可使用命令来绘制图标,该标签下部给出了绘制图标的语法举例。在Parameters标签下可以设置子系统的参数,本例中需要设置的参数就是G,A,B,C四个。参数设置可以采用编辑框(Edit)、弹出列表(Popup)或复选框(Checkbox)形式,读者可参考在线帮助。我们这里只使用编辑框。设置参数如图2-26右面对话框所示。,图2-27所示是设置封装编辑器对话框中的“Initialization(初始化)”标签和“Documentation(文档)”标签的情况。一般情况下,初始化标签可使用默认值;文档标签的三部分将分别显示在封装模块的参数设置对话框和帮助文档中,如图2-28所示。,图2-27封装编辑器对话框(Initialization标签和Documentation标签),图2-28 封装模块的参数设置对话框以及帮助文档,对于已经封装的模块,采用“Edit|EditMask”(快捷键为Ctrl+M)菜单项就可以重新编辑封装对话框。在编辑封装对话框的下部有一个Unmask按钮(参见图2-26),单击该按钮可以去除封装。若需要修改子系统的内部结构,可以使用菜单项“Edit|Lookundermask”(快捷键为Ctrl+U)来打开子系统结构,从而对子系统方框图进行修改。,6.组建用户自定义模块库如果建立了许多自定义的子系统,并且已经封装好了,而这些已经封装的自定义模块又是会反复使用的,就像Simulink提供的模块库中那些模块一样,在这种情况下,就有必要对这些自定义的重用性较好的模块进行建库,以方便管理和反复使用,同时也可以作为新的专业库提供给其他用户使用。Simulink提供了建库手段,具体方法是:用“simulink”命令打开Simulink库浏览器,从其菜单中选择“New|Library”,新建一个空白的模块库窗口,然后将欲建库的模块用鼠标拖入该库文件窗口中即可。,可用“File|Modelproperties”菜单项来修改自建库的属性,最后存盘,例如存为myku.mdl文件。以后需要使用时,在MATLAB命令窗口中键入“myku.mdl”即可开启该模型库窗口,其中的自定义模块与Simulink提供的标准库中的模块的使用方法完全相同。自定义模块库存盘之后将处于锁定状态,如果要对库中的模块进行修改,可以再次打开该模块库,然后用“Edit|Unlocklibrary”解锁,修改并存盘之后,库自动恢复为锁定状态。图2-29给出了一个用户自定义模块库的例子。,图2-29 一个用户自定义模块库的例子,7.2 S 函 数Simulink进行仿真本质上就是利用某种求解算法对系统状态方程进行求解的过程。Simulink是如何将系统的状态方程与系统方框图模型联系起来的呢?事实上,Simulink设计了固定格式的S函数接口,通过S函数可将系统的数学方程表达形式与方框图表达形式联系起来。,通过编写和使用S函数,用户也可以构建出采用Simulink普通模块难以搭建出来的系统模型,大大增强了Simulink的灵活性。S函数可以用MATLAB语言书写,也可以采用C、C+、Fortran等语言编写。S函数还可以进行编译,以提高执行速度。Simulink内建的标准模块库就是用S函数编写并进行编译后形成的。,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(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),n个状态数的情况: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),无记忆系统是一般系统的特例,其状态数为0。例如:设计一个放大器系统,将信号放大2.7倍,则该系统是无记忆的,故状态数为0,状态矩阵x=是空矩阵,而输出方程为y=f0(t,x,u)=Du(t)=2.7u(t)对于离散时间系统,其状态方程表现为差分方程组的形式。对于更一般的系统,都有以下共同特征:一个输入向量u,一个输出向量y,一个状态向量x,这些向量可以是连续的,也可以是离散的,还可以是连续、离散混合的,如图2-30所示。,图2-30 一般系统的抽象数学模型,输入向量、输出向量和状态向量之间的数学关系可以通过如下方程来表达: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是离散状态部分。,在Simulink的S函数中,相应地将状态向量分为连续状态部分和离散状态部分,对于没有状态的模块(即无记忆系统),状态向量x为空矩阵。,2.MATLAB语言的S函数模板 MATLAB语言的S函数编写方法是固定的,MATLAB提供了标准S函数的模板sfuntmpl.m,文件在Toolboxsimulinkblocks目录下。其代码如下:程序functionsys,x0,str,ts=sfuntmpl(t,x,u,flag)switchflag,case0,%初始化部分,sys,x0,str,ts=mdlInitializeSizes;case1,%计算导数sys=mdlDerivatives(t,x,u);case2,%差分方程递推更新sys=mdlUpdate(t,x,u);case3,%计算输出sys=mdlOutputs(t,x,u);case4,%取得下一步仿真的时间sys=mdlGetTimeOfNextVarHit(t,x,u);,case9,%终止sys=mdlTerminate(t,x,u);otherwise%Unexpectedflags出错处理error(Unhandledflag=,num2str(flag);end%sfuntmpl函数结束%=%mdlInitializeSizes模型初始化函数,返回:%sys是系统参数,%x0是系统初始状态,若没有状态,取%str是系统阶字串,通常设为%ts是取样时间矩阵,对连续取样时间,ts取00%若使用内部取样时间,ts取-10,-1表示继承输入信号的采样周期%=functionsys,x0,str,ts=mdlInitializeSizes%模型初始化函数sizes=simsizes;%取系统默认设置sizes.NumContStates=0;%设置连续状态变量的个数sizes.NumDiscStates=0;%设置离散状态变量的个数,sizes.NumOutputs=0;%设置系统输出变量的个数sizes.NumInputs=0;%设置系统输入变量的个数sizes.DirFeedthrough=1;%设置系统是否直通sizes.NumSampleTimes=1;%采样周期的个数,必须大于等于1sys=simsizes(sizes);%设置系统参数x0=;%系统状态初始化str=;%系统阶字串总为空矩阵ts=00;%初始化采样时间矩阵,%=%mdlDerivatives模型计算导数连续状态部分的计算,返回连续状态的导数%=functionsys=mdlDerivatives(t,x,u)sys=;%根据状态方程(微分方程部分)修改此处%=%mdlUpdate状态更新计算离散状态部分%=functionsys=mdlUpdate(t,x,u),sys=;%根据状态方程(差分方程部分)修改此处%=%mdlOutputs计算输出信号,返回模块的输出%=functionsys=mdlOutputs(t,x,u)sys=;%根据输出方程修改此处%=%mdlGetTimeOfNextVarHit计算下一步的仿真时刻,该函数仅当在mdlInitializeSizes%函数中的采样时间向量定义了一个可变离散采样时间ts为-20时才被使用,%=functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%例如,下一步仿真时间是1s之后sys=t+sampleTime;%=%mdlTerminate终止仿真设定,完成仿真终止时的任务%=functionsys=mdlTerminate(t,x,u)sys=;%程序结束,Simulink进行仿真的过程是:仿真开始时,调用各个模块的初始化函数进行系统初始化,接着进入仿真阶段,反复调用模型中的每一个模块,即调用这些模块对应的S函数,对每个模块执行诸如计算输出、计算连续函数导数以及计算离散函数的更新值等任务。在仿真结束时,调用终止仿真函数以结束仿真任务。具体某时刻Simulink执行什么任务,取决于当时调用S函数时传入的标志flag的值。,进入第一次仿真循环之前为仿真初始化阶段,Simulink调用S函数的初始化功能mdlInitializeSizes完成初始化任务:首先初始化一个包含S函数信息的Simulink结构(sys),然后设置输入和输出端口的数量和大小,并设置模块的采样时间、分配存储空间以及估计数组大小等等。进入仿真循环后,Simulink首先调用mdlGetTimeOfNextVarHit计算下一采样点时间(仅仅对于可变离散采样时间的模块),然后计算主要时间同步输出,得出当前时间步的模块的输入输出端口和状态取值。接着更新主要时间步的离散状态,最后进行辅助时间步的积分过程。在辅助时间步调用S函数的输出和导数计算,并定位过零区间,于是完成一次仿真循环。,当Simulink跳出仿真循环后,就进入了仿真的最后阶段。这一阶段通过调用S函数中的mdlTerminate来执行一些必要的任务,最后结束仿真。,3.利用S函数建模和仿真的过程在Simulink模块浏览器中可以打开S函数的编程例子加以学习,如图2-31所示。这里我们通过几个S函数的建模实例来说明S函数建模和仿真的过程。,图2-31 在Simulink模块浏览器中打开S函数的编程例子,例如:一个单输入、单输出的三阶线性时不变系统,其状态变量设为x1,x2,x3,输入为u(t),输出为y(t),并有状态空间方程:,(2-45),以及输出方程:y=4x2(2-46)以矩阵表示为,(2-47),或简写为通式:其中:,(2-49),(2-48),(2-50),据此可以编写S函数myHsapp.m如下:程序2-16functionsys,x0,str,ts=myHsapp(t,x,u,flag)%连续系统状态方程%x=Ax+Bu%y=Cx+Du%定义A,B,C,D矩阵,A=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);%注意要将ABCD送入初始化case 1%flag=1计算连续系统状态方程(导数)sys=mdlDerivatives(t,x,u,A,B,C,D);,case 3%flag=3计算输出sys=mdlOutputs(t,x,u,A,B,C,D);case 2,4,9%其它作不处理的flagsys=;otherwise%异常处理error(Unhandledflag=,num2str(flag);end%主函数结束,%-functionsys,x0,str,ts=mdlInitializeSizes(A,B,C,D)%初始化函数sizes=simsizes;sizes.NumContStates=3;%连续系统的状态数为3sizes.NumDiscStates=0;%离散系统的状态数,对于本系统此句可不用sizes.NumOutputs=1;%输入信号数目是1sizes.NumInputs=1;%输出信号数目是1sizes.DirFeedthrough=0;%该系统不是直通的sizes.NumSampleTimes=1;%这里必须为1sys=simsizes(sizes);,str=;%通常为空矩阵x0=0;0;0;%初始状态矩阵x(零状态情况)ts=0 0;%连续取样时间%初始化函数结束%-functionsys=mdlDerivatives(t,x,u,A,B,C,D)%系统状态方程函数sys=A*x+B*u;%系统状态函数结束%-%系统输出函数functionsys=mdlOutputs(t,x,u,A,B,C,D),sys=C*x;%注意,如果使用语句sys=C*x+D*u;代替上句,即使D=0,也要将%sizes.DirFeedthrough设为1,即系统存在输入输出之间的直通项%系统输出函数结束接下来,将该S函数与系统方框图联系起来。打开一个新建建模文件窗口,利用Simulink基本模块库中的UserdefinedFunctions子库中的SFunction模块建立S函数模块方框图。,打开其参数设置对话框,在其Sfunctionname栏填入S函数的名称myHsapp。建立Simulink仿真系统模型文件为lizi5.mdl,其系统结构和参数设置如图2-32所示。,图2-32 利用S函数建模与测试系统仿真参数,设置仿真求解器为ode45,仿真时间为040s。其余参数为默认值,得到的仿真结果如图2-33所示。可见,S函数模块和传递函数模块得出了相同的结果,这也就验证了S函数编写的正确性。,图2-33 利用S函数建模与测试系统仿真参数,Simulink工具箱中带有许多S函数编程的例子,其M文件的S函数实例文件在SimulinkBlocks子目录下,文件名和实现的功能参见表2-3,,表2-3 SimulinkBlocks子目录下的一些S函数的例子,

    注意事项

    本文(matlab教学PPT第7讲MATLAB仿真SIMULINK.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开