1第6章动态仿真集成环境-Simulink本章内容(1)注意区分书中Simulink库浏览窗口与Simulink模块库的区别;(2)熟悉Simulink模块库和Simulink附加模块库中常用标准模块的功能及其应用;(3)利用Simulink标准模块在用户模型窗口中建立控制系统仿真模型;(4)熟悉利用Simulink进行系统仿真的两种仿真方法:菜单法和行命令法;(5)仿真算法和参数以及常用标准模块参数的设置;(6)仿真结果的三种处理方法,并注意输出接口模块(Out1)和将数据输出到工作空间模块(ToWorkspace)的不同用法及其利用它们输出信号时的仿真参数的设置;(7)利用MATLAB求解非线性系统的线性化模型;(8)熟悉子系统的两种建立方法:菜单法和模块法,以及条件子系统的应用(9)模型封装模板编辑器的参数设置及系统模型的封装步骤。26.3连续系统的数字仿真创建好系统模型后,就可以在用户模型窗口中利用Simulink的菜单命令或者在MATLAB的命令窗口中利用MATLAB的指令操作方式对系统进行仿真了。36.3.1利用Simulink菜单命令进行仿真Simulink的菜单命令方式对于交互式工作非常方便,这种在Simulink窗口下进行的仿真最直观,它可使用Scopes或者其他的显示模块,在运行仿真时观察仿真结果。仿真的结果还可保存到MATLAB工作空间的变量中,以待进一步的处理。另外,在这种仿真方式下,无论是对框图模型本身还是对数值算法及参数的选择都可以很方便地修改和操纵。模型及仿真参数不仅在仿真前允许编程和修改,而且在仿真过程中也允许作一定程度的修改。在这种菜单仿真方式下,在一个系统仿真的同时,允许打开另一个系统。4在启动仿真开始之前,首先应选择系统模型窗口中的SimulationConfigurationParameters命令来设置仿真算法和参数,这时将给出一个如图6-31所示的对话框,它包括七个页面和四个功能按钮。其中,前两个页面是经常需要用户改变设置的。图6-3151.求解器(Solver)页面该页面用来设置仿真开始和停止时间、选择仿真算法和指定算法的参数等,如图6-31所示。1)仿真时间(Simulationtime)仿真时间是由参数对话框中的开始时间(StartTime)和停止时间(StopTime)框中的内容来确定的,它们均可修改,缺省的开始时间为0.0秒,停止时间为10.0秒。在仿真过程中允许实时修改仿真的终止时间(StopTime)62)求解器选项(Solveroptions)仿真涉及常微分方程组的数值积分,由于动态系统行为的多样性,目前还没有一种算法能够保证所有模型的数值仿真结果总是准确、可靠的。为此,Simulink提供了变步长(Variable-step)和定步长(Fixed-step)两大类数值积分算法供用户选择。对于变步长算法,可以设定最大步长(Maxstepsize)、最小步长(Minstepsize)、起始步长(Initialstepsize)、相对容差(Relativetolerance)和绝对容差(Absolutetolerance)。对于定步长算法,可以设定固定步长(Fixedstepsize)和选择仿真模式(Mode)。因此为得到准确仿真结果,用户必须针对不同模型仔细选择算法及参数。7(1)仿真算法在求解器选项(Solveroptions)最上面的两个选择框中,可选择相应的仿真算法。•变步长(Variable-step)算法可以选择的变步长算法有以下几种。缺省情况下,连续系统采用ode45;离散系统采用discrete。•定步长(Fixed-step)算法可以选择的定步长算法有以下几种。8(2)仿真步长在求解器选项(Solveroptions)下面的选择框中。对于变步长算法,可以设定最大步长(Maxstepsize)、最小步长(Minstepsize)和起始步长(Initialstepsize)。对于定步长算法,可以设定固定步长(Fixedstepsize)。缺省情况下,这些参数均为auto,即这些参数将被自动地设定。对于变步长算法,采用变步长的方法进行仿真,仿真开始时是以起始步长作为计算步长的,在仿真过程中,算法会把算得的局部估计误差与误差容限相比较,在满足仿真精度的前提下,自动拉大步长,提高计算效率。9一般情况下,最大步长可以选择一个较大的数值,但如果选择的过大,可能会出现在仿真点处仿真结果是正确的,但仿真曲线不是很光滑的情况,故最大步长一般选择为仿真范围的1/50。通常,最小步长都取的很小,但如果取的太小,会增大计算量。仿真的最小步长和最大步长均可在仿真过程中进行实时修改。10(3)误差容限相对容差(Relativetolerance)和绝对容差(Absolutetolerance)中所填写的容差值是用来定义仿真精度的。在变步长仿真过程中,算法会把算得的局部估计误差与这里填写的容许误差限来相比较,当误差超过这一误差限时会自动地对仿真步长作适当的修正,所以说在变步长仿真时,误差限的设置是很重要的,它将关系到微分方程求解的精度。误差限经常在0.1和1e-6之间取值,它越小,积分的步数就越多,精度也越高,但是过小(如1e-10)由于计算舍入误差的显著增加,而影响整个精度,误差限在仿真过程中允许实时修改。11(4)仿真模式(Mode)在采用定步长(Fixed-step)算法进行仿真时,需要在求解器选项(Solveroptions)下面的仿真模式(Mode)选择框列表中选择仿真模式。①多任务模式(MultiTasking)如果检测到模块间进行非法采样类转换,即直接相连模块之间以不同的采样类运算,单模式会出现错误。在实时多任务系统中,任务间非法采样类转换可能导致当另一个任务需要时,某一任务输出不能用。通过此类转换检查,多任务模式可以帮助创建现实中的合法的多任务系统模型,模型中何处表示是同时执行的任务。12②单任务模式(SingleTasking)该模式不检查模块间的采样类转换。该模式对于建造单任务系统模型非常有用,在此类系统中,任务同步不是问题。③自动模式(Auto)当选用此模式时,如果模型中所有模块运行于同样的采样率下,Simulink使用单任务模式;如果模型包含有不同采样率运行的模块,则使用多任务模式。133)输出选项(Outputoptions)在输出选项(Outputoptions)中,可以选择以下三种输出。(1)细化输出(Refineoutput)(2)产生额外的输出(Produceadditionaloutput)(3)只产生指定的输出(Producespecifiedoutputonly)142.数据输入/输出(DataImport/Export)页面该页面可以将仿真的输出结果保存到MATLAB的工作空间变量中,也可以从MATLAB的工作空间取得输入和初始状态,如图6-32所示。图6-32151)从MATLAB的工作空间装入输入和初始状态(Loadfromworkspace)系统开始仿真时的初始状态,通常在模块中指定,也可以在DataImport/Export页的Loadfromworkspace域的初始状态(Initialstates)编辑框中重新指定,以重新装载在模块中指定的初始条件。在仿真运行期间,Simulink也可以把MATLAB工作空间的变量值当作模型的输入信号,它是通过输入端口输入到模型中。要指定这一选项,在DataImport/Export页面的Loadfromworkspace域中,选中Input选框,然后在其后的编辑框中输入外部输入变量(缺省内容为[t,u]),并选择Apply或OK按钮。16外部输入可以采用下列任何一种形式。(l)外部输入矩阵(Array)外部输入矩阵的第一列必须是升序排列的时间向量,其余列指定输入值。每列代表不同输入模块信号序列,每行则是相应时间的输入值。如果选择了数据插值(interpolatedata)选项,必要时Simulink对输入值进行线性插值或外推。输入矩阵的总列数必须等于n+l,其中n为进入模型的信号输入端口总数。如果在MATLAB工作空间中定义了t和u,则可以直接采用缺省的外部输入标识[t,u]。17(2)具有时间的结构(StructurewithTime)Simulink可以从MATLAB工作空间中读入结构形式的数据,但其名字必须在Input后的编辑框中指定。输入结构必须有两个字段:时间和信号。时间字段包含一列仿真时间的向量;信号字段包含子结构数组,每个对应模型的一个输出端口;每个子结构有字段:值;值字段包含相应输入端口的输入列向量。18(3)结构(Structure)结构格式与具有时间的结构格式一样,只是其时间字段为空。如在上例中,可以指定:ex.time=[]。(4)外部输入时间表达式(Externalinputtimeexpression)时间表达式可以是任何MATLAB表达式、计算行向量,其长度与模型输入端口的信号数一样。192)将结果保存到MATLAB的工作空间变量中(Savetoworkspace)Simulink将仿真结果存放在SavetoWorksPace域中指定名字的向量中。它可以通过在WorkspaceI/O页面的Savetoworkspace域中,任意选择时间(Time)、状态(States)、输出(Output)和最终状态(Finalstate)选框,并指定返回的变量名。变量名即可任意指定,也可采用默认值。若要将某一结果输出到多个变量中,可在此参数输入框中同时指定多个变量名,各变量名之间用逗号分开后外加方括号。指定的返回变量使得Simulink将时间、状态、输出和最终状态值的轨迹输出到MATLAB工作空间中,以便进一步对其分析。如果想保存一个稳定状态的结果并从那个已知的状态重新启动仿真,那么保存最终状态(Finalstate)将非常有用。20可以通过Saveoptions域来指定输出存储的格式和限制保存输出的数量。其格式选项可以采用下列任何一种形式。(l)矩阵(Array)Simulink将所选定的以上输出结果分别存储在SavetoWorkspace域中各编辑框命名的矩阵中,缺省值分别为tout,xout,yout和xFinal。矩阵的每一列与模型的一个输出或状态相对应,第一行与初始时间相对应。21(2)具有时间的结构(StructurewithTime)Simulink保存模型的结果到一个结构中,该结构的名字是由SavetoWorkspace域中各编辑框命名的,该结构有两个顶层字段:时间和信号。时间字段包含仿真时间向量;信号字段包含子结构数组,每个子结构对应一个模型输出端口或与具有状态的模块相对应。每个子结构包含三个字段:值、标签、模块名。值字段包含相应输出端口的输出向量;标签字段指定与输出相连的信号标签;模块名字段指定输出端口的名字。Simulink存储模型的状态到一个结构组成相同的模型输出结构中。22(3)结构(Structure)该格式与前面所述的结构基本一样,只是不保存仿真时间到结构的时间字段中。要限制保存数据的行数,可选择Limitrowstolast编辑框,并指定保存的行数。要使用抽取(Decimation)因子,在Decimation文本框中输入数值。例如,在Decimation文本框中输入的值为2时,产生的点将每隔一个保存一个。此外如果计算出来的结果太多,也可以改变Limitrowsoflast(限用最后的点数)引导的编辑框来进行设置,在一般情况下,该参数选择为1000也就足够了。233.优化(Optimazition)页面在该页面中,可以选择不同的选项来提高仿真性能以及产生代码的性能。其中,SimulationandcodeGeneration栏设置对模型仿真及代码生成共同有效;CodeGeneration栏设置仅对代码生成有效。244.诊断(Diagnostics)页面在诊断页面中,可以设定一致性检查(Consistencychecking)和边界检