当前位置:首页 >> 机械/仪表 >>

第六章 Simulink系统仿真原理


第六章

Simulink 系统仿真原理

本书第二部分对使用 Simulink 进行动态系统模型建立、系统 仿真及分析进行了详细的介绍。对于一般的用户,使用这些知识便能 够对大部分的动态系统进行减免、仿真与分析。但是对于高级系统设 计人员来说,熟悉 Simulink 对动态系统进行仿真的工作原理必定会 对系统的设计、仿真与分析起到很好的作

用。前面所介绍的仅仅是 Simulink 仿真平台的使用方法,用户完全可以在较短的时间内熟练 掌握。本章将对 Simulink 系统仿真原理作简单的介绍,以使用户对 Simulink 进行系统仿真的核心有一个简单的了解。这对系统分析与 设计的作用不言而喻。 &6.1 Simulink 求解器概念 Simulink 求解器是 Simulink 进行动态系统仿真的核心所在, 因此欲掌握 Simulink 系统仿真原理, 必须对 Simulink 的求解器有所 了解。在第 5 章中讲述动态系统的 Simulink 仿真技术时曾简单提及 Simulink 求解器的选择与使用,本节将对其作深入的介绍。 6.6.1 离散求解器 第 3 章中简单介绍了动态系统的模型及其描述, 其中指出, 离 散系统的动态行为一般可以由差分方程描述。众所周知,离散系统的 输入与输出仅在离散的时刻上取值, 系统状态每隔固定的时间才更新 一次; Simulink 对离散系统的仿真核心是对离散系统差分方程的 而 求解。因此, Simulink 可以做到对离散系统的绝对精确(除去有限 的数据截断误差) 。

在对纯粹的离散系统进行仿真时, 需要选择离散求解器对其进 行求解。 用户只需选择 Simulink 仿真参数设置对话框中的求解器选 项卡中的 discrete(no continuous states)选项,即没有连续状 态的离散求解器,便可以对离散系统进行精确的求解与仿真。读者可 以参考第 5 章中相关内容了解离散系统求解器的其它设置, 这里不再 赘述。 6.1.2 连续求解器 与离散系统不同, 连续系统具有连续的输入与输出, 并且系统 中一般都存在着连续的状态设置。 连续系统中存在的状态变量往往是 系统中某些信号的微分或积分, 因此连续系统一般由微分方程或与之 等价的其它方式进行描述。 这就决定了使用数字计算机不可能得到连 续系统的精确解,而只能得到系统的数字解(即近似解) 。 Simulink 在对连续系统进行求解仿真时,其核心是对系统微 分或偏微分方程进行求解。因此,使用 Simulink 对连续系统进行求 解仿真时所得到的结果均为近似解, 只要此近似解在一定的误差范围 之内便可。对微分方程的数字求解有不同的近似解,因此 Simulink 的连续求解器有多种不同的形式,如变步长求解器 ode45、ode23、 ode113,以及定步长求解器 ode5、ode4、ode3 等等。采用不同的连 续求解器会对连续系统的仿真结果与仿真速度产生不同的影响, 但一 般不会对系统的性能分析产生较大的影响, 因为用户可以设置具有一 定的误差范围的连续求解器进行相应的控制。 离散求解器与连续求解 器设置的不同之处如图 6.1 所示。

图 6.1 离散求解器与连续求解器设置的比较 为了使读者对 Simulink 的连续求解器有一个更为深刻的理解, 在此对 Simulink 的误差控制与仿真步长计算进行简单的介绍。 当然, 对于定步长连续求解器,并不存在着误差控制的问题;只有采用变步 长连续求解器,才会根据积分误差修改仿真步长。在对连续系统进行 求解时,仿真步长计算受到绝对误差与相对误差的共同控制;系统会 自动选用对系统求解影响最小的误差对步长计算进行控制。 只有在求 解误差满足相应的误差范围的情况下才可以对系统进行下一步仿真。 由于连续系统状态变量不能够被精确地计算出来, 因而积分的误 差值同样也是一个近似值。通常,连续求解器采用两个不同阶次的近 似方法进行积分,然后计算它们之间的积分差值作为积分误差。连续 求解器积分误差的计算如图 6.2 所示。 图 6.2 中 h 为积分步长。注意,此图以最简单的多边形积分近 似算法为例说明积分误差的计算, 在实际中具体的方法视连续求解器 的不同而不同。如果积分误差满足绝对误差或相对误差,则仿真继续

.

x

X.

积分误差通过两个 不同积分阶次的积 分的差值来近似

t

t+h

进行;如果不满足,则求解器尝试一个更小的步长,并重复这个过程。 当然,连续求解器在选择更小步长时采用的方法也不尽相同。如果误 差上限值的选择或连续求解器的选择不适合待求解的连续系统, 则仿 真步长有可能会变得非常小,使仿真速度变得非常慢。 (用户需要注 意这一点) 。 对于实际的系统而言,很少有纯粹的离散系统或连续系统,大部 分系统均为混合系统。连续变步长求解器不仅考虑了连续状态的求 解,而且也考虑了系统中离散状态的求解。连续变步长求解器首先尝 试使用最大步长(仿真起始时采用初始步长)进行求解,如果在这个 仿真区间内有离散状态的更新, 步长便减小到与离散状态的更新相吻 合。 混合系统仿真时连续状态求解与离散状态求解的协调如图 6.3 所示。其中 h 为初始步长,由于在时刻 t 与 t+h 之间系统存在着离散 状态的更新,因而连续变步长求解器将会减小步长至 hnew,之后再计 算积分误差以控制求解。如果求解器误差满足误差范围,则进行下一 步仿真,否则缩小时间间隔,重复此过程进行求解仿真。

hnew
X 导数

0

t

离散更新时刻

图 6.3 连续状态求解与离散状态求解的协调示意图 &6.2 系统过零的概念与解决方案 6.1 节中对 Simulink 的求解器进行了较为深入的介绍。 Simulink 求解器固然是系统仿真的核心,但 Simulink 对动态系统求解仿真的 控制流程也是非常关键的。Simulink 对系统仿真的控制是通过系统 模型与求解器之间建立对话的方式进行的:Simulink 将系统模型、 模块参数与系统方程传递给 Simulink 的求解器,而求解器将计算出 的系统状态与仿真时间通过 Simulink 环境传递给系统模型本身,通 过这样的交互作用方式来完成动态系统的仿真。 对话方式的核心是事件通知。所谓的事件通知,是指系统模型通 过 Simulink 仿真环境告知求解器在前一仿真步长内系统中所发生的 事件,以用于当前仿真时刻求解器的计算。而过零检测则用来检测系 统中是否有事件发生。 系统模型正是通过过零检测与事件通知完成与 Simulink 求解器的交互。本节将详细介绍过零检测与事件通知的概 念。 6.2.1 过零的发生

在动态系统的仿真过程中,所谓过零,是指系统模型中的信号或 系统模块特征的某种改变。这种特征改变包括以下两种情况: (1)信号在上一个仿真时刻步长之内改变了符号。 (2)系统模块在上一个仿真时间变长改变了模式(如积分器进 入了饱和区段) 。 过零本身便是一个非常重要的事件, 同时它也用来表示其它事件 的发生。过零一般用来表征动态系统中的某种不连续性,例如系统响 应中的跳变、输入信号的脉冲与阶跃等。如果再动态系统的仿真中不 对过零进行检查,很可能会导致不准确的结果。这是因为对于某些系 统而言,系统中的过零会引起系统动态方程的改变,也就是动态系统 的运行模式将发生变化。 读者可以回忆在第 5 章动态系统仿真中所介 绍的蹦极系统,在没有考虑过零事件发生时,系统的输出响应为一振 荡的过程;但是此蹦极系统对于体重为 70kg 的人来说是不安全的, 跳跃者会触地死亡。如果考虑过零的发生(也就是跳跃者的触地) , 整个蹦极系统的动态响应将会发生改变,而非正常的振荡变化。 6.2.2 事件通知 在动态系统仿真中,采用变步长求解器可以使 Simulink 正确地 检测到系统模块与信号中过零事件的发生。 当一个模块通过 Simulink 仿真环境通知求解器,在系统前一仿真步长时间内发生了过零事件, 变步长求解器就会缩小仿真步长, 即使求解误差满足绝对误差和相对 误差的上限要求。缩小仿真步长的目的是判定事件发生的准确时间 (也就是过零事件发生的准确时刻) 。当然,这样做会使系统仿真的

速度变慢,但正如前面所说,这对于系统的某些模块是至关重要的。 因为这些模块的输出可能表示了一个物理量, 它的零值有着重要的意 义;或者是标志系统运行状态的改变,或者用来控制另外一个模块等 等。事实上,只有少量的模块能够发出事件通知。每个模块发出专属 于自己的事件通知,而且可能与不止一个类型的事件发生关联。 事件通知是 Simulink 进行动态系统仿真的核心。可以这么说, Simulink 动态系统仿真是基于事件驱动的,这符合当前交互式设计 与面向对象设计的思想。在系统仿真中,系统模型与求解器均可以视 为某种对象,事件通知相当于对象之间的消息传递;对象通知消息的 传递来完成系统仿真的目的。 6.2.3 支持过零的模块 在 Simulink 的模块库中, 并非所有的模块都能够产生过零事件。 能够产生过零事件的 Simulink 模块有:Abs(Math 数学库中的求取 绝对值模块) 、Backlash(Nonlinear 非线性库中的偏移模块) 、Dead Zone(Nonliner 非线性库中的死区模块) 、Hit Crossing(Signals & System 信号与系统库中的零交叉模块) 、Integrator(Continuous 连 续库中的积分模块)MinMax Math 数学库中的最值模块)Relational 、 ( 、 Operator(Math 数学库中的关系运算模块) 、Relay(Nonliner 非线 性库中的延迟模块) Saturtion 、 (Nonliner 非线性库中的饱和模块) 、 Sign(Math 数学库中的符号运算模块) 、Step(Sources 输入库中的 阶跃模块) 、Subsystem(Subsystems 子系统库中的子系统模块) ,以 及 Switch(Nonliner 非线性哭着能够的开关模块)等。一般来说,

不同模块所产生的过零的类型是有差异的。例如,对于 Abs 绝对值求 取模块,当输入改变符号时产生一个过零事件,而 Saturation 饱和 模块能够生成两个不同的过零事件,一个用于下饱和,一个用于上饱 和。 对于其它的许多模块而言,它们不具有过零检测的能力。如果需 要对这些模块进行过零检测,则可以使用信号与系统库 (Signals&System)中的 Hit Crossing 零交叉模块来实现。当 Hit Crossing 模块的输入穿过某一偏移值(offset)时会产生一个过零 事件,所以它可以用来为不带过零能力的模块提供过零检测的能力。 一般而言,系统模型中模块过零的作用有两种类型:一是用来通 知求解器,系统的运行模式是否发生了改变,也就是系统的动态特性 是否发生改变;二是驱动系统模型中其它模块。过零信号包含三种类 型:上升沿、下降沿、双边沿,如图 6.5 所示。
上升沿 Trigger O R

R F

下降沿 Trigger

F

双边沿 Trigger

信号过零类型,其中 F 表示下降沿,R 表 示上升沿

图 6.5 过信号的类型 下面分别对这三种类型进行简单的介绍。

(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-4s 2 关闭过零 【例 6.2】 过零的关闭与影响 在【例 6.1】中,过零表示系统中信号穿过了零点。其实,过零 不仅用来表示信号穿过了零点,还可以用来表示信号的陡沿和饱和。 在这个例子中,系统实现了输入信号由其绝对值跳变到饱和值的功 能,而且跳变过程受到仿真时刻的控制。在此系统模型中所使用的 Abs 模块与 Saturation 模块都支持过零事件的发生,因此在系统的 响应输出中得到了理想的陡沿。其中系统模型如图 6.8(a)所示,系 统仿真结果如图 6.7(b)所示。 从图 6.8 中可以明显看出, 使用过零检测可以获得很好的仿真结 果,系统的输出具有很好的陡沿。 在使用 Simulink 进行动态系统仿真中,其默认参数选择使用过

(a)

(b) 图 6.8 系统模型及系统仿真结果 零检测的功能。 如果使用过零检测并不能给系统的仿真带来很大的好 处,用户可以关闭仿真过程中过零事件的检测功能,然后再次对系统 进行仿真。图 6.9(a)、(b)所示分别为关闭过零检测的设置以及在关

闭过零检测后系统的仿真结果。显然,关闭过零检测功能使得仿真结 果在 t=5 时不是非常理想,而且当 Simulink 输入信号达到饱和时还 带有一些拐角。 6.2.5 使用过零检测的其它注意事项 在使用过零检测时,用户需要注意如下几点: (1)关闭系统仿真参数设置中的过零事件检测,可以使动态系 统的仿真速度得到很大的提高。但可能会引起系统仿真结果的不精 确,甚至出现错误结果。 (2)关闭系统过零检测对 Hit Crossing 零交叉模块并无影响。 (3)对于离散系统及其产生的离散信号不需要进行过零检测。 这是因为用于离散系统仿真的离散求解器与连续变步长求解器都可 以很好地匹配离散信号的更新时刻。 此外,对于某些比较特殊的动态系统而言,在对其进行仿真时, 有可能在一个非常小的区间内多次过零点。这将导致在同一时间 内多次探测到信号的过零,从而使得 Simulink 仿真终止。在这种 情况下,用户应该在仿真参数设置中关闭过零检测功能。当然, 这些系统通常是某些物理现象的理想模型, 如无质量弹簧的振荡, 没有任何延迟的气压系统等。但是对于某些系统而言,这些模块 的过零非常重要, 此时用户可以采用在系统模型中串入零交叉 Hit Crossing 模块,并关闭仿真过零 检测功能来实现过零的使用。 6.3 系统代数环的概念与解决方案 6.3.1 直接馈通模块

在使用 Simulink 的模块库建立动态系统的模型时, 有些系统 模块的输入端口(Input ports)具有直接馈通(Direct feedthrough)的特性。所谓模块的直接馈通,是指如果在这些模 块的输入端口中没有输入信号,则无法计算此模块的输出信号。 换句话说,直接馈通就是模块输出直接依赖与模块的输入。在 Simulink 中具有直接馈通特性的模块有如下的几种: (1)Math Function 数学函数模块。 (2)Gain 增益模块。 (3)Product 乘法模块。 (4)State-Space 状态空间模块(其中矩阵 D 不为 0) 。 (5)Transfer Fcn 传递函数模块(分子与分母多项式阶次 相同) 。 (6)Sum 求和模块。 (7)Zero-Pole 零极点模块(零点与极点数目相同) 。 (8)Integrator 积分模块。 6.3.2 代数环的产生 在介绍完具有直接馈通特性的系统模块之后, 来介绍代数环的产 生。系统模型中产生代数环的条件如下: (1)具有直接馈通特性的系统模块的输入,直接由此模块的输 出来驱动。 (2)具有直接馈通特性的系统模块的输入,由其它直接馈通模 块所构成的反馈回路间接来驱动。

图 6.10 所示为一个非常简单的标量代数环的构成。 此代数环回路仅由一个求和模块构成, 其中模块的输出状态 z 同时作为此模块的 输入。由于求和模块具有直接馈通特性, 也就是模块输出直接依赖于模块的输入, 因而构成了代数环。不难看出此代数环 可以用如下的数学表达式来描述: 图 6.10 标量代数环
u + z -

z =u?z
显然,此系统模块的输出状态为 z=u/2。但是对于大多数的代数环系 统而言,难以通过直接观察来求解。 如果系统模型中出现了代数环, 由于代数环的输入输出之间是相 互依赖的,组成代数环的所有模块都要求在同一个时刻计算输出。这 与系统仿真的顺序概念相反,因此,最好使用其它的方法(如手工的 方法)对系统方程进行求解、对代数环进行代数约束或切断环来解决 代数环的求解问题。 6.3.3 代数环的举例与解决方案之一:直接求解系统方程 【例 6.3】 代数环的直接求解。图 6.11 中所示的两个系统模型 中均存在代数环结构,石对这两个系统进行求解。 解:为了计算求和模块 Sum 的输出,需要知道其输入,但是其输 入恰恰包含模块的输出。对于此二系统,很容易写出如下所示的系统 的动态方程: (1)第一个系统模型的动态方程: z = 1 ? z ,所以 z=0.5。

图 6.11 具有代数环的系统模型 (2)第二个系统模型的动态方程: z = 1 ? z ? z ,所以 z=0.333. 其结果如图中 Display 模块所示。其实在 Simulink 中有一个内 置的代数环求解器,可以对诸如上述系统模型进行正确的计算。并且 Simulink 会在 MATLAB 命令窗口中给出仿真警告,告诉用户系统模型 中存在的代数环情况。 例如, 在对第二个系统模型进行仿真时, MATLAB 窗口中显示如下信息: Warning:Block diagram 'algebraic_loop_example2' contains 1 algebraic loop(s). Found algebraic loop containing block(s): 'algebraic_loop_example2/Gain1' 'algebraic_loop_example2/Gain' 'algebraic_loop_example2/Sum'(algebraic variable) 这意味着此系统模型中存在着一个代数环, 构成代数环的组成模块是 Gain1、Gain 以及 Sum 模块。 6.3.4 代数环的举例与解决方案之二:代数约束 用户除了可以使用 Simulink 内置的代数环求解器对含有代数环 的动态系统进行仿真,还可以使用 Math 模块库中的代数约束

Algebraic Constraint 模块对动态系统数学方程进行求解。 使用代数约束模块并给出约束初始值, 可以方便地堆代数环方程 进行求解。代数约束模块通过调整其输出代数状态以使其输入 F(z) 为零。其中 z 为模块的输出状态,F(z)为一代数表达式,它作为模块 的输入。注意,代数约束模块的输出必须通过一个反馈回路以影响模 块的输入, 而且必须给定一个模块输出状态的初始值以有效地改进代 数环的效率。 【例 6.4】确良 使用代数约束求解代数环。 在如图 6.12 所示的系统模型中代数约束模块的输出分别为代数 状态 z1,z2。z1,z2 分别通过反馈回路作为代数约束模块的输入。 运行此系统相当于对如下的代数方程进行求解:

? z1 + z 2 ? 1 = 0 ? ? z 2 ? z1 ? 1 = 0
其仿真结果如图中 Display 模块所显示的那样, 其中 z1=0, z2=1。

图 6.12 使用代数约束求解的代数环结构

当在系统模型中使用代数约束时,系统中将出现代数环。对于系 统模型中包含代数环结构的系统而言,Simulink 会在每一仿真步长 内调用代数环求解器对系统进行求解。 代数环求解器通过迭代的方法 对系统进行求解,由于对系统的求解使用了迭代的方法,因而对含有 代数环的系统仿真速度要慢于一般不含代数环的系统。 在使用代数约束模块时,Simulink 使用牛顿迭代法求解代数环。 虽然采用这种方法视一种稳定的算法, 但是如果代数状态的初始值选 择的不合适,则算法有可能不收敛。因此,用户在使用代数约束时, 一定要注意对代数约束模块输出的代数状态的初始值的选择问题, 如 果初始值选择的不同,有可能造成最终结果的不同。 【例 6.5】代数状态的初始值选择。使用代数约束来求解方程
x 2 ? x ? 2 = 0 即 ( x + 1)( x ? 2 ) = 0

的根(显然此方程的根为 x1=-1 及 x2=2) 。

图 6.13 代数状态的初始值选择

解:首先建立如图所示的系统模型,然后对代数约束模块的初始 值进行设置。 (仿真结果如 Display 模块中所示) 6.3.5 代数环的举例与解决方案之三:切断环 至此,能够采用两种方法对含有代数环的动态系统进行仿真分 析:一是直接对系统方程进行手工求解,但是在很多情况下难以进行 手工求解甚至不可能进行手工求解; 二是使用代数约束, Simulink 由 内置的代数环求解器对含有代数环的系统进行仿真。虽然 Simulink 能够有效地求解代数环, 但是由于采用的牛顿算法需要进行多次迭代 以求解系统,而且在每一时间步都是如此,这回对系统仿真的速度产 生较大的影响,从而导致了含有代数环结构的系统仿真速度很慢。 在很多情况下, 用户可以通过某种方法破坏代数环产生的条件来 “切断”系统模型中的代数环结构,从而加快系统仿真的速度。一个 最常用的技巧是通过加入一个存储模块(Continuous 模块库中的 Memory 模块)或延迟单元(Discrete 模块库中的 Unit Delay 模块) 以切断代数环。尽管使用这个方法非常容易,但是在一般条件下并不 推荐这样做,因为加入存储模块会改变系统的动态性能,而且对于不 适当的初始估计值,有可能导致系统不稳定。 【例 6.6】 对于如下的连续线性系统:

G(s) =

s + 0. 5 (s ? 2)(s + 3)

建立如图所示的系统模型。 图中 G(s)为线性连续系统的零极点描述,其相应的状态空间描 述矩阵分别为 A,B,C,D。建立此系统的模型以求出系统在恒定输入下

的状态值。为了说明切断代数环的影响,我们在此模型中给出系统状 态求取的三种不同方法以作为比较。图中最上方为使用 Simulink 的 内置代数环求解器进行状态求解, 最下方为使用手工方式进行状态求 解,中间为使用 Memory 模块切断代数环,然后进行状态求解。 对此系统进行仿真之前, 由于使用了此线性系统的状态空间描述 矩阵变量作为系统模块的参数,因此必须保证 MATLAB 工作空间中这 些矩阵变量的存在。可以在 MATLAB 的命令窗口中键入如下的语句以 求取系统状态空间描述矩阵: >>[A,B,C,D]=zp2ss([0.5],[2,-3],1); >>I=eye(2); %并生成单位矩阵 I

然后运行此系统进行系统状态的求解。 图中在 Display 模块中给 出了系统的运行结果,从中可以明显看出,无论是使用 Simulink 的 内置代数环求解器还是使用手工计算的方法, 都可以获得正确的系统 状态值;而使用 Memory 模块切断代数环之后,导致了系统的不稳定, 从而使得状态值的求解发散。由此可以看出,虽然使用 Memory 模块 可以切断代数环,但是它却改变了系统的动态特性,因此在一般情况 下,用户应该尽量不要切断代数环。如果用户使用 Memory 模块切断 代数环, 一定要检测 Memory 模块所需的初始状态是能够使系统收敛, 如果系统不收敛,则使用 Memory 会使系统运行失败。 6.4 高级积分器

在使用 Simulink 对实际的动态系统进行仿真时,积分运算可以

说是 Simulink 求解器的核心技术之一。前面在介绍动态系统的仿真 实现时,仅仅使用了最简单的积分器设置。在这一节中,将简单介绍 高级积分器的概念及其使用。 首先对积分器的各个端口进行简单的介绍。下图所示为使用缺省 参数设置下的积分器外观与选择所有参数设置后积分器的外观比较。
Satate Input Output Reset Initial condition integrator Saturation

图 6.15 积分器外观比较 对于使用缺省参数设置下的积分器, 其输出信号为输入信号的数 值积分,想必读者对其已经比较熟悉了,这里不再赘述。下面详细介 绍一下选择所有参数设置后的积分器各个端口的含义以及对积分器 的设置。首先介绍一下积分器参数设置对话框,如下图。

图 16 高级积分器设置 1 积分器的初始条件端口(Initial condition) 设置积分器初始条件的方法有两种,它们分别是: (1)在积分器模块参数设置对话框中设置初始条件:在初始条 件源设置 (Initial condition source) 中选择内部设置 (Internal) , 并在下面的文本框中键入给定的初始条件,此时不显示积分器端口。 (2)从外部输入源设置积分器初始条件:在初始条件源设置中 选择外部设置(External)初始条件设置端口以 x0 作为标志。此时需 要使用 Signals&System 模块库中的 IC 模块设置积分器初始值。 2 积分器状态端口(State) 当出现下述两种情况时, 需要使用积分器的状态窗口而非其输出 窗口。 (1)当积分器模块的输出经重置端口或初始条件端口反馈至模 块本身时,会造成系统模型中出现代数环结构的问题,此时需要使用 状态端口。 (2)当从一个条件执行子系统向另外的条件执行子系统传递状 态时,可能会引起时间步问题。此时也需要使用状态端口而非输出端 口。至于条件执行子系统的有关内容,将在第 7 章中介绍。 其实状态端口的输出值与输出端口的输出值本身并没有区别,其 不同之处在于二者产生的时间略微有所不同 (都处于同一的时间步之 内)这正是 Simulink 避免出现上述问题的解决方案。 , 选择 Show state port 复选框,状态端口将显示在积分器的顶部。

3 积分器输出范围限制与饱和输出端口(Saturation) 在某些情况下, 积分器的输出可能会超过系统本身所允许的上限 或下限值,选择积分器输出范围限制框(Limit output) ,并设置上 限值 (Upper saturation limit) 与下限值 (Lower saturation limit) , 可以将积分器的输出限制在一个给定的范围之内。 此时积分器的输出 服从下面的规则: (1)当积分结果小于或等于下限值并且输入信号为负,积分器 输出保持在下限值(下饱和区) 。 (2)当积分结果在上限值与下限值之间时,积分器输出为实际 的积分结果。 (3)当积分结果大于或等于上限值并且输入信号为正,积分器 输出保持在上限值(上饱和区) 。 选择 Show saturation port 复选框可以在积分器中显示饱和端 口,此端口位于输出端口的下方。饱和端口的输出取值有三种情况, 用来表示积分器的饱和状态: (1)输出为 1,表示积分器处于上饱和区。 (2)输出为 0,表示积分器处于正常范围之内。 (3)输出为-1,表示积分器处于下饱和区。 当选择输出范围限制时,积分器模块将产生三个过零事件:一个 用来检测积分结果何时进入上饱和区, 一个用来检测积分结果何时进 入下饱和区,还有一个用来检测积分器何时离开饱和区。 4 积分器重置

选择积分器状态重置框看重新设置积分器的状态, 其值由外部输 入信号决定。此时,在积分器输入端口下方出现重置触发端口。可以 采用不同的触发方式对积分器状态进行重置。 (1)当重置信号具有上升沿(rising)时,触发重置方式选择 为上升沿。 (2)当重置信号具有下降沿(falling)时,触发重置方式选择 为下降沿。 (3)当重置信号具有上升沿或下降沿(即双边沿)时,触发重 置方式可选为 either。 (4)当重置信号非零时,选择 level 重置积分器状态,并使重 置方式可选择为 either。 积分器的重置端口具有直接馈通的特性。积分器模块的输出,无 论是直接反馈还是通过具体直接馈通特性的模块反馈至其重置端口, 都会使系统模型中出现代数环结构。 而使用状态端口代替输出端口可 以避免代数环的出现。 5 积分器绝对误差设置(Absolute tolerance) 在默认设置下,积分器采用 Simulink 自动设置的绝对误差限。 用户也可以根据自己的需要设置积分器的绝对误差限,在 Absolute tolerance 下键入误差上限即可。 至此,我们对高级积分器设置做了一个比较全面的介绍,下面举 例说明。 【例 6.7】 高级积分器的使用。系统模型如图所示。

图 6.17 高级积分器的使用 在此系统中,积分器模块的输出(其实是积分器状态)驱动自身 的状态重置端口。采用状态端口驱动的目的在于:使用它可以避免使 用输出端口驱动重置状态所造成的代数环。这是因为,状态值(与输 出值相等)的计算先于输出值,所以使用状态值驱动可以在输出之前 判断是否需要对积分器进行重置。积分器初始时刻的初始值由 IC 模 块提供,其值为-50。当积分器输出大于或等于 20 时,它将重置为由 常数模块所给出的初始值 100。积分器的输入为一常值信号 1. 设置合适的仿真参数如下:仿真时间范围为 0~200,积分器的 输出上限为 20,下限为-100,状态重置选择信号上升沿 rising,其 余参数如系统模型框中所示。运行仿真结果如图 6.18 所示。从仿真 结果中可以看出,在系统运行的初始时刻,积分器状态由 IC 模块所 决定;而当系统的输出大于或等于 20 时,积分器状态重置为-100。

图 6.18 系统仿真结果 仿真参数设置: 6.5 仿真参数设置:高级选项与诊断选项 在第 5 章中讲述 Simulink 动态系统仿真时, 其中介绍了 Simulink 仿真参数选项的大部分普通设置, 使用这些设置对于一般的系统仿真 已经足够了。但是在某些情况下,用户需要对系统仿真进行控制以满 足特殊的要求。Simulink 仿真参数的高级选项(Advanced)与诊断 选项(Diagnostics) ,给用户提供了优化系统仿真的能力。用户可以 根据需要对 Simulink 的高级选项进行设置以满足仿真的要求。本节 将简单介绍 Simulink 仿真参数的高级设置:高级选项与诊断选项。 6.5.1 高级选项 首先介绍 Simulink 仿真参数的高级选项,如图 6.19 所示。 其中各个选项的意义如下: (1)状态设置(Action) :显示当前参数所处的状态,其取值为 开(on)或关(off) 。 (2)模块组合(Block reduction) :使用一个合成模块替代一

组模块。 (3)逻辑信号检测(Boolean logic signals) :检测逻辑模块 的输入是否为 0。激活此状态(Action 设置为 on)可以强制模块输 入为逻辑值。 (4)信号存储复用(Signal storage reuse) :复用内存空间以 节省信号所使用的内存。 注意:在系统使用悬浮显示时应该关闭此选项。 (5)过零检测(Zero crossing detection) :检测过零事件的 发生。 (6)模型参数设置(Model parameter configuration) :设置 整个系统模型的参数, 此参数仅影响到在执行过程中可以改变系统参 数的仿真或模型本身的参数可以由其它模型访问的系统模型产生的 代码。 此外,Parameter pooling 选项在代码生成时使用,仿真时不需 要改变它。 6.5.2 诊断选项 在对动态系统进行仿真时,很难避免一些问题的出现,如系统模 型中存在的代数环结构、系统中数据连续的转换以及信号的越界等 等。使用 Simulink 仿真参数对话框中的诊断选项可以对动态系统仿 真过程中出现的问题进行诊断, 同时也可以在系统仿真之前进行特定 的测试,以有效地提高系统仿真的性能。需要注意的是,在诊断选项 中的一致性与边界测试在许多情况下不是必需的。 由于这些测试非常

耗时,因此在一般的情况下不需要对其进行测试(选择这两个选项中 的 None 选项即可) ;但是如果系统模型中包含用户编写的模块,为避 免仿真性能与内存使用方面的问题,应该设置适当的选项(警告 Warning 或错误 Error) 诊断选项对话框还包含了其它诸多潜在的问 。 题,这些问题并不影响仿真计算的精度;因此可按照用户的要求,选 择在出现这些问题时所要采取的动作(不予理睬 None,显示警告 Warning,终止并显示错误信息 Error) 。这些问题都比较易于理解, 这里就不再赘述。图 6.20 所示为诊断选项卡设置。


相关文章:
第六章 Simulink系统仿真原理
第六章 Simulink系统仿真原理_机械/仪表_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 第六章 Simulink系统仿真原理_机械/仪表_工程科技_专业资料。仿真...
第六章Simulink 仿真工具箱
研究生 讲授题目:Simulink 仿真工具箱 所属章节:第 6 章 教学目的和要求: SIMULINK 是MATLAB 的重要组件之一,它提供了一个动态系统建模、仿真 和综合分析的集成...
控制系统仿真matlab第六章习题答案
MATLAB simulink 通信系... 暂无评价 5页 1下载券 MATLAB控制系统各种仿真......控制系统仿真第六章课后题作业 6.1 在图 6.1 中,已知单位负反馈系统被控...
matalb Simulink系统仿真
第六章 Simulink系统仿... 27页 免费 Simulink建模与仿真 50页 免费如要投诉...5、晶闸管元件的仿真 晶闸管工作原理:当阳极(a)与阴极(k)之间有正向电压及门...
MATLAB simulink 通信系统建模与仿真 第六章部分习题答案
MATLAB simulink 通信系统建模与仿真 第六章部分习题答案_工学_高等教育_教育专区。 4、采用检测器输入作为方针对象重新方针例题 6.5 5、用 Simulink 重做习题 4...
基于MATLAB 7.X SIMULINK STATEFLOW系统仿真分析及设计第六章习题答案
基于MATLAB 7.X SIMULINK STATEFLOW系统仿真分析及设计第六章习题答案_理学_高等...在第 三个子图中绘制 t 为自变量,y3=sin(2t)*cos(2t)曲线,在第四个子图...
六个实战示例--自动控制理论--Simulink仿真
六、预习要求 1.熟悉各种控制器的原理和结构,画好将创建的 SIMULINK 图形。 5...4s ? 25 6 自动控制理论仿真实验指导书 该系统可以表示为两个数组,每一个...
线性系统的Simulink仿真
G(s)= K S ( 0 . 1 S ? 1) (5)二阶振荡环节 仿真原理图如下所示:...simulink动态系统建模仿... 132页 免费 第六章 Simulink系统... 27页 免费 ...
通信原理QDPSK的系统仿真
本课题就是在理解 QDPSK 调制解调原理的基础之上,利用 MATLAB7.0 平 台下的 Simulink 仿真软件搭建 QDPSK 调制解调仿真模型, 实现其通信系统仿 真,并对其工作...
实验六 基于Simulink的简单电力系统仿真
实验六 基于 Simulink 的简单电力系统仿真 一、 实验目的 1) 熟悉 Simulink 的工作环境; 2) 掌握 Simulink 电力系统工具箱的使用; 3) 掌握在 Simulink 的工作环...
更多相关标签:
simulink离散系统仿真 | simulink控制系统仿真 | simulink电力系统仿真 | simulink通信系统仿真 | simulink系统仿真 | simulink系统仿真视频 | simulink动态系统仿真 | 通信系统原理 仿真 |