转载 Simulink中文帮助

更新时间:2023-12-06 20:19:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

转载 Simulink中文帮助

原文地址:Simulink中文帮助作者:快乐宝贝 How simulink works 一、简要介绍:

Simulink可以对实际的动态系统建模,仿真并实时分析系统输出的变化。 利用Simulink仿真动态系统分两步:

1,用户创建一个结构框图,利用Simulink模型编辑器,通过系统的输入,传递函数,输出描述数学关系

2,仿真系统的模型,并指定开始时间和结束时间 二、Simulink动态系统建模

仿真结构图是动态系统数学模型的图形化描述,数学模型由一组方程组表示,包括比例,微分,微分方程。 创建动态系统模型的要素

用户可以用Simulink软件包建模、仿真和分析模型输出随时间而改变的系统,这样的系统通常是指动态系统:利用Simulink,用户可以搭建很多领域的动态系统,包括电子电路、减振器、刹车系统和许多其他的电子、机械和热力学系统。 使用Simulink仿真动态系统包括两个过程。首先,利用Simulink的模型编辑器创建被仿真系统的模型方块图,系统模型描述了系统中输入、输出、状态和时间的数学关系,然后使用Simulink根据用户输入的模型信息在一个时间段内仿真动态系

统。本节综合给出了用户在Simulink中创建动态系统模型时需要理解和掌握的所有建模要素。 1方块图

Simulink方块图是动态系统数学模型的图形化描述,动态系统的数学模型是由一组方程来表示的,而由方块图模型所描述的数学方程就是众所周知的代数方程、微分方程和(或)差分方程。

一个典型的动态系统方块图模型是由一组模块和相互连接的线(信号)组成的,这些方块图模型都来源于工程领域,如反馈控制系统理论和信号处理理论等。每个模块本身就定义了一个基本的动态系统,而方块图中每个基本动态系统之间的关系就是通过模块之间相互连接的线来说明的,方块图中的所有模块和连线就描述了整个动态系统。

方块图模型中的每个模块都属于一个特定的Simulink模块类型,模块的类型决定了模块的输出、输入、状态与时间的关系,在建立系统模型图时,Simulink方块图中可以包含任意数目、任意类型的模块,Simulink中的模块包括非虚拟模块和虚拟模块。非虚拟模块是基本系统,虚拟模块则是为了模型方块图组织结构的简化而建立的,它在模型方块图所描述的系统方程定义中不起任何作用、如Bus Creator模块和Bus Selector模块就是虚拟模块,它们的作用只是把信号\捆绑\在一起用来简化方块图,而且也增加了模型的可读性。

在Simulink中,方块图(或者说模型)表示的是\基于时间的方块图\,其含义如下:

(1)Simulink方块图定义了信号和状态变量的时间关系,方块图的解是通过求解整个时间过程中所有的函数方程来获得的,这个时间过程就是由用户指定的\起始时刻\开始,至用户定义的\终止时刻\结束,每次计算都是在一个时间步内求解这些函数关系的。

(2)信号表示的是整个时间范围内的量值,在方块图的起始时刻到终止时刻之间每个时间点上都定义了信号。

(3)信号和状态变量之间的关系是通过模块所表示的一组方程定义的,每个模块都是由一组方程(也称为模块方法)组成的,这些方程定义了输入信号、输出信号和状态变量之间的关系。方程定义中的所有值称为参数,也就是方程中的系数。 2系统函数

每个Simulink模块的类型都是与一组系统函数相关联的,系统函数指定了模块的输入、状态和输出之间的时间关系,这个系统函数包括:

●输出函数:它表示的是系统输出、输入、状态和时间的关系。

●更新函数:它表示的是系统离散状态的将来值与当前时刻、输入和状态之间的关系。

●微分函数:它表示的是系统连续状态对时间的微分、模块当前状态值和输入之间的关系。

这里,t是当前时间,x是模块的状态,u是模块的输入,y是模块的输出,xd是模块的离散状态的微分,是模块连续状态的微分,在进行仿真过程中,Simulink利用系统函数计算系统的状态值和输出值。 3状态

Simulink模块可能包含有状态,状态(state)是确定模块输出的变量,它的当前值是模块状态和(或)前一时刻输入值的函数,含有状态的模块必须存储前一时刻的状态值,用以计算当前时刻的状态值,因此说,状态是可以保持的。由于含有状态的模块必须存储前一时刻的状态值和(或)输出值用以计算当前时刻的状态值,因此这样的模块都需要内存。

模块的输出是模块输入、状态和时间的函数,描述模块输出对输入、状态和时间的特定函数取决于模块的类型。Simulink模型有两种状态类型:离散状态和连续状态。连续状态是连续变化的,如汽车的位置和速度;离散状态是连续状态的近似,这些状态在有限的时间间隔(周期性或非周期性)内进行更新(重新计算),例如,在数字里程表中显示的汽车位置就是离散状态,这些位置在每秒内进行更新,如果离散状态时间间隔趋近于零,那么离散状态也相当于连续状态。

Simulink模块明确定义了模型的状态,尤其是需要某些先前时刻的输出或所有输出才能计算当前输出的模块,这些模块明确定义了两个时间步之间需要保存的一组状态,因此说,这样的模块都是有状态的:图2-1是含有状态的模块中输入、输出和状态的图形表示。

模型中状态的总数是模型中所有模块定义的所有状态之和,为了确定模型中的状态总数,Simulink需要分析模型中所包含的模块类型,然后再确定模块类型所定义的状态数目,Simulink会在仿真汇编阶段进行这个工作。

举例来说,Simulink的Integrator(积分器)模块就是-个含有状态的模块。

Integrator模块输出的是由仿真起始时刻到当前时刻的输入信号的积分值,当前时刻的输出值取决于在此时刻之前Integrator模块的所有输入值,事实上,积分值只是Integrator模块的一个状态。再举一个例子,Simulink的Memory模块也是一个含有状态的模块,Memory模块存储当前仿真时刻的输入值,并在此时刻之后输出这些值,因此Memory模块的状态就是前-时刻的输入值。

Simulink的Gain模块是个无状态模块,Gain模块的输出值是输入信号值乘以增益常数,它的输出完全是由当前的输入值和增益来决定的。此外,sum模块和

Product模块也是无状态模块,它们的输出均是当前输入的函数,因此都是无状态的。 3.1连续状态

计算连续状态需要知道状态的变化率或微分,由于连续状态的变化率自身也是连续的(即它自身也是-个状态),因此计算当前时间步上连续状态的值需要从仿真的起始时刻开始对状态的微分值进行积分,这样,在Simulink中建立连续状态的模型需要Simulink能够表示积分操作并描述每一时刻上状态微分的计算过程。

Simulink方块图使用Integrator模块表示积分过程,并利用与Integrator模块相连的一串操作模块表示计算状态微分的方法,这串与Integrator模块相连的模块实际上就是图形化的常微分方程(ODE)。

通常,除了简单动态系统,对由对常微分方程所描述的真实世界动态系统中状态的积分是不存在解析法的,对状态积分需要利用称为ODE算法的数值方法,这些不同的方法需要在计算精度和计算负荷之间进行折衷选择。Simulink给出了最通用的ODE积分方法的计算机实现,并允许用户在仿真一个系统时确定使用那一种方法来积分由Integrator模块表示的状态。

计算当前时间步上连续状态的值需要从仿真的起始时刻开始对这个状态值进行积分,数值积分的精度取决于两个时间步间隔的大小,通常,时间间隔越小,仿真精度越高。有些变时间步的ODE算法可以根据状态的变化率自动改变时间步的大小,以满足整个仿真期间的精度要求。Simulink允许用户在选择定步长或变步长算法时均可指定仿真步长的大小,若想使计算负荷最小,变步长算法会选择最大步长,这样,对于模型中变化最快的状态,Simulink所选择的步长仍然能够满足用户指定的精度要求,也就保证了模型中计算的所有状态均满足用户指定的精度。 3.2离散状态

计算离散状态需要知道当前时刻和在此时刻之前所有状态值之间的关系,Simulink会在状态的更新函数中参考这种关系。由于离散状态不仅依赖于先前时间步的值,而且还依赖于模型的输出值,因此,在Simulink中建立离散状态的模型也需要建立状态与先前时间步上系统输入之间的关系模型。Simulink方块图使用特定类型的模块,即离散模块来建立状态与系统输入之间的关系模型。

与连续状态-样,离散状态在设置上也可以限制仿真步长的大小,对于有些模型,如果要求模型状态的所有采样点都必须在仿真步上,那么必须明确指定仿真步长,Simulink利用离散求解器实现这些设置要求、Simulink给出两种离散求解器:定步长离散求解器和变步长离散求解器。定步长离散求解器确定满足模型中所有离散状态的所有采样时间的固定步长,而不考虑在采样时刻状态是否改变。相比之下,

变步长离散求解器会根据状态的改变而改变步长,以确保只在状态值发生改变的时刻开始采样。 3.3混合系统的状态

混合系统是既有离散状态又有连续状态的系统。严格地说,混合系统模型应该是既有离散采样时间,又有连续采样时间的模型,这些采样时间都来自于离散状态和连续状态。求解这样的系统模型,在选择步长时既要能满足对连续状态积分的精度要求,又要满足对离散状态采样时间的限制,因此,Simulink利用传递由离散求解器确定的下一个采样时间作为连续求解器的附加限制求实现这个要求,也就是说,连续求解器选择的步长在步进仿真的同时不能超过下-个采样时刻,连续求解器可以缩短下一个采样时间的步长以满足它的精度限制,但即使精度满足要求,它所选择的步长也不能越过下一个采样时刻。 4模块参数

Simulink中的许多标准模块的关键属性都是可以参数化的。例如,Simulink的Gain模块中的gain变量就是一个参数,每个参数化模块都有一个在编辑或仿真模型时用以设置参数值的对话框,用户可以使用MATLAB表达式指定参数值,

Simulink会在仿真运行前求取表达式的值。与然,用户也可以在仿真运行期间改变参数值,也就是说,可以用交互的方式确定最适合的参数值。

一个参数化模块可以用来表示-组相似模块。例如,当创建模型时,用户可以分别把每个Gain模块的gain参数设置为不同的值,从而让每个Gain模块执行不同的任务。正因为Simulink允许用每个标准模块来表示一组相似模块,所以,模块的参数化大大提高了标准Simulink模块库的建模能力。

Simulink中许多模块的参数都是可调的,可调参数(Tunable Parameter)是指在Simulink仿真模型的过程中,用户可以改变这些参数的数值。例如,Gain模块的gain参数是可调的,当进行仿真运算时,用户可以改变模块的gain值。如果模块的参数不可调,在运行仿真期间,Simulink会关闭设置参数的对话框,正因为如此,为了提高仿真的执行速度,除了希望改变的参数外,用户可以将模型中的所有其他参数均指定为不可调,这可以加速大模型的执行,而且也会加快代码的生成速度。

5模块采样时间

标准的Simulink模块包括连续模块和离散模块,连续模块对连续变化的输入信号进行连续响应,而离散模块只对采样时刻(即固定时间间隔的整数倍时刻)的输入信号进行响应。所有的Simulink模块都有采样时间,包括没有定义状态的模块,如Gain模块。

连续模块可以有无限小的采样时间,称为连续采样时间;离散模块可以通过

Sample time参数指定采样时间,离散模块在两个连续的采样时刻之间会一直保持其输出值,举例来说,Constant模块及Continuous模块库中的模块都是连续模块,Discrete Pulse Generator模块和Discrete模块库中的模块都是离散模块。 此外,向许多Simulink模块既可以作为连续模块,也可以作为离散模块,这要取决于激励这些模块的模块是连续模块还是离散模块,如Gain模块。对于这些既不是连续模块也不是离散模块的模块,用户可以指定隐含的采样时间,也就是从模块输入端继承的采样时间,如果模块的任-输入是连续的,那么隐含的采样时间也是连续的,否则,隐含的采样时间就是离散的。而且,如果所有输入的采样时间是输入最短时间的整数倍,那么隐含的离散采样时间就等于最短的输入采样时间,否则,隐含的采样时间就等于输入的基本采样时间(Fundamental sample Time),组采样时间的基本采样时间被定义为这组采样时间的最大整数因子。

Simulink可以为方块图标注颜色,用以表示模块所包含的采样时间,如黑色(连续模块)、

洋红(常值)、黄色(混合)、红色(最快的离散模块)等。 6用户模块

Simulink允许用户创建用户模块库,而且用户可以在之后的建模过程中使用自建的模块。用户模块的创建可以利用图形的方式,也可以通过编程来实现。 如果要用图形的方式创建用户模块,则必须绘制模块的方块图,然后把这个方块图放置到Subsystem模块中,并为Subsystem模块提供一个参数对话框;如果要用编程的方式创建模块,则必须编写M文件或者编写包含模块系统函数的MEX文件,最终的结果文件被称为S-函数,然后将S-函数与用户所创建系统模型中的Simulink S-Function模块相关联,用户可以通过把模型中S-Function模块放置到

Subsystem模块中,并为该Subsystem模块添加参数框的方式为S-Function模块添加参数框。 7系统和子系统

Simulink方块图可以包含层级,每一层定义了一个子系统,也就是用相互连接的子系统建立复杂系统的模型。子系统是整个方块图的一部分,实际上对方块图的含义没有任何影响,它主要是在方块图的结构组织上提供帮助,使用户的模型图更易读,但它不能定义一个独立的方块图。用户可以用Subsystem模块和Simulink模型编辑器来创建子系统,也可以在子系统内嵌套任意层的子系统来创建层级子系统,此外,用户还可以创建依条件执行的子系统,这样的子系统只有在触发或使能输入时才可以执行。

Simulink把子系统类型分为虚拟子系统和原子子系统。对于虚拟子系统,它是一个虚块,只用于图形显示目的,并不改变整个模型的执行顺序,当确定模块的更新顺序时,Simulink会忽略虚拟子系统的边界。与此相反,对于原子子系统,

Simulink在执行到下一个模块之前会执行子系统内的所有模块,依条件执行的子系统也是原子子系统。缺省时,无条件执行的子系统都被作为虚拟子系统处理,当然,如果要求在执行任意模块之前必须执行所有的子系统,那么用户也可以将一个无条件执行子系统指定为原子子系统。

此外,当准备执行模型仿真时,Simulink会生成一个内部\系统\,找个系统是需要求值的一组模块方法集(即方程),基于时间的方块图并不要求建立这样的系统,Simulink建立这样的内部系统主要是作为管理模型执行的一种手段。严格的说,Simulink把顶层方块图系统作为一个系统,称为根系统,其他来自于非虚拟子系统和模型中其他元素的系统作为底层系统,用户可以在Simulink的调试器窗口中看到这些系统。实际上,创建这个内部系统的动作就是常说的平铺模型层级。 8信号

Simulink使用术语\信号(Signal)\来表示模块的输出值,用户可以指定信号的属性,包括信号名称、数据类型(如8位、16位或32位)、数值类型(实数或复数)以及信号维数(一维或二维数组)。Simulink中的许多模块都可以接受或输出任意数据类型、任意数值类型和任意维数的信号,而其他模块则对可以选择的信号属性进行了限制。

在Simulink方块图中,带有箭头的线表示信号,信号的源对应于Simulink在计算模块方法(方程)过程中将数据写入到信号中的模块,在求取模块方法(方程)的过程中,其他的模块读取这些信号,模块方法可以依据需要的频率读取信号。 9模块方法和模型方法

Simulink中的模块可以表示多个方程,这些方程在Simulink中被描述为模块方法,当用户执行方块图时,Simulink会求取(或执行)这些模块方法的值,这些模块方法的求取在仿真循环内进行。 9.1模块方法

Simulink会为模块方法所执行的函数类型指定类型名称,共用的方法类型包括: l Outputs:给定当前时间步上模块的输入和先前时间步上的模块状态,计算模块输出。

l Update:给定当前时间步上模块的输入和先前时间步上模块的离散状态,计算模块的离散状态值。

l Derivatives:给定先前时间步上模块的输入和状态值,计算当前时间步上模块连续状态的微分值。

对于不同的模块类型,模块方法以不同的方式执行相同模块类型的操作,Simulink的用户接口和文档使用圆点来标识由模块方法执行的特定函数:BlockType.MethodType。

例如,Simulink把计算Gain模块输出的方法表示为Gain.Outputs。在仿真过程中,Simulink调试器会遵守这个命名规则,并使用模块名称来指定方法类型和调用这个方法的模块,如gl.Outputs。 9.2模型方法

除了模块方法,Simulink还提供了一组计算模型属性和模型输出的方法,在仿真过程中,Simulink会同样调用这些方法来确定模型的属性和输出,模型方法通常通过调用相同类型的模块方法来执行不同的任务,例如,模型的Outputs方法根据模型指定的顺序调用它所包含模块的Outputs方法来计算模型的输出。模型的Derivatives方法同样也会调用它所包含模块的Derivatives方法来确定模型状态的微分。 10仿真算法

Simulink利用模型提供的信息,在指定的时间段内连续计算动态系统的状态来仿真动态系统,这个仿真计算系统模型状态的过程就是模型解算的过程。当然,没有任何一个解算算法适用于所有系统,因此,Simulink在Simulation

Parameters(仿真参数)对话框中设置了一组算法程序,用户可以在solvers(算法)参数中选择最适合自己模型的仿真算法。 10.1定步长算法和变步长算法

Simulink算法分为定步长算法和变步长算法两类。

l定步长算法:顾名思义,仿真步长是固定不变的,这些算法依据相等的时间间隔来解算模型,时间间隔称为步长。用户可以指定步长的大小,或者由算法自己选择步长。通常,减小步长可以提高仿真结果的精度,但同时也增加了系统仿真所需要的时间。

l变步长算法:在仿真过程中,步长是变化的,当模型的状态变化很快时,步长减少以提高精度;而当模型的状态变化很慢时,步长增加以避免不必要的计算步数。当然,在每一步中计算步长势必增加了计算负荷,但却减少了仿真的总步数,而且对于快速变化的模型或具有分段连续状态的模型,在保证其所要求的精度的前提下缩短了仿真时间。

10.2连续算法和离散算法

Simulink提供了连续算法和离散算法。

l连续算法:利用数值积分来计算当前时间步上模型的连续状态,当前时刻的状态时由在此时刻之前的所有状态和这些状态的微分来决定的。对于离散状态,连续算法依赖模型中的模块来计算每个时间步上模型的离散状态值。

目前,有很多种数值积分算法可以求取动态系统连续状态的常微分方程(ODE),Simulink提供了多种定步长和变步长的连续算法,用户可以根据自己的实际模型来选择这些算法。

l离散算法:主要用来求解纯离散模型。这些算法只是用于计算下一步的仿真时刻,而不进行其它的运算。它们并不求解连续状态值,而且这些算法依赖模型中的模块来更新模型的离散状态。

Simulink有两种离散算法:定步长离散算法和变步长离散算法。缺省时,定步长算法选择一个步长,选择的步长使仿真速度足以跟踪模型中最快速变化的模块;变步长算法调整仿真步长,以便与模型中离散状态的实际变化率相一致,这对于多速率模型来说可以避免不必要的仿真步数,并因此缩短仿真时间。

注意:用户可以选择连续算法而不是离散算法来求取既包含连续状态,又包含离散状态的模型,这是因为离散算法无法处理连续状态。如果用户为连续模型选择了离散算法,那么Simulink会忽略用户的选择,而使用连续算法来求解模型。 三、Simulink动态系统仿真

本章讨论如何在Simulink中仿真动态系统、包括连续系统、离散系统称混合系统,本章的主要内容包括:

l Simulink动态系统仿真过程介绍Simulink仿真动态系统的工作流程 l离散系统仿真介绍如何在Simulink中设置离散系统的仿真步长、仿真算法和其他仿真参数

l多速率系统仿真多速率系统是包含多个采样时间的离散系统,介绍如何选择多速率系统的采样步长

l连续系统仿真介绍如何在Simulink中建立不同形式的连续系统模型,如何仿真连续系统

l混合系统仿真介绍如何仿真由连续模块和离散模块组成的混合系统

注意:在仿真过程中,Simulink在每个时间步内更新一次模型中各个模块的状态和输出。因此,模型中模块的更新顺序对于仿真结果的有效性是非常重要的。而且,如果在当前时间步,模块的输出是其输入的函数,那么这个模块必须在驱动其输入的模块之后进行更新,否则的话,模块的输出就是无效的。模块存储在模型文件中的顺序并不一定就是仿真过程中模块的更新顺序。因此,Simulink在模型初始化阶段就将所有的模块按照正确的顺序进行了排列。Simulink仿真循环过程如图所示。

MSN空间完美搬家到新浪博客!

特别声明: 1:资料来源于互联网,版权归属原作者 2:资料内容属于网络意见,与本账号立场无关 3:如有侵权,请告知,立即删除。

105103105822

本文来源:https://www.bwwdw.com/article/gygt.html

Top