第六章 Simulink系统仿真原理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第六章Simulink系统仿真原理本书第二部分对使用Simulink进行动态系统模型建立、系统仿真及分析进行了详细的介绍。对于一般的用户,使用这些知识便能够对大部分的动态系统进行减免、仿真与分析。但是对于高级系统设计人员来说,熟悉Simulink对动态系统进行仿真的工作原理必定会对系统的设计、仿真与分析起到很好的作用。前面所介绍的仅仅是Simulink仿真平台的使用方法,用户完全可以在较短的时间内熟练掌握。本章将对Simulink系统仿真原理作简单的介绍,以使用户对Simulink进行系统仿真的核心有一个简单的了解。这对系统分析与设计的作用不言而喻。&6.1Simulink求解器概念Simulink求解器是Simulink进行动态系统仿真的核心所在,因此欲掌握Simulink系统仿真原理,必须对Simulink的求解器有所了解。在第5章中讲述动态系统的Simulink仿真技术时曾简单提及Simulink求解器的选择与使用,本节将对其作深入的介绍。6.6.1离散求解器第3章中简单介绍了动态系统的模型及其描述,其中指出,离散系统的动态行为一般可以由差分方程描述。众所周知,离散系统的输入与输出仅在离散的时刻上取值,系统状态每隔固定的时间才更新一次;而Simulink对离散系统的仿真核心是对离散系统差分方程的求解。因此,Simulink可以做到对离散系统的绝对精确(除去有限的数据截断误差)。在对纯粹的离散系统进行仿真时,需要选择离散求解器对其进行求解。用户只需选择Simulink仿真参数设置对话框中的求解器选项卡中的discrete(nocontinuousstates)选项,即没有连续状态的离散求解器,便可以对离散系统进行精确的求解与仿真。读者可以参考第5章中相关内容了解离散系统求解器的其它设置,这里不再赘述。6.1.2连续求解器与离散系统不同,连续系统具有连续的输入与输出,并且系统中一般都存在着连续的状态设置。连续系统中存在的状态变量往往是系统中某些信号的微分或积分,因此连续系统一般由微分方程或与之等价的其它方式进行描述。这就决定了使用数字计算机不可能得到连续系统的精确解,而只能得到系统的数字解(即近似解)。Simulink在对连续系统进行求解仿真时,其核心是对系统微分或偏微分方程进行求解。因此,使用Simulink对连续系统进行求解仿真时所得到的结果均为近似解,只要此近似解在一定的误差范围之内便可。对微分方程的数字求解有不同的近似解,因此Simulink的连续求解器有多种不同的形式,如变步长求解器ode45、ode23、ode113,以及定步长求解器ode5、ode4、ode3等等。采用不同的连续求解器会对连续系统的仿真结果与仿真速度产生不同的影响,但一般不会对系统的性能分析产生较大的影响,因为用户可以设置具有一定的误差范围的连续求解器进行相应的控制。离散求解器与连续求解器设置的不同之处如图6.1所示。图6.1离散求解器与连续求解器设置的比较为了使读者对Simulink的连续求解器有一个更为深刻的理解,在此对Simulink的误差控制与仿真步长计算进行简单的介绍。当然,对于定步长连续求解器,并不存在着误差控制的问题;只有采用变步长连续求解器,才会根据积分误差修改仿真步长。在对连续系统进行求解时,仿真步长计算受到绝对误差与相对误差的共同控制;系统会自动选用对系统求解影响最小的误差对步长计算进行控制。只有在求解误差满足相应的误差范围的情况下才可以对系统进行下一步仿真。由于连续系统状态变量不能够被精确地计算出来,因而积分的误差值同样也是一个近似值。通常,连续求解器采用两个不同阶次的近似方法进行积分,然后计算它们之间的积分差值作为积分误差。连续求解器积分误差的计算如图6.2所示。图6.2中h为积分步长。注意,此图以最简单的多边形积分近似算法为例说明积分误差的计算,在实际中具体的方法视连续求解器的不同而不同。如果积分误差满足绝对误差或相对误差,则仿真继续进行;如果不满足,则求解器尝试一个更小的步长,并重复这个过程。当然,连续求解器在选择更小步长时采用的方法也不尽相同。如果误差上限值的选择或连续求解器的选择不适合待求解的连续系统,则仿真步长有可能会变得非常小,使仿真速度变得非常慢。(用户需要注意这一点)。对于实际的系统而言,很少有纯粹的离散系统或连续系统,大部分系统均为混合系统。连续变步长求解器不仅考虑了连续状态的求解,而且也考虑了系统中离散状态的求解。连续变步长求解器首先尝试使用最大步长(仿真起始时采用初始步长)进行求解,如果在这个仿真区间内有离散状态的更新,步长便减小到与离散状态的更新相吻合。混合系统仿真时连续状态求解与离散状态求解的协调如图6.3所示。其中h为初始步长,由于在时刻t与t+h之间系统存在着离散状态的更新,因而连续变步长求解器将会减小步长至hnew,之后再计算积分误差以控制求解。如果求解器误差满足误差范围,则进行下一步仿真,否则缩小时间间隔,重复此过程进行求解仿真。积分误差通过两个不同积分阶次的积分的差值来近似t+ht.xX.图6.3连续状态求解与离散状态求解的协调示意图&6.2系统过零的概念与解决方案6.1节中对Simulink的求解器进行了较为深入的介绍。Simulink求解器固然是系统仿真的核心,但Simulink对动态系统求解仿真的控制流程也是非常关键的。Simulink对系统仿真的控制是通过系统模型与求解器之间建立对话的方式进行的:Simulink将系统模型、模块参数与系统方程传递给Simulink的求解器,而求解器将计算出的系统状态与仿真时间通过Simulink环境传递给系统模型本身,通过这样的交互作用方式来完成动态系统的仿真。对话方式的核心是事件通知。所谓的事件通知,是指系统模型通过Simulink仿真环境告知求解器在前一仿真步长内系统中所发生的事件,以用于当前仿真时刻求解器的计算。而过零检测则用来检测系统中是否有事件发生。系统模型正是通过过零检测与事件通知完成与Simulink求解器的交互。本节将详细介绍过零检测与事件通知的概念。6.2.1过零的发生hnewX导数0t离散更新时刻在动态系统的仿真过程中,所谓过零,是指系统模型中的信号或系统模块特征的某种改变。这种特征改变包括以下两种情况:(1)信号在上一个仿真时刻步长之内改变了符号。(2)系统模块在上一个仿真时间变长改变了模式(如积分器进入了饱和区段)。过零本身便是一个非常重要的事件,同时它也用来表示其它事件的发生。过零一般用来表征动态系统中的某种不连续性,例如系统响应中的跳变、输入信号的脉冲与阶跃等。如果再动态系统的仿真中不对过零进行检查,很可能会导致不准确的结果。这是因为对于某些系统而言,系统中的过零会引起系统动态方程的改变,也就是动态系统的运行模式将发生变化。读者可以回忆在第5章动态系统仿真中所介绍的蹦极系统,在没有考虑过零事件发生时,系统的输出响应为一振荡的过程;但是此蹦极系统对于体重为70kg的人来说是不安全的,跳跃者会触地死亡。如果考虑过零的发生(也就是跳跃者的触地),整个蹦极系统的动态响应将会发生改变,而非正常的振荡变化。6.2.2事件通知在动态系统仿真中,采用变步长求解器可以使Simulink正确地检测到系统模块与信号中过零事件的发生。当一个模块通过Simulink仿真环境通知求解器,在系统前一仿真步长时间内发生了过零事件,变步长求解器就会缩小仿真步长,即使求解误差满足绝对误差和相对误差的上限要求。缩小仿真步长的目的是判定事件发生的准确时间(也就是过零事件发生的准确时刻)。当然,这样做会使系统仿真的速度变慢,但正如前面所说,这对于系统的某些模块是至关重要的。因为这些模块的输出可能表示了一个物理量,它的零值有着重要的意义;或者是标志系统运行状态的改变,或者用来控制另外一个模块等等。事实上,只有少量的模块能够发出事件通知。每个模块发出专属于自己的事件通知,而且可能与不止一个类型的事件发生关联。事件通知是Simulink进行动态系统仿真的核心。可以这么说,Simulink动态系统仿真是基于事件驱动的,这符合当前交互式设计与面向对象设计的思想。在系统仿真中,系统模型与求解器均可以视为某种对象,事件通知相当于对象之间的消息传递;对象通知消息的传递来完成系统仿真的目的。6.2.3支持过零的模块在Simulink的模块库中,并非所有的模块都能够产生过零事件。能够产生过零事件的Simulink模块有:Abs(Math数学库中的求取绝对值模块)、Backlash(Nonlinear非线性库中的偏移模块)、DeadZone(Nonliner非线性库中的死区模块)、HitCrossing(Signals&System信号与系统库中的零交叉模块)、Integrator(Continuous连续库中的积分模块)、MinMax(Math数学库中的最值模块)、RelationalOperator(Math数学库中的关系运算模块)、Relay(Nonliner非线性库中的延迟模块)、Saturtion(Nonliner非线性库中的饱和模块)、Sign(Math数学库中的符号运算模块)、Step(Sources输入库中的阶跃模块)、Subsystem(Subsystems子系统库中的子系统模块),以及Switch(Nonliner非线性哭着能够的开关模块)等。一般来说,不同模块所产生的过零的类型是有差异的。例如,对于Abs绝对值求取模块,当输入改变符号时产生一个过零事件,而Saturation饱和模块能够生成两个不同的过零事件,一个用于下饱和,一个用于上饱和。对于其它的许多模块而言,它们不具有过零检测的能力。如果需要对这些模块进行过零检测,则可以使用信号与系统库(Signals&System)中的HitCrossing零交叉模块来实现。当HitCrossing模块的输入穿过某一偏移值(offset)时会产生一个过零事件,所以它可以用来为不带过零能力的模块提供过零检测的能力。一般而言,系统模型中模块过零的作用有两种类型:一是用来通知求解器,系统的运行模式是否发生了改变,也就是系统的动态特性是否发生改变;二是驱动系统模型中其它模块。过零信号包含三种类型:上升沿、下降沿、双边沿,如图6.5所示。图6.5过信号的类型下面分别对这三种类型进行简单的介绍。RORFFTriggerTriggerTrigger上升沿下降沿双边沿信号过零类型,其中F表示下降沿,R表示上升沿(1)上升沿:系统中的信号上升到零或穿过零,或者是信号由零变为正。(2)下降沿:系统中的信号下降到零或穿过零,或者是信号由零变为负。(3)双边沿:任何信号的上升或下降沿的发生。6.2.4过零的举例——过零的产生与关闭过零1过零的产生【例6.1】过零的产生与影响。这里以一个很简单的例子来说明系统中过零的概念以及它对系统仿真所造成的影响。在这个例子中,采用Functions&Tables函数与表库中的Function函数模块和Math数学库中的Abs绝对值模块分别计算对应输入的绝对值。我们知道,Function模块不会产生过零事件,所以在求取绝对值时,一些拐角点被漏掉了;但是Abs模块能够产生过零事件,所有每当它的输入信号改变符号时,它都能够精确地得到零点结果。图6.6所示为此系统的Simulink模型以及系统仿真结果。图6.6过零产生的影响从仿真的结果中可以明显地看出,对于不常带有过零检测的Function函数模块,在求取输入信号的绝对值时,漏掉了信号的过零点(即结果中的拐角点);而对于具有过零检测能力的Abs求取绝对值模块,它可以使仿真在过零点处的仿真步长足够小,从而可以获得精确的结果。为说明这一点,在MATLAB命令窗口中输入如下语句:semilogy(tout(1:end-1,diff(tout))%绘制系统仿真时刻的一阶差分(即系统仿真步长),如图6.7所示,其中常规步长为0.2s,%当发生过零的情况时,系统仿真步长自动缩小至约10-4s2关闭过零【例6.2】过零的关闭与影响在【例6.1】中,过零

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功