Integrator
输入信号的积分
类型: Integrator
图书馆中的路径:
|
说明
Integrator 程序块计算输入信号的时间积分值。
程序块 Integrator 可视为一个具有单一状态的动态系统。程序块的行为由以下公式描述:
,
其中
-
- 为输入信号;
-
- 输出信号;
-
- 状态;
-
- 初始状态 。
这些方程描述了连续时间内输出对输入的精确依赖关系;数值近似方法用于有限精确地估计这些方程。在 Engee 中有几种类型的求解器,它们采用不同的数值积分方法来计算程序块的输出。根据具体问题的不同,每种求解器都有自己的优势。
所选求解器利用当前输入值和上一时间步的状态值计算当前时间步块 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 limit 和 Upper saturation limit 之间时,输出保持在积分处。
-
当积分大于或等于 Upper saturation limit 时,输出保持在 Upper saturation limit 。
要在状态受限时生成指示信号,请选中 Show saturation port 。饱和端口出现在块输出端口下方。
信号有三种取值:
-
1 "表示适用上限。
-
0 "表示积分没有上限。
-
1 "表示适用下限。
选中该复选框时,程序块有三个零交叉点:
-
确定何时进入饱和上限。
-
确定何时进入饱和下限。
-
确定何时离开饱和区。
重置循环状态
有些物理现象具有周期性、循环性或旋转性。对这些现象进行建模时,需要对周期或循环信号的变化率进行积分,从而得到一个状态变量。
这种方法的缺点是,在较长的模拟时间内,代表周期或循环信号的状态会被积分到非常大的值。此外,计算这些信号的正弦或余弦所需的时间也越来越长。较大的信号值也会对求解器的性能和精度产生负面影响。
克服这一缺点的一种方法是利用模型中的附加算法,在角度状态达到 2π 时将其重置为 "0"(或在达到 π 时将其重置为-π,以实现数值对称)。这种方法提高了正弦和余弦计算的精确度。但需要注意的是,这种方法会导致重新设置求解器,从而减慢变步长求解器的建模速度,尤其是在大型模型中。
为了防止求解器在输出值重置时重置, Integrator 块包含内置的状态重置机制,您可以在块参数对话框中勾选 Wrap state 复选框来启用该机制。
启用 Wrap state 后,程序块图标将发生变化,表示该程序块已启用循环状态复位。
启用循环状态复位后,状态值由以下表达式决定:
,
其中
-
- 是状态值的下限;
-
- 状态值的上限;
-
- 结果(状态)。
重置循环状态有以下优点:
-
当模型接近大角度和大状态值时,可消除建模不稳定性。
-
减少仿真过程中求解器重置的次数,从而缩短仿真时间。
-
消除大角度值,加快角度状态三角函数的计算速度。
-
提高求解器的精度和性能,提供无限模拟时间。
复位触发类型
外部复位*参数允许您定义作为复位触发器的复位信号的属性。可以使用以下触发器:
-
rising
- 当复位信号通过一个边沿时复位状态,即从负值或零值上升到正值。 -
falling
- 当复位信号通过截止点时,即从正值下降到零值或负值时,重置状态。 -
either
- 当复位信号上升或下降时,即从零值变为非零值、从非零值变为零值或符号改变时,重置状态。 -
level
- 复位并将输出保持在初始状态,直到复位信号等于零,即在当前时间步长内与零不同,或在当前时间步长内从上一时间步长的非零值变为零。 -
level hold
- 当复位信号不同于零时,将输出信号复位到初始状态。
复位端口有一个直接输入端。如果将程序块输出信号直接或通过一系列直接输入程序块反馈到该端口,则会产生一个代数环路。使用 Integrator 的程序块状态端口反馈程序块输出信号,不会产生代数环路。
关于状态端口
在程序块参数对话框 Integrator 中选中 Show state port 复选框,积分器程序块顶部就会多出一个输出端口(状态端口)。
状态端口的输出与标准程序块输出端口相同,但以下情况除外。如果程序块在当前时间步长内被重置,则状态端口输出将代表程序块未被重置时标准程序块输出端口上的值。
状态端口的输出比积分器程序块输出端口的输出更早出现在时间步中。在这些模拟场景中,可使用状态端口打开代数电路:
-
自对齐积分器(参见第.A.2 节)。 创建自复位积分器).
-
将状态从一个启用的子系统转移到另一个子系统(见第 3.3 节)。 启用子系统之间的状态转移).
创建自复位积分器
当创建一个根据输出数据值进行自复位的积分器时, Integrator 的块状态端口可帮助您避免代数循环。请考虑以下模型。
该模型试图将积分器输出减去 1
后的值送回积分器复位端口,从而创建一个自复位积分器。然而,该模型创建了一个代数循环。要计算积分器块输出,软件必须知道块复位信号的值,反之亦然。由于这两个值相互依存,软件无法确定其中任何一个值。因此,在尝试建模或更新该模型时会出现错误信息。
以下模型使用积分器状态端口,以避免出现代数循环。
在此版本中,复位信号的值取决于状态端口的值。在当前时间步中,状态端口的值早于积分器模块输出端口的值。因此,可以在计算程序块输出数据之前确定是否应复位程序块,从而避免代数循环。
启用子系统之间的状态转移
状态端口有助于避免在两个启用子系统之间传输状态时出现代数循环。例如,可以考虑以下模型。
启用子系统 A
和 B
包含以下模块:
子系统 A |
子系统 B |
---|
在该模型中,一个恒定输入信号驱动两个启用子系统,对信号进行整合。脉冲发生器产生一个使能信号,在两个子系统之间交替执行。每个子系统的*启用*端口都被设置为 "复位",这将导致子系统在激活时复位其积分器。重置积分器会使积分器读取其初始状态端口的值。每个子系统中积分器的初始状态端口与另一个子系统中积分器的输出端口相连。
这种相互连接旨在对输入信号进行连续积分,同时在两个子系统之间交替执行。然而,这种连接会产生一个代数循环。要计算输出数据 "A",就必须知道输出数据 "B",反之亦然。由于输出是相互依存的,因此无法计算输出值。因此,在尝试建模或更新此模型时会出现错误信息。
同一模型的这一版本使用积分器的状态端口,以避免在状态转移过程中产生代数循环。
启用的子系统 A
和 B
包含以下模块:
子系统 A |
子系统 B |
---|
在此模型中,A
中积分器的初始状态取决于`B` 中积分器状态端口的值,反之亦然。与积分器输出端口的值相比,状态端口的值在模拟的时间步长中更新得更早。因此,可以在不知道另一个积分器最终输出值的情况下计算出任何积分器的初始状态。
端口
参数
主机
#
External reset —
复位到初始状态
none
| rising
| falling
| either
| level
| level hold
Details
指定外部复位信号的触发类型。
-
rising
- 当复位信号通过边沿时复位状态。 -
falling
- 当复位信号通过边沿时复位状态。 -
either
- 当复位信号上升或下降(通过边沿或片段)时复位状态。 -
level
- 当复位信号在当前时间步长内与零值不同,或在前一时间步长内从非零值变为当前时间步长内的零值时,复位并将输出保持在初始状态。 -
level hold
- 当复位信号在当前时间步与零值不同时,将输出复位到初始状态。
值 |
|
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Initial condition source —
选择初始状态源
internal
| external
Details
选择初始状态源:
-
internal
- 从参数 Initial condition 获取初始状态。 -
external
- 通过输入端口 x0 从外部接收初始状态。
值 |
|
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Initial condition —
初始状态
Scalar / array of real numbers
Details
Integrator 区块的初始状态。
依赖关系
要使用该参数,请将 Initial condition source 参数设置为 internal
.
默认值 |
|
程序使用名称 |
|
可调谐 |
是 |
可计算 |
是 |
#
Limit output —
将程序块的输出值限制在指定范围内
Logical
Details
将程序块输出值限制在参数 Lower saturation limit 和 Upper saturation limit 之间。
-
选中此复选框可将程序块输出限制为参数 Lower saturation limit 和 Upper saturation limit 之间的值。
-
清除此复选框不会限制块输出值。
依赖关系
选择该选项可启用参数 Lower saturation limit 和 Upper saturation limit 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Upper saturation limit —
积分上限
Scalar / array of real numbers
Details
以标量、向量或矩阵的形式说明积分的上限。
依赖关系
要使用该选项,请选择复选框 Limit output 。
默认值 |
|
程序使用名称 |
|
可调谐 |
是 |
可计算 |
是 |
#
Lower saturation limit —
积分下限
Scalar / array of real numbers
Details
以标量、向量或矩阵的形式说明积分的下限。
依赖关系
要使用该选项,请选择复选框 Limit output 。
默认值 |
|
程序使用名称 |
|
可调谐 |
是 |
可计算 |
是 |
#
Wrap state —
循环复位
Logical
Details
重置参数 Wrapped state upper value 和 Wrapped state lower value 之间的循环状态。启用该参数可减少求解器重置次数,提高计算性能和精度,并增加旋转和循环状态的允许模拟时间。
如果将 Wrapped state upper value 指定为 "inf",将 Wrapped state lower value 指定为 "inf",则不会发生重置。
依赖关系
选择该选项可设置 Wrapped state upper value 和 Wrapped state lower value 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Wrapped state upper value —
重置循环状态的上限
Scalar / array of real numbers
Details
块输出信号的上限(用于重置循环状态)。
依赖关系
要使用该参数,请选择复选框 Wrap state 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
Wrapped state lower value —
重置循环状态的下限
Scalar / array of real numbers
Details
块输出信号的下限(用于重置循环状态)。
依赖关系
要使用该参数,请选择复选框 Wrap state 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
Show saturation port —
切换饱和输出端口
Logical
Details
选择此复选框可为程序块添加饱和输出端口。
依赖关系
选择此选项可启用饱和输出端口。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Show state port —
切换状态输出端口
Logical
Details
选择此复选框可为程序块添加一个状态输出端口。
依赖关系
选择此选项可启用状态输出端口。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |