第7章SIMULINK仿真操作.ppt
MATLAB/SIMULINK实用教程,张化光 孙秋野 刘鑫蕊 编著,第7章SIMULINK仿真操作,SIMULINK是MATLAB的一个软件包,是一个结合了框图界面和交互仿真能力的系统级设计和仿真工具。它以MATLAB的核心数学、图形和语言模块为基础,可以让用户毫不费力地完成算法开发、仿真或者模型验证,而不需要传递数据、重写代码或改变软件环境。,本章以“实例”为主体,加上适量的归纳性表述。读者可以通过练习实例来掌握SIMULINK的一般使用规则和操作方法。鉴于SIMULINK的本质,这些示例涉及数学、物理和若干工程考虑,让读者从这些带背景性的示例体会SIMULINK的精妙之处。,7.1 SIMULINK简介,SIMULINK是基于MATLAB的图形化仿真环境,它使用图形化的系统模块对动态系统进行描述,并在此基础上进行动态系统的求解。利用SIMULINK对动态系统进行仿真的核心在于,MATLAB计算引擎对系统微分方程和差分方程求解。SIMULINK与MATLAB是高度集成在一起的,因此,SIMULINK与MATLAB之间可以灵活地交互操作。,SIMULINK是一个进行动态系统建模、仿真和综合分析的集成软件包。它可以处理的系统包括:线性、非线性系统;离散、连续及混合系统;单任务、多任务离散事件系统。,在SIMULINK 提供的图形用户界面GUI上,只要进行鼠标的简单拖曳操作就可构造出复杂的仿真模型。它外表以方块图形式呈现,且采用分层结构。从分析研究角度讲,这种SIMULINK模型不仅能让用户知道具体环节的动态细节,而且能让用户清晰地了解各器件、各子系统和各系统间的信息交换,掌握各部分之间的交互影响。SIMULINK中的工具包很多,覆盖通信、控制、信号处理、DSP和电力系统等诸多领域,所涉及的内容专业性极强。,由于SIMULINK是基于MATLAaB环境之上的高性能系统及仿真平台。因此,必须首先运行MATLAB,然后才能启动SIMULINK并建立系统的仿真模型。,7.1.1 SIMULINK的窗体介绍,图7-1 两种启动SIMULINK方法的图示说明,图7-2 Simulink库浏览器窗口,7.1.2 一个MATLAB/SIMULINK库自带的演示实例,图7-3 同步电机的演示仿真模型,图7-4 同步电机的演示仿真模型的运行结果,7.1.3 创建一个MATLAB实例,图7-5 模型编辑窗口中工具栏图标的作用示意图,【例7-1】信号源的示波显示示例,如图7-6所示。,图7-6 信号源示波器显示向量波形,图7-7 Mux属性设置,图7-8 添加模块,【例7-2】演示“求和”模块的向量处理能力:输入扩展,如图7-9所示。,图7-9 输入的标量扩展,【例7-3】演示“增益”模块的向量处理能力:参数扩展,如图7-10所示。,图7-10 模块参数的标量扩展,1选择模块集(库),7.2 SIMULINK的基本操作,图7-11 打开的SIMULINK、Simpower System、SIMULINK Extras模块集示意图,(1)模块的选定(2)模块的复制(3)模块大小的改变(4)模块的旋转(5)模块颜色的改变(6)模块名的操作(7)模块参数的设置(8)模块的删除,2选择模块,(1)线的连接(2)线的分支(3)线的折曲(4)线的删除(5)线的标注,3连接模块的操作,4模型的注释,7.3 SIMULINK的基本模块简介,(1)连续系统模块库(Continuous),图7-12 连续系统模块库(Continuous)及其功能说明,(2)断续函数模块库(Discontinuouies),图7-13 断续函数模块库(Discontinuouies)及其功能说明,(3)离散系统模块库(Discrete),图7-14 离散系统模块库(Discrete)及其功能说明,(4)数学运算模块库(Math operations),图7-15 数学运算模块库(Math operations)及其功能说明,(5)查表模块库(Lookup Tables),图7-16 查表模块库(Lookup Tables)及其功能说明,(6)User-Defined Functions模块库,图7-17 自定义模块模块库(User-Defined Functions)及其功能说明,(7)Sink模块库,图7-18 Sink模块库及其功能说明,(8)信号路由模块库(Signal Routing),图7-19 信号路由模块库(Signal Routing)及其功能说明,(9)Logic and Bit Operations模块库,图7-20 Logic and Bit Operations模块库及其功能说明,(10)Port&Subsystems模块库,图7-21 Port&Subsystems模块库及其功能说明,(11)Sources 模块库,图7-22 Sources 模块库及其功能说明,【例7-4】搭建特定的信号源,SIMULINK仿真模型如图7-23所示,仿真结果如图7-24所示。,图7-23 信号源的SIMULINK仿真模型图,图7-24 示波器显示信号源波形,7.4 连续系统建模,1.积分模块的功能【例7-5】带有saturation端口的积分模块示例。,7.4.1 线性系统,图7-25 积分模块SIMULINK示例图及结果,图7-26 积分模块属性设置图,图7-27 设置scope的paramters属性,图7-28 复位积分器的SIMULINK示例图及结果,【例7-6】复位积分器的功用示例。,图7-29 积分模块设置External reset属性图,【例7-7】假设从实际自然界(力学、电学、生态等)或社会中,抽象出有初始状态为0的二阶微分方程,u(t)是单位阶跃函数。试用积分器直接构建求解该微分方程的模型。,2.积分模块直接构造微分方程求解模型,图7-30 求解微分方程的SIMULINK模型,图7-31 利用存放在MATLAB工作空间中的仿真数据所绘制的曲线,【例7-8】求模型用传递函数 表示系统的阶跃响应曲线。,3.传递函数模块,图7-32 由传递函数模块构成的仿真模型,4.状态方程模块,图7-33 状态方程模块构成的仿真模型,图7-34 状态方程模块的参数设置,图7-35 仿真结果,1.喷射动力车的定位控制【例7-10】物理背景:如图7-36所示喷射动力车的定位控制问题。要求设计一个控制器,其目标是:当车辆的位移和速度为正时,控制器点燃右发动机;当车辆的位移和速度为负时,控制器点燃左发动机,直至车辆静止在坐标原点。,7.4.2 非线性系统,图7-36 装置左右喷射发动机的车辆示意图,图7-37 基本仿真模型,图7-38 完整仿真模型,(3)保存数据的利用和分析,图7-39 仿真曲线,2.超混沌rossler系统的仿真,图7-40 超混沌rossler系统的仿真模型,(1)按照上面的数学方程搭建SIMULINK模型,如图7-40所示。,(2)运行SIMULINK模型,图7-41所示为X Y Graph1和scope的仿真结果。,图7-41 仿真结果,【例7-11】求解非线性微分方程 的数值解并绘制函数的波形,其初值为。,图7-42 非线性微分方程的simulink仿真系统,图7-43 Configuration Parameters的参数设置,图7-44 To Workspace模块的参数设置,图7-45 仿真结果,7.5 子系统的创建及封装技术,7.5.1 使用Subsystems模块创建子系统7.5.2 通过压缩已有的模块创建子系统7.5.3 使用if子系统模块创建系统7.5.4 使用while子系统模块创建系统7.5.5 条件执行子系统7.5.6 模块封装技术,建立子系统有如下优点:(1)减少模块个数,使窗口简洁,可读性高;(2)将有特定功能的模块集成在一起,可以实现复用功能;(3)提高系统的运行效率和可靠性;(4)符合面向对象的概念,方便用户分析研究系统时进行概念抽象。,Simulink的常用模块组和接口与子系统(Port&Subsystems)模块组都提供了Subsystem模块(即子系统模块),通过它可以创建子系统。,7.5.1 使用Subsystems模块创建子系统,用鼠标将希望封装为子系统的模块选中,然后选择窗口菜单“Edit|Create Subsystem”,这样就将选中部分封装在一个名为Subsystem的模块中。,7.5.2 通过压缩已有的模块创建子系统,图7-46 if子系统模块创建的仿真模型,【例7-12】利用SIMULINK搭建仿真系统,如图7-46所示。该系统包括作为输入信号的方波和作为触发信号的正弦波两种信号,当方波信号大于0时,“if action”模块的输出为输入信号的绝对值;当方波信号等于0时,“else action”模块的输出为1和1直接的饱和信号,结果如图7-47所示。,7.5.3 使用if子系统模块创建系统,图7-47 仿真结果,【例7-13】使用SIMULINK创建系统,如图7-48所示,系统的输入变量为N,输出变量为1到N的自然数累加和。,7.5.4 使用while子系统模块创建系统,图7-48 while子系统模块创建的仿真模型,1.使能子系统 使能子系统是条件执行子系统的一种,只有当控制信号为正值时,才会在仿真时间步长时执行子系统。“Enabled Subsystem”模块用来创建使能子系统。【例7-14】使能子系统示例,其中正弦波作为输入信号,方波作为使能信号,其仿真模型与仿真结果如图7-49和图7-50所示。,7.5.5 条件执行子系统,图7-49 使能子系统创建的仿真模型(续),图7-49 使能子系统创建的仿真模型(续),图7-50 仿真波形,触发子系统是条件执行子系统的一种,只有当触发信号发生时才会执行。触发子系统包括信号控制输入端口,它将决定执行子系统的条件。,2.触发子系统,可以设置如下三种类型的触发事件来触发不同的子系统:(1)rising:当控制系统由负数或零转换为正数,或者当初始数值为负时,信号转换到零时,将会触发该子系统。(2)falling:当控制系统由正数或零转换为负数,或者当初始数值为正时,信号转换到零时,将会触发该子系统。(3)either:当上述两种情况的任何一种发生时会触发子系统。,【例7-15】触发子系统工作原理仿真示例,其仿真模型和仿真结果如图7-51和图7-52所示。,MATLAB语言是一种基于矩阵/数组的高级语言,具有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。用户既可以用它来快速编写简单的程序,也可以用来编写复杂的应用程序。,3MATLAB语言,图7-51 触发子系统仿真模型,图7-52 触发子系统仿真运行结果,所谓封装(masking)模块,就是将其对应的子系统内部结构隐含起来,以便访问该模块时只出现一个参数设置对话框,将模块中所需要的参数用这个对话框来输入。其实SIMULINK中大多数的模块都是由更底层的模块封装起来的,例如状态空间模块,其内部结构是不可见的,只允许双击打开一个参数输入对话框来读入状态空间模型的参数。,7.5.6 模块封装技术,如果想封装一个用户自建模型,首先用户应该用建立子系统的方式将其转换为子系统模块,选中该子系统模块的图标,再选择“Edit|Mask Subsystem”子菜单项,则可以打开模块封装编辑界面,在该对话框中,有如下内容需要用户填写。,(1)Mask type(封装种类)(2)Drawing Commands(绘图命令)(3)Icon frame(图标边框)(4)Icon Transparency(图标透明与否)(5)Icon rotation(图标是否旋转)(6)Drawing coordinates(绘制坐标系),【例7-16】构造PID控制器的Simulink模型,其数学模型为,并进行模块封装。,图7-53 PID 控制器SIMULINK模型,图7-54 创建子系统,图7-55 设置子系统属性,图7-56 系统封装结果,7.6 离散时间系统和混合系统,7.6.1 逻辑模块Logical Operator【例7-17】用逻辑模块产生“和”、“或”、“异或”和“同或”结果,逻辑模块如图7-57所示。,图7-57 逻辑运算模块,【例7-18】使用初值设计模块实现初值为3,此后值为6的输出信号,其模型如图7-58所示。,7.6.2 初值设计模块IC,在t0时,输出信号为3,此后输出信号为6图7-58 输出信号模型,【例7-19】零阶保持器模块示例,其模型及仿真结果如图7-59与图7-60所示。,7.6.3 单位延时模块Unit Delay和零阶保持器Zero-Order Hold,图7-59 零阶保持器模块构造的仿真模型,图7-60 仿真结果,【例7-20】在离散控制系统中,控制器的更新频率一般低于对象本身的工作频率。而显示系统的更新频率总比显示器的可读速度低得多。假设有某过程的离散状态方程式中u(k)是输入。该过程的采样周期为0.1秒,控制器应用采样周期为0.25秒的比例控制器,显示系统的更新周期为0.5秒。,图7-61 多速率离散系统,图7-62 x1(k)的历史记录,7.7 SIMULINK的分析工具,7.7.1 Sim,Simset 命令及示例7.7.2 模型线性化7.7.3 系统平衡点分析,使用Sim命令可以运行SIMULINK,方便用户从文件运行仿真,可以在程序代码中修改模块参数或在循环结构中实现复杂的仿真过程。调用格式为:t,x,y=sim(model,timespan,options,ut),7.7.1 Sim,Simset 命令及示例,【例7-21】使用MATLAB指令运行SIMULINK模型。(1)搭建SIMULINK模型,如图7-63所示。(2)建立文件运行SIMULINK模型。,图7-63 SIMULINK模型,图7-64 不同初值下的仿真曲线,模型线性化是指将原非线性模型转化为用状态空间矩阵A、B、C和D表示的线性方程组。其中,x、u和y分别表示状态、输入和输出。连续非线性系统近似线性化的命令格式为:A,B,C,D=linmod(model)【例7-22】求非线性系统 在坐标原点处的线性化模型。,7.7.2 模型线性化,图7-65 线性化示例的SIMULINK模型,图7-66 波特图,图7-67 系统的单位阶跃和脉冲响应曲线,【例7-23】求下面用传递函数模型表示的非线性系统在坐标原点处的线性化模型,如图7-68所示。,图7-68 非线性系统的Simulink模型,在非线性系统的分析中,分析系统的稳定性需要分析系统的平衡点。平衡点是指所有状态导数都等于零的点,如果只有部分状态导数为零,则称为偏平衡点,可以通过使用trim命令来决定动态系统的稳定状态点,来分析系统的平衡点性能,调用格式如下:x,u,y,dx=trim(sys,x0,u0,y0,ix,iu,iy,dx0,idx,options,t)【例7-24】系统平衡点的分析。,7.7.3 系统平衡点分析,7.8.1 SIMULINK模型和MATLAB指令配合使用7.8.2 仿真模型和优化指令的协调7.8.3 不同解算器处理Stiff系统时表现7.8.4 代数环的形成7.8.5 代数环的处理,7.8 SIMULINK综合实例,【例7-25】求非线性系统的相平面轨迹、平衡点,并进行稳定性分析。,7.8.1 SIMULINK模型和MATLAB指令配合使用,图7-69 系统的状态轨迹图,图7-70 系统的精良状态轨迹斜率图,图7-71 系统的状态导数向量长度分布曲面,【例7-26】性能指标函数是无法解析计算的,只能通过数值计算进行。本例将综合运用SIMULINK模型和优化指令求取新的性能指标传递函数标准型。,7.8.2 仿真模型和优化指令的协调,图7-72 计算性能指标的SIMULINK模型,图7-73 新老标准型的阶跃响应比较图,7.8.3 不同解算器处理Stiff系统时表现,图7-74 Stiff系统仿真模型,图7-75 不同方法解Stiff方程的结果比较,【例7-28】求方程组 的解。,7.8.4 代数环的形成,图7-76 按原始方程所建的模型,【例7-29】通过重组模型,直接消除代数环,建立等价模型。,7.8.5 代数环的处理,图7-77 消除了代数环的等价模型,图7-78 用“记忆”模块切断代数环的模型,7.9 S函数的设计及应用,如果某些系统不利于底层模块搭建,则可以采用S函数的形式描述,S函数实际上是状态方程的语句描述。S函数是system Function的简称,可以用MATLAB、C、C+、Fortran、Ada等语言来写,这里只介绍怎样用MATLAB语言来写。,S函数可以利用MATLAB的丰富资源,而不仅仅局限于SIMULINK提供的模块,而用c或c+等语言写的S函数还可以实现对硬件端口的操作,以及操作windows API等。先介绍一下SIMULINK的仿真过程以便理解S函数,SIMULINK的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,如系统的输入输出个数、状态初值和采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态和计算连续状态等等,这个阶段需要反复运行,直至结束。,在MATLAB的workspace里打edit sfuntmpl(MATLAB自己提供的S函数模板),用它来具体分析S函数的结构。,7.9.1 S函数模板说明,M文件S函数可用的子函数说明如下。(1)mdlInitializeSizes(flag=0):定义S函数模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。(2)mdlDerivatives(flag=1):计算连续状态变量的微分方程。(3)mdlUpdate(flag=2):更新离散状态、采样时间和主时间步的要求。,(4)mdlOutputs(flag=3):计算S函数的输出。(5)mdlGetTimeOfNextVarHit(flag=4):计算下一个采样点的绝对时间,这个方法仅仅是在用户在mdlInitializeSizes 里说明了一个可变的离散采样时间。,概括说来,建立S函数可以分成两个分离的任务。(1)初始化模块特性包括输入输出信号的宽度,离散连续状态的初始条件和采样时间。(2)将算法放到合适的S函数子函数中去。,为了让SIMULINK识别出一个M文件S函数,用户必须在S函数里提供有关S函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。,1定义S函数的初始信息,S函数默认的4个输入参数为t、x、u和flag,它们的次序不能变动,,2输入和输出参量说明,【例7-30】构造带用户参数的S函数。本例示例构造的函数的功能和SIMULINK下的gain模块功能一样。【例7-31】使用if语句代替switch语句的函数。,7.9.2 S函数示例,图7-80 基于S函数的仿真模型,【例7-32】考虑下面的倒立摆自适应跟踪控制问题,其中,S-Function controllers描述自适应跟踪控制器,S-Function inver-plant描述倒立摆的状态模型,正弦函数作为参考信号,仿真模型如图7-81所示。,图7-81 基于s函数的自适应跟踪控制仿真模型,7.10 SimPowerSystems电力系统专业模块简介,在MATLAB语言涉及电力系统仿真方面以后,它凭借其自身的技术优势,联合众多电力领域的专家,开发了这款电力系统仿真的工具箱,工具箱内部提供了大量经常使用的各种电力元件模型。使用MATLAB对电力系统仿真具有突出的优势。这里对SimPowerSystem模块集中常用的基本模块作简单介绍。,SimPowerSystems模块集对话框如图7-82所示。其中又含有8个子库,点击各子库后将会出现电力系统中各元件模块,供创建模型使用。,图7-82 电力系统模块集所含内容对话框,下面对电路、电工、电子仿真常用的模块进行简介。(1)常用电源模块如图7-83所示。,图7-83 电源模块子库对话框,(2)常用元件模块见图7-84所示。,图7-84 常用元件模块子库(部分)对话框,(3)控制子模块库部分Control Blocks部分模块如图7-85所示。,图7-85 控制模块子库(部分)对话框,(4)测量模块子库Mesaurements如图7-86所示。,图7-86 测量模块子库(部分)对话框,(5)电力电子元件模块子库Power Electronic如图7-87所示。,图7-87 电力电子元件模块子库(部分)对话框,7.11 小 结,SIMULINK是MATLAB的一个最强大的工具箱之一,它提供了一个建立模型方块图的图形用户接口,这个创建过程只需单击和拖动鼠标操作就能完成。使用SIMULINK可以创建包括通信系统物理层和数据链路层、动力学系统、控制系统、数字信号处理系统、电力系统、生物系统和金融系统等的仿真模型,应用非常广泛。本章详细介绍了SIMULINK的各个应用模块的使用,连续系统、离散系统、线性系统和非线性系统的SIMULINK建模过程以及SIMULINK应用实例。,