MATLAB程序设计教程(第二版)刘卫国主编中国水利水电出版社第11章SIMULINK动态仿真集成环境Simulink操作基础MATLAB系统仿真模型MATLAB系统的仿真使用命令操作对系统进行仿真MATLAB子系统及其封装技术S函数的设计与应用11.1.1Simulink简介Simulink是MATLAB的重要组成部分,提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能。11.1Simulink操作基础11.1.2Simulink的启动与退出1.Simulink的启动在MATLAB的命令窗口输入simulink或单击MATLAB主窗口工具栏上的Simulink命令按钮即可启动Simulink。Simulink启动后会显示Simulink模块库浏览器(SimulinkLibraryBrowser)窗口。在启动Simulink模块库浏览器后再单击其工具栏中的Newmodel命令按钮,会弹出名字为untitled的模型编辑窗口。在MATLAB主菜单中,选择File菜单中New菜单项的Model命令,也可打开模型编辑窗口。利用模型编辑窗口,可以通过鼠标的拖放操作创建一个模型。2.Simulink的退出为了退出Simulink,只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可。11.2系统仿真模型11.2.1Simulink的基本模块Simulink的模块库提供了大量模块。单击模块库浏览器中Simulink前面的“+”号,将看到Simulink模块库中包含的子模块库,单击所需要的子模块库,在右边的窗口中将看到相应的基本模块,选择所需基本模块,可用鼠标将其拖到模型编辑窗口。同样,在模块库浏览器左侧的Simulink栏上单击鼠标右键,在弹出的快捷菜单中单击Openthe‘Simulink’Libray命令,将打开Simulink基本模块库窗口。单击其中的子模块库图标,打开子模块库,找到仿真所需要的基本模块。11.2.2模块的编辑1.添加模块2.选取模块3.复制与删除模块4.模块外形的调整5.模块名的处理11.2.3模块的连接1.连接两个模块2.模块间连线的调整3.连线的分支4.标注连线5.删除连线11.2.4模块的参数和属性设置1.模块的参数设置Simulink中几乎所有模块的参数都允许用户进行设置,只要双击要设置的模块或在模块上按鼠标右键并在弹出的快捷菜单中选择相应模块的参数设置命令就会弹出模块参数对话框。该对话框分为两部分,上面一部分是模块功能说明,下面一部分用来进行模块参数设置。同样,先选择要设置的模块,再在模型编辑窗口Edit菜单下选择相应模块的参数设置命令也可以打开模块参数对话框。2.模块的属性设置选定要设置属性的模块,然后在模块上按鼠标右键并在弹出的快捷菜单中选择Blockproperties,或先选择要设置的模块,再在模型编辑窗口的Edit菜单下选择Blockproperties命令,将打开模块属性对话框。该对话框包括General、Blockannotation和Callbacks3个可以相互切换的选项卡。其中选项卡中可以设置3个基本属性:Description(说明)、Priority(优先级)、Tag(标记)。例11-1有系统的微分方程,试建立系统仿真模型。操作过程如下:(1)在MATLAB主菜单中,选择File菜单中New菜单项的Model命令,打开一个模型编辑窗口。(2)将所需模块添加到模型中。(3)设置模块参数并连接各个模块组成仿真模型。设置模块参数后,用连线将各个模块连接起来组成系统仿真模型。模型建好后,从模型编辑窗口的File菜单中选择Save或Saveas命令将它存盘。11.3.1设置仿真参数在系统仿真过程中,事先必须对仿真算法、输出模式等各种仿真参数进行设置。其方法是:打开系统仿真模型,从模型编辑窗口的Simulation菜单中选择ConfigurationParameters命令,打开一个仿真参数对话框,在其中可以设置仿真参数。在此对话框中,仿真参数设置被分为9个选项。11.3系统的仿真1.Solver选项设置在对话框左边的树型结构中单击Solver选项,在右边的窗口中会列出所有Solver选项。(1)设置仿真起始和停止时间(Simulinktime)。(2)仿真算法的选择(Solveroptions)。2.DataImport/Export选项设置在仿真参数对话框中选择DataImport/Export选项,会出现一个对话框。相应的选项设置分为3组:Loadfromworkspace、Savetoworkspace和Saveoptions。(1)从工作空间中载入数据(Loadfromworkspace)。(2)保存到工作空间(Savetoworkspace)。(3)保存选项(Saveoptions)。11.3.2启动系统仿真与仿真结果分析设置完仿真参数之后,从Simulation中选择Start菜单项或单击模型编辑窗口中的StartSimulation命令按钮,便可启动对当前模型的仿真。此时,Start菜单项变成不可选,而Stop菜单项变成可选,以供中途停止仿真使用。从Simulation菜单中选择Stop项停止仿真后,Start项又变成可选。为了观察仿真结果的变化轨迹可以采用3种方法:(1)把输出结果送给Scope模块或者XYGraph模块。(2)把仿真结果送到输出端口并作为返回变量,然后使用MATLAB命令画出该变量的变化曲线。(3)把输出结果送到ToWorkspace模块,从而将结果直接存入工作空间,然后用MATLAB命令画出该变量的变化曲线。例11-2利用Simulink仿真曲线。仿真过程如下:(1)启动Simulink并打开模型编辑窗口。(2)将所需模块添加到模型中。(3)设置模块参数并连接各个模块组成仿真模型。设置模块参数后,用连线将各个模块连接起来组成仿真模型。(4)设置系统仿真参数。(5)开始系统仿真。(6)观察仿真结果。例11-3利用Simulink仿真求定积分。仿真过程如下:(1)打开一个模型编辑窗口。(2)将所需模块添加到模型中。(3)设置模块参数并连接各个模块组成仿真模型。(4)设置系统仿真参数。(5)开始系统仿真。(6)观察仿真结果。11.3.3系统仿真实例至此,可以总结出利用Simulink进行系统仿真的步骤:(1)建立系统仿真模型,这包括添加模块、设置模块参数以及进行模块连接等操作。(2)设置仿真参数。(3)启动仿真并分析仿真结果。例11-4有初始状态为0的二阶微分方程x+0.2x'+0.4x=0.2u(t),其中u(t)是单位阶跃函数,试建立系统模型并仿真。方法1:用积分器直接构造求解微分方程的模型。方法2:利用传递函数模块建模。方法3:利用状态方程模块建模。11.4使用命令操作对系统进行仿真从命令窗口运行仿真的函数有4个,即sim、simset、simget和set_param。1.sim函数sim函数的作用是运行一个由Simulink建立的模型,其调用格式为:[t,x,y]=sim(modname,timespan,options,data);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。在使用这两个函数的时候,需要注意必须先把模型打开。11.5子系统及其封装技术11.5.1子系统的建立建立子系统有两种方法:通过Subsystem模块建立子系统和通过已有的模块建立子系统。两者的区别是:前者先建立子系统,再为其添加功能模块;后者先选择模块,再建立子系统。1.通过Subsystem模块建立子系统操作步骤为:(1)先打开Simulink模块库浏览器,新建一个仿真模型。(2)打开Simulink模块库中的Ports&Subsystems模块库,将Subsystem模块添加到模型编辑窗口中。(3)双击Subsystem模块打开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要添加输入模块和输出模块,表示子系统的输入端口和输出端口。这样,一个子系统就建好了。2.通过已有的模块建立子系统操作步骤为:(1)先选择要建立子系统的模块,不包括输入端口和输出端口。(2)选择模型编辑窗口Edit菜单中的CreateSubsystem命令,这样,子系统就建好了。在这种情况下,系统会自动把输入模块和输出模块添加到子系统中,并把原来的模块变为子系统的图标。例11-5PID控制器是在自动控制中经常使用的模块,试建立PID控制器的模型并建立子系统。步骤如下:(1)先建立PID控制器的模型。(2)建立子系统。11.5.2子系统的条件执行1.使能子系统建立使能子系统的方法是:打开Simulink模块库中的Ports&Subsystems模块库,将Enable模块复制到子系统模型中,则系统的图标发生了变化。例11-6利用使能子系统构成一个正弦半波整流器。操作步骤如下:(1)打开Simulink模块库浏览器并新建一个仿真模型。(2)将SineWave、EnabledSubsystem、Scope3个模块拖至新打开的模型编辑窗口,连接各模块并存盘。其中使能信号端接SineWave模块。为了便于比较,除显示半波整流波形外,还显示正弦波,故在示波器属性窗口将Numberofaxes设置为2。使能子系统建立好后,可对Enable模块进行参数设置。(3)选择Simulink菜单中的Start命令,就可看到半波整流波形和正弦波形。2.触发子系统触发子系统是指当触发事件发生时开