Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Integrator

对信号求积分

  • 库:
  • Simulink / Commonly Used Blocks

    Simulink / Continuous

  • Integrator block

说明

Integrator 模块输出其输入信号相对于时间的积分值。

Simulink®Integrator 模块作为具有一种状态的动态系统进行处理。模块动态由以下方程指定:

{x˙(t)=u(t)y(t)=x(t)   x(t0)=x0

,其中:

  • u 是模块输入。

  • y 是模块输出。

  • x 是模块状态。

  • x0 是 x 的初始条件。

虽然这些方程定义了连续时间下的准确关系,但 Simulink 使用数值逼近方法以有限精度来进行计算。Simulink 可以使用若干不同的数值积分方法来计算模块的输出,每种方法都在特定的应用中各具优势。使用 Configuration Parameters 对话框的 Solver 窗格(请参阅Solver 窗格)可以选择最适合您的应用的方法。

所选求解器会使用当前输入值和前一个时间步的状态值计算 Integrator 模块在当前时间步的输出。为支持此计算模型,Integrator 模块会保存在当前时间步的输出,以供求解器计算其在下一个时间步的输出。该模块还为求解器提供了初始条件,用于计算该模块在仿真开始时的初始状态。初始条件的默认值为 0。使用模块参数对话框可以为初始条件指定其他值,或在模块上创建初始值输入端口。

使用参数对话框可以:

  • 定义积分的上限和下限

  • 创建可将模块的输出(状态)重置为初始值的输入,具体取决于输入的变化方式。

  • 创建可选的状态输出,以便模块的输出值可以触发模块重置

使用 Discrete-Time Integrator 模块可以创建纯离散系统。

定义初始条件

可以在模块对话框上将初始条件定义为参数,或者从外部信号输入初始条件:

  • 要将初始条件定义为模块参数,请将 Initial condition source 参数指定为 “internal” 并在 Initial condition 字段中输入值。

  • 要从外部源提供初始条件,请将 Initial condition source 参数指定为 “external”。模块输入下会显示一个额外输入端口。

    注意

    如果积分器限制其输出(请参阅限制积分),则初始条件必须在积分器的饱和界限范围内。如果初始条件在模块饱和界限范围之外,该模块会显示错误消息。

限制积分

要防止输出超出可指定的级别,请选中 Limit output 复选框,并在相应的参数字段中输入限制。此操作会使该模块起到限量积分器的作用。当输出达到界限时,积分操作将关闭以防止积分饱和。在仿真期间,您可以更改限制,但不能更改是否限制输出。模块按如下方式确定输出:

  • 当积分小于或等于 Lower saturation limit 时,输出保持在 Lower saturation limit

  • 当积分在 Lower saturation limitUpper saturation limit 之间时,输出为积分。

  • 当积分大于或等于 Upper saturation limit 时,输出保持在 Upper saturation limit

要生成指示状态正受到限制的信号,请选中 Show saturation port 复选框。模块输出端口下方会显示一个饱和端口。

信号具有以下三个值之一:

  • 1 表示正在应用上限。

  • 0 表示积分不受限制。

  • -1 表示正在应用下限。

如果选中此复选框,模块将包含三个过零点:一个用于检测何时进入饱和上界,一个用于检测何时进入饱和下界,一个用于检测何时不再饱和。

注意

对于 Integrator Limited 模块,默认情况下 Limit output 处于选中状态,Upper saturation limit 设置为 1Lower saturation limit 设置为 0

绕回循环状态

自然界中有多种物理现象表现为循环、周期或旋转。例如,表现出旋转运动的物体或机械以及振荡器会就属于这种现象。

在 Simulink 中对这些现象进行建模时,需要对定期或循环信号的变化率进行积分以获取运动状态。

但是,这种方法的缺点是,经过长时间仿真后,表示定期或循环信号的状态会积分为很大的值。而且,由于角度减小,计算这些信号的正弦或余弦所占用的时间会越来越长。大信号值还会对求解器的性能和准确性产生负面影响。

克服这一缺点的一种方法是在角状态达到 2π 时将其重置为 0(或者在其达到 π 时重置为 –π,以确保数值对称)。此方法可改进正弦和余弦计算的准确性,并缩短角度减小时间。但该方法还需要过零检测,并引入了求解器重置,这会减慢可变步长求解器的仿真,尤其是在大型模型中。

为消除绕回点处的求解器重置,Integrator 模块支持绕回状态,您可以通过在模块参数对话框上选中 Wrap state 来启用这些状态。当启用 Wrap state 时,模块图标将更改为指示该模块具有绕回状态。

Simulink 允许以绕回状态上限和下限值参数为边界的绕回状态。下面的方程给出了确定绕回状态的算法:

y={xx[xl,xu)x(xuxl)xxlxuxlotherwise

其中:

  • xl 是绕回状态的下限值。

  • xu 是绕回状态的上限值。

  • y 是输出。

支持绕回状态具有以下优势。

  • 消除当模型接近大角度和大状态值时的仿真不稳定性。

  • 减少仿真期间的求解器重置次数并消除对过零检测的需求,从而改善仿真时间。

  • 消除大角度值,从而加速针对角状态的三角函数计算。

  • 提高求解器的准确性和性能,并支持无限制仿真时间。

重置状态

模块可以根据外部信号将其状态重置为指定的初始条件。要使模块重置其状态,请选中其中一个 External reset 选项。模块输入端口下方将显示一个触发端口,并指示触发类型。

  • 选择 “rising” 可在重置信号从负值或零上升到正值时重置状态。

  • 选择 “falling” 可在重置信号从正值下降到零或负值时重置状态。

  • 选择 “either” 可在重置信号从零变为非零值、从非零值变为零或改变符号时重置状态。

  • 选择 “level” 可于重置信号在当前时间步为非零值时或者从上一个时间步的非零值更改为当前时间步的零值时重置状态。

  • 选择 “level hold” 可于重置信号在当前时间步为非零值时重置状态。

重置端口具有直接馈通。如果模块输出直接或通过一系列带直接馈通的模块反馈到此端口中,则会产生代数环(请参阅代数环概念)。使用 Integrator 模块的状态端口可以反馈该模块的输出,而不会创建代数环。

注意

为了符合汽车工业软件可靠性协会 (MISRA®) 软件标准,您的模型必须使用布尔信号来驱动 Integrator 模块的外部重置端口。

关于状态端口

在 Integrator 模块的参数对话框上选中 Show state port 复选框会导致 Integrator 模块的顶部显示一个附加输出端口,即状态端口。

状态端口的输出与模块的标准输出端口的输出相同,但以下情况除外。如果在当前时间步重置模块,则状态端口的输出为模块尚未重置时在模块的标准输出中显示的值。状态端口的输出在时间步中的显示会早于 Integrator 模块输出端口的输出的显示。使用状态端口可以避免以下建模方案中出现代数环:

  • 自重置积分器(请参阅创建自重置积分器

  • 将状态从一个使能子系统切换到另一个(请参阅在使能子系统之间切换状态

    注意

    当更新模型时,Simulink 会检查状态端口是否适用于这两个方案中的一个。如果不适用,会显示错误消息。此外,不能将此端口的输出记录在于 Accelerator 模式下执行的引用模型中。如果为该端口启用记录,Simulink 将在执行引用模型期间生成“signal not found”警告。

创建自重置积分器

在创建根据其输出值重置自身的积分器时,Integrator 模块的状态端口有助于避免代数环。例如,考虑以下模型。

此模型尝试通过将积分器的输出减 1 后反馈到积分器的重置端口来创建自重置积分器。但是,该模型会创建代数环。要计算 Integrator 模块的输出,Simulink 软件需要知道模块的重置信号的值,反之亦然。由于这两个值相互依存,Simulink 软件无法单独确定一个值。因此,如果您尝试仿真或更新此模型,系统会显示错误消息。

以下模型使用积分器的状态端口来避免代数环。

在此版本中,重置信号的值取决于状态端口的值。状态端口的值会早于 Integrator 模块输出端口的值在当前时间步中显示。因此,Simulink 可以确定该模块是否需要在计算模块输出之前进行重置,从而避免代数环。

在使能子系统之间切换状态

状态端口可帮助您在两个使能子系统之间传递状态时避免代数环。例如,考虑以下模型。

使能子系统 A 和 B 包含以下模块:

子系统 A子系统 B

在此模型中,一个恒定的输入信号驱动两个对信号求积分的使能子系统。一个脉冲发生器生成启用信号,从而使执行在两个子系统之间切换。每个子系统的使能端口均设为重置,这使得子系统可在变为活动状态时重置其积分器。重置积分器会使积分器读取其初始条件端口的值。每个子系统中积分器的初始条件端口均连接到另一个子系统中积分器的输出端口。

此连接的用途是,当执行在两个子系统之间切换时,启用对输入信号的连续积分。但是,此连接会创建代数环。要计算 A 的输出,Simulink 需要知道 B 的输出,反之亦然。由于两个输出相互依存,Simulink 无法计算输出值。因此,如果您尝试仿真或更新此模型,系统会显示错误消息。

同一模型的以下版本使用积分器状态端口来避免在切换状态时创建代数环。

使能子系统 A 和 B 包含以下模块:

子系统 A子系统 B

在此模型中,A 子系统中积分器的初始条件取决于 B 子系统中积分器的状态端口值,反之亦然。状态端口的值会早于积分器输出端口的值在仿真时间步中更新。因此,Simulink 可以计算任一积分器的初始条件,而无需知道另一个积分器的最终输出值。有关使用状态端口在条件执行子系统之间切换状态的另一个示例,请参阅 Building a Clutch Lock-Up Model

指定模块输出的绝对容差

默认情况下,Simulink 软件会使用在 Configuration Parameters 对话框中指定的绝对容差值(请参阅Error Tolerances for Variable-Step Solvers)来计算 Integrator 模块的输出。如果此值未提供足够的误差控制,则请在 Integrator 模块对话框的 Absolute tolerance 字段中指定更合适的值。您指定的值将用于计算所有模块输出。

选择所有选项

如果选择所有选项,模块图标将如下所示。

端口

Integrator 模块在其数据端口上接受并输出 double 类型的信号。外部重置端口接受 doubleBoolean 类型的信号。

输入

全部展开

需要积分的信号。

数据类型: double

根据外部信号将状态重置为指定的初始条件。请参阅重置状态

依存关系

要启用此端口,请启用 External Reset 参数。

数据类型: Boolean

根据外部信号设置模块状态的初始条件。

依存关系

要启用此端口,请将 Initial Conditions 参数设置为 “external”。

数据类型: double

输出

全部展开

输出积分状态。

数据类型: double

指示状态何时受到限制。当积分由指定的 Upper saturation limit 限制时,信号的值为 1。当信号由 Lower saturation limit 限制时,信号值为 -1。当积分介于饱和限制之间时,信号值为 0。请参阅限制积分

数据类型: double

输出模块的状态。请参阅关于状态端口

依存关系

通过启用 Show state port 参数来启用此端口。

数据类型: double

参数

全部展开

指定用于外部重置信号的触发类型。

  • 选择 “rising” 可在重置信号从负值或零上升到正值时重置状态。

  • 选择 “falling” 可在重置信号从正值下降到零或负值时重置状态。

  • 选择 “either” 可在重置信号从零变为非零值、从非零值变为零或改变符号时重置状态。

  • 选择 “level” 可于重置信号在当前时间步为非零值时或者从上一个时间步的非零值更改为当前时间步的零值时重置状态。

  • 选择 “level hold” 可于重置信号在当前时间步为非零值时重置状态。

编程用法

模块参数:ExternalReset
类型:字符向量、字符串
值:'none' | 'rising' | 'falling' | 'either' | 'level' | 'level hold'
默认值:'none'

选择初始条件的来源:

  • internal” - 从 Initial condition 模块参数获取状态的初始条件。

  • external” - 通过 IC 输入端口从外部模块获取状态的初始条件。

依存关系

选择 “internal” 将启用 Initial condition 参数。

选择 “external” 会禁用 Initial condition 参数并启用 IC 输入端口。

编程用法

模块参数:InitialConditionSource
类型:字符向量、字符串
值:'internal' | 'external'
默认值:'internal'

设置 Integrator 模块的初始状态。

提示

Simulink 软件不允许此模块的初始条件为 infNaN

依存关系

Initial condition source 设置为 internal 将启用此参数。

Initial condition source 设置为 external 将禁用此参数。

编程用法

模块参数:InitialCondition
类型:标量或向量
默认值:'0'

将模块的输出限制为介于 Lower saturation limitUpper saturation limit 参数之间的值。

  • 选中此复选框会将模块输出限制为介于 Lower saturation limitUpper saturation limit 参数之间的值。

  • 清除此复选框后,不会限制模块的输出值。

依存关系

选择此参数将启用 Lower saturation limitUpper saturation limit 参数。

编程用法

模块参数:LimitOutput
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

将积分的上限指定为标量、向量或矩阵。您必须指定在 Output minimumOutput maximum 参数值之间的值。

依存关系

要启用此参数,请选中 Limit output 复选框。

编程用法

模块参数:UpperSaturationLimit
类型:字符向量、字符串
值:标量 | 向量 | 矩阵
默认值: 'inf'

将积分的下限指定为标量、向量或矩阵。您必须指定在 Output minimumOutput maximum 参数值之间的值。

依存关系

要启用此参数,请选中 Limit output 复选框。

编程用法

模块参数:LowerSaturationLimit
类型:字符向量、字符串
值:标量 | 向量 | 矩阵
默认值:'-inf'

Wrapped state upper valueWrapped state lower value 参数之间启用状态绕回。启用绕回状态可在对旋转和循环状态轨迹建模时消除对过零检测的需求,减少求解器重置,提高求解器性能和准确性,并增加仿真时间范围。

如果将 Wrapped state upper value 指定为 inf 并将 Wrapped state lower value 指定为 -inf,则不会发生绕回。

依存关系

选择此参数将启用 Wrapped state upper valueWrapped state lower value 参数。

编程用法

模块参数:WrapState
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

模块输出的上限。

依存关系

选择 Wrap state 会启用此参数。

编程用法

模块参数:WrappedStateUpperValue
类型:标量或向量
值:'2*pi'
默认值:'pi'

模块输出的下限。

依存关系

选择 Wrap state 会启用此参数。

编程用法

模块参数:WrappedStateLowerValue
类型:标量或向量
值:'0'
默认值:'-pi'

选中此复选框可将饱和输出端口添加到模块中。清除此复选框时,模块没有饱和输出端口。

依存关系

选择此参数将启用饱和输出端口。

编程用法

模块参数:ShowSaturationPort
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

选中此复选框可将状态输出端口添加到模块中。清除此复选框时,模块没有状态输出端口。

依存关系

选择此参数将启用状态输出端口。

编程用法

模块参数:ShowStatePort
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'
  • 如果输入 auto 或 -1,则 Simulink 会使用 Configuration Parameters 对话框中的绝对容差值(请参阅Solver 窗格)来计算模块状态。

  • 如果输入实数标量,则在计算所有模块状态时,该值会覆盖 Configuration Parameters 对话框中的绝对容差。

  • 如果输入实数向量,则该向量的维度必须匹配模块中连续状态的维度。这些值将覆盖 Configuration Parameters 对话框中的绝对容差。

编程用法

模块参数: AbsoluteTolerance
类型:字符向量、字符串、标量或向量
值:'auto' | '-1' | 任何正实数标量或向量
默认值: 'auto'

使 Simulink 线性化命令将此模块视为不可重置且输出无任何限制,而不管此模块的重置和输出限制选项设置如何。

提示

使用此复选框可以在使积分器重置或饱和的工作点周围对模型进行线性化。

编程用法

模块参数:IgnoreLimit
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

选择此项以启用过零检测。有关详细信息,请参阅 中的过零检测

编程用法

模块参数ZeroCross
类型:字符向量、字符串
'off' | 'on'
默认值'on'
  • 要为单个状态分配名称,请输入名称并用引号引起来,例如 'velocity'

  • 要为多个状态分配名称,请输入以逗号分隔的列表并用花括号括起来,例如 {'a', 'b', 'c'}。每个名称都必须是唯一的。

  • 状态名称只会应用于所选模块。

  • 状态数量必须能够被状态名称的数量均分。

  • 指定的名称数量可以少于状态数量,但不能多于状态数量。

    例如,可以在具有四个状态的系统中指定两个名称。第一个名称应用于前两个状态,第二个名称应用于后两个状态。

  • 要在 MATLAB® 工作区中分配带变量的状态名称,请输入不带引号的变量。变量可以是字符向量、字符串、元胞数组或结构体。

编程用法

模块参数:ContinuousStateAttributes
类型:字符向量、字符串
值:' ' | 用户定义
默认值:' '

模块特性

数据类型

double

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

在 R2006a 之前推出