增强型 PID (PIDE)
此信息适用于
CompactLogix
5370、ControlLogix
5570、CompactLogix
5380 和 ControlLogix
5580 控制器。
提醒事项:
PIDE 指令在安全应用和 ControlLogix 5590 控制器中均不受支持。对于 ControlLogix 5590 控制器项目,请使用 PPID 指令。请参阅
替换指南:Logix 5000 控制器
(出版号 1756-RM100),以了解有关将项目迁移至 ControlLogix 5590 控制器的信息。增强型 PID (PIDE) 指令在标准的 PID 指令基础上提供增强功能。该指令采用 PID 算法的速度形式。增益项应用于误差或 PV 值的变化,而不是误差或 PV 值。
可用语言
梯形图
此指令不可用于梯形图中。
功能块

结构化文本
PIDE(PIDE_tag);
操作数
功能块
操作数 | 类型 | 格式 | 说明 |
PIDE 标签 | PID_ENHANCED | 结构 | PIDE 结构 |
autotune 标签 | PIDE_AUTOTUNE | 结构 | (可选) 自动调谐结构 |
结构化文本
操作数 | 类型 | 格式 | 说明 |
PIDE 标签 | PID_ENHANCED | 结构 | PIDE 结构 |
有关结构化文本中表达式语法的详细信息,请参见
结构化文本语法
部分。PIDE 结构
输入参数 | 数据类型 | 说明 |
|---|---|---|
EnableIn | BOOL | 启用输入。如果为假,指令不会执行,也不会更新输出。 默认值为真。 |
PV | REAL | 经过标定的过程变量输入。该值通常从模拟输入模块中读取。 有效值 = 任意浮点值 默认值 = 0.0 |
PVFault | BOOL | PV 不良状况指示器。如果 PV 从模拟输入中读取,那么 PVFault 通常由模拟输入故障状态控制。当 PVFault 为真时,此参数指示输入信号存在错误。 默认值为假(状况良好)。 |
PVEUMax | REAL | PV 的最大标定值。对应于过程变量的 100% 量程的 PV 和 SP 的值。 有效值 = PVEUMin < PVEUMax 最大正浮点值默认值 = 100.0 |
PVEUMin | REAL | PV 的最小标定值。对应于过程变量的 0% 量程的 PV 和 SP 的值。 有效值 = 最大负浮点值 PVEUMin < PVEUMax默认值 = 0.0 |
SPProg | REAL | SP 程序值,以 PV 单位标定。SP 在处于程序控制模式且非级联/比率模式下时设置为此值。如果 SPProg 的值 < SPLLimit 或 > SPHLimit,该指令会置位 Status 中的相应位,并限制用于 SP 的值。 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPOper | REAL | SP 操作员值,以 PV 单位标定。SP 在处于操作员控制模式且非级联/比率模式下时设置为此值。如果 SPOper 的值 < SPLLimit 或 > SPHLimit,该指令会置位 Status 中的相应位,并限制用于 SP 的值。 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPCascade | REAL | SP 级联值,以 PV 单位标定。如果 CascadeRatio 为真且 UseRatio 为假,则 SP = SPCascade。这通常为主回路的 CVEU。如果 CascadeRatio 和 UseRatio 均为真,则 SP = (SPCascade x Ratio)。如果 SPCascade 值 < SPLLimit 或 > SPHLimit,系统会将 Status 中的相应位置位,并限制用于 SP 的值。 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPHLimit | REAL | SP 上限值,以 PV 单位标定。如果 SPHLimit > PVEUMax,该指令会将 Status 中的相应位置位。 有效值 = SPLLimit 到 PVEUMax 默认值 = 100.0 |
SPLLimit | REAL | SP 下限值,以 PV 单位标定。如果 SPLLimit < PVEUMin,该指令会将 Status 中的相应位置位。如果 SPHLimit < SPLLimit,该指令会置位 Status 中的相应位,并使用 SPLLimit 的值限制 SP。 有效值 = PVEUMin 到 SPHLimit 默认值 = 0.0 |
UseRatio | BOOL | 允许比率控制。若设置为真,可在级联/比率模式下启用比率控制。 默认值为假。 |
RatioProg | REAL | 程序控制模式下的比率乘数。Ratio 和 RatioOper 在程序控制模式下设置为等于此值。如果 RatioProg < RatioLLimit 或 > RatioHLimit,该指令会置位 Status 中的相应位,并限制用于 Ratio 的值。 有效值 = RatioLLimit 到 RatioHLimit 默认值 = 1.0 |
RatioOper | REAL | 操作员控制下的比率乘数。Ratio 在操作员控制模式下设置为等于此值。如果 RatioOper < RatioLLimit 或 > RatioHLimit,该指令会置位 Status 中的相应位,并限制用于 Ratio 的值。 有效值 = RatioLLimit 到 RatioHLimit 默认值 = 1.0 |
RatioHLimit | REAL | 比率上限值。限制从 RatioProg 或 RatioOper 获取的 Ratio 值。如果 RatioHLimit < RatioLLimit,该指令会置位 Status 中的相应位,并使用 RatioLLimit 的值限制 Ratio。 有效值 = RatioLLimit 到最大正浮点值 默认值 = 1.0 |
RatioLLimit | REAL | 比率下限值。限制从 RatioProg 或 RatioOper 获取的 Ratio 值。如果 RatioLLimit < 0,该指令会将 Status 中的相应位置位,并将值限制为零。如果 RatioHLimit < RatioLLimit,该指令会置位 Status 中的相应位,并使用 RatioLLimit 的值限制 Ratio。 有效值 = 0.0 到 RatioHLimit 默认值 = 1.0 |
CVFault | BOOL | 控制变量不良状况指示器。如果 CVEU 控制模拟输出,则 CVFault 通常来自于模拟输出的故障状态。当 CVFault 为真时,说明输出模块存在错误,该指令会将 Status 中的相应位置位。 默认值为假(状况良好)。 |
CVInitReq | BOOL | CV 初始化请求。此信号通常由受 CVEU 控制的模拟输出模块的 "In Hold" 状态控制,或来自次级 PID 回路的 InitPrimary 输出。 默认值为假。 |
CVInitValue | REAL | CVEU 初始化值,以 CVEU 单位标定。当 CVInitializing 为真时,CVEU = CVInitValue 且 CV 等于相应的百分比值。CVInitValue 来自于受 CVEU 控制的模拟输出的反馈,或者次级回路的设置点。当 CVFaulted 或 CVEUSpanInv 为“真”时,将禁用指令初始化。 有效值 = 任意浮点值 默认值 = 0.0 |
CVProg | REAL | CV 程序手动值。处于程序手动模式时,CV 将等于该值。如果 CVProg < 0 或 > 100,或者在 CVManLimiting 为真时 < CVLLimit 或 > CVHLimit,该指令会置位 Status 中的相应位,并限制 CV 值。 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVOper | REAL | CV 操作员手动值。处于操作员手动模式时,CV 将等于该值。如果未处于操作员手动模式,该指令会在每条指令执行结束时设置 CVOper = CV。如果 CVOper < 0 或 > 100,或者在 CVManLimiting 为真时 < CVLLimit 或 > CVHLimit,该指令会置位 Status 中的相应位,并限制 CV 值。 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVOverride | REAL | 超控模式下的 CV 值。处于超控模式时,CV 等于此值。此值应对应于 PID 回路的某个安全状态输出。如果 CVOverride < 0 或 > 100,该指令会置位 Status 中的相应位,并限制 CV 值。 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVPrevious | REAL | CV n-1 值。如果 CVSetPrevious 置位,CVn-1 等于此值。CVn-1 是上次执行指令后的 CV 值。处于手动、超控或手控模式时,或者 CVInitializing 置位时,都会忽略 CVPrevious。如果 CVPrevious < 0 或 > 100,或者在处于自动或级联/比率模式时 < CVLLimit 或 > CVHLimit,该指令会将 Status 中的相应位置位,并限制 CVn-1 值。有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVSetPrevious | BOOL | 使用 CVPrevious 的请求。如果为真,CVn-1 = CVPrevious 默认值为假。 |
CVManLimiting | BOOL | 在手动模式下限制 CV 的请求。在手动模式下,如果 CVManLimiting 为真,则 CV 由 CVHLimit 和 CVLLimit 值限制。 默认值为假。 |
CVEUMax | REAL | CVEU 的最大值。对应于 100% CV 的 CVEU 的值。如果 CVEUMax = CVEUMin,该指令会将 Status 中的相应位置位。 有效值 = 任意浮点值 默认值 = 100.0 |
CVEUMin | REAL | CVEU 的最小值。对应于 0% CV 的 CVEU 的值。如果 CVEUMax = CVEUMin,该指令会将 Status 中的相应位置位。 有效值 = 任意浮点值 默认值 = 0.0 |
CVHLimit | REAL | CV 上限值。该值用于设置 CVHAlarm 输出。处于自动或级联/比率模式时,或者处于手动模式并且 CVManLimiting 为真时,该值还用于对 CV 进行限制。如果 CVHLimit > 100 或 < CVLLimit,该指令会将 Status 中的相应位置位。如果 CVHLimit < CVLLimit,该指令将使用 CVLLimit 限制 CV 值。 有效值 = CVLLimit < CVHLimit 100.0默认值 = 100.0 |
CVLLimit | REAL | CV 下限值。该值用于设置 CVLAlarm 输出。处于自动或级联/比率模式时,或者处于手动模式并且 CVManLimiting 为真时,该值还用于对 CV 进行限制。如果 CVLLimit < 0 或 CVHLimit < CVLLimit,该指令会将 Status 中的相应位置位。如果 CVHLimit < CVLLimit,该指令将使用 CVLLimit 限制 CV 值。 有效值 = 0.0 CVLLimit < CVHLimit默认值 = 0.0 |
CVROCLimit | REAL | CV 变化率限值,以百分比/秒表示。仅当处于自动或级联/比率模式,或者处于手动模式并且 CVManLimiting 为真时,才会使用变化率限值。若输入 0,会禁用 CV ROC 限制。如果 CVROCLimit < 0,该指令会将 Status 中的相应位置位,并禁用 CV ROC 限制。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
FF | REAL | 前馈值。向 CV 应用过零死区限制后,前馈的值将与 CV 相加。因此,FF 的变化将始终反映在 CV 的最终输出值上。如果 FF < -100 或 > 100,该指令会将 Status 中的相应位置位,并限制用于 FF 的值。 有效值 = -100.0 至 100.0 默认值 = 0.0 |
FFPrevious | REAL | FF n-1 值。如果 FF SetPrevous 置位,该指令会设置 FFn-1 = FFPrevious。FFn-1 是上次执行指令后的 FF 值。如果 FFPrevious < -100 或 > 100,该指令会置位 Status 中的相应位,并限制用于 FFn-1 的值有效值 = -100.0 至 100.0 默认值 - 0.0 |
FFSetPrevious | BOOL | 使用 FFPrevious 的请求。如果为真,FFn-1 = FFPrevious。 默认值为假。 |
HandFB | REAL | CV 手控反馈值。处于手控模式且 HandFBFault 为假(状况良好)时,CV 等于该值。该值通常来自现场安装的手控/自动站的输出,用于在手控模式下进行无扰动转换。如果 HandFB < 0 或 > 100,该指令会将 Status 中的相应位置位,并限制用于 CV 的值。 有效值 = 0.0 至 100.0 默认值 = 0.0 |
HandFBFault | BOOL | HandFB 值不良状况指示器。如果 HandFB 值从模拟输入读取,则 HandFBFault 通常由模拟输入通道的状态控制。当 HandFBFault 为真时,说明输入模块存在错误,该指令会将 Status 中的相应位置位。 默认值为假(状况良好)。 |
WindupHIn | BOOL | 积分饱和上限请求。为真时,CV 无法沿正向积分。该信号通常从次级回路的 WindupHOut 输出获取。 默认值为假。 |
WindupLIn | BOOL | 积分饱和下限请求。为真时,CV 无法沿负向积分。该信号通常从次级回路的 WindupLOut 输出获取。 默认值为假。 |
ControlAction | BOOL | 控制操作请求。设置为真时,可按 E = PV - SP 计算误差;设置为假时,可按 E = SP - PV 计算误差。 默认值为假。 |
DependIndepend | BOOL | 相关/独立控制请求。为真时,使用 PID 等式的相关形式;为假时,使用等时的独立形式。 默认值为假。 |
PGain | REAL | 比例增益。选择 PID 算法的独立形式时,向该值输入无单位的比例增益。当选择 PID 算法的相关形式时,向该值输入无单位的控制器增益。若输入 0,会禁用比例控制。如果 PGain < 0,该指令会将 Status 中的相应位置位,并使用 PGain = 0 的值。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
IGain | REAL | 积分增益。选择 PID 算法的独立形式时,向该值输入单位为“1/分钟”的积分增益。选择 PID 算法的相关形式时,向该值输入单位为“分钟/循环”的积分时间常数。若输入 0,会禁用积分控制。如果 IGain < 0,该指令会将 Status 中的相应位置位,并使用 IGain = 0 的值。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
DGain | REAL | 微分增益。选择 PID 算法的独立形式时,向该值输入单位为分钟的微分增益。使用 PID 算法的相关形式时,向该值输入单位为分钟的微分时间常数。若输入 0,会禁用微分控制。如果 DGain < 0,该指令会将 Status 中的相应位置位,并使用 DGain = 0 的值。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
PVEProportional | BOOL | PV 比例控制请求。为真时,使用过程变量的变化量 (PVPercent) 计算比例项 (DeltaPTerm)。为假时,使用误差的变化量 (EPercent)。 默认值为假。 |
PVEDerivative | BOOL | PV 微分控制请求。为真时,使用过程变量的变化量 (PVPercent) 计算微分项 (DeltaDTerm)。为假时,使用误差的变化量 (EPercent)。 默认值为真。 |
DSmoothing | BOOL | 微分平滑请求。为真时,平滑微分项的变化。微分平滑处理可减少噪声 PV 信号引起的输出“抖动”,但也会限制高微分增益的效果。 默认值为假。 |
PVTracking | BOOL | SP 跟踪 PV 请求。若处于手动模式时设置为真,会使 SP 跟踪 PV。处于级联/比率或自动模式时,会忽略此设置。 默认值为假。 |
ZCDeadband | REAL | 过零死区范围,以 PV 单位标定。定义过零死区范围。若输入 0,会禁用过零死区检查。如果 ZCDeadband < 0,该指令会将 Status 中的相应位置位,并禁用过零死区检查。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
ZCOff | BOOL | 过零禁用请求。若设置为真,会针对死区计算禁用过零检查。 默认值为假。 |
PVHHLimit | REAL | PV 上上限报警限值,以 PV 单位标定。 有效值 = 任意浮点值 默认值 = 最大正浮点值 |
PVHLimit | REAL | PV 上限报警限值,以 PV 单位标定。 有效值 = 任意浮点值 默认值 = 最大正浮点值 |
PVLLimit | REAL | PV 下限报警限值,以 PV 单位标定。 有效值 = 任意浮点值 默认值 = 最大负浮点值 |
PVLLLimit | REAL | PV 下下限报警限值,以 PV 单位标定。 有效值 = 任意浮点值 默认值 = 最大负浮点值 |
PVDeadband | REAL | PV 报警限值死区值,以 PV 单位标定。死区是每个 PV 报警限制的开启和关闭值之间的差值。如果 PVDeadband < 0.0,该指令会将 Status 中的相应位置位,并将 PVDeadband 限制为 0。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
PVROCPosLimit | REAL | PV 正变化率报警限值。PV 正变化(增大)限值,以 PV 单位/秒标定。若输入 0.0,会禁用正 PVROC 报警检查。如果 PVROCPosLimit < 0.0,该指令会将 Status 中的相应位置位,并禁用正向 PVROC 检查。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 PV/秒 |
PVROCNegLimit | REAL | PV 负变化率报警限值。PV 负变化(减小)限值,以 PV 单位/秒标定。若输入 0.0,会禁用负 PVROC 报警检查。如果 PVROCNegLimit < 0,该指令会将 Status 中的相应位置位,并禁用负向 PVROC 检查。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
PVROCPeriod | REAL | PV 变化率采样周期。计算 PV 变化率时所对应的时间段,以秒为单位。输入 0 会禁用 PVROC 报警检查。如果 PVROCPeriod < 0.0,该指令会置位 Status 中的相应位,并禁用正负 PVROC 检查。 有效值 = 任何 0.0 的浮点数默认值 = 0.0 秒 |
DevHHLimit | REAL | 偏差上上限报警限值,以 PV 单位标定。偏差指过程变量 (PV) 值与设置点 (SP) 值之差。偏差报警提示操作员过程变量和设置点值存在差异。如果 DevHHLimit < 0.0,该指令会将 Status 中的相应位置位,并将 DevHHLimit 设为 0.0。 有效值 = 0.0 到最大正浮点值 默认值 = 最大正浮点值 |
DevHLimit | REAL | 偏差上限报警限值,以 PV 单位标定。偏差指过程变量 (PV) 值与设置点 (SP) 值之差。偏差报警提示操作员过程变量和设置点值存在差异。如果 DevHLimit < 0.0,该指令会将 Status 中的相应位置位,并将 DevHLimit 设为 0.0。 有效值 = 0.0 到最大正浮点值 默认值 = 最大正浮点值 |
DevLLimit | REAL | 偏差下限报警限值,以 PV 单位标定。偏差指过程变量 (PV) 值与设置点 (SP) 值之差。偏差报警提示操作员过程变量和设置点值存在差异。如果 DevLLimit < 0.0,该指令会将 Status 中的相应位置位,并将 DevLLimit 设为 0.0。 有效值 = 0.0 到最大正浮点值 默认值 = 最大正浮点值 |
DevLLLimit | REAL | 偏差下下限报警限值,以 PV 单位标定。偏差指过程变量 (PV) 值与设置点 (SP) 值之差。偏差报警提示操作员过程变量和设置点值存在差异。如果 DevLLLimit < 0.0,该指令会将 Status 中的相应位置位,并将 DevLLLimit 设为 0.0。 有效值 = 0.0 到最大正浮点值 默认值 = 最大正浮点值 |
DevDeadband | REAL | 偏差报警限值的死区值,以 PV 单位标定。死区是每个偏差报警限制的开启和关闭值之间的差值。如果 DevDeadband < 0.0,该指令会将 Status 中的相应位置位,并将 DevDeadband 设置为 0.0。 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
AllowCasRat | BOOL | 允许级联/比率模式。设置为真时,支持使用 ProgCasRatReq 或 OperCasRatReq 选择级联/比率模式。 默认值为假。 |
ManualAfterInit | BOOL | 初始化后进入手动模式的请求。当此参数为真并且 CVInitializing 为真时,除非当前模式为“超控”或“手控”,否则会将该指令置于手动模式。当 ManualAfterInit 为假时,除非请求更改该指令的模式,否则不会更改该指令的模式。 默认值为假。 |
ProgProgReq | BOOL | 程序发出的程序控制请求。由用户程序设置为真可请求程序控制模式。如果 ProgOperReq 为真,则忽略该值。若此参数保持为真,并且 ProgOperReq 保持为假,会将指令锁定在程序控制模式。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgOperReq | BOOL | 程序发出的操作员控制请求。由用户程序设置为真可请求操作员控制模式。若将此参数保持为真,会将该指令锁定在操作员控制模式。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgCasRatReq | BOOL | 程序级联/比率模式请求。由用户程序设置为真可请求级联/比率模式。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgAutoReq | BOOL | 程序自动模式请求。由用户程序设置为真可请求自动模式。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgManualReq | BOOL | 程序手动模式请求。由用户程序设置为真可请求手动模式。如果 ProgValueReset 为真,指令会在每次执行时将该输入设置为假。 默认值为假。 |
ProgOverrideReq | BOOL | 程序超控模式请求。由用户程序设置为真可请求超控模式。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgHandReq | BOOL | 程序手控模式请求。由用户程序设置为真可请求手控模式。该值通常以数字输入的形式从手控/自动工作站读取。当 ProgValueReset 为真时,该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
OperProgReq | BOOL | 操作员发出的程序控制请求。由操作员界面设置为真以请求程序控制模式。该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
OperOperReq | BOOL | 操作员发出的操作员控制请求。由操作员界面设置为真可请求操作员控制模式。该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
OperCasRatReq | BOOL | 操作员级联/比率模式请求。由操作员界面设置为真可请求级联/比率模式。该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
OperAutoReq | BOOL | 操作员自动模式请求。由操作员界面设置为真可请求自动模式。该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
OperManualReq | BOOL | 操作员手动模式请求。由操作员界面设置为真可请求手动模式。该指令在每次执行时都会将此输入设置为假。 默认值为假。 |
ProgValueReset | BOOL | 将程序控制值复位。此参数为真时,该指令每次执行时都会将所有程序请求输入设置为假。此参数为真且处于操作员控制模式时,该指令会设置 SPProgram = SP 以及 CVProgram = CV。 默认值为假。 |
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 |
AtuneAcquire | BOOL | 获取 PIDE 自动调谐数据的请求。 默认值为假。 |
AtuneStart | BOOL | 启动自动调谐的请求。 默认值为假。 |
AtuneUseGains | BOOL | 使用自动调谐增益的请求。 默认值为假。 |
AtuneAbort | BOOL | 中止自动调谐的请求。 默认值为假。 |
AtuneUnacquire | BOOL | 不获取 PIDE 自动调谐数据的请求。 默认值为假。 |
输出参数 | 数据类型 | 说明 |
|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。如果 CVEU 溢出,则设置为假。 |
CVEU | REAL | 标定控制变量输出。使用 CVEUMax 和 CVEUMin 标定,其中 CVEUMax 对应于 100%,CVEUMin 对应于 0%。此输出通常用于控制模拟输出模块或次级回路。 CVEU = (CV x CVEUSpan / 100) + CVEUMin CVEU 量程计算:CVEUSpan = (CVEUMax - CVEUMin) |
CV | REAL | 控制变量输出。此值以 0% 到 100% 表示。当处于自动或级联/比率模式时,或者处于手动模式并且 CVManLimiting 设置为真时,CV 由 CVHLimit 和 CVLLimit 进行限制。否则,此值限制为 0% 到 100%。 |
CVInitializing | BOOL | 初始化模式指示器。当 CVInitReq 设置为真时,在指令首次扫描期间,以及 CVHealth 由真跳变为假时(不良到良好),CVInitializing 会设置为真。在指令完成初始化以及 CVInitReq 为假时,CVInitializing 设置为假。 |
CVHAlarm | BOOL | CV 上限报警指示器。在以下情况下设置为真: CV 的计算值大于 100 或 CVHLimit。 |
CVLAlarm | BOOL | CV 下限报警指示器。在以下情况下设置为真: CV 的计算值小于 0 或 CVLLimit。 |
CVROCAlarm | BOOL | CV 变化率报警指示器。当计算的 CV 变化率超过 CVROCLimit 时,会设置为真。 |
SP | REAL | 当前设置点的值。SP 值在处于级联/比率模式时用于控制 CV。 |
SPPercent | REAL | 以 PV 量程百分比表示的 SP 值。 SPPercent = ((SP - PVEUMin) x 100) / PVSpan PV 量程计算:PVSpan = (PVEUMax - PVEUMin) |
SPHAlarm | BOOL | SP 上限报警指示器。 当 SP > SPHLimit 时设置为真。 |
SPLAlarm | BOOL | SP 下限报警指示器。 当 SP < SPLLimit 时设置为真。 |
PVPercent | REAL | 以量程百分比表示的 PV。 PVPercent = ((PV- PVEUMin) x 100) / PVSpan PV 量程计算:PVSpan = (PVEUMax - PVEUMin) |
E | REAL | 过程误差。SP 与 PV 之间的差值,以 PV 单位标定。 |
EPercent | REAL | 以量程百分比形式表示的误差。 |
InitPrimary | BOOL | 初始化主回路命令。当未处于级联/比率模式或者 CVInitializing 为真时设置为真。此信号通常由主 PID 回路的 CVInitReq 输入使用。 |
WindupHOut | BOOL | 积分饱和上限指示器。当达到 CV 上下限(取决于控制操作)或者 SP 上限时设置为真。此信号通常由 WindupHIn 输入使用,用于防止主回路上 CV 输出积分饱和。 |
WindupLOut | BOOL | 积分饱和下限指示器。当达到 CV 上下限(取决于控制操作)或者 SP 下限时设置为真。此信号通常由 WindupLIn 输入使用,用于防止主回路上 CV 输出积分饱和。 |
Ratio | REAL | 当前比率乘数。 |
RatioHAlarm | BOOL | 比率上限报警指示器。当 Ratio > RatioHLimit 时设置为真。 |
RatioLAlarm | BOOL | 比率下限报警指示器。当 Ratio < RatioLLimit 时设置为真。 |
ZCDeadbandOn | BOOL | 过零死区指示器。该值为真时,CV 值保持不变。如果 ZCOff 为真,当 | E | 处于 ZCDeadband 范围内时,ZCDeadbandOn 设置为真。如果 ZCOff 为假,当 | E | 过零且处于 ZCDeadband 范围内时,ZCDeadbandOn 设置为真。当 | E | 超出死区范围或者 ZCDeadband = 0 时,ZCDeadbandOn 设置为假。 |
PVHHAlarm | BOOL | PV 上上限报警指示器。PV PVHHLimit 时设置为真。当 PV < (PVHHLimit - PVDeadband) 时设置为假 |
PVHAlarm | BOOL | PV 上限报警指示器。PV PVHLimit 时设置为真。当 PV < (PVHLimit - PVDeadband) 时设置为假 |
PVLAlarm | BOOL | PV 下限报警指示器。PV PVLLimit 时设置为真。当 PV > (PVLLimit + PVDeadband) 时设置为假 |
PVLLAlarm | BOOL | PV 下下限报警指示器。PV PVLLLimit 时设置为真。当 PV > (PVLLLimit + PVDeadband) 时设置为假 |
PVROCPosAlarm | BOOL | PV 正变化率报警指示器。当计算的 PV 变化率 PVROCPosLimit 时设置为真。 |
PVROCNegAlarm | BOOL | PV 负变化率报警指示器。当计算的 PV 变化率 (PVROCNegLimit x -1) 时设置为真。 |
DevHHAlarm | BOOL | 偏差上上限报警指示器。在以下情况下设置为真 PV (SP + DevHHLimit)。当满足以下条件时设置为假PV < (SP + DevHHLimit - DevDeadband) |
DevHAlarm | BOOL | 偏差上限报警指示器。在以下情况下设置为真 PV (SP + DevHLimit)。当满足以下条件时设置为假PV < (SP + DevHLimit - DevDeadband) |
DevLAlarm | BOOL | 偏差下限报警指示器。在以下情况下设置为真 PV (SP - DevLLimit)。当满足以下条件时设置为假PV > (SP - DevLLimit + DevDeadband) |
DevLLAlarm | BOOL | 偏差下下限报警指示器。在以下情况下设置为真 PV (SP - DevLLLimit)。当满足以下条件时设置为假PV > (SP - DevLLLimit + DevDeadband) |
ProgOper | BOOL | 程序/操作员控制指示器。在程序控制模式下设置为真。在操作员控制模式下设置为假。 |
CasRat | BOOL | 级联/比率模式指示器。在级联/比率模式下设置为真。 |
Auto | BOOL | 自动模式指示器。在自动模式下设置为真。 |
Manual | BOOL | 手动模式指示器。在手动模式下设置为真。 |
Override | BOOL | 超控模式指示器。在超控模式下设置为真。 |
Hand | BOOL | 手控模式指示器。在手控模式下设置为真。 |
DeltaT | REAL | 两次更新间隔的时间。控制算法计算过程输出所用的时间(秒)。 |
AtuneReady | BOOL | 当 PIDE 指令获取到指定的自动调谐数据时,设置为真。 |
AtuneOn | BOOL | 当启动自动调谐后,设置为真。 |
AtuneDone | BOOL | 当完成自动调谐后,设置为真。 |
AtuneAborted | BOOL | 当自动调谐由用户中止,或者因自动调谐过程中出错而中止时,设置为真。 |
AtuneBusy | BOOL | 当由于指定的自动调谐数据正由其他 PIDE 指令获取而无法获取时,设置为真。 |
Status1 | DINT | 功能块的状态。 |
InstructFault (Status1.0) | BOOL | 该指令检测到以下执行错误之一。这不是轻微或严重的控制器错误。检查其他状态位以确定发生的情况。 |
PVFaulted (Status1.1) | BOOL | 过程变量 (PV) 状况不良。 |
CVFaulted (Status1.2) | BOOL | 控制变量 (CV) 状况不良。 |
HandFBFaulted (Status1.3) | BOOL | HandFB 值状况不良。 |
PVSpanInv (Status1.4) | BOOL | PV 量程无效。PVEUMax £ PVEUMin。 |
SPProgInv (Status1.5) | BOOL | SPProg < SPLLimit 或 SPProg > SPHLimit。指令将限制 SP 的值。 |
SPOperInv (Status1.6) | BOOL | SPOper < SPLLimit 或 SPOper > SPHLimit。指令将限制 SP 的值。 |
SPCascadeInv (Status1.7) | BOOL | SPCascade < SPLLimit 或 SPCascade > SPHLimit。指令将限制 SP 的值。 |
SPLimitsInv (Status1.8) | BOOL | 限值无效:SPLLimit < PVEUMin,SPHLimit > PVEUMax 或 SPHLimit < SPLLimit。如果 SPHLimit < SPLLimit,指令将使用 SPLLimit 限制该值 |
RatioProgInv (Status1.9) | BOOL | RatioProg < RatioLLimit 或 RatioProg > RatioHLimit。指令将限制 Ratio 的值。 |
RatioOperInv (Status1.10) | BOOL | RatioOper < RatioLLimit 或 RatioOper > RatioHLimit。指令将限制 Ratio 的值。 |
RatioLimitsInv (Status1.11) | BOOL | RatioLLimit < 0 或 RatioHLimit < RatioLLimit。 |
CVProgInv (Status1.12) | BOOL | CVProg < 0 或 CVProg > 100,或者当 CVManLimiting 为真时,CVProg < CVLLimit 或 CVProg > CVHLimit。指令将限制 CV 的值。 |
CVOperInv (Status1.13) | BOOL | CVOper < 0 或 CVOper > 100,或者当 CVManLimiting 为真时,CVOper < CVLLimit 或 CVOper > CVHLimit。指令将限制 CV 的值。 |
CVOverrideInv (Status1.14) | BOOL | CVOverride < 0 或 CVOverride > 100。指令将限制 CV 的值。 |
CVPreviousInv (Status1.15) | BOOL | CVPrevious < 0 或 CVPrevious > 100,或者在自动或级联/比率模式下,CVPrevious < CVLLimit 或 CVPrevious > CVHLimit。指令将限制 CVn-1 的值。 |
CVEUSpanInv (Status1.16) | BOOL | CVEU 量程无效。指令使用值 CVEUMax = CVEUMin。 |
CVLimitsInv (Status1.17) | BOOL | CVLLimit < 0、CVHLimit > 100 或 CVHLimit < CVLLimit。如果 CVHLimit < CVLLimit,指令将使用 CVLLimit 限制 CV 值。 |
CVROCLimitInv (Status1.18) | BOOL | CVROCLimit < 0。指令禁用 ROC 限制。 |
FFInv (Status1.19) | BOOL | FF < -100 或 FF > 100。指令将限制 FF 的值。 |
FFPreviousInv (Status1.20) | BOOL | FFPrevious < - 100 或 FFPrevious > 100。指令将限制 FF n-1 的值。 |
HandFBInv (Status1.21) | BOOL | HandFB < 0 或 HandFB > 100。指令将限制 CV 的值。 |
PGainInv (Status1.22) | BOOL | PGain < 0。指令使用 PGain = 0 值。 |
IGainInv (Status1.23) | BOOL | IGain < 0。指令使用 IGain = 0 值。 |
DGainInv (Status1.24) | BOOL | DGain < 0。指令使用 DGain = 0 值。 |
ZCDeadbandInv (Status1.25) | BOOL | ZCDeadband < 0。指令禁用过零死区。 |
PVDeadbandInv (Status1.26) | BOOL | PVDeadband < 0。指令将 PVDeadband 限制为零。 |
PVROCLimitsInv (Status1.27) | BOOL | PVROCPosLimit < 0、PVROCNegLimit < 0 或 PVROCPeriod < 0。 |
DevHLLimitsInv (Status1.28) | BOOL | 偏差上下限无效。下下限 < 0, 下限 < 0,上限 < 0 或者上上限 < 0。指令将无效限值限制为 0。 |
DevDeadbandInv (Status1.29) | BOOL | 偏差死区 < 0。该指令使用 DevDeadband = 0 值。 |
Status2 | DINT | 功能块的时序状态。 |
TimingModeInv (Status2.27) | BOOL | TimingMode 值无效。 有关时序模式的更多信息,请参见“功能块属性”部分。 |
RTSMissed (Status2.28) | BOOL | 仅用于实时采样模式。在以下情况下设置为真 ABS | DeltaT - RTSTime | > 1(0.001 秒)时置位。 |
RTSTimeInv (Status2.29) | BOOL | RTSTime 值无效。 |
RTSTimeStampInv (Status2.30) | BOOL | RTSTimeStamp 值无效。 |
DeltaTInv (Status2.31) | BOOL | DeltaT 值无效。 |
说明
当指令级联/比率或自动模式下执行时,PID 算法会对 CV 输出进行相应调节,使 PV 保持在 SP 值。
ControlAction 置位后,需将计算的 EPercent 和 PVPIDPercent 值取反,然后再供控制算法使用。
下表说明指令计算各个 PID 项的方法。
PID 项 | 计算方法 |
|---|---|
比例 | 比例项的计算方法如下:
设置 PGain = 0 时,禁用比例控制。 |
积分 | 积分项使用误差值计算。设置 IGain = 0 时,禁用积分控制。当 DependIndepend 置位时,设置 PGain = 0 也会禁用积分控制。 |
微分 | 微分项的计算方法如下:
设置 DGain = 0 时,禁用微分控制。当 DependIndepend 置位时,设置 PGain = 0 也会禁用微分控制。 当 DSmoothing 置位时,启用微分平滑处理,当 DSmoothing 清零时,禁用微分平滑处理。微分平滑处理可减少噪声 PV 信号引起的 CV 输出“抖动”,但也会限制高微分增益的作用。 |
计算 CV
PID 控制算法通过将上次执行指令时的 Delta PTerm、Delta ITerm、Delta
DTerm 和 CV(例如 CV
n-1
)相加,来计算 CV 值。当 CVsetPrevious 置位时,CVn-1 设置为等于 CVPrevious。这样,可以在计算 CV 值之前,将 CV
n-1
预设为一个指定值。CalculatedCV = CV
PTerm + DITerm + DDTerm
n-1
+ D
PTerm + DITerm + DDTermPIDE 算法
PIDE 指令使用与大多数 DCS 系统类似的速度形式 PID 算法。速度形式算法的优点包括:
- 无扰动自适应增益变化 - 无需初始化算法即可实时完成增益变化。
- 多回路控制方案 - 可通过调节 CVn-1项来实现多回路间的交叉限制。
独立增益形式

在这种形式的算法中,每个算法项(比例、积分和微分)均采用单独的增益。更改一个增益只会影响相应的项,而不影响其他项,其中:
PIDE 项: | 说明: |
|---|---|
CV | 控制变量 |
E | 以量程百分比表示的误差 |
D t | 回路使用的更新时间(秒) |
K p | 比例增益 |
K I | 积分增益(分钟) -1 K I 值越大,积分响应速度越快。 |
K D | 微分增益(分钟) |
相关增益形式

在这种形式的算法中,比例增益的更改会影响控制器增益。通过更改控制器增益,可以同时更改三个项(比例、积分和微分)的操作,其中:
PIDE 项: | 说明: |
|---|---|
CV | 控制变量 |
E | 以量程百分比表示的误差 |
D t | 回路使用的更新时间(秒) |
K c | 控制器增益 |
T I | 积分时间常数(分钟)。T 1 值越大,积分响应速度越慢为了响应误差步长变化,积分项需要花费 T 1 分钟来重复比例项的操作。 |
T D | 微分时间常数(分钟) |
PIDE 项: | 说明: |
|---|---|
CV | 控制变量 |
E | 以量程百分比表示的误差 |
D t | 回路使用的更新时间(秒) |
Kp | 比例增益 |
K I | 积分增益(分钟) -1 K I 值越大,积分响应速度越快。 |
K D | 微分增益(分钟) |
确定要使用的算法

上面的 PIDE 公式是 PIDE 指令使用的典型算法。对于比例项和微分项,可以通过调节 PVEProportional 和 PVEDerivative 参数来用误差变化量代替 PV 变化量(量程百分比)。默认情况下,PIDE 指令对于比例项使用误差变化量,而对于微分项则使用 PV 变化量。这样可以避免设置点的变化产生大幅的微分尖峰。
可使用以下公式转换不同 PIDE 算法形式下的增益:

每种算法通过相应的增益来实现相同的控制。有些用户喜欢使用独立增益形式,因为这样可以分别调节各个增益而不会影响其他项。而有些用户则喜欢相关增益形式,因为这样至少可以在某种程度上仅调节控制器增益,无需分别调节每个增益,即可使 PID 回路的作用发生整体性变化。
监视 PIDE 指令
PIDE 指令有相应的操作员面板。
自动调谐 PIDE 指令
Logix Designer
Logix Designer
应用程序 PIDE 自动调谐器是一个内置在 PIDE 指令中的开环自动调谐器。可以通过 PanelView
终端或任何其他操作员接口设备以及 Logix Designer
应用程序完成自动调谐。PIDE 块有一个自动调谐标签(PIDE_AUTOTUNE 类型),可以为要自动调谐的 PIDE 块指定该标签。PIDE 自动调谐器随应用程序一道安装,但要启用该调谐器,需要使用激活密钥。该自动调谐器仅能用于功能块编程,而不适用于梯形图或结构化文本编程。
可使用自动调谐标签来为 PIDE 块指定和配置自动调谐标签。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 EnableOut 位设置为真。 指令执行。 |
指令首次运行 | 不适用 |
指令首次扫描 | 如果 CVFault 和 CVEUSpanlnv 置位,请参见本指令后面的“处理故障”部分。 如果 CVFault 和 CVEUSpanlnv 清零:
|
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
条件/状态 | 执行的操作 |
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
当 CVInitReq 置位、指令的首次扫描期间或者 CVFault 由置位跳变为清零(不良变为良好)时,指令会将 CVEU 和 CV 输出初始化为 CVInitValue 值。如果时序模式未设置为过采样模式且 EnableIn 由清零跳变为置位,指令会初始化 CVEU 和 CV 值。在完成初始化且 CVInitReq 清零后,CVInitialization 清零。
CVInitValue 通常来自于模拟输出的反馈值。CVInitReq 值通常来自于 CVEU 所控制的模拟输出的“In Hold”状态位。执行初始化过程是为了避免在启动时发送到现场设备的输出信号出现扰动。
使用级联 PID 回路时,主 PID 回路可以在次级回路初始化后或者次级回路离开级联/比率模式后进行初始化。这种情况下,将来自次级回路的 InitPrimary 输出和 SP 输出状态送入主回路的 CVInitReq 输入和 CVInitValue 输入。
如果 CVFault 或 CVEUSpanInv 置位,指令不会初始化,CVEU 和 CV 值也不会更新。
示例
示例 1
实施 PIDE 指令最简单的方法是在周期性任务的程序中创建一个功能块例程。PIDE 指令默认的时序模式为周期性模式。当 PIDE 指令用于周期性任务且处于周期性时序模式时,会自动使用周期性任务的更新速率作为 Delta t 更新时间。用户只需将过程变量模拟输入接入 PIDE 指令的 PV 参数,将 PIDE 指令的 CVEU 输出接入受控变量模拟输出。
也可以选择将模拟输入的故障指示器(如果有)接入 PIDE 指令的 PVFault 参数。这样会强制 PIDE 在模拟输入发生故障时进入手动模式,并在 PV 信号不可用时停止 PIDE CVEU 输出的积分饱和或解饱和。
功能块

结构化文本
PIDE_01.PV := Local:1:I.Ch0Data;
PIDE_01.PVFault := Local:1:I.Ch0Fault;
PIDE(PIDE_01);
Local:2:)O.Ch0Data :=PIDE_01.CVEU;
示例 2
当受控变量经常遭受外部干扰,进而导致所控制的过程变量遭受干扰时,级联控制非常有用。例如,尝试通过调节送入罐周围加热套中的蒸汽量来控制罐中液体的温度。如果由于某个上游过程导致蒸汽流量骤降,罐中液体的温度最终也会下降,PIDE 指令随即打开蒸汽阀来补偿温度下降。
在本例中,级联回路可以在蒸汽流量下降导致罐液体温度下降前打开蒸汽阀,从而实现更好的控制。要实现级联回路,可使用 PIDE 指令来根据蒸汽流量变送器的过程变量信号控制蒸汽阀开关。这是级联对的次级回路。另一条 PIDE 指令(称为主回路)使用液体温度作为过程变量,并将其 CV 输出发送到次级回路的设置点。通过这种方法,主温度回路可以向次级蒸汽流量回路请求特定的蒸汽流量。随后,蒸汽流量回路负责提供温度回路所请求的蒸汽量,从而保持恒定的液体温度。
功能块

结构化文本
PrimaryLoop.PV := Local:1:I.CH0Data;
PrimaryLoop.CVInitReq := SecondaryLoop.InitPrimary;
PrimaryLoop.CVInitValue := SecondaryLoop.SP;
PrimaryLoop.WindupHIn := SecondaryLoop.WindupHOut;
PrimaryLoop.WindupLIn := SecondaryLoop.WindupLOut;
PIDE(PrimaryLoop);
SecondaryLoop.PV := Local:1:I.Ch1Data;
SecondaryLoop.SPCascade := PrimaryLoop.CVEU;
PIDE(SecondaryLoop);
Local:2:O.Ch0Data:= SecondaryLoop.CVEU;
要使一对级联回路正常工作,次级回路的过程响应速度必须比主回路快。原因在于,在任何干扰对主回路的过程造成影响之前,次级回路的过程必须能够先对这些干扰进行补偿。在本例中,如果蒸汽流量下降,次级控制器必须在液体温度受到影响之前动作,以便增加蒸汽流量。
要设立一对级联 PIDE 指令,请将次级回路中的
AllowCasRat
输入参数置位。这样可使次级回路进入级联/比率模式。接下来,将主回路的 CVEU
连接到次级回路的 SPCascade
参数。当次级回路进入级联/比率模式时,SPCascade
值将用作次级回路的 SP。主回路中 CVEU 的工程单位范围应当与次级回路中 PV 的工程单位范围一致。这样,主回路便可以将其 CV 的 0-100% 值标定为次级回路上设置点所用的相应工程单位。PIDE 指令还支持其他多种功能,从而更有效地支持级联控制。将次级回路的
InitPrimary
输出连接到主回路的 CVInitReq
输入,将次级回路的 SP 输出连接到主回路的 CVInitValue
输入。这样,当次级回路退出级联/比率模式时,会将主回路的 CVEU 值设为次级回路的 SP,从而在将次级回路重新切换为级联/比率模式时实现无扰动转换。同样,将次级回路的 WindupHOut
和 WindupLOut 输出连接到主回路的 WindupHIn
和 WindupLIn
输入。因此,主回路在次级回路达到 SP 限值或 CV 限值时会停止增大或减小(视情况而定)CVEU 值,并且在发生上述情况时消除主回路上的任何积分饱和。示例 3
比率控制通常用于按设定比例将一种液体添加到另一种液体中。例如,如果要按恒定比率将两种反应物(例如 A 和 B)添加到罐中,而由于上游过程的某些干扰,反应物 A 的流速可能随时间发生变化,这时便可以使用比率控制器自动调节反应物 B 的添加速率。在本例中,反应物 A 通常称为“非可控”流,因为它不受 PIDE 指令控制。而反应物 B 则称为“受控”流。
要使用 PIDE 指令执行比率控制,需将
AllowCasRat
和 UseRatio
输入参数置位。将非可控流连接到 SPCascade
输入参数。处于级联/比率模式时,将非可控流乘以 RatioOper
(在操作员控制模式下)或 RatioProg(在程序控制模式下),得出的乘积会由 PIDE 指令用作设置点。功能块

结构化文本
PIDE_01.PV := ControlledFlow;
PIDE_01.SPCascade := UncontrolledFlow;
PIDE(PIDE_01);
Local:2:O.Ch0Data := PIDE_01.CVEU;
在程序控制与操作员控制之间切换
PIDE 指令可通过用户程序或操作员界面控制。用户可以随时更改控制模式。程序控制和操作员控制都使用 ProgOper 这一输出。当ProgOper 置位时,控制模式为程序控制;当 ProgOper 清零时,控制模式则为操作员控制。
下图显示了 PIDE 指令在程序控制与操作员控制之间进行切换的方式。

(1) 当 ProgOperReq 置位时,指令仍会处于操作员控制模式。
工作模式
PIDE 指令支持以下 PID 模式。
PID 工作模式 | 说明 |
|---|---|
级联/比率 | 处于级联/比率模式时,指令将计算 CV 的变化量。而且,会对 CV 进行相应的调节,使 PV 保持在 SPCascade 值或 SPCascade 值与 Ratio 值的乘积。SPCascade 来自级联控制中主 PID 回路的 CVEU 或比率控制回路的“非可控”流。 可使用 OperCasRatReq 或 ProgCasRatReq 选择级联/比率模式: 将 OperCasRatReq 置位可请求进入级联/比率模式。当 ProgOper、ProgOverrideReq、ProgHandReq、OperAutoReq 或 OperManualReq 置位时,或者 AllowCasRat 清零时,会被忽略。 将 ProgCasRatReq 置位可请求进入级联/比率模式。当 ProgOper 或 AllowCasRat 清零时,或者当 ProgOverrideReq、ProgHandReq、ProgAutoReq 或 ProgManualReq 置位时,会被忽略。 |
自动 | 处于自动模式时,指令将计算 CV 的变化量。而且,指令会对 CV 进行相应的调节以使 PV 保持在 SP 值。如果处于程序控制模式,则 SP = SPProg;如果处于操作员控制模式,则 SP = SPOper。 可使用 OperAutoReq 或 ProgAutoReq 选择自动模式: 将 OperAutoReq 置位可请求进入自动模式。当 ProgOper、ProgOverrideReq、ProgHandReq 或 OperManualReq 置位时,会被忽略。 将 ProgAutoReq 置位可请求进入自动模式。当 ProgOper 清零时,或者当 ProgOverrideReq、ProgHandReq 或 ProgManualReq 置位时,会被忽略。 |
手动 | 处于手动模式时,指令不会计算 CV 的变化量。CV 的值由控制模式确定。如果处于程序控制模式,则 CV = CVProg;如果处于操作员控制模式,则 CV = CVOper。 可使用 OperManualReq 或 ProgManualReq 选择手动模式: 将 OperManualReq 置位可请求进入手动模式。当 ProgOper、ProgOverrideReq 或 ProgHandReq 置位时,会被忽略。 将 ProgManualReq 置位可请求进入手动模式。当 ProgOper 清零时,或者当 ProgOverrideReq 或 ProgHandReq 置位时,会被忽略。 |
覆盖 | 处于超控模式时,指令不会计算 CV 的变化量。 CV = CVOverride,与控制模式无关。超控模式通常用于设置 PID 回路的“安全状态”。 可使用 ProgOverrideReq 选择超控模式: 将 ProgOverrideReq 置位可请求进入超控模式。当 ProgHandReq 清零时,会被忽略。 |
手控 | 处于手控模式时,PID 算法不会计算 CV 的变化量。 CV = HandFB,与控制模式无关。手控模式通常用于指示最终控制元件的控制功能已由现场手控/自动站接管。 可使用 ProgHandReq 选择手控模式: 将 ProgHandReq 置位可请求进入手控模式。该值通常以数字输入的形式从手控/自动工作站读取。 |
处于程序控制模式时,级联/比率、自动和手动模式可由用户程序控制;处于操作员控制模式下时则可通过操作员界面进行控制。超控和手控模式的模式请求输入只能由用户程序控制;这些输入可在程序控制和操作员控制两种模式下工作。
选择设置点
一旦确定处于程序控制还是操作员控制模式以及相应的 PID 模式,指令便可获取正确的 SP 值。可以选择级联/比率 SP 或当前 SP。
级联/比率 SP
级联/比率 SP 取决于 UseRatio 值和 ProgOper 值。

当前 SP
当前 SP 取决于级联/比率模式、PVTracking 值、自动模式以及 ProgOper 值。

SP 上限/下限
上下限报警算法会将 SP 与 SPHLimit 和 SPLLimit 报警限值进行比较。SPHLimit 不能大于 PVEUMax 且 SPLLimit 不能小于 PVEUMin。

更新 SPOper 值和 SPProg 值
为了在程序控制和操作员控制之间实现无扰动切换,或者在从级联/比率模式切换为其他模式时实现无扰动控制,PIDE 指令会设置 SPOper = SP 或 SPProg = SP。

PV 上限/下限报警
上上限至下下限报警算法会将 PV 与 PV 报警限值以及 PV 报警限值加减 PV 报警死区的结果进行比较

(1) 在指令首次扫描期间,指令会将所有的 PV 报警输出清零。当 PVFaulted 置位时,指令也会将 PV 报警输出清零并禁用报警算法。
PV 变化率报警
PV 变化率 (ROC) 报警会将 PV 值在 PVROCPeriod 期间的变化量与 PV 正负变化率限值进行比较。PVROCPeriod 为变化率报警提供一种死区类型。例如,如果使用执行周期为 100 ms、大小为 2°F/s 的 ROC 报警限值,而模拟输入模块的分辨率为 1°F,则输入值每次发生变化时,都会生成 ROC 报警,因为指令认为变化率为 10°F/s。然而,如果输入大于等于 1 秒的 PVROCPeriod,则仅当变化率确实超过 2°F/s 的限值时,才会生成 ROC 报警。
仅当 PVROCPeriod 到期时才会执行计算 ROC。变化率的计算方式如下:
ElapsedROCPeriod = ElapsedROCPeriod + ElapsedTimeSinceLastExecution
如果 ElapsedROCPeriod
³
PVROCPeriod,则:参数: | 值: |
|---|---|
PVROC | ![]() |
PVROC N-1 | PVROC N-1 = PV |
ElapsedROCPeriod | ElapsedROCPeriod = 0 |
计算出 PVROC 后,即可按以下方式确定 PV ROC 报警:

(1) 在指令首次扫描期间,指令会将 PV ROC 报警输出清零。当 PVFaulted 置位时,指令还会将 PVROC 报警输出清零并禁用 PV ROC 报警算法。
将 PV 值和 SP 值转换为百分比
执行 PID 控制算法之前,指令会将 PV 和 SP 转换为百分比并计算误差。此误差为 PV 与 SP 的差值。ControlAction 置位时,需要将 EPercent、E 和 PVPIDPercent 的值取反,然后才能供 PID 算法使用。

(1) PVPIDPercent 和 Deviation 是供 PID 控制算法使用的内部参数。
偏差上限/下限报警
偏差指过程变量 (PV) 与设置点 (SP) 之差。偏差报警提示操作员过程变量和设置点值存在差异。
上上限至下下限报警算法会将偏差与偏差报警限值以及偏差报警限值加减死区的结果进行比较。

(1) 在指令首次扫描期间,指令会将偏差报警输出清零。当 PVFaulted 或 PVSpanInv 置位时,指令还会将偏差报警输出清零并禁用报警算法。
过零死区控制
可以限制 CV 值,使其值在误差处于 ZCDeadband 指定的范围内时 (| E |
£
ZCDeadband) 保持不变。
(1)
当 ZCOff 清零、ZCDeadband > 0、误差首次过零(即 En >= 0 且 En-1 < 0,或者 En <= 0 且 En-1 > 0),且 | En | <= ZCDeadband 时,指令将 ZCDeadbandOn 置位。(2)
切换为自动或级联/比率模式时,指令会设置 En-1 = En。满足以下条件时,指令将禁用过零算法并将 ZCDeadband 清零:
- 指令首次扫描期间
- ZCDeadband£0
- 当前模式不是自动或级联/比率模式
- PVFaulted 置位
- PVSpanInv 置位
前馈控制
计算 CV 时,需将过零算法得出的 CV 与 ∆FF 相加。∆FF 值 = FF – FFn-1。FFSetPrevious 置位时,FFn-1=FFPrevious。这样便可在指令计算 ∆FF 值之前将 FFn-1 预设为指定值。

选择控制变量
执行 PID 算法后,根据程序控制或操作员控制模式以及当前 PID 模式选择 CV。

CV 积分饱和限制
可以对 CV 进行限制,使其值在 WindupHIn 置位时不会增大,或者在 WindupLIn 置位时不会减小。这些输入通常是来自次级回路的 WindupHOut 或 WindupLOut 输出。如果 CVInitializing、CVFault 或 CVEUSpanInv 置位,WindupHIn 和 WindupLIn 输入会被忽略。

CV 百分比限制
下图展示指令如何确定限制 CV 百分比的方式。

(1) 在指令首次扫描期间,指令会将报警输出清零。
CV 上限/下限
指令始终根据 CVHLimit 和 CVLLimit 来执行报警。处于自动或级联/比率模式时,CV 由 CVHLimit 和 CVLLimit 进行限制。处于手动模式时,如果 CVManLimiting 置位,则 CV 由 CVHLimit 和 CVLLimit 进行限制。否则,CV 由 0 和 100% 限制。

(1) 在指令首次扫描期间,指令会将报警输出清零。
CV 变化率限制
处于自动或级联/比率模式时,或者处于手动模式且 CVManLimiting 置位时,PIDE 指令会对 CV 变化率进行限制。使用零值会禁用 CV 变化率限制。
CV 变化率的计算方式如下:

其中,DeltaT 以秒为单位。
计算出 CV 变化率后,即可按以下方式确定 CV 变化率报警:

(1) 在指令首次扫描期间,指令会将报警输出清零。当 CVInitializing 置位时,指令还会将报警输出清零并禁用 CV 变化率算法。
(2) 处于自动或级联/比率模式时,或者处于手动模式且 CVManLimiting 置位时,指令会限制 CV 的变化。
更新 CVOper 值和 CVProg 值
如果未处于操作员手动模式,PIDE 指令会设置 CVOper = CV。因此,从任何其他控制模式切换为操作员手动模式时都可实现无扰动切换。

主回路控制
主回路控制通常由主 PID 回路使用,用于在使用级联/比率模式时,实现无扰动切换和抗积分饱和。主回路控制包括初始化主回路输出和抗积分饱和输出。InitPrimary 输出通常供主 PID 回路的 CVInitReq 输入使用。积分饱和输出通常供主回路的积分饱和输入使用,用于限制其 CV 输出的积分饱和。

(1) 在指令首次扫描期间,指令会将 InitPrimary 置位。
(2) 当 CVInitializing 置位或处于非级联/比率模式时,指令会将 InitPrimary 置位。
(3) 当 CVInitializing 清零且处于级联/比率模式时,指令会将 InitPrimary 清零。
(4) 在指令首次扫描期间,指令会将积分饱和输出清零。当 CVInitializing 置位时,或者 CVFaulted 或 CVEUSpanInv 置位时,指令也会将积分饱和输出清零并禁用 CV 积分饱和算法。
(5) 当 SPHAlarm 置位时、ControlAction 清零且 CVHAlarm 置位时,或者 ControlAction 置位且 CVLAlarm 置位时,指令会将 WindupHOut 置位。
SP 限值和 CV 限值的作用相互独立。SP 上限不会限制 CV 值增大。同样,CV 上下限也不会限制 SP 值增大。
(6) 当 SPHAlarm 清零且未设置(ControlAction 清零且 CVHAlarm 置位)及(ControlAction 置位且 CVLAlarm 置位)时,指令会将 WindupHOut 清零。
(7) 当 SPLAlarm 置位时、ControlAction 清零且 CVLAlarm 置位时,或者 ControlAction 置位且 CVHAlarm 置位时,指令会将 WindupLOut 置位。
SP 限值和 CV 限值的作用相互独立。SP 下限不会限制 CV 值增大。同样,CV 上下限也不会限制 SP 值增大。
(8) 当 SPLAlarm 清零且未设置(ControlAction 清零且 CVLAlarm 置位)及(ControlAction 置位且 CVHAlarm 置位)时,指令会将 WindupLOut 清零。
处理故障
下表说明指令处理执行故障的方式:
故障条件 | Action |
|---|---|
CVFaulted 为真或 CVEUSpanInv 为真 | 指令不进行初始化,CVInitializing 设置为假 计算 PV 和 SP 百分比以及误差,更新 EPercent 和 PVPIDPercent 的内部参数 不执行 PID 控制算法 禁用自动和级联/比率模式。如果当前模式不是超控或手控模式,则设置为手动模式。 将 CV 设置为由程序控制或操作员控制以及模式(手动、超控或手控)确定的值。 |
PVFaulted 为真 | 禁用自动和级联/比率模式。如果当前模式不是超控或手控模式,则设置为手动模式 PV 上下限、PV 变化率以及偏差上下限报警输出均设置为假 不执行 PID 控制算法 将 CV 设置为由程序控制或操作员控制以及模式(手动、超控或手控)确定的值。 |
PVSpanInv 为真或 SPLimitsInv 为真 | 禁用自动和级联/比率模式。如果当前模式不是超控或手控模式,则设置为手动模式 不计算 PV 和 SP 百分比 不执行 PID 控制算法 将 CV 设置为由程序控制或操作员控制以及模式(手动、超控或手控)确定的值。 |
RatioLimitsInv 为真,并且 CasRat 为真,并且 UseRatio 为真 | 如果尚未处于手控或超控模式,则设置为手动模式 禁用级联/比率模式 将 CV 设置为由程序控制或操作员控制以及模式(手动、超控或手控)确定的值。 |
TimingModeInv 为真或 RTSTimeStampInv 为真或 DeltaTInv 为真 | 如果尚未处于手控或超控模式,则设置为手动模式 |
提供反馈
最大正浮点值
0.0 的浮点数