第九章第九章SimulinkSimulink仿真仿真本章主要讲解:�Simulink的概念及其应用;�Simulink搭建系统模型的方法及特点;�Simulink环境中的仿真及调试。目录目录9.19.1SimulinkSimulink概述概述9.29.2模型的创建模型的创建9.39.3子系统及其封装子系统及其封装9.49.4过过零零检检测测9.59.5代代数数环环9.6回调函数9.7运行仿真9.8仿真结果分析9.9模型的调试9.10S函数9.11实例习习题题9.19.1SimulinkSimulink概述概述9.1.1Simulink的概念9.1.2Simulink的工作环境9.1.3Simulink的工作原理9.1.4Simulink模型的特点9.1.5Simulink里的数据类型9.1.6Simulink里的模块和模块库9.1.19.1.1SimulinkSimulink的概念的概念Simulink是MATLAB提供的实现动态系统建模和仿真的软件包,是MATLAB相对独立的重要的组成部分。Simulink的突出特点是支持图形用户界面(GUI),模型由模块组成的框图来表示。启动Simulink(6.0版)有如下3种方式:�在MATLAB的命令窗口直接键入命令Simulink;�用鼠标左键单击MATLAB工具条上的按钮;�在MATLAB菜单上选择【File】|【New】|【Model】选项。运行后会弹出如下图所示的Simulink模块库浏览器窗口。使用第3种方式打开时还会弹出如下图所示的新建模型窗口。1.【File】菜单2.【Edit】菜单3.【View】菜单9.1.29.1.2SimulinkSimulink的工作环境的工作环境4.【Simulation】菜单5.【Format】菜单6.【Tools】菜单7.【Help】菜单Simulink模块库浏览器各部分的用途,如下图所示。11..【【FileFile】】菜单菜单【File】菜单中各选项的名称与功能如下表所示。【File】菜单22..【【EditEdit】】菜单菜单【Edit】菜单中各选项的名称与功能如下表所示。【Edit】菜单33..【【ViewView】】菜单菜单【View】菜单中部分主要选项的名称与功能如下表所示。【View】菜单44..【【SimulationSimulation】】菜单菜单【Simulation】菜单如下图所示。【Simulation】菜单各选项的功能如下:�【Start】:开始运行仿真;�【Stop】:停止仿真;�【ConfigurationParameters】:设置仿真参数和选择解法器;�【Normal】、【Accelerator】、【External】分别表示正常工作模式、加速仿真和外部工作模式。55..【【FormatFormat】】菜单菜单【Format】菜单用于设置字体、屏幕颜色、模块名的显示、模块显示颜色、信号和端口类型和宽度等。该菜单部分主要选项的名称与功能如下表所示。【Format】菜单66..【【ToolsTools】】菜单菜单【Tools】菜单中部分主要选项的名称与功能如下表所示。【Tools】菜单77..【【HelpHelp】】菜单菜单【Help】菜单中部分主要选项的名称与功能如下表所示。【Help】菜单9.1.39.1.3SimulinkSimulink的工作原理的工作原理1.图形化模型与数学模型间的关系2.图形化模型的仿真过程11.图形化模型与数学模型间的关系.图形化模型与数学模型间的关系现实中每个系统都有输入、输出和状态3个基本要素,以及它们之间随时间变化的数学函数关系,即数学模型。图形化模型也体现了输入、输出和状态间随时间变化的某种关系,如下图所示。只要这两种关系在数学上是等价的,那么就可以图形化模型代替数学模型。22.图形化模型的仿真过程.图形化模型的仿真过程Simulink的仿真过程包括如下几个阶段:�模型编译阶段;�连接阶段;�仿真环阶段。(1)模型编译阶段Simulink引擎调用模型编译器,将模型编译成可执行文件。编译器完成以下任务:�计算模块参数的表达式以确定它们的值;�确定信号属性(如名字、数据类型等);�传递信号属性以确定未定义信号的属性。�优化模块;�展开模型的继承关系(如子系统);�确定模块运行的优先级;�确定模块的采样时间。(2)连接阶段Simulink引擎按执行次序创建运行列表,初始化每个模块的运行信息。(3)仿真环阶段Simulink引擎从仿真的开始到结束,在每一个采样点按运行列表计算各模块的状态和输出。仿真环阶段又分成以下两个子阶段:�初始化阶段:该阶段只运行一次,用于初始化系统的状态和输出;�迭代阶段:该阶段在定义的时间段内按采样点间的步长重复运行。9.1.49.1.4SimulinkSimulink模型的特点模型的特点Simulink建立的模型具有以下3个特点:�仿真结果的可视化;�模型的层次性;�可封装子系统。9.1.59.1.5SimulinkSimulink里的数据类型里的数据类型1.Simulink支持的数据类型2.数据类型的传播3.使用复数信号Simulink在仿真开始之前和运行过程中会自动确认模型的类型安全性,以保证该模型产生的代码不会出现上溢或下溢。11..SimulinkSimulink支持的数据类型支持的数据类型Simulink支持所有的MATLAB内置数据类型,除此之外Simulink还支持布尔类型。打开Simulink模型窗口中的菜单Help下的选项BlockSupportTable,打开如下图所示的帮助窗口,总结了所有Simulink库中的模块所支持的数据类型。打开Simulink模型窗口的【Format】|【Port/SignalDisplays】|【PortDataTypes】,查看信号的数据类型和模块输入/输出端口的数据类型,如下图所示。22.数据类型的传播.数据类型的传播相连模块的输出/输入信号所支持的数据类型如果是不相同的,在仿真中就会弹出错误提示对话框,告知出现冲突的信号和端口。此时可以尝试在冲突的模块间插入DataTypeConversion模块来解决类型冲突。33.使用复数信号.使用复数信号Simulink默认的信号值都是实数,但在实际问题中有时需要处理复数信号。在Simulink中通常用下面两种方法来建立处理复数信号的模型,如下图所示。�在模型中加入Constant模块,并将其参数设为复数。�分别生成复数的虚部和实部,再用Real-ImagetoComplex模块把它们联合成一个复数。�分别生成复数的幅值和幅角,再用Magnitue-AngletoComplex模块把它们联合成一个复数。9.1.69.1.6SimulinkSimulink里的模块和模块库里的模块和模块库模块库提供各种基本模块,它按应用领域以及功能组成若干子库,并按树状结构进行显示。模块是Simulink建模的基本元素。下表详细介绍了Simulink中常用子库中常用模块的功能。CommonlyUsedBlocks子库Continuous子库Discontinuities子库Discrete子库LogicandBitOperations子库续表MathOperations子库续表Ports&Subsystems子库续表Sinks子库Sources子库User-DefinedFunctions子库9.29.2模型的创建模型的创建1.模块的基本操作2.创建模型的基本步骤3.模型文件格式11.模块的基本操作.模块的基本操作下表汇总了Simulink对模块进行操作的部分方法。对模块进行操作续表下表汇总了Simulink对直线进行操作的部分方法。对直线进行操作双击模块将会弹出【参数设置】对话框,如下图所示的增益模块,进而设置参数值。鼠标右键单击模块并在弹出的上下文菜单中选择【BlockProperties】,会弹出属性设置对话框,如下图所示,其中包括如下三项内容。�【General】页;�【BlockAnnotation】页;�【Callbacks】页。(1)【General】页�Description:用于对该模块在模型中的用法进行注释;�Priority:定义该模块在模型中执行的优先顺序;�Tag:为模块添加文本格式的标记。(2)【BlockAnnotation】页用于指定在图标下显示模块的参数、取值及格式。(3)【Callbacks】页用于定义该模块发生某种指定行为时所要执行的回调函数。对信号进行标注以及对模型进行注释,方法如下表所示。在连线上反映信息对注释进行处理22.创建模型的基本步骤.创建模型的基本步骤利用Simulink进行系统建模和仿真的一般步骤如下。�绘制系统流图;�启动Simulink模块库浏览器,新建一个空白模型窗口;�将所需模块放入空白模型窗口中,按系统流图的布局连接各模块,并封装子系统;�设置各模块的参数以及与仿真有关的各种参数;�保存模型,模型文件的后缀名为.mdl;�运行并调试模型。33.模型文件格式.模型文件格式Simulink还提供了通过命令行建立模型和设置模型参数的方法。Simulink将每一个模型(包括库)都保存在一个以.mdl为后缀的文件里,称为模型文件。一个模型文件就是一个结构化的ASCII文件,它包括关键字和各种参数的值。9.39.3子系统及其封装子系统及其封装9.3.1创建子系统9.3.2封装子系统9.3.3自定义模块库9.3.19.3.1创建子系统创建子系统1.子系统的作用2.子系统的创建方法3.子系统创建示例11.子系统的作用.子系统的作用通过子系统可以把复杂的模型分割成若干个简单的模型,具有以下优点:�减少模型窗口中模块的个数,使得模型窗口整洁。�把一些功能相关的模块集成在一起,可以复用。�通过子系统可以实现模型图表的层次化。22.子系统的创建方法.子系统的创建方法Simulink有如下两种创建子系统的方法。�通过子系统模块来创建子系统:先向模型中添加Subsystem模块,然后打开该模块并向其中添加模块;�组合已存在的模块集。33.子系统创建示例.子系统创建示例例通过Subsystem模块创建子系统。具体步骤如下。�从Ports&Subsystems中复制Subsystem模块到模型中,如下图所示;�用鼠标左键双击Subsystem模块图标打开如下图所示Subsystem模块编辑窗口;�在新的空白窗口创建子系统,然后保存;�运行仿真并保存。例通过组合已存在的模块创建子系统。具体步骤如下。�创建如下图所示的系统;�选中要创建成子系统的模块,如下图所示;�选择【Edit】|【CreateSubsystem】菜单,结果如下图所示;�运行仿真并保存。9.3.29.3.2封装子系统封装子系统1.封装的作用2.封装的过程3.封装示例封装后的子系统与Simulink提供的模块一样拥有图标,并且用鼠标左键双击图标时会出现一个用户自定义的【参数设置】对话框,实现在对话框中设置子系统中的参数。11.封装的作用.封装的作用�子系统中各个模块的参数通过参数对话框就可以进行设置。�为子系统创建可以反映子系统功能的图标。�可以避免用户在无意中修改子系统中模块的参数。22.封装的过程.封装的过程�选择需要封装的子系统,并选择【Edit】|【MaskSubsystem】菜单进行封装。�选择【Edit】|【Editmask】菜单,这时会弹出如下图所示的封装编辑器,通过它进行各种设置。�单击【Apply】或【OK】按钮保存设置。33.封装示例.封装示例例简介封装的过程。具体步骤如下:(1)建立如下图所示的含有子系统的模型,并设置子系统中Gain模块的Gain参数为一变量m。(2)选中模型中的Subsystem子系统,选择【Edit】|【MaskSubsystem】菜单进行封装,进而选择【Edit】|【Editmask】菜单(或用鼠标右键单击子系统弹出上下文菜单,选择【Editmask】菜单)打开封装编辑器,如下图所示。(3)按照如下图所示设置【Icon页