积分器 (INTG)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、CompactLogix
5380、ControlLogix
5580 和 ControlLogix 5590 控制器。可用语言
梯形图
此指令不可用于梯形图逻辑中。
功能块

结构化文本
INTG(INTG_tag);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
INTG tag | INTEGRATOR | 结构 | INTG 结构 |
INTEGRATOR 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果此参数清零,指令不会执行,也不会更新输出。 默认置位。 |
In | REAL | 指令的模拟信号输入。 有效值 = 任意浮点值 默认值 = 0.0 |
Initialize | BOOL | 控制算法初始化请求。一旦 Initialize 置位,Output = InitialValue。 有效值 = 任意浮点值 默认值 = 0.0 |
InitialValue | REAL | 指令的初始值。一旦 Initialize 置位,Output = InitialValue。 有效值 = 任意浮点值 默认值 = 0.0 |
IGain | REAL | 积分增益乘数。如果 IGain < 0,该指令会设置 IGain = 0.0,置位 Status 中的相应位,并将 Output 保持不变。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
HighLimit | REAL | Out 的上限值。如果 HighLimit LowLimit,则指令会将 HighAlarm 和 LowAlarm 置位,将 Status 中的相应位置位,并设置 Out = LowLimit。有效值 = 任意浮点值 默认值 = 最大正浮点值 |
LowLimit | REAL | Out 的下限值。如果 HighLimit LowLimit,则指令会将 HighAlarm 和 LowAlarm 置位,将 Status 中的相应位置位,并设置 Out = LowLimit。有效值 = 任意浮点值 默认值 = 最大负浮点值 |
HoldHigh | BOOL | 输出保持高位请求。置位时,不允许 Out 值增大。 默认清零。 |
HoldLow | BOOL | 输出保持低位请求。置位时,不允许 Out 值减小。 默认清零。 |
TimingMode | DINT | 选择时序执行模式。 0 = 周期性模式 1 = 过采样模式 2 = 实时采样模式 有关时序模式的更多信息,请参见“功能块属性”部分。 有效值 = 0 至 2 默认值 = 0 |
OversampleDT | REAL | 过采样模式的执行时间。 有效值 = 0 到 4194.303 秒 默认值 = 0 |
RTSTime | DINT | 实时采样模式的模块更新周期 有效值 = 1 至 32,767 ms 默认值 = 1 |
RTSTimeStamp | DINT | 实时采样模式的模块时戳值。 有效值 = 0 至 32,767 ms 默认值 = 0 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。如果 Out 溢出,则设置为假。 |
Out | REAL | 计算所得的算法输出。 |
HighAlarm | BOOL | 上限报警指示器。当 Out HighLimit 时,会将 HighAlarm 置位,并将输出限制为 HighLimit 的值。 |
LowAlarm | BOOL | 下限报警指示器。当 Out LowLimit 时,会将 LowAlarm 置位,并将输出限制为 LowLimit 的值。 |
DeltaT | REAL | 两次更新间隔的时间。控制算法计算过程输出所用的时间(秒)。 |
Status | DINT | 功能块的状态。 |
InstructFault (Status.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
IGainInv (Status.1) | BOOL | IGain > 最大值或 IGain < 最小值。 |
HighLowLimsInv (Status.2) | BOOL | HighLimit LowLimit。 |
TimingModeInv (Status.27) | BOOL | TimingMode 值无效。 有关时序模式的更多信息,请参见“功能块属性”部分。 |
RTSMissed (Status.28) | BOOL | 仅用于实时采样模式。当 ABS | DeltaT - RTSTime | > 1(0.001 秒)时置位。 |
RTSTimeInv (Status.29) | BOOL | RTSTime 值无效。 |
RTSTimeStampInv (Status.30) | BOOL | RTSTimeStamp 值无效。 |
DeltaTInv (Status.31) | BOOL | DeltaT 值无效。 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
|---|---|---|---|
INTG tag | INTEGRATOR | 结构 | INTG 结构 |
有关结构化文本中表达式语法的详细信息,请参见“结构化文本语法”部分。
说明
INTG 指令专用于恒速扫描的任务中。
当 Initialize 清零且 DeltaT > 0 时,INTG 指令将执行该控制算法。

只要计算出的输出值无效(NAN 或
INF),指令就会将 Out 设为无效值。内部参数不会更新。在每次的后续扫描过程中,都会使用上一次扫描(输出有效)的内部参数计算输出。
INF),指令就会将 Out 设为无效值。内部参数不会更新。在每次的后续扫描过程中,都会使用上一次扫描(输出有效)的内部参数计算输出。限制
INTG 指令执行积分饱和限制,以阻止 Out 根据 HoldHigh 和 HoldLow 输入的状态进行更改。如果 HoldHigh 置位且 Out > Out
n-1
,则 Out = Outn-1
。如果 HoldLow 置位且 Out < Outn-1
,则 Out = Outn-1
。INTG 指令还使用 HighLimit 和 LowLimit 执行输出限制。如果 Out ≥ HighLimit,则 Out = HighLimit 并将 HighAlarm 置位。如果 Out ≤ LowLimit,则 Out = LowLimit 并将 LowAlarm 置位。
影响数学状态标志
否
严重/轻微故障
在以下情况下发生轻微故障 | 故障类型 | 故障代码 |
|---|---|---|
功能已启用并检测到溢出。 | 4 | 4 |
有关操作数相关的故障,请参阅 通用属性。
执行
提醒事项:
在结构化文本中,EnableIn 在普通扫描期间始终为真。因此,如果指令处于由逻辑激活的控制路径中,指令将会执行。有关所有功能块指令的更多详细信息(包括定义和常规行为),请参阅出版物 1756-RM006G-EN-P《高级过程控制和驱动器指令》。
条件/状态 | 执行的操作 |
|---|---|
预扫描 | 不执行任何操作。 |
后扫描 | 不执行任何操作。 |
条件仅在普通扫描模式期间才会出现
条件/状态 | 执行的操作 |
|---|---|
指令首次运行 | 内部参数和 Out 设置为 0。不执行主算法,但是会验证输入参数。 |
指令首次扫描 | 内部参数和 Out 设置为 0。不执行主算法,但是会验证输入参数。 |
EnableIn 为假 | .EnableOut 位设置为假。 |
EnableIn 为真 | .EnableOut 位设置为真。 将执行指令的主算法,并更新输出。 |
示例
在许多应用中,闭环调节器设计中都会包含积分增益分量,用以消除或最大限度减少所调节系统中的误差。纯比例调节器并不能完全消除系统中的误差。而使用比例增益和积分增益的调节器则可以将一定时间内的误差信号完全消除。INTG 指令使用以下公式计算输出值。

下图中,功能块的输入由 0 变为 +200 个单位。在此期间,功能块输出经积分运算后达到 2800 个单位。当 In 由 +200 个单位变为 0 个单位后,Out 保持为 2800 个单位。当 In 由 0 变为 -300 个单位时,Out 的积分值缓慢地减小为 -1400 个单位,直至 In 再变回 0。最后,随着 In 由 0 变为 +100,Out 的积分值再次达到 0,随着 Out 到达 0,In 也设置为 0,二者在此重合。
这种积分器的特点是:在函数存在任何输入时沿特定方向连续积分,并在输入为零时保持在任意水平。这正是促使调节器使用积分增益在一定时间范围内完全消除误差的原因所在。

下面的示例将说明 INTG 指令的使用方法。在许多实例中,HighLimit 和 LowLimit 输入会限制积分增益分量在调节器总输出中所占的总控制百分比。另一方面,HoldHigh 和 HoldLow 输入也可用来阻止输出向正方向或负方面继续变化。HoldHigh 和 HoldLow 输入会阻止 INTG 指令在已超出受控变量限值的方向达到“积分饱和”。
功能块
本示例是 INTG 功能块最基本的合法编程方法,仅用于展示该指令的纯文本内容和生成的代码。本示例仅供内部使用,并非可测试的用例。

结构化文本
INTG_01.In := Input_Value;
INTG_01.Initialize := Initialize_flag;
INTG_01.InitialValue := Int_Init_Val;
INTG_01.IGain := I_Gain;
INTG_01.HighLimit := Int_saturate_high;
INTG_01.LowLimit := Int_saturate_low;
INTG_01.HoldHigh :=HAlarm_Status;
INTG_01.HoldLow := LAlarm_Status;
INTG(INTG_01);
提供反馈
LowLimit,则指令会将 HighAlarm 和 LowAlarm 置位,将 Status 中的相应位置位,并设置 Out = LowLimit。
HighLimit 时,会将 HighAlarm 置位,并将输出限制为 HighLimit 的值。