MATLABSimulink基础

上传人:无*** 文档编号:112716783 上传时间:2022-06-23 格式:DOC 页数:22 大小:1.27MB
收藏 版权申诉 举报 下载
MATLABSimulink基础_第1页
第1页 / 共22页
MATLABSimulink基础_第2页
第2页 / 共22页
MATLABSimulink基础_第3页
第3页 / 共22页
资源描述:

《MATLABSimulink基础》由会员分享,可在线阅读,更多相关《MATLABSimulink基础(22页珍藏版)》请在装配图网上搜索。

1、 . . . . . ROBOT VISION Matlab Simulink根底1 Simulink简介Simulink是一个用来对动态系统进展建模、仿真和分析的软件包,它支持连续、离散与两者混合的线性和非线性系统,也支持具有多种采样频率的系统。在Simulink环境中,利用鼠标就可以在模型窗口中直观地“画出系统模型,然后直接进展仿真。它为用户提供了方框图进展建模的图形接口,采用这种结构画模型就像你用手和纸来画一样容易。它与传统的仿真软件包微分方程和差分方程建模相比,具有更直观、方便、灵活的优点。Simulink包含有Sinks输出方式、Source输入源、Linear线性环节、Nonlin

2、ear非线性环节、Connections连接与接口和Extra其他环节等子模型库,而且每个子模型库中包含有相应的功能模块,用户也可以定制和创建自己的模块。用Simulink创建的模型可以具有递阶结构,因此用户可以采用从上到下或从下到上的结构创建模型。用户可以从最高级开始观看模型,然后用鼠标双击其中的子系统模块,来查看其下一级的容,以此类推,从而可以看到整个模型的细节,帮助用户理解模型的结构和各模块之间的相互关系。在定义完一个模型后,用户可以通过Simulink的菜单或MATLAB的命令窗口键入命令来对它进展仿真。菜单方式对于交互工作非常方便,而命令行方式对于运行一大类仿真非常有用。采用Scop

3、e模块和其他的画图模块,在仿真进展的同时,就可观看到仿真结果。除此之外,用户还可以在改变参数后迅速观看系统中发生的变化情况。仿真的结果还可以存放到MATLAB的工作空间里做事后处理。模型分析工具包括线性化和平衡点分析工具、MATLAB的许多根本工具箱与MATLAB的应用工具箱。由于MATLAB和Simulink是集成在一起的,因此用户可以在这两种环境下对自己的模型进展仿真、分析和修改。Simulink具有非常高的开放性,提倡将模型通过框图表示出来,或者将已有的模型添加组合到一起,或者将自己创建的模块添加到模型当中。Simulink具有较高的交互性,允许随意修改模块参数,并且可以直接无缝地使用M

4、ATLAB的所有分析工具。对最后得到的结果可进展分析,并能够将结果可视化显示。Simulink非常实用,应用领域很广,可使用的领域包括航空航天、电子、力学、数学、通信、影视和控制等。世界各地的工程师都在利用它来对实际问题进展建模、分析和解决。2 Simulink的根本操作2.1 Simulink的运行运行Simulink 有三种方式:w 在MATLAB的命令窗口直接键入“Simulink并回车;w 单击MATLAB工具条上的Simulink 图标;w 在MATLAB菜单上选FileNewModel。运行后会显示图2.1所示的Simulink模块库浏览器,单击工具条左边建立新模型的快捷方式,那么

5、显示如图2.2所示的新建模型窗口,在模型窗口中用户便可通过选择模块库中的仿真模块,建立自己的仿真模型,并进展动态仿真。图2.1 Simulink模块库浏览器图2.2新建模型窗口2.2 常用的标准模块附录C以表格的形式给出Simulink几个根本模块库中的模块功能简介,表格中的模块名和模块库中的模块图标下的名称一致。打开模块库图标窗口的方法非常简单,以连续系统模块库continuous为例,在Simulink模块库浏览窗口中选中Simulink,然后单击Simulink旁边的小加号或者双击鼠标左键,这时就会出现如图2.3所示Simulink根本库窗口,并选择Continuous模块库的图标双击即

6、可进入如图2.4所示的连续系统模块库,可选择相应的模块图标拖至编辑窗口即可。图2.3 Simulink模型库窗口图2.4 continuous模块库2.3 模块的操作图2.5 选取模块1、模块的选取当选取单个模块时,只要用鼠标在模块上单击即可,此时模块的角上出现黑色小方块。选取多个模块时,选取拖拽鼠标的方式把要选择的模块全部包围即可,假设所有被选取的模块都出现小黑方块,那么表示模块被选中,如图2.5所示。2、模块的复制、剪切、删除、移动应用【Edit】【copy】/【cut】/【paste】/【clear】可对选取的模块进展复制,剪切,粘贴,删除等操作,如果要在同一窗口移动模块,那么在模块选中

7、的根底上,用鼠标进展拖拽并放在适宜的位置。3、模块的连接(1)连接两个模块:从一个模块的输出端连到另一个模块的输入端。如果两个模块不在同一水平线上,连线是折线,假设用斜线表示那么需在连接时按住【Shift】。(2)在连线之间插入:把模块用鼠标拖到连线上,然后释放鼠标即可。(3)连线的分支:当我们需要把一个信号输送给不同的模块时,连线要采用分支结构,其操作步骤是:先连好一条线,把鼠标移到支线的起点,并按下【Ctrl】,再将鼠标拖至目标模块的输入端即可。4、模块参数的设置Simulink中几乎所有模块的参数Parameters都允许用户进展设置,只要双击要设置的模块或在模块上按鼠标右键并在弹出的菜

8、单中选择【Block Parameters】就会显示参数设置对话框。例2.1单位负反应二阶系统的开环传递函数为试绘制单位阶跃响应的Simulink结构图。解:1、利用Simulink的Library窗口中的【File】|【New】,打开一个新的工作空间;2、分别从信号源库Sourse、输出方式库(Sink)、数学运算库(Math)、连续系统库Continuous中,用鼠标把阶跃信号发生器Step、示波器Scope、传递函数Transfer Fcn、相加器Sum四个标准功能模块选中,并将其拖至工作平台;3、按要求先将前向通道连接好,然后把相加器Sum的另一个端口与传递函数和示波器间的线段相连,形

9、成闭环反应;4、双击阶跃信号发生器,打开其属性设置对话框,并将其设置为单位阶跃信号,如图2.6所示,同理,将相加器设置为“+-,使传递函数的Numerator设置为“10,Denominator设置为“1 4.47 0;图2.6模块参数设置对话框5、绘制成功后,如图2.7所示,并命名后存盘。图2.7二阶系统Simulink结构图5、模块外形的调整(1)改变模块的大小:选定模块,用鼠标点住其周围的四个黑方块中的任意一个拖动,这时会出现一个虚线的矩形表示新模块的位置,到需要的位置后释放鼠标即可。(2)调整模块的方向:选定模块,选择菜单【Formt】|【Rotate Block 】使模块旋转90,【

10、Flip Block】使模块旋转180。(3)给模块加阴影:选定模块,选择菜单【Formt】|【Show Drop Shadow】使模块产生阴影效果。6、模块名的处理(1)模块名的显示与消隐:选定模块,选择菜单【Format】|【Filp Name】使模块名被隐藏,同时【Show Name】会使隐藏的模块名显示出来。(2)修改模块名:用鼠标左键单击模块名的区域,使光标处于编辑状态,此时便可对模块名进展任意的修改。同时选定模块,选择菜单【Format】|【Font】可弹出字体对话框,用户可对模块名和模块图标中的字体进展设置。例2.2将图2.7所示的结构图进展模块处理。解:1.对模块名进展修改,如

11、单击传递函数模块标题“Transfer Fcn,将其原字符删除,并输入汉字“传递函数,同理将其他模块也改为汉字标题;2.将相加器的标题移至其顶部;3.选中“传递函数模块,并选择菜单【Formt】|【Show Drop Shadow】并将其设置为阴影;4.将模块全部选中,选择菜单【Format】|【Font】通过字体对话框将所有字体设置为“宋体,如图2.8所示。图2.8二阶系统模型3 系统仿真与参数设置在Simulink中建立起系统模型框图后,运行菜单【Simulation】|【Start】就可以用Simulink对模型进展动态仿真。一般在仿真运行前需要对仿真参数进展设置,运行菜单【Simula

12、tion】|【Parameters】完成设置,如图3.1所示。图3.1仿真参数设置对话框3.1 算法设置在Solver里需要设置仿真起始和终止时间、选择适宜的解法Solver并指定参数、设置一些输出选择。1设置起始时间和终止时间Simulation time【Simulation】|【Start time】设置起始时间,而【Stop time】设置终止时间,单位为“秒。2算法设置(Solver option) (1)算法类型设置仿真的主要过程一般是求解常微分方程组,【Solver option】|【Type】用来选择仿真算法的类型是变化的还是固定的。变步长解法可以在仿真过程中根据要求调整运算步

13、长,在采用变步长解法时,应该先指定一个容许误差限【Relative tolerance】或【Absolute tolerance】,使得当误差超过误差限时自动修正仿真步长,【Max step size】用于设置最大步长,在缺省情况下为“auto,并按下式计算最大步长:最大步长=终止时间-起始时间/50。(2)仿真算法设置离散模型:对变步长和定步长解法均采用discrete(no continuous state)。连续模型:可采用变步长和定步长解法。变步长解法有:ode45、ode23、ode113、ode15s、ode23s、ode23t,ode23st ode45:四阶/五阶Runge-K

14、utta算法,属单步解法;ode23:二阶/三阶Runge-Kutta算法,属单步解法;ode113:可变阶次的Adams-Bashforth-Moulton PECE算法,属于多步解法;ode15s:可变阶次的数值微分公式算法,属于多步解法;ode23s:基于修正的Rosenbrock公式,属单步解法。定步长解法有:ode4、ode5、ode3、ode2、ode1 ode5:定步长的ode45解法;ode4:四阶Runge-Kutta算法;ode3:定步长ode23算法;ode2:Henu方法,即改良的欧拉法。ode1:欧拉法。3设置输出选项图3.2 二阶系统的仿真曲线对同样的信号,选择不同

15、的输出选项,那么得到输出设备上的信号是不完全一样的。要根据需要选择适宜的输出选项以达到满意的输出效果。对于例2.2,首先运行菜单【Simulation】|【Parameters】,进展系统的仿真参数设置,如仿真时间为2秒,仿真算法选择定步长的四阶龙格库塔法,然后运行菜单【Simulation】|【Start】进展系统仿真,最后双击示波器,得到系统的仿真曲线如图3.2所示。3.2 工作空间设置工作空间设置Workspace I/O窗口如图3.3所示,可以设置Simulink和当前工作空间的数据输入、输出。通过设置,可以从工作空间输入数据、初始化状态模块,也可以把仿真结果、状态变量、时间数据保存到

16、当前工作空间。图3.3设置Workspace I/O 窗口1、从工作空间读入数据Load from workspaceSimulink通过设置模型的输入端口,实现在仿真过程中从工作空间读入数据,常用的输入端口模块为信号与系统模块库Signals & Systems中的In1模块,其参数设置如图3.4所示。图3.4 输入参数设置对话框设置的方法是选中Input前的复选框,并在后面的编辑框键入输入数据的变量名,并可以用命令窗口或M文件编辑器输入数据。Simulink根据输入端口参数中设置的采样时间读取输入数据。2、保存数据到工作空间(Save to workspace) 可以选择保存的选项有:时间

17、、端口输出、状态、最终状态。选中选项前面的复选框并在选项后面的编辑框输入变量名,就会把相应数据保存到指定的变量中。常用的输出模块为信号与系统模块库Signals & Systems中的Out1模块和输出方式库(Sink)中的To Workspace模块。3、初始化状态模块状态模块初始化的方法有两种:使用模块本身的参数设置和从工作空间读入。用于初始化的变量中的元素个数要和状态模块数目一致,而且当从工作空间载入数据时,模块本身的参数设置初始值无效。4 Simulink模块库4.1 信号源模块库图4.1 Sources模块库信号源模块库Sources见图4.1,主要包括如下模块:w 输入端口模块In

18、1:用来反映整个系统的输入端子。w 常数模块Constant:可以产生一个常数值,一般用做给定输入。w 信号发生器(Signal Generator):可以产生正弦波、方波、锯齿波、随机信号等波形信号,用户可以自由地调整信号的幅值与相位。w 时钟(Clock):生成当前仿真时钟,以秒为单位,在记录数据序列或与时间相关的指标中需要此模块。w 读文件模块(From File)和读工作空间模块(From Workspace):允许从文件或MATLAB工作空间中读取信号作为输入信号。w 阶跃信号模块(Step):生成一个按给定的时间开始的阶跃信号,信号的初始值和终值均可自由设定。常用来仿真系统的阶跃响

19、应,也可用来仿真定时的开关动作。w 其他类型的信号输入模块:带宽限幅白噪声(Band-Limited White Noise),斜坡输入(Ramp),脉冲信号(Pulse Generator),正弦信号(Sine Wave)等。4.2 连续系统模块库连续系统模块库Continuous见图4.2,主要包括如下模块:图4.2 Continuous模块库w 积分器(Integrator):对输入向量或标量进展积分,用户可以设定初始条件。w 微分器(Derivative):将输入端的信号经过一阶数值微分,在输出端输出,在实际应用中应该尽量防止使用该模块。w 传递函数(Transfer Fcn):使用分

20、子、分母多项式的形式给出系统的传递函数模型,分母的阶次必须大于或等于分子的阶次。w 状态空间(State-Space):使用A、B、C、D矩阵形式表示系统的状态空间模型,并可以给出初值。w 零极点(Zero-Pole):用指定的零、极点建立连续系统模型。w 时间延迟(Transport Delay):将输入信号延迟指定的时间后,再传输给输出信号,用户可自行设置延迟时间。4.3 离散系统模块库离散系统模块库Discrete见图4.3,主要包括如下模块:w 零阶保持器(Zero-Order Hold):在一个计算步长将输出的值保持在同一个值上。w 一阶保持器(First-Order Hold):依

21、照一阶插值的方法计算一个步长后的输出值。w 离散传递函数(Discrete Transfer Fcn):与连续传递函数结构一样,可设置采样时间。w 离散状态空间(Discrete State-Space):与连续状态空间结构一样,可设置采样时间。w 离散积分器(Discrete-Time Integrator):实现离散的欧拉积分,可以设置初值和采样时间。w 离散滤波器(Discrete Filter):实现IIR和FIR滤波器。图4.3 Discrete模块库4.4 数学运算模块库图4.4 Math Operations模块库数学运算模块库(Math Operations)见图4.4,主要包

22、括如下模块:w 增益(Gain):输出为输入与增益的乘积。w 加法模块(Sum):对输入进展求代数和,在组建反应控制系统方框图时必须采用此模块,反应的极性+或-可自行设置。w 数字逻辑模块:逻辑运算模块(Logical Operator),组合逻辑模块(Combinatorial Logic)和位逻辑运算模块(Bitwise Logical Operator),可以用这些模块很容易地组建数字逻辑电路。w 数学函数模块:绝对值函数(Abs),三角函数(Trigonometric),数学运算函数(Math Function),复数的实部、虚部提取函数(Complex to Real-Imag),取

23、整函数(Rounding Function)等。4.5 输出模块库输出模块库(Sinks) 见图4.5,主要包括如下模块:w 输出端口模块(Out1):表示整个系统的输出端,系统直接仿真时该输出将自动在MATLAB工作空间中生成变量。w 示波器(Scope):显示数据随时间变化的过程和结果。w x-y示波器(XY Graph):将两路输入信号分别作为示波器的两个坐标轴,并将信号的轨迹显示出来。w 写文件模块(To File)和工作空间写入模块(To Workspace):将输出信号写到文件或工作空间中。w 数字显示模块(Display):将输出信号以数字的形式显示出来。w 仿真终止模块(Sto

24、p Simulation):强行终止正在进展的仿真过程。图4.5 Sinks模块库4.6 非线性系统模块库非线性系统模块库(Discontinuities)见图4.6,主要包括如下模块:w 黏性摩擦(Coulomb & Viscous Friction):在原点不连续,在原点外具有线性增益。w 滞环非线性模块(Backlash):该模块具有滞环非线性特性。w 死区非线性模块(Dead Zone):该模块具有死区非线性特性。w 饱和非线性模块(Saturation):该模块具有饱和非线性特性。图4.6 Discontinuities模块库5 Simulink子系统5.1 Simulink子系统简

25、介Simulink提供的子系统功能可以大增强Simulink系统框图的可读性,可以不必了解系统中每个模块的功能就能够了解整个系统的框架。子系统可以理解为一种“容器,我们可以将一组相关的模块封装到子系统模块中,并且等效于原系统模块群的功能,而对其中的模块我们可以暂时不去了解。组合后的子系统可以进展类似模块的设置,在模型的仿真过程中可作为一个模块。建立子系统有以下两种方法:1、在已有的系统模型中建立子系统设已有Simulink模型图如图5.1所示,选择需要封装的模块区域用Shift键和鼠标左键配合可以达到同样的目的,框选如图5.2所示区域,然后右击,弹出浮动菜单,选择【Creat Subsyste

26、m】,如图5.3所示。创建子系统的结果如图5.4所示。然后双击Subsystem模块,弹出子模块如图5.5所示。图5.1简单的Simulink模型图5.2 框选需要封装的模块图5.3 快捷菜单图5.4 创建子系统后的模型图5.5 子系统模型图子系统的功能就是把相关模块集中起来,并没有删除。系统的结构仍然没有改变。2、在已有的系统模型中新建子系统简单建立模型如图5.6所示,双击Subsystem模块,在弹出的窗口中建立如图5.7所示模型。图5.6 含有子系统的模型图5.7 子系统模型结构这两种创建子系统最后实现的是一模一样的功能,只不过操作顺序不同。前者是先将这个结构搭建起来,然后将相关的模块封

27、装起来;后者那么是先做一个封装容器,然后在封装容器中添加模块。对于一个相对简单的模型我们采用第一种,这种操作一般不会出错,能够顺利搭建模型。而对于非常复杂的系统,我们事先将模型分成假设干个子系统,然后再采用第二种方法进展建模。在使用Simulink子系统建立模型时,有如下几个常用的操作:1.子系统命名:命名方法与模块命名方法类似,是用有代表意义的文字来对子系统进展命名,有利于增强模块的可读性。2.子系统编辑:用鼠标双击子系统模块图标,打开子系统并对其进展编辑。3.子系统的输入:使用Souces模块库中的Input输入模块,即In1模块,作为子系统的输入端口。4.子系统的输出:使用Sinks模块

28、库中的Output输出模块,即Out1模块,作为子系统的输出端口。5.2 Simulink高级子系统应用子系统的最根本目的就是将一组相关的模块包含到一个模块库中,用以简化系统,使得系统的分析更加容易。例如在一个控制系统中,受控系统就可以视为一个子系统,控制器也可以作为一个子系统。从前面的介绍可以发现。这些子系统就如其他一般模块一样,都是具有特定输入输出的模块。对于子系统输入的信号,会产生一个特定的输出信号。但是对于某些特殊的情况,并不是对所有的输入信号都要产生输出信号,只有在某些特定的条件下才会产生输出信号,这就需要输入一个控制信号,控制信号由子系统模块的特定端口输入,这样的子系统称为条件执行

29、子系统。在条件子系统中,输入信号取决于输入信号和控制信号。根据不同的控制信号,可将条件执行子系统分为如下几类:1.触发子系统:在控制信号满足某种变化要求的瞬间可以触发激活子系统,然后保持子系统的输出状态,等待下一个触发信号,它允许用户自己设置在控制信号的上升沿、下降沿或控制信号变化时触发子系统。具体有以下形式:(1)控制信号上升沿触发:子系统在控制信号上升的时候执行。(2)控制信号下降沿触发:子系统在控制信号下降的时候执行。(3)控制信号的双边沿触发:子系统在控制信号符号发生变化时就执行。2.使能子系统:控制信号分成“允许和“禁止两种,在允许信号控制下,可以执行子系统中的模块,否那么将禁止其功

30、能。为保证整个系统的连贯性,在禁止状态下子系统仍然有输出信号,用户可以选择继续保持禁止前的信号,或复位子系统,强制使其输出零信号。3.使能触发子系统:在使能状态下被触发时将激活该子系统,否那么将禁止子系统。5.3 封装子系统在这里要分清楚封装子系统和建立子系统是两个不同的概念,分别介绍如下:建立子系统是将一组完成相关功能的模块包含到一个子系统当中,用一个模块来表示,主要是为了简化Simulink模型,增强Simulink模型的可读性,便于我们仿真和分析。在仿真前,需要打开子系统模型窗口,对其中的每个模块分别进展参数设置。虽然增加了Simulink模型的可读性,但并没有简化模型的参数设置。当模型

31、中用到多个这样的子系统,但是每个子系统中模块的参数设置都不一样时,这就显得很不方便。而且容易出错。为了解决简单建立子系统的不足,我们可以对子系统进展封装。将完成特定功能的相关模块集合到一起,对其中经常要设置的参数设置为变量,然后封装,使得其中变量可以在封装系统的参数设置对话框中统一进展设置,这就大大简化了参数的设置,而且不容易出错,这非常有利于进展复杂的大系统仿真。封装后的子系统可以作为用户的自定义模块,作为普通模块一样添加到Simulink模型中应用,也可以添加到模块库中以供调用。封装后的子系统可以定义自己的图标、参数和帮助文档,完全与Simulink其他普通模块一样。双击封装子系统模块,弹

32、出对话框,可进展参数设置,如果有任何问题,可以单击help按钮,不过这些帮助是创建者自己进展编写的。下面对Simulink封装子系统的几个特点进展总结:1.可以自定义封装子系统的图标;2.双击封装后的子系统,弹出参数对话框,其中对话框是自定义的;3.封装子系统的帮助文档都是自定义编写的;4.封装子系统有自己的工作区域。以上特点为模型设计带来了很大的方便,具体如下:1.将子系统作为一个黑匣子,用户不必了解其中的具体细节而直接使用;2.将子系统中模块的参数设置统一到一个参数对话框,大大方便了系统的参数设置;3.保护知识产权,防止篡改。图5.8是一个PID控制器的Simulink模型,下面将其封装,

33、以便使图形更简单。图5.8 PID控制器模型首先选中所有模块,点击右键单击Create Subsystem,生成Subsystem模块,然后选中Subsystem功能模块,将模块下Subsystem名字改为PID Controller,点击右键选择菜单中的Mask Subsystem进入Mask编辑窗口,就会出现如7.5.9所示的封装编辑器图5.9所示是一编辑好的1con选项卡。使用此编辑器可以实现对封装子系统的各种编辑。封装编辑器中共有4个选项卡。图5.9封装编辑器1.封装编辑器的图标编辑选项卡(1con) 使用图标编辑选项卡用户可以自定义子系统模块的图标。虽然在默认状态下,封装子系统不使用

34、图标,但友好的子系统图标可以使子系统的功能一目了然。用户自定义子系统模块的图标,只需在图标编辑选项卡中的子系统模块绘制命令栏(Drawing commands)中使用绘图命令,并可设置不同的参数控制图标界面的显示。(1)图标显示设置(Icon options) 图标边框设置(Frame):设置图标边框为可见(Visible)或不可见(Invisible);图标透明性设置Transparency:设置图标为透明Transparency或不透明Opaque显示,图标透明性设置Transparency时,图标后面的容可以显示出来;图标旋转性设置Rotation:设置图标固定(Fixed) 或可旋转(

35、Rotates)。图标单位设置Units:设置图标绘制命令所使用的坐标系单位,仅对Plot和text命令有效。其他选项分别为自动缩放(Autoscale),像素(Pixels)以与归一化表示Normalized,其中,Autoscale表示图标自动适合模块大小,与其成比例缩放;Pixels表示图标绘制用像素作为单位;Normalized表示模块大小为单位长度,绘制命令中的坐标值不得超过单位值。(2)图标绘制命令栏Drawing commands封装后的子系统模块的图标均是在图标绘制命令栏中完成绘制的。使用不同的绘制命令可以生成不同的图标。生成的图标可以是描述性文本、子系统数学模型图标、图像或图

36、形等,如果在此栏中键入多个绘制命令,那么图标的显示按照绘制命令的顺序显示。w 描述性文本图标使用以下命令可以在模块图标上显示文本:disp(text) %图标上显示text成文本字样。disp(variablename) % variablename为工作空间中的字符串变量名。Text(x, y, text) %在图标上特定位置显示text成文本字样。text(x,y,stringvariablename) %stringvariablename为已存在的字符串变量名。fprintf(text) fprintf (format variablename) % format表示文本的格式。por

37、t_label(port_type,port_number,lable) %此命令可以显示模块的端口名称,其中port_type为端口类型,取值为input或output,port_number为端口数目,1abel为端口文本。如果需要显示多行文本,可以使用n换行。这时封装后的子系统图标为描述性文本。w 子系统数学模型图标使用dpoly命令可以将封装的子系统模块的图标设置为系统的传递函数,使用droots命令可以设置为零极点传递函数,其命令格式为dpoly(num,den) dpoly(num,den,character) droots(z,p,k) 其中,num,den分别是传递函数的分子和

38、分母多项式;character(取s或z)为系统的频率变量;z,p,k分别是传递函数的零点、极点和系统增益。需要注意的是,参数num,den,z,p,k必须是工作空间中已经存在的变量,否那么绘制命令的执行将出现错误。w 图像或图形图标使用plot或image命令可以将子系统模块的图标设置为图形或图像。其命令为plot(x,y) image(imread(photoname) (3)Examples of drawing commands 该选项组说明了不同的Simulink支持的图标绘图命令。为了能够了解其中命令的语法,可以从命令菜单中选择相应的命令,Simulink就会显示所选择命令的实例,

39、并会在右下角产生一个图标。本例中设置参数如图7.5.10所示,在绘制命令窗口中键入dispPID,其他参数下拉菜单如图中所示。图5.10 封装编辑器Icon选项卡2.封装编辑器的参数设置选项卡Parameters子系统封装的目的之一是提供一个友好的参数设置界面,通常用户不需要了解系统部的细节,只需要提供正确的模块参数即可完成对系统的设计与仿真。只有使用了子系统封装编辑器中提供的参数选项卡Mask Editor 下的Parameters选项卡进展子系统参数设置,才可以说是真正完成了子系统的封装,从而使用户设计出与Sinulink模块库中同样直观的参数设置界面。不同于通常的子系统,封装的子系统具有

40、独立的工作空间,这是由于在没有对子系统进展封装之前,子系统中的模块可以直接使用MATLAB工作空间的变量,通常的子系统可以看作是图形化的MATLAB脚本,即子系统只是将一些由模块实现的命令以图形化的方式组合而成的。而封装的子系统的部参数对系统模型中的其他系统不可见,而且只能使用参数设置选项卡输入。参数设置选项卡中包括如下几种设置容:1)参数设置控制参数设置控制包括添加Add、删除Delete、上移Move up和下移Move Down,分别表示在即将生成的参数设置界面中添加、删除、上移与下移模块需要的输入参数。2)参数描述参数描述是对模块输入的参数作简要的说明,在子系统参数设置界面中用来区别不

41、同的参数,因而其取值最好能够说明参数的意义或作用。3)变量用来指定键入的参数值将要传递给的封装子系统工作空间的相应变量,此处使用的变量必须与子系统中所使用的变量一样。4)参数设置描述参数设置描述包括参数控制类型Type、是否为求值字符串Evaluate、是否可调整Tunable复选框,其中控制类型包括Edit需要用户在参数设置界面中键入参数值,适合多数情况、Checkbox复选框,表示逻辑值和Popup在参数设置界面中弹出参数选项以便选择参数,弹出的参数选项值在Popup栏中输入。在本例中,对PID控制器进展封装,这里针对该例说明如何对封装后的子系统的参数设置选项卡进展设置。在封装子系统模块的

42、参数设置界面中,应该提供控制律所需的P、I、D参数,如图5.11所示。图5.11封装子系统模块系统设置选项卡如图5.11所示,对封装子系统进展参数设置后,双击封装的子系统即可打开子系统的参数设置界面如图5.12所示,用户只需输入正确的参数即可进展系统的仿真设计分析。图5.12 封装后子系统得参数设置界面3.封装编辑器的初始化设置选项卡Initialization图5.13 封装编辑器的初始化设置选项卡初始化设置选项卡中的对话变量表是用户设置了参数设置选项卡后自动生成的。初始化命令一般为MATLAB命令,在初始化命令栏中可以定义封装后子系统工作空间中的各种变量,这些变量可以被封装子系统模块图标绘

43、制命令、其他初始化命令或子系统中的模块使用。初始化命令要用分号来结尾,防止在MATLAB命令窗口中出现回调结果。如果配合在Initialization commands编辑程序,那么可以发挥功能模块的功能来执行特定的操作。Initialization选项卡如图5.13所示。Dialog variables 选项组中的列表显示了与封装子系统参数相关的变量名,用户可以从这个列表中复制参数名到Initialization commands框中,也可以使用这个列表来更改参数变量,用鼠标双击相应的变量就可以更改了,然后按回车确定。Allow library block to modify its con

44、tents复选框仅当封装子系统存在于模块库中才可用,选中这个复选框允许模块的初始化代码修改封装子系统的容。4.封装编辑器的文档编辑选项卡DocumentationSimulink模型库中的模块均提供了模块的简单描述和详细的帮助文档,方便用户的使用和理解,对于用户封装的子系统模块,封装编辑器的文档编辑选项卡可以使用户建立被封装子系统的所有帮助文档。Documentation选项卡如图5.14所示。Mask type:为封装子系统模块参数对话框设置说明的标题,仅供用户来对文档进展分类,它出现在模块参数对话框中和所有的模块封装编辑窗口中,用户可以选择喜欢的名字,当Simulink创建模块对话框时,它

45、会自动在后面添加mask,以区别系统建的模块。Mask description:对封装子系统模块的工作进展说明,可以在说明中使用Enter和Space键,此参数中要尽量对模型进展描述,以便用于其他模型当中。Mask help:该模块的帮助文档,可以单击封装子系统中的Help按钮进展查看,这可以讲述如何对模块的参数进展设置,以便用于其他模型当中。图5.14 封装编辑器的文档编辑选项卡按照上述步骤对PID模型进展封装后得到如以下图5.15所示模型图5.15 封装后的模型6 S函数的建立 S函数就是S-Functions,是System-Functions的缩写。当MATLAB所提供的模型不能完全满

46、足要求时,就可以通过S函数提供应用户编写程序来满足要求模型的接口。S函数使用有固定格式,只能用于基于Simulink的仿真,并不能将其转换成独立于MATLAB的程序。S函数功能非常全面,适用于连续、离散以与混合系统。6.1 S函数的调用格式MATLAB提供了编写S函数的模板文件,该模板文件位于MATLAB根目录toolboxSimulinkblocks下,文件名为sfunmpl.m,该文件给出了S函数完整的框架结构,包含一个主函数和假设干子函数,每一个子函数都对应于一个flag值,用户还可以根据编程需要加以修正。用MATLAB语言编写S函数的调用格式为:Function sys,x0,str,

47、ts=sfun(t,x,u,flag,p1,p2,) 其中sfun是S函数的函数名,t,x,u分别为时间、状态和输入信号,flag为标志位,p1,p2为参数。flag标志位为不同值时调用子函数和功能如表6.1所示。表6.1 S函数的flag值表Flag值 仿真过程 调用的子函数 功能 0 初始化 mdlInitializeSize() 对连续/离散状态变量个数、输入和输出的路数、采样周数个数和值以与状态变量初值x0等进展初始设置。 1 连续状态变量更新 mdlDerivatives () 计算连续状态变量的微分方程并由sys变量返回 2 离散状态变量更新 mdlUpdate() 更新离散状态变

48、量并由sys变量返回 3 计算输出 mdlOutputs() 计算输出信号由sys变量返回 4 计算下一仿真时刻 mdlGetTimeNextVarHit ()计算下一步的仿真时刻由sys变量返回9 终止 mdlTerminate() 终止仿真过程,不返回任何变量 6.2 S函数的模板格式S函数的模板格式为:function sys,x0,str,ts = sfuntmpl(t,x,u,flag) switch flag, case 0, sys,x0,str,ts=mdlInitializeSizes; %调用初始化子函数 case 1, sys=mdlDerivatives(t,x,u);

49、 %调用计算导数子函数 case 2, sys=mdlUpdate(t,x,u); %调用离散状态变量更新子函数 case 3, sys=mdlOutputs(t,x,u); %计算输出子函数 case 4, sys=mdlGetTimeNextVarHit(t,x,u); %计算下一仿真时刻子函数 case 9, sys=mdlTerminate(t,x,u); %终止仿真子函数 otherwise error(Unhandled flag = ,num2str(flag); % flags为其他值提示错误信息22 / 22end 1、初始化子函数function sys,x0,str,ts

50、=mdlInitializeSizes sizes = simsizes; sizes.NumContStates= 0; %设置连续状态变量个数,默认值为0 sizes.NumDiscStates= 0; %设置离散状态变量个数,默认值为0 sizes.NumOutputs= 0; %设置输出变量的个数,默认值为0 sizes.NumInputs= 0; %设置输入变量的个数,默认值为0 sizes.DirFeedthrough = 1; %输入信号是否直接在输出端出现,取值为0或1 sizes.NumSampleTimes = 1; %设置采样周期的个数,默认值为1 sys = simsi

51、zes(sizes); x0 = ; %设定初始值,默认值为 str = ; ts = 0 0; % 0 0用于连续系统,-1 0表示继承其前的采样时间设置2、计算导数子函数function sys=mdlDerivatives(t,x,u) sys = ; %计算结果由sys变量返回3、离散状态变量更新子函数function sys=mdlUpdate(t,x,u) sys = ; %更新后的离散状态变量由sys变量返回4、计算输出子函数function sys=mdlOutputs(t,x,u) sys = ; %计算的输出向量由sys变量返回5、计算下一仿真时刻子函数function s

52、ys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; %设置本函数的调用时间sys = t + sampleTime; %计算下一采样时刻由sys变量返回6、终止仿真子函数function sys=mdlTerminate(t,x,u) sys = ; 【说明】在实际运用时,并不是都要调用所有的子函数,用户可根据实际需要去掉某些值;输入参量的设置可在调用此S函数时给定。例6.1:应用S函数实现增益,使得y=4*u。解:1、用M文件建立文件名为sfunl.m的S函数function sys,x0,str,ts=sfunl(t,x,u,flag) swi

53、tch flag, case 0 %初始化sys,x0,str,ts=mdlInitializeSizes; case 3 %计算输出sys=mdlOutputs(t,x,u); case 1,2,4,9 %非执行的flags值sys= ; otherwise %错误处理error (Unhandled flag=,num2str(flag); end function sys,x0,str,ts=mdlInitializeSizes() sizes=simsizes; sizes.NumContStates=0; sizes.NumDiscStates=0; sizes.NumOutputs

54、=-1; sizes.NumInputs=-1; sizes.DirFeedthrough=1; sizes.NumSampleTimes=1 sys=simsizes(sizes); str= ; x0= ; ts=-1 0; function sys=mdlOutputs(t,x,u) sys=4*u; 2、在Simulink环境下建立名为smodel.mdl的模型图6.1 smodel.mdl模型仿真图其中,S-Functions模块参数设置如图6.2所示,Sine Wave模块中将Frequency设置为2 图6.2 S函数参数设置对话框3、运行smodel模型,得到如图6.3所示仿真曲线图6.3 S函数运行曲线图小结作为MATLAB的重要组成局部,Simulink具有相对独立的功能和使用方法,确切地说它是对基于信号流图的动态系统进展仿真、建模和分析的软件包,它不但支持连续、线性系统仿真,而且也支持离散、非线性系统仿真。Simulink提供了对系统信号流图进展组态的仿真平台,通过Simulink模块库建立系统的仿真模型,可直观、方便地对系统进展动态仿真。子系统和S函数的使用扩展了Simulink系统仿真的功能,提高了其使用性能,使Simulink仿真的优势得以充分发挥。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!