单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,?过程控制工程及仿真基于MATLAB/Simulink?电子工业出版社 出版 2021.4,3.1 Simulink子系统及其封装,3.2 S函数设计与应用,3.3 使用Simulink仿真命令,3.4 Simulink仿真建模的要求,3.5 Simulink控制系统仿真实例,3.6 本章小结,习题与思考,第 3章 Simulink高级仿真技术,内容提要,前面讲述了使用Simulink中现有的模块进行仿真,然而随着模型越来越复杂,用这些根本操作创立的Simulink模变得越来越庞大而难以读懂;,而且,在实际中,可能有些需要用到的模块在Simulink中没有,因此需要掌握一些高级仿真技术,对Simulink的模块进行扩展,以用于高级仿真应用。,3.1 Simulink子系统及其封装,3.1.1 创立子系统,子系统的创立有以下两种方法:,1通过Subsystem模块建立子系统,即采用Signal&Systems 模块库中的Subsystem功能模块,利用其编辑区设计组合新的功能模块。根本操作步骤为:,1翻开Simulink模块库浏览器,新建一个仿真模型。,2翻开Simulink模块库中的Ports&Subsystems模块库,将Subsystem模块添加到模型编辑窗口中。,3双击Subsystem模块翻开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要添加输入模块和输出模块,表示子系统的输入端口和输出端口。这样,一个子系统就建好了。,2通过已有的模块建立子系统,即将现有的多个功能模块组合起来,形成新的功能模块。根本操作步骤为:,1选择要建立子系统的模块,不包括输入端口和输出端口。,2选择模型编辑窗口中的【Edit】【Create Subsystem】命令,这样,子系统就建好了。在这种情况下,系统会自动把输入模块和输出模块添加到子系统中,并把原来的模块变为子系统的图标。,3.1.2 封装子系统,所谓子系统的封装Masking,就是为子系统定制对话框和图标,使子系统本身有一个独立的操作界面,把子系统中的各模块的参数对话框合成一个参数设置对话框,在使用时不必翻开每个模块进行参数设置,这样使子系统的使用更加方便。,子系统封装的根本步骤为:,1创立一个子系统。,2选中子系统,选择模型窗口菜单中的【Edit】【Mask subsystem】选项生成封装模块。,3使用封装编辑器Mask Editor进行设置。,Mask Editor对话框的选项卡,Mask Editor对话框中共包括4个选项卡:Icon、Parameters、Initialization和Documentation。子系统的封装主要就是对这4页参数进行设置。,3.1.4,子系统实例,PID模块为例,讲述子系统的创立及封装。根本步骤如下:,在本例中,需要正弦信号、余弦函数、积分模块、观测结果的模块,分别将Simulink Library Browser中的以下模块依次拖到untitled窗口中;,将对应的模块相连,并将运算结果相加连接。,创立子系统。选定模型,单击Simulink的Library窗口中的【Edit】【Creat Subsystem】,便生产了子系统,为了更加明了,单击模型中的“Subsystem,将其改为“PID。,进行系统封装。选定如图3.5的PID子系统局部,选择Simulink的Library窗口中的【Edit】【Mask Subsystem】命令进行子系统的封装,在弹出的对话框中可以进行一些封装的设置。,3.2 S函数设计与应用,Simulink提供了一个功能强大的对模块库进行扩展的新工具S-Function,它依然是基于Simulink原来提供的内置模块,通过对那些经常使用的模块进行组合并封装而构建出可重复使用的新模块。,S-Function是系统函数System Function的简称,也叫做S函数,是一个动态系统的计算机语言描述。在MATLAB中,用户可以选择用M文件编写,也可以用C或mex文件编写。,S函数提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法,实现函数和Simulink解法器之间的交互。,S函数最广泛的用途是定制用户自己的Simulink模块。它的形式十分通用,能够支持连续系统、离散系统和混合系统。,3.2.1 S函数设计模板,1M文件格式的S函数模板及结构,MATLAB提供了一个模板文件,方便了S函数的编写,该模板文件位于MATLAB根目录toolbox/Simulink/blocks下:,2模板的使用,概括说来,建立S函数可以分成两个别离的任务:,初始化模块特性,包括输入/输出信号的宽度、离散连续状态的初始条件和采样时间。,将算法放到适宜的S函数子函数中去。,3S函数模板文件的输入输出参数,S函数默认的4个输入参数为t、x、u和flag,它们的次序不能变动;,S函数默认的4个输出参数为sys、x0、str和ts,它们的次序不能变动;,使用模板编写S函数,用户只需把S函数名换成期望的函数名称,如果需要额外的输入参量,还需在输入参数列表的后面增加这些参数,因为前面的4个参数是Simulink调用S函数时自动传入的。,Simulink在每个仿真阶段都会对S函数进行调用,在调用时,Simulink会根据所处的仿真阶段为flag传入不同的值,而且还会为sys这个返回参数指定不同的角色,即尽管是相同的sys变量,但在不同的仿真阶段其意义却不相同,这种变化由Simulink自动完成。,3.2.2 S函数设计举例,根本步骤如下:,步骤1:获取状态空间表达式。,步骤2:建立S函数的M文件。,具体的修改正程如下:,1重新命名函数名。,2修改“初始化子函数局部的代码。,3修改“计算模块导数子函数局部的代码。,4修改“更新模块离散状态子函数局部的代码。,5修改“计算模块输出子函数局部代码。,6修改“计算下一个采样时间点子函数局部的代码。,7修改“仿真结束子函数局部的代码。,步骤3:将sfunction_example创立成S函数模块。,步骤4:给状态变量赋初始值。,步骤5:参数设定之后,启动Simulink仿真。,3.3 使用Simulink仿真命令,从命令窗口运行仿真的函数有4个,即sim、simset、simget和set_param。,1sim函数,其调用格式为:t,x,y =sim(modname,timespan,options,data);,2simset函数,simset 函数用来为sim函数建立或编辑仿真参数或规定算法,并把设置结果保存在一个结构变量中。,3simget函数,simget函数用来获得模型的参数设置值。如果参数值是用一个变量名定义的,simget返回的也是该变量的值而不是变量名。如果该变量在工作空间中不存在(即变量未被赋值),那么Simulink给出一个出错信息。,4set_param函数,set_param函数的功能很多,这里只介绍如何用set_param函数设置Simulink仿真参数以及如何开始、暂停、终止仿真进程或者更新显示一个仿真模型。,1设置仿真参数,调用格式为:set_param(modname,property,value,),2控制仿真进程,调用格式为:set_param(modname,SimulationCommand,cmd),3.4 Simulink仿真建模的要求,通常Simulink建模有以下根本要求:,1子系统划分要清晰,2模型要有针对性,3模型精度要恰当,4建模要从总体角度出发,3.5 Simulink,控制系统仿真实例,Simulink求其二级系统的单位阶跃响应。根本求解步骤如下:,1、利用Simulink的Library窗口中的【File】【New】菜单,翻开一个新的模型窗口。,2、分别从信号源库Sourse、输出方式库Sink、数学运算库Math、连续系统库Continuous中,用鼠标把阶跃信号发生器Step、示波器Scope、传递函数Transfer Fcn、相加器Sum四个标准功能模块选中,并将其拖至模型窗口。,3、按要求先将前向通道连接好,然后把相加器Sum的另一个端口与传递函数和示波器间的线段相连,形成闭环反响。,4、双击传递函数,翻开其属性设置对话框,并将其中的“numerator设置为“10,“Denominator设置为“1 3 0,同理,将相加器设置为“+-。,5、绘制成功后,如图3.13所示,并命名后保存。,6、对模型进行仿真。运行后,双击Scope,得到系统的阶跃响应曲线。,控制系统仿真实例续,【例3-4】,根本求解步骤如下:,1、利用Simulink的Library窗口中的【File】【New】菜单,翻开一个新的模型窗口。,2、分别将Simulink Library Browser中的以下模块依次拖到untitled窗口中,连接后便得到整个控制系统的模型。,3、选择【Simulation】菜单下的【Start】命令,开始仿真。,4、在MATLAB工作空间中,看到了变量y的数据。,3.6 本章小结,实际工程中的过程控制系统都是比较复杂的,包含大量的子系统。要更好地利用Simulink进行分析与设计,需要掌握一些高级仿真技术,运用这些技术,能使仿真变得简洁有序、功能强大。,本章只介绍了一些过程控制系统仿真中常用的Simulink高级仿真技术,对于其他的高级仿真技术,读者可在掌握这些根本内容的根底上,通过Help文档和反复练习,触类旁通,到达熟练掌握、运用自如的境界。,习题与思考,