《Simulink动态系统建模与仿真第4章》由会员分享,可在线阅读,更多相关《Simulink动态系统建模与仿真第4章(107页珍藏版)》请在金锄头文库上搜索。
1、第4章 Simulink动态系统建模第第4章章 Simulink动态系统建模动态系统建模4.1 创建动态系统模型的要素创建动态系统模型的要素 4.2 Simulink开放式动态系统建模开放式动态系统建模 4.3 动态系统数学模型分类动态系统数学模型分类 4.4 建立方程模型建立方程模型 第4章 Simulink动态系统建模4.1 创建动态系统模型的要素创建动态系统模型的要素 4.1.1 方块图方块图Simulink方块图是动态系统数学模型的图形化描述。动态系统的数学模型是由一组方程来表示的,而由方块图模型所描述的数学方程就是众所周知的代数方程、微分方程和/或差分方程。一个典型的动态系统方块图模
2、型是由一组模块和相互连接的线(信号)组成的,这些方块图模型都来源于工程领域,如反馈控制系统理论和信号处理理论等。每个模块本身就定义了一个基本的动态系统,而方块图中每个基本动态系统之间的关系就是通过模块之间相互连接的线来说明的,方块图中的所有模块和连线就描述了整个动态系统。 第4章 Simulink动态系统建模方块图模型中的每个模块都属于一个特定的Simulink模块类型,模块的类型决定了模块的输出、输入、状态与时间的关系。在建立系统模型图时,Simulink方块图中可以包含任意数目、任意类型的模块。关于模块的类型,这里介绍两个关键的概念Simulink中的模块包括非虚拟模块和虚拟模块。非虚拟模
3、块是基本系统,虚拟模块则是为了模型方块图组织结构的方便化而建立的,它在模型方块图所描述的系统方程定义中不起任何作用,如Bus Creator模块和Bus Selector模块就是虚拟模块,它们的作用只是把信号“捆绑”在一起用来简化方块图,而且也增加了模型的可读性。 第4章 Simulink动态系统建模在Simulink中,方块图(或者说模型)表示的是“基于时间的方块图”。这个含义如下: (1) Simulink方块图定义了信号和状态变量的时间关系,方块图的解是通过求解整个时间过程中所有的函数方程来获得的,这个时间过程就是由用户指定的“起始时间”开始,至用户定义的“终止时间”结束,每次计算都是在
4、一个时间步内求解这些函数关系。 (2) 信号表示的是整个时间范围内的量值,在方块图的起始时间到终止时间之间的每个时间点上都定义了信号。 第4章 Simulink动态系统建模 (3) 信号和状态变量之间的关系是通过模块所表示的一组方程定义的,每个模块都是由一组方程(也称为模块方法)组成的。这些方程定义了输入信号、输出信号和状态变量之间的关系,方程定义中的所有值称为参数,也就是方程中的系数。第4章 Simulink动态系统建模4.1.2 系统函数系统函数每个Simulink模块的类型都是与一组系统函数相关联的,系统函数指定了模块的输入、状态和输出之间的时间关系。这个系统函数包括:输出函数:表示的是
5、系统输出、输入、状态和时间的关系。更新函数:表示的是系统离散状态的将来值与当前时刻、输入和状态之间的关系。微分函数:表示的是系统连续状态对时间的微分、模块当前状态值和输入之间的关系。 第4章 Simulink动态系统建模系统函数可以表示为: 第4章 Simulink动态系统建模4.1.3 状态状态Simulink模块可能包含有状态,状态(state)是确定模块输出的变量,它的当前值是模块状态和(或)前一时刻输入值的函数。含有状态的模块必须存储前一时刻的状态值,用以计算当前时刻的状态值,因此说,状态是可以保持的。由于含有状态的模块必须存储前一时刻的状态值和(或)输出值用以计算当前时刻的状态值,因
6、此这样的模块也一定都需要内存。模块的输出是模块输入、状态和时间的函数,描述模块输出对输入、状态和时间的特定函数取决于模块的类型。Simulink模型有两种状态类型:离散状态和连续状态。连续状态是连续变化的,如汽车的位置和速度;离散状态是连续状态的近似,这些状态在有限的时间间隔(周期性或非周期性)内进行更新(重新计算),例如,在数字里程表中显示的汽车位置就是离散状态,这些位置在每秒内进行更新。如果离散状态的时间间隔趋近于零,那么离散状态也相当于连续状态。 第4章 Simulink动态系统建模Simulink模块明确定义了模型的状态,尤其是需要某些先前时刻的输出或所有输出才能计算当前输出的模块。这
7、些模块明确定义了两个时间步之间需要保存的一组状态,因此说,这样的模块都是有状态的。图4-1是含有状态的模块中输入、输出和状态的图形表示。模型中状态的总数是模型中所有模块定义的所有状态之和。为了确定模型中的状态总数,Simulink需要分析模型中所包含的模块类型,然后再确定模块类型所定义的状态数目。Simulink会在仿真汇编阶段执行这个工作。 第4章 Simulink动态系统建模图4-1 第4章 Simulink动态系统建模举例来说,Simulink的Integrator(积分器)模块就是一个含有状态的模块。Integrator模块输出的是由仿真起始时刻到当前时刻的输入信号的积分值,当前时刻的
8、输出值取决于在此时刻之前Integrator模块的所有输入值。事实上,积分值只是Integrator模块的一个状态。再举一个例子,Simulink的Memory模块也是一个含有状态的模块,Memory模块存储当前仿真时刻的输入值,并在此时刻之后输出这些值,因此Memory模块的状态就是前一时刻的输入值。 第4章 Simulink动态系统建模Simulink的Gain模块是个无状态模块,Gain模块的输出值是输入信号值乘以增益常数,它的输出完全是由当前的输入值和增益来决定的,因此Gain模块没有状态。此外,Sum模块和Product模块也是无状态模块,它们的输出均是当前输入的函数,因此都是无状态
9、的。 第4章 Simulink动态系统建模1连续状态连续状态计算连续状态需要知道状态的变化率或微分,由于连续状态的变化率自身也是连续的(也就是,它自身也是一个状态),因此计算当前时间步上连续状态的值需要从仿真的起始时刻开始对状态的微分值进行积分,这样,在Simulink中建立连续状态的模型需要Simulink能够表示积分操作并描述每一时刻上状态微分的计算过程。Simulink方块图使用Integrator模块表示积分过程,并利用与Integrator模块相连的一串操作模块表示计算状态微分的方法,这串与Integrator模块相连的模块实际上就是图形化的常微分方程(ODE)。第4章 Simuli
10、nk动态系统建模通常,除了简单动态系统外,对由常微分方程所描述的真实世界动态系统中状态的积分是不存在解析法的,对状态积分需要利用称为ODE算法的数值方法,这些不同的方法需要在计算精度和计算负荷之间进行折衷选择。Simulink给出了最通用的ODE积分方法的计算机实现,并允许用户在仿真一个系统时确定使用哪一种方法来积分由Integrator模块表示的状态。第4章 Simulink动态系统建模计算当前时间步上连续状态的值需要从仿真的起始时刻开始对这个状态值进行积分,数值积分的精度取决于两个时间步间隔的大小,通常,时间间隔越小,仿真精度越高。有些变时间步的ODE算法可以根据状态的变化率自动改变时间步
11、的大小,以满足整个仿真期间的精度要求。Simulink允许用户在选择定步长或变步长算法时均可指定仿真步长的大小,若要使计算负荷最小,则变步长算法会选择最大步长,这样,对于模型中变化最快的状态,Simulink所选择的步长仍然能够满足用户指定的精度要求,也就保证了模型中计算的所有状态均满足用户指定的精度。第4章 Simulink动态系统建模2离散状态离散状态计算离散状态需要知道当前时间和在此时间之前所有状态值之间的关系,Simulink会在状态的更新函数中参考这种关系。由于离散状态不仅依赖于先前时间步的值,而且还依赖于模型的输出值,因此,在Simulink中建立离散状态的模型也需要建立状态与先前
12、时间步上系统输入之间的关系模型。Simulink方块图使用特定的模块类型,即离散模块来建立状态与系统输入之间的关系模型。 第4章 Simulink动态系统建模与连续状态一样,离散状态在设置上也可以限制仿真步长的大小,对于有些模型,如果要求模型状态的所有采样点都必须在仿真步上,那么必须明确指定仿真步长,Simulink利用离散求解器来实现这些设置要求。Simulink给出了两种离散求解器:定步长离散求解器和变步长离散求解器。定步长离散求解器确定满足模型中所有离散状态的所有采样时间的固定步长,而不考虑在采样时刻状态是否改变;相比之下,变步长离散求解器会根据状态的改变而改变步长,以确保采样时间只在状
13、态值发生改变的时刻。第4章 Simulink动态系统建模3混合系统的状态混合系统的状态混合系统是既有离散状态,又有连续状态的系统。严格地说,混合系统模型应该是既有离散采样时间,又有连续采样时间的模型,这些采样时间都来自于离散状态和连续状态。求解这样的系统模型,在选择步长时既要能满足对连续状态积分的精度要求,又要满足对离散状态采样时间的限制,因此,Simulink利用传递由离散求解器确定的下一个采样时间作为连续求解器的附加限制来实现这个要求,也就是说,连续求解器选择的步长在步进仿真的同时必须不能超过下一个采样时间。连续求解器可以缩短下一个采样时间的步长以满足它的精度限制,但即使精度满足要求,它所
14、选择的步长也不能越过下一个采样时刻。第4章 Simulink动态系统建模4.1.4 模块参数模块参数Simulink中的许多标准模块的关键属性都是可以参数化的。例如,Simulink的Gain模块中的gain变量就是一个参数。每个参数化模块都有一个在编辑或仿真模型时用以设置参数值的对话框,用户可以使用MATLAB表达式指定参数值,Simulink会在仿真运行前求取表达式的值。当然,用户也可以在仿真运行期间改变参数值,也就是说,可以用交互的方式确定最适合的参数值。 第4章 Simulink动态系统建模一个参数化模块可以用来表示一组相似模块。例如,在创建模型时,用户可以分别把每个Gain模块的ga
15、in参数设置为不同的值,从而让每个Gain模块执行不同的任务,正因为Simulink允许用每个标准模块来表示一组相似模块,所以,模块的参数化大大提高了标准Simulink模块库的建模能力。 第4章 Simulink动态系统建模Simulink中许多模块的参数都是可调的,可调参数(tunable parameter)是指在Simulink仿真模型的过程中,用户可以改变这些参数的数值。例如,Gain模块的gain参数是可调的,当进行仿真运算时,用户可以改变模块的gain值。如果模块的参数不可调,则在运行仿真期间,Simulink会关闭设置参数的对话框。正因为如此,为了提高仿真的执行速度,除了用户希
16、望改变的参数外,用户可以将模型中的所有其他参数均指定为不可调,这可以加快大模型的执行速度,而且也会加快代码的生成速度。 第4章 Simulink动态系统建模4.1.5 模块采样时间模块采样时间标准的Simulink模块包括连续模块和离散模块,连续模块对连续变化的输入信号进行连续响应,而离散模块只对采样时刻(即固定时间间隔的整数倍时刻)的输入信号进行响应。所有的Simulink模块都有采样时间,包括没有定义状态的模块,如Gain模块。连续模块可以有无限小的采样时间,称为连续采样时间;离散模块可以通过Sample Time参数指定采样时间,离散模块在两个连续的采样时刻之间会一直保持其输出值。举例来
17、说,Constant模块及Continuous模块库中的模块都是连续模块,Discrete Pulse Generator模块和Discrete模块库中的模块都是离散模块。 第4章 Simulink动态系统建模此外,有许多Simulink模块既可作为连续模块,也可作为离散模块,这取决于激励这些模块的模块是连续模块还是离散模块,如Gain模块。对于这些既不是连续模块也不是离散模块的模块,用户可以指定隐含的采样时间,也就是从模块输入端继承的采样时间,如果模块的任一输入是连续的,那么隐含的采样时间也是连续的,否则,隐含的采样时间就是离散的。而且,如果所有输入的采样时间是输入最短时间的整数倍,那么隐含
18、的离散采样时间就等于最短的输入采样时间,否则,隐含的采样时间就等于输入的基本采样时间(fundamental sample time)。一组采样时间的基本采样时间被定义为这组采样时间的最大整数因子。Simulink可以为方块图标注颜色,用以表示模块所包含的采样时间,如黑色(连续模块)、洋红(常值)、黄色(混合)、红色(最快的离散模块)等。 第4章 Simulink动态系统建模4.1.6 用户模块用户模块Simulink允许用户创建用户模块库,而且用户可以在之后的建模过程中使用自建的模块。用户模块的创建可以利用图形的方式,也可以通过编程来实现。如果要用图形的方式创建用户模块,则必须绘制模块的方块
19、图,然后把这个方块图放置到Subsystem模块中,并为Subsystem模块提供一个参数对话框。如果要用编程的方式创建模块,则必须编写M文件或编写包含模块系统函数的MEX文件(读者可以阅读第12章“编写M语言S-函数”),最终的结果文件被称为S函数,然后将S函数与用户所创建系统模型中的Simulink S-Function模块相关联,用户可以通过把模型中S-Function模块放置到Subsystem模块中,并为该Subsystem模块添加参数框的方式为用户的S-Function模块添加参数框。 第4章 Simulink动态系统建模4.1.7 系统和子系统系统和子系统Simulink方块图可
20、以包含层级,每一层定义了一个子系统,也就是用相互连接的子系统建立复杂系统的模型。子系统是整个方块图的一部分,实际上对方块图的含义没有任何影响,它主要是在方块图的结构组织上提供帮助,使用户的模型图更易读,但它不能定义一个独立的方块图。用户可以用Subsystem模块和Simulink模型编辑器来创建子系统,也可以在子系统内嵌套任意层的子系统来创建层级子系统。此外,用户也可以创建依条件执行的子系统,这样的子系统只有在触发或使能输入时才可以执行。 第4章 Simulink动态系统建模Simulink把子系统类型分为虚拟子系统或原子子系统。对于虚拟子系统,它是一个虚块,只是用于图形显示目的,并不改变整
21、个模型的执行顺序,当确定模块的更新顺序时,Simulink会忽略虚拟子系统的边界。与此相反,对于原子子系统,Simulink在执行到下一个模块之前会执行子系统内的所有模块,依条件执行的子系统也是原子子系统。缺省时,无条件执行的子系统都被作为虚拟子系统处理。当然,如果要求在执行任意模块之前必须执行所有的子系统,那么用户也可以将一个无条件执行子系统指定为原子子系统。 第4章 Simulink动态系统建模此外,当准备执行模型仿真时,Simulink会生成一个内部“系统”,这个系统是需要求值的一组模块方法集(即方程)。基于时间的方块图并不要求建立这样的系统,Simulink建立这样的内部系统的目的主要
22、是作为管理模型执行的一种手段。严格地说,Simulink把顶层方块图系统作为一个系统,称为根系统,其他来自于非虚拟子系统和模型中其他元素的系统作为底层系统,用户可以在Simulink的调试器窗口中看到这些系统。实际上,创建这个内部系统的动作就是常说的平铺模型层级。 第4章 Simulink动态系统建模4.1.8 信号信号Simulink使用术语“信号(Signal)”来表示模块的输出值,用户可以指定信号的属性,包括信号名称、数据类型(如8位、16位或32位)、数值类型(实数或复数)以及信号维数(一维或二维数组)。Simulink中的许多模块都可以接收或输出任意数据类型、任意数值类型和任意维数的
23、信号,而其他模块则对可以选择的信号属性进行了限制。在Simulink方块图中,带有箭头的线表示信号,信号的源对应于Simulink在计算模块算法(方程)的过程中将数据写入到信号中的模块,称为该模块的输入模块。在求解模块算法(方程)的过程中,输入模块提供的这些信号,求解模块则依据用户指定的时间步读取信号。 第4章 Simulink动态系统建模4.1.9 模块方法和模型方法模块方法和模型方法Simulink中的模块可以表示多个方程,这些方程在Simulink中被描述为模块方法,当用户执行方块图时,Simulink会求取(或执行)这些模块方法的值。这些模块方法的求取在仿真循环内执行。 第4章 Sim
24、ulink动态系统建模1模块方法模块方法Simulink会为模块方法所执行的函数类型指定类型名称,共用的方法类型包括:Outputs:给定当前时间步上模块的输入和先前时间步上的模块状态,计算模块输出。Update:给定当前时间步上模块的输入和先前时间步上模块的离散状态,计算模块的离散状态值。Derivatives:给定先前时间步上模块的输入和状态值,计算当前时间步上模块连续状态的微分值。 第4章 Simulink动态系统建模对于不同的模块类型,模块方法以不同的方式执行相同模块类型的操作。Simulink的用户接口和文档使用圆点来标识由模块方法执行的特定函数:。例如,Simulink把计算Gai
25、n模块输出的方法表示为。在仿真过程中,Simulink调试器会遵守这个命名规则,并使用模块名称来指定方法类型和调用这个方法的模块,如。 第4章 Simulink动态系统建模2模型方法模型方法除了模块方法,Simulink也提供了一组计算模型属性和模型输出的方法,在仿真过程中,Simulink会同样调用这些方法来确定模型的属性和输出,模型方法通常通过调用相同类型的模块方法来执行不同的任务。例如,模型的Outputs方法根据模型指定的顺序调用它所包含模块的Outputs方法来计算模型的输出。模型的Derivatives方法同样也会调用它所包含模块的Derivatives方法来确定模型状态的微分。
26、第4章 Simulink动态系统建模4.1.10 仿真算法仿真算法1定步长算法和变步长算法定步长算法和变步长算法Simulink算法分为定步长算法和变步长算法两类。定步长算法:顾名思义,仿真步长是固定不变的,这些算法依据相等的时间间隔来解算模型,时间间隔称为步长。用户可以指定步长的大小,或者由算法自己选择步长。通常,减小步长可以提高仿真结果的精度,但同时也增加了系统仿真所需要的时间。第4章 Simulink动态系统建模变步长算法:在仿真过程中,步长是变化的。当模型的状态变化很快时,减小步长可提高精度,而当模型的状态变化很慢时,可增加步长以避免不必要的计算步数。当然,在每一步中计算步长势必增加了
27、计算负荷,但却减少了仿真的总步数,而且对于快速变化的模型或具有分段连续状态的模型,在保证其所要求的精度的前提下缩短了仿真时间。 第4章 Simulink动态系统建模2连续算法和离散算法连续算法和离散算法Simulink提供了连续算法和离散算法。连续算法:利用数值积分来计算当前时间步上模型的连续状态,当前时刻的状态是由在此时刻之前的所有状态和这些状态的微分来决定的。对于离散状态,连续算法依赖模型中的模块来计算每个时间步上模型的离散状态值。目前,有很多种数值积分算法可以求取动态系统连续状态的常微分方程(ODE),Simulink提供了多种定步长和变步长的连续算法,用户可以根据自己的实际模型来选择这
28、些算法。第4章 Simulink动态系统建模离散算法:主要用来求解纯离散模型,这些算法只是计算下一步的仿真时刻,而不进行其他的运算。它们并不求解连续状态值,而且这些算法依赖模型中的模块来更新模型的离散状态。Simulink有两种离散算法:定步长离散算法和变步长离散算法。缺省时,定步长算法选择一个步长,选择的步长足以使仿真速度跟踪模型中最快速变化的模块;变步长算法可调整仿真步长,以便与模型中离散状态的实际变化率相一致,这对于多速率模型来说可以避免不必要的仿真步数,并因此缩短仿真时间。 第4章 Simulink动态系统建模4.2 Simulink开放式动态系统建模开放式动态系统建模真实世界中到处都
29、是动态系统,有些动真实世界中到处都是动态系统,有些动态系统本身就是自然存在的,而有些动态系态系统本身就是自然存在的,而有些动态系统则是人为建立起来的。例如,生物有机体统则是人为建立起来的。例如,生物有机体和弹球的运动等就是固有的动态系统;而热和弹球的运动等就是固有的动态系统;而热力学中的自动控制系统力学中的自动控制系统(可以使房屋保持舒适可以使房屋保持舒适的温度的温度),汽车的速度控制系统,飞机的自动,汽车的速度控制系统,飞机的自动驾驶仪系统,实现驾驶仪系统,实现 通讯的信号处理系统等,通讯的信号处理系统等,都是人工的动态系统。动态系统可以看做是都是人工的动态系统。动态系统可以看做是由许多基本
30、的动态系统组成的,如以人体为由许多基本的动态系统组成的,如以人体为例,它包含着抗感染系统和维持体温平衡系例,它包含着抗感染系统和维持体温平衡系统,以及许多其他的功能系统。统,以及许多其他的功能系统。可以把动态系统看做为一个整体或对象,可以把动态系统看做为一个整体或对象,它存在着外部激励它存在着外部激励(“输入输入”),并产生响应,并产生响应(“输出输出”),如果以方块图形式表示,则这,如果以方块图形式表示,则这样的系统可以用包含输入和样的系统可以用包含输入和/或输出的模块来或输出的模块来描述,如图描述,如图4-2所示。所示。第4章 Simulink动态系统建模图4-2第4章 Simulink动
31、态系统建模Simulink方块图是动态系统数学模型的图形化描述。动态系统的数学模型由一组方程组成,这些数学方程就是众所周知的代数方程、微分方程和/或差分方程。在给定的时间点上,这些方程可以看做是系统输出响应(输出)、系统输入激励(输入)、系统当前状态、系统参数和时间之间的关系,系统状态可以看做是系统结构动态变化的数值描述。例如,在建立简单的钟摆物理系统时,系统的状态是钟摆的当前位置和速度;同理,过滤信号的信号处理系统可以把先前的一组输入看做为系统状态。系统参数是系统静态结构的数值描述,也可以看做为系统方程的常系数。对于钟摆系统,钟摆的长度就是系统的参数。 第4章 Simulink动态系统建模动
32、态系统可以是连续系统和/或离散系统。举例来说,用户可以用Simulink建立汽车的防抱死刹车系统,这个系统可以在给定条件下运行。在整个制动系统内,用户可以建立其他子系统的模型,同时,用户也可以利用仿真结果观察整个制动系统是如何操作的,并了解制动块相对于制动盘的滑动情况。在真实系统中,制动盘上制动块的强度在整个刹车过程中是连续变化的,Simulink把这个系统建模为连续系统处理。但汽车中的制动系统也有可能存在离散系统,例如,汽车上有可能使用计算机芯片来控制制动块作用在四个轮子上的准确制动力,运行在计算机芯片上的软件是以某个时钟频率操作的,这种操作是离散变化的,因此只有一个离散的时间量值来控制汽车
33、的制动系统。对于这样的制动系统,整个系统就是由连续系统和离散系统组成的。 第4章 Simulink动态系统建模Simulink的主要设计目的是建模、分析和实现动态系统。它提供了一个图形编辑器,用户可以利用模块库浏览器中的模块类型来创建动态系统模型。Simulink中的模块库表示的是基本动态系统,这些模块称为内嵌模块。用户也可以创建自己的模块类型,即用户模块。此外,Simulink有一个开放式的用户接口,可以与其他方提供的工具交互使用。例如,它可以与MathWorks公司提供的产品和第三方产品协同工作,从而简化了动态系统的建模工作。图4-3说明了MathWorks公司提供的一些工具,这些工具可以
34、帮助用户设计、分析和实现动态系统。 第4章 Simulink动态系统建模图4-3 第4章 Simulink动态系统建模Simulink提供了丰富的动态系统建模功能,这些功能可以由某些特定的组件进行扩展,如Stateflow用于事件驱动系统,SimMechanics用于建模物理系统,许多模块库如DSP Blockset用于信号处理领域。如果用户建模的系统已经超过了仿真环境的配置,那么用户可以用实时工作区(Real-Time Workshop)和相关的组件为模型方块图自动生成更优化的代码,然后用MathWorks提供的实时目标设计组件执行系统模型。此外,许多目标都支持Simulink环境中的监视和
35、参数调整功能,从而可以查看实时系统中的信号并改变系统参数。正因为如此,在整个Simulink模型设计的任何时候,用户都可以利用MATLAB功能和许多工具箱来分析仿真或实时查看运行结果,或改进模型设计。第4章 Simulink动态系统建模 4.3 动态系统数学模型分类动态系统数学模型分类在动态系统的分析和设计中,有四种常用的数学模型类型:常微分方程(ODEs)、差分方程、代数方程和混合方程。4.3.1 常微分方程常微分方程常微分方程由两个方程组成:输出方程和微分方程,如图4-4所示。 第4章 Simulink动态系统建模图4-4 第4章 Simulink动态系统建模输出方程在给定的时间,以系统的
36、输入、状态、参数和时间为函数计算系统的当前输出;微分方程是常微分方程,以系统的输入、状态、参数和时间为函数计算在当前时刻状态的导数。这种模型类型适用于跟踪响应连续时间函数的系统,这样的连续时间系统通常为物理系统,即机械系统、热力学系统或电子系统。对于简单系统,利用输出方程和微分方程就可以求取输出响应y(t),但是对于大多数复杂的实际系统,系统的响应是通过对状态的数值积分来得到的。 第4章 Simulink动态系统建模Simulink利用Integrator模块实现微分方程中的积分算法,积分器是构成动态系统的基本模块。在建立系统模型时,用户需要首先确定积分器的数目,一个积分器就表示一阶微分,通过
37、积分把导数量转变为状态量从而确定系统的状态。例如,如果方程中包含y的二阶导数,则需要两个积分器,一个积分器输入d2y/dt2,并输出dy/dt;另一个积分器输入dy/dt,并输出y。实现的状态量之间的关系如图4-5所示。在每个积分块中给出了各变量的初始条件,并利用原始方程建立各个状态之间的代数关系。 第4章 Simulink动态系统建模图4-5 第4章 Simulink动态系统建模这里举一个ODE方程的例子,如以65公里/小时在公路上奔驰的汽车。我们的直觉告诉我们,汽车的当前位置(也就是汽车里程表上读取的数)与汽车当前的速度有关。假设1:00时,汽车里程表的读数是1000公里,那么在3:00时
38、里程表的读数就会是1130公里,然后用1130减去1000再除以时间差(3:00-1:00=2小时),得到65,即平均速度。这样的计算可能会随着时间范围的缩小而更加精确,当时间趋近于0时,我们得到相对于时间的位置导数,也就是即时速度(汽车速度表中读取的数)。从数学的角度讲,汽车的位置可以表示为状态xc(t),则速度表示为,它是位置对时间的导数。假设汽车一直匀速行驶,那么这个行驶系统的ODE方程为 第4章 Simulink动态系统建模假设初始条件为x(0) = 1000,建立的Simulink方块图模型如图4-6(a)所示,运行模型后的仿真结果如图4-6(b)所示。 第4章 Simulink动态
39、系统建模(a) (b) 图4-6 第4章 Simulink动态系统建模对这个简单系统来说,我们可以求取输出响应。但是,大多数系统是无法求解的,即使有解,要解算出结果将非常困难。例如,对上面这个汽车运动系统,我们忽略了许多实际系统中的因素,如空气阻力、滚动摩擦、重力、发动机控制系统、航迹控制系统等。Simulink模型可能是线性模型也可能是非线性模型。大多数真实世界中的系统都是非线性的,线性模型通常是在满足某些规则下的非线性系统的近似。线性模型的好处就在于在分析和设计线性系统时存在着大量的数学描述形式。Simulink处理线性模型和非线性模型的能力有助于解决线性理论和实际的非线性系统之间存在的差
40、异。第4章 Simulink动态系统建模4.3.2 差分方程差分方程另一种描述系统的数学模型是差分方程。差分方程由两个方程组成:输出方程和更新方程,如图4-7所示。 图4-7 第4章 Simulink动态系统建模图4-7输出方程用系统的输入、先前时刻的状态、参数和时间的函数计算给定时刻的系统输出响应;更新方程是差分方程,它用系统的输入、先前时刻的状态、参数和时间的函数计算当前时刻的系统状态。这种模型类型适用于在离散时刻跟踪系统响应的系统。这种离散时间系统常常用来描述离散控制系统和数字信号处理系统。对于简单系统,使用输出方程和更新方程就可以获得系统的输出响应,但对于真实世界中大多数的复杂系统,系
41、统响应是通过迭代进行求解的,在一段时间内,系统会反复利用输出方程和更新方程求解系统响应。 第4章 Simulink动态系统建模目前,大多数的离散时间系统都是人工动态系统,这是由于数字计算机、微型控制器和定制硅(FPGA,即特定用途集成电路)的发展带动了离散时间控制系统和信号处理系统的发展。例如,从控制房屋温度、汽车驾驶、飞机航行的控制系统到控制儿童玩具的控制系统等,都是用离散时间控制理论设计的,而且,在信号处理领域,信号处理理论也得到了很大发展,如改进的通信系统、音效质量等。 第4章 Simulink动态系统建模在设计离散时间系统时,Simulink提供了丰富的建模模块,尤其是Simulink
42、还支持多速率模型,也就是带有离散时间组件的系统模型可以有不同的采样速率。当在多任务环境下执行多速率模型时,这是很重要的方面,它保证了系统的完整性,因为在多任务模型中,每一任务是以不同的速率执行的。例如,如果信号要在一个任务中重新计算(更新),而在另一任务中读取这个信号,那么必须确保这个系统不处于紊乱状况下,否则,第二个任务读取的就是受损的数据。 第4章 Simulink动态系统建模典型的多任务编程环境(如C/C+/Java)利用“notion”(类似20世纪60年代Dijkstra发明的信号装置)来限制对共享资源(如存储位置)的访问。对编程人员来说,在正确使用操作系统方面,最困难的莫过于合理协
43、调多任务环境中的各个活动任务,许多系统就是因为采用了大量的代码复用和检测而导致失败。例如,1997年7月发射的火星探测器就是由于系统任务的优先权倒置而导致了失败。 第4章 Simulink动态系统建模Simulink在进行多任务模型设计时使用了不同的方法,也就是模型可以直接配置在多任务环境中而不必考虑系统的完整性问题。特别是Simulink中的所有模块都可以有一个或多个采样时间,每一种采样时间可以应用到一个独立的任务中,当模块需要读取以不同采样时间更新的信号时,这时就出现了速率转换问题。在这种速率转换过程中,比较明确的一点就是,不同的任务正在访问共享资源信号,因此,Simulink提供了特定的
44、速率转换模块,以确保系统的完整性,而且又满足离散时间理论,Simulink(和Real-Time Workshop)会利用速率转换模块、Unit Delay或Zero Order Hold模块自动处理这种情况。与此同时,Simulink也提供了检测功能,以确保系统在多任务环境中的正确建模。正因为Simulink在建立多速率系统的同时又保证了系统的完整性,从而大大简化了动态系统的建模和设计过程。 第4章 Simulink动态系统建模4.3.3 代数方程代数方程另一种描述系统的数学模型是代数方程,它需要在每一时刻都求解系统输出,如图4-8所示。 图4-8 第4章 Simulink动态系统建模对于简
45、单系统,很容易就能求得系统的输入和输出,但实际的代数方程通常用数值方法(包括扰动和迭代)进行迭代求解。以下面这组代数方程为例: 可以求得: 第4章 Simulink动态系统建模图4-9 第4章 Simulink动态系统建模这个例子说明了在编程和数学方程之间一个非常重要的问题,正如我们前面已经提到的,在Simulink模块之间的连接定义了数学关系,尤其是方程中的“=”表示了数学上的一种相等关系。对于第一次使用Simulink的用户,容易混淆的就是把Simulink模块看做了编程操作,如果我们把方程中的“=”解释为赋值关系,那么就会得到不同的结果。这里,我们把上面的方程直接转换为MATLAB的M代
46、码,并赋值u(t)=6,即 u = 6; y = u-2*y? Undefined function or variable y. 第4章 Simulink动态系统建模结果是错误的,这是因为我们使用了先前的y值为变量y赋值,MATLAB无法确定先前的y值。为了避免错误,必须先选择一个y值,这里随机选择一个0值,即 u = 6; y = 0; y = u-2*yy = 6 这与数学方程求解的值不同,这是因为在程序中赋值与数学含义的相等是完全不同的。这就是为什么我们看到的只是Simulink定义的数学关系,而不是执行程序操作的原因。 第4章 Simulink动态系统建模4.3.4 组合系统组合系统
47、另一种描述系统数学模型的是组合方程,这类方程中包含了上述三种模型类型,大多数真实世界中的复杂系统都属于这种类型。这类系统包含输出方程、微分方程、更新方程和某些其他方程,如图4-10所示。 第4章 Simulink动态系统建模图4-10 第4章 Simulink动态系统建模求解这类系统的输出响应需要利用上面讨论的几种解算方法,因为这类系统内部包含了由输出和状态所定义的关系(方程)。例如,有的组合方程定义了微分变量的有限积分关系,这种关系需要由一组方程来表达,包括输出方程、更新方程、微分方程和过零方程,过零方程定义了有限积分中的上限和下限时间。再举一个组合方程的例子,由使能方程和禁止(关闭使能)方
48、程定义的状态和信号之间的关系也属于这类系统,这两个方程确定了系统执行过程中激活或关闭部分子系统的时间。 第4章 Simulink动态系统建模在上面讨论的四种系统方程类型中都有一个系统固有特性,就是系统的采样时间。采样时间是系统在一个时间范围内跟踪系统输入、状态或输出的时间间隔,根据采样时间的不同,系统可以描述为离散时间系统、连续时间系统和混合系统。离散时间系统以有限的时间间隔跟踪系统响应,如果令这个有限的时间间隔趋近于零,那么离散时间系统也就变成了连续时间系统。时间间隔可以是周期性的或非周期性的。非周期率系统有时是指非匀速率系统,意思就是对系统响应的跟踪不是匀速的,非匀速率系统可以归为组合系统
49、,它利用附加方程(GetTimeOfNextVarHit)确定求解系统方程的时间。连续时间系统是系统响应连续变化的系统,连续时间信号在整个数值积分区间(使用最小时间步)是连续改变的。混合系统是由离散时间系统和连续时间系统组成的系统。第4章 Simulink动态系统建模如果系统只有一个采样时间,那么这个系统就是单速率系统;如果系统有多个采样时间,那么这个系统就是多速率系统。多速率系统可以用单任务模式或多任务模式执行。系统也可以用数值积分的算法类型进行分类:定步长系统是使用定步长算法的系统,定步长算法实际就是用指定的方法计算系统在下一时刻(采用固定时间间隔)的连续状态;变步长系统使用变步长算法,变
50、步长算法实际就是用隐式或显式计算下一个非周期时刻的连续状态值。通常,变步长算法使用误差控制来调整采样时间间隔的大小,以使系统满足希望的误差容限。第4章 Simulink动态系统建模事实上,除了基本系统,描述动态系统的数学模型都涉及复杂的数学转换,每个基本转换都可以归类为上面所论述的一种简单系统。因此,一个复杂的动态系统可以用多个不同的简单动态系统进行建模,这种简单系统相互连接的图示性描述就是现在的方块图。方块图模型现在已经成为表述系统的一种标准形式,在教科书、图纸设计、期刊论文以及说明书中广泛采用这种方式来描述动态系统。 第4章 Simulink动态系统建模 4.4 建立方程模型建立方程模型4
51、.4.1 建立代数方程模型建立代数方程模型例4-1 摄氏温度转换为华氏温度。这里以房屋热力学系统中的温度转换方程为例,利用TF = 9/5(TC) + 32方程可将摄氏温度转换为华氏温度。为了建立该方程的模型,首先必须明确构成该模型的模块:Ramp模块:属于Sources库,可以输入温度信号;Constant模块:也属于Sources库,可以定义常值,如32;Gain模块:属于Math库,可以实现9/5乘以输入信号;Sun模块:也属于Math库,可以实现加法运算;Scope模块:属于Sinks库,可以显示输出信号。 第4章 Simulink动态系统建模图4-11 第4章 Simulink动态系
52、统建模用鼠标分别双击Gain模块和Constant模块,打开这些模块,并输入合适的参数值,然后单击Close按钮应用数值并关闭对话框。现在,连接这些模块,得到的系统模型图如图4-12所示。 图4-12 第4章 Simulink动态系统建模例例4-2 实现简单变换器。实现简单变换器。使用模块库中提供的模块设计这样一个系统:将滑块的位置转换成速度,使位置区间x=0到1对应于速度区间v=45mph到95mph,即满足位置和速度函数v=50x+45,将仿真时间设置为inf。这个系统将作为我们后面即将设计的一个系统的输入。要求在同一个示波器中观察位置信号和速度信号,并将信号输出到工作区,在工作区中绘制曲
53、线。第4章 Simulink动态系统建模按照要求,选择的Simulink模块组件如下:Sources库中的Constant模块;Math Operations库中的Slider Gain模块和Gain模块;Signal Routing库中的Mux模块;Sinks库中的Scope模块。这里用Slider Gain模块实现位置输入x,该模块是个滑动增益模块,系统的模型图如图4-13所示。第4章 Simulink动态系统建模图4-13 第4章 Simulink动态系统建模例例4-3 逻辑判断方程的实现。我们来建立下面这个简单的代数系统,系统的输出只与当前的输入值有关,而且随着仿真时间的继续在两个不同
54、的代数方程之间切换。 这里使用Signal Routing模块库中的Switch模块实现切换功能。Switch模块有三个输入端口,它根据第二个输入端口(中间的输入)的值来判断输出第一个输入端口(最上面的端口)或第三个输入端口(最下面的端口)的值,因此,第一个输入和第三个输入被称为数据输入,而第二个输入则被称为控制输入。图4-14是Switch模块的参数对话框。 第4章 Simulink动态系统建模图4-14 第4章 Simulink动态系统建模对话框内有一个Criteria for passing first input参数,该参数作为输出第一个输入端口值的判定准则,用户可以选择控制端口大于或
55、等于门槛值、大于门槛值、不等于门槛值这三个条件。如果控制输入满足准则,则输出第一个端口的值,否则输出第三个端口的值。Threshold参数是门槛值。这里,需要用Switch模块的第二个端口作为一个逻辑值的驱动,利用Clock时钟模块、Constant常值模块和Relational Operator关系模块判断时间是否满足给定的条件。随着仿真时间的继续,Switch模块在t5时切换到第一个输入,而当t5时切换到第二个输入。Gain模块用来表示代数关系。最后建立的系统模型图如图4-15所示。 第4章 Simulink动态系统建模图图4-15 第4章 Simulink动态系统建模图图4-16 第4章
56、 Simulink动态系统建模例例4-4 幅度调制。要求:产生一个调幅信号,信号源(source)为锯齿波信号,选择单位幅值和频率,载波(carrier)为正弦波信号,单位幅值,频率为100 rad/sec,利用双边带抑制载波调制,即输出output = source carrier,在同一个示波器上观察调制信号和调制后的AM调幅信号。解答:根据系统要求,选择的Simulink模型组件如下:Sources库中的Sine Wave模块和Signal Generator模块;Math Operations库中的Product模块;Signal Routing库中的Mux模块;Sinks库中的Sco
57、pe模块。 第4章 Simulink动态系统建模其中,Signal Generator模块用来生成锯齿波(sawtooth),设置锯齿波幅值为1,频率为1 Hz;设置Sine Wave模块参数,幅值为1,频率为100 rad/sec,构建的系统模型如图4-17(a)所示。接下来,在仿真参数对话框内设置仿真时间为10个时间单位,仿真的最大步长Max step size为。运行仿真,在示波器上显示调制信号和调制后的AM调幅信号如图4-17(b)所示。 第4章 Simulink动态系统建模(a) 图图4-17 第4章 Simulink动态系统建模 (b) 图4-17 第4章 Simulink动态系统
58、建模4.4.2 建立简单的连续系统模型建立简单的连续系统模型这里给出微分方程,u(t)是幅值为1,频率为1 rad/sec的方波。可以这样建立该方程的模型:Integrator模块对输入积分,求得x,Signal Generator模块是信号发生器,可以产生信号波形。打开模块参数对话框,在Wave form(波形)选项区内选择square(方波),但要把缺省单位改变为radians/sec,即把模型中的Units参数选择为rad/sec。这个模型中需要的其他模块还有Gain模块和Sum模块,这里也可以用Scope模块观察输出信号。在这个模型中,为了改变Gain模块的方向,可以先选中这个模块,然
59、后用Format菜单下的Flip block命令翻转模块。为了创建由Integrator模块的输出到Gain模块之间的分支线,可在绘制分支线的同时按下Ctrl键。现在可以将所有模块连接起来了,如图4-18所示。第4章 Simulink动态系统建模图图4-18 第4章 Simulink动态系统建模在这个模型中,一个很重要的概念就是由Sum模块、Integrator模块和Gain模块构成的循环。在上面的微分方程中,x是Integrator模块的输出,同时它的输入也是,这种关系是通过循环来实现的。设置仿真时间为10秒,示波器中输出的波形如图4-19所示。 第4章 Simulink动态系统建模图图4-
60、19 第4章 Simulink动态系统建模在这个例子中所创建的模型方程也可以表示成传递函数的形式,这样模型需要用Transfer Fcn模块实现传递函数,把u作为模块的输入,x作为模块的输出,从而使模块实现x/u。如果用sx替代上述方程中的,则会得到: 求解得 或者或者 第4章 Simulink动态系统建模Transfer Fcn模块用模块对话框中的参数指定分子和分母的系数,这里分子为1,分母为s+2。对话框中的参数以s的降幂排列指定方程式系数,如分子为1(或者只写1),分母为1 2,这样模型就会变得比较简单。如图4-20所示,仿真的结果应该与前面的模型是一样的。 第4章 Simulink动态
61、系统建模图图4-20 第4章 Simulink动态系统建模4.4.3 选择最佳的数学模型选择最佳的数学模型通常,对于一个系统模型,用户可以有多种建模方法,选择一个最佳的数学模型进行建模,可以使Simulink执行的更快速、更准确。当然,这需要用户积累一定的经验,并了解Simulink执行仿真时的内部机制。这里以图4-21所示的简单的串联电路为例进行说明。 第4章 Simulink动态系统建模图图4-21 第4章 Simulink动态系统建模根据电路定律,VAC等于电阻电压、电感电压和电容电压之和,假设电路中的电流为i,L为电感,C为电容,则下列方程成立:第4章 Simulink动态系统建模对于
62、这个数学模型,在Simulink中进行建模时可以选择两种方法来求解:一种是求解电阻电压,一种是求解电感电压,不同的求解方式会影响Simulink模型的结构和仿真性能。先以电阻电压来求解RLC电路方程,则结果如下: 在建立Simulink模型时,电阻电压等于电压源减去电容电压和电感电压。为了计算电流,在方程两边乘以1/R,电容电压等于1/C乘以电流的积分,电感电压等于L乘以电流的微分。假设电阻R等于70,电容C等于,电感L等于,则建立的Simulink模型图如图4-22所示。第4章 Simulink动态系统建模图图4-22 第4章 Simulink动态系统建模这个模型的数学公式中包含了一个微分模
63、块,如果有可能,应该尽量避免在公式中引入微分。因为微分模块在系统中产生了一个不连续点,Simulink使用数值积分来求解动态模型,为了满足精度限制,这些积分算法利用小步长进行方程解算,如果微分模块产生的不连续点太大,那么在解算时小步长是无法求解该微分模块的。此外,在这个模型中,微分模块、求和模块和两个增益模块构成了一个代数循环,代数循环会降低模型的执行效率,而且也有可能降低仿真结果的精确性。 第4章 Simulink动态系统建模为了避免使用微分模块,需重新求解方程,即 在这个方程中,电感电压等于电压源减去电阻电压和电容电压。为了得到电阻电压和电容电压,先要求出电流,电流等于电感电压的积分除以电
64、感L,电流乘以电阻R等于电阻电压,电流的积分除以电容C等于电容电压。按照这个方程建立的Simulink模型如图4-23所示。 第4章 Simulink动态系统建模图图4-23 第4章 Simulink动态系统建模图4-24和图4-25是利用信号及示波器管理器观察(参看第节)到的两个模型的电阻电压,图4-24是图4-22所示模型的电阻电压,图4-25是图4-23所示模型的电阻电压。图图4-24 第4章 Simulink动态系统建模图图4-25 第4章 Simulink动态系统建模4.4.4 避免无效循环避免无效循环Simulink允许直接或间接(经过其他模块)将模块的输出连接到输入,从而创建一个
65、循环。循环是非常有用的,例如,用户可以在方块图中用循环求解微分方程,或者建立反馈控制系统模型。但是,也有可能会创建Simulink无法仿真的循环,这种无效循环在进行仿真时会产生警告信息。通常产生的无效循环包括:创建了无效的函数调用连接(function call connections),或者试图更改函数调用中的输入/输出变量;自触发子系统;包含Action子系统的循环。 第4章 Simulink动态系统建模Port & Subsystems库中的Subsystems Examples模块库中的模型示例说明了涉及触发和函数调用子系统的有效循环和无效循环。无效循环的模型示例包括:simulink
66、/Port&Subsystems/s1_subsys_semantics/Triggered subsystem/s1_subsys_trigerr1;simulink/Port&Subsystems/s1_subsys_semantics/Triggered subsystem/s1_subsys_trigerr2;simulink/Port&Subsystems/s1_subsys_semantics/Function call systems / s1_subsys_ fcncallerr3。读者可以研究一下这些示例模型,这对于避免在模型中创建无效循环是非常有用的。 第4章 Simuli
67、nk动态系统建模图图4-26 第4章 Simulink动态系统建模与此同时,Simulink的Diagnostic Viewer(诊断查看器)中会显示一个错误消息, 如图4-27所示。 图图4-27 第4章 Simulink动态系统建模4.4.5 建模提示建模提示这里给出几个在模型创建过程中非常有用的注意事项。内存问题:通常,内存越大,Simulink的性能越好。利用层级关系:对于复杂的模型,在模型中增加子系统层级是有好处的,因为组合模块可以简化最顶级模型,这样在阅读和理解模型上就容易一些。整理模型:结构安排合理的模型和加注文档说明的模型是很容易阅读和理解的,模型中的信号标签和模型标注有助于说明模型的作用,因此在创建Simulink模型时,建议读者根据模型的功能需要,适当添加模型说明和模型标注。 第4章 Simulink动态系统建模建模策略:如果用户的几个模型要使用相同的模块,则可以在模型中保存这些模块,这样在创建新模型时,只要打开模型并拷贝所需要的模块就可以了。用户也可以把一组模块放到系统中,创建一个用户模块库,并保存这个系统,然后在MATLAB命令行中键入系统的名称来访问这个系统。通常,在创建模型时,首先在草纸上设计模型,然后在计算机上创建模型。在要将各种模块组合在一起创建模型时,可把这些模块先放置在模型窗口中,然后连线,利用这种方法,用户可以减少频繁打开模块库的次数。