内模控制 (IMC)
此信息适用于
CompactLogix
5370、ControlLogix
5570、Compact GuardLogix
5370、GuardLogix
5570、Compact GuardLogix
5380、CompactLogix
5380、ControlLogix
5580、GuardLogix
5580 和 ControlLogix 5590 控制器。内模控制 (IMC) 指令通过操纵单个控制变量输出来控制单个过程变量。该功能块执行一种算法,将实际误差信号与过程内部一阶加纯滞后模型的误差信号进行比较。在自动模式下,IMC 功能块基于 PV 与 SP 的偏差、内部模型和调谐来计算控制变量输出 (CV)。
可用语言
梯形图
此指令不可用于梯形图中。
功能块

结构化文本
IMC(IMC_tag);
操作数
功能块
操作数: | 类型: | 格式 | 说明: |
IMC 标签 | INTERNAL MODEL CONTROL | 结构 | IMC 结构 |
结构化文本
操作数: | 类型: | 格式 | 说明: |
IMC 标签 | INTERNAL MODEL CONTROL | 结构 | IMC 结构 |
有关结构化文本中表达式语法的详细信息,请参见
结构化文本语法
部分。
重要提示:
只要 APC 块检测到增量时间 (DeltaT) 发生变化,便执行 ModelInit。因此,这些块应该仅在 DeltaT 为常量的一种 TimingMode 下运行。
- TimingMode = 0(周期性),在周期性任务中执行这些功能块时
- TimingMode = 1(过采样)
无论在哪种情况下,如果周期性任务的时间动态变化,或者 OversampleDT 动态变化,该块便执行 ModelInit。
由于 DeltaT 中存在抖动,因此不推荐使用下面的 TimingMode 设置:
- TimingMode = 0(周期性),在连续任务或事件任务中执行这些功能块时
- TimingMode = 2(实时采样)
结构
输入参数 | 数据类型 | 说明 | 有效值和默认值 |
|---|---|---|---|
EnableIn | BOOL | 启用输入。如果为“假”,则功能块不执行,输出也不会更新。 | 默认值 = 真 |
PV | REAL | 经过标定的过程变量输入。该值通常从模拟输入模块中读取。 | 有效值 = 任意浮点值 默认值 = 0.0 |
PVFault | BOOL | PV 不良状况指示器。如果从模拟输入读取 PV,则 PVFault 通常由模拟输入故障状态控制。 如果 PVFault 为“真”,则表示输入模块发生错误,并且会将 Status 中的相应位置位。 | 默认值 = 假 假 = 状况良好 |
PVUEMax | REAL | PV 的最大标定值。对应于过程变量的 100% 量程的 PV 和 SP 的值。如果 PVEUMax ≤ PVEUMin,则将 Status 中的相应位置位。 | 有效值 = PVEUMin < PVEUMax ≤ 最大正浮点值 默认值 = 100.0 |
PVUEMin | REAL | PV 的最小标定值。对应于过程变量的 0% 量程的 PV 和 SP 的值。如果 PVEUMax ≤ PVEUMin,则将 Status 中的相应位置位。 | 有效值 = 最大负浮点值 ≤ PVEUMin < PVEUMax 默认值 = 0.0 |
SPProg | REAL | SP 程序值,以 PV 单位标定。在程序控制模式下,SP 设置为此值。 如果 SPProg 或 SPOper 的值 < SPLLimit 或 > SPHLimit,则将 Status 中的相应位置位,并限制 SP 的值。 | 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPOper | REAL | SP 操作员值,以 PV 单位标定。在操作员控制模式下,SP 设置为此值。 如果 SPProg 或 SPOper 的值 < SPLLimit 或 > SPHLimit,则将 Status 中的相应位置位,并限制 SP 的值。 | 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPCascade | REAL | SP 级联值,以 PV 单位标定。如果级联/比率模式和 UseRatio 为 FALSE,则 SP 设置为此值,这通常是主回路的 CVEU。如果 CascadeRatio 模式和 UseRatio 为 TRUE,则 SP 设置为此值乘以 Ratio。 如果 SPCascade 值 < SPLLimit 或 > SPHLimit,则会将 Status 中的相应位置位,并限制 SP 的值。 | 有效值 = SPLLimit 到 SPHLimit 默认值 = 0.0 |
SPHLimit | REAL | SP 上限值,以 PV 单位标定。 如果 SPHLimit < SPLLimit 或 SPHLimit > PVEUMax,则将 Status 中的相应位置位。 | 有效值 = SPLLimit 到 PVEUMax 默认值 = 100.0 |
SPLLimit | REAL | SP 下限值,以 PV 单位标定。 如果 SPLLimit < PVEUMin 或 SPHLimit < SPLLimit,则将 Status 中的相应位置位,并使用 SPLLimit 的值限制 SP。 | 有效值 = PVEUMin 到 SPHLimit 默认值 = 0.0 |
UseRatio | BOOL | 允许比率控制。设置为 TRUE 时,可在 CascadeRatio 模式下启用比率控制。 | 默认值 = 假 |
RatioProg | REAL | 程序控制模式下的比率乘数,无单位(例如标量)。在程序控制模式下,Ratio 和 RatioOper 设置为此值。 如果 RatioProg 或 RatioOper < RatioLLimit 或 > RatioHLimit,则会将 Status 中的相应位置位,并限制 Ratio 值。 | 有效值 = RatioLLimit 到 RatioHLimit 默认值 = 1.0 |
RatioOper | REAL | 操作员控制模式下的比率乘数,无单位(例如标量)。在操作员控制模式下,Ratio 设置为此值。 如果 RatioProg 或 RatioOper < RatioLLimit 或 > RatioHLimit,则会将 Status 中的相应位置位,并限制 Ratio 值。 | 有效值 = RatioLLimit 到 RatioHLimit 默认值 = 1.0 |
RatioHLimit | REAL | 比率上限值,无单位(例如标量)。限制从 RatioProg 或 RatioOper 获取的 Ratio 值。 如果 RatioLLimit < 0,则会将 Status 中的相应位置位,并将值限定为零。如果 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 设置为 CVInitValue 的值。此信号通常由受 CVEU 控制的模拟输出模块的 In Hold 状态控制,或者来自次级 IMC 回路的 InitPrimary 输出。 | 默认值 = 假 |
CVInitValue | REAL | CVEU 初始化值,以 CVEU 单位标定。当 CVInitializing 为真时,将 CVEU 设置为 CVInitValue 且 CV 等于相应的百分比值。CVInitValue 通常来自于受 CVEU 控制的模拟输出的反馈,或者次级回路的设置点。当 CVFaulted 或 CVEUSpanInv 为真(不良)时,会禁用功能块初始化。 | 有效值 = 任意浮点值 默认值 = 0.0 |
CVProg | REAL | 程序-手动模式下的 CV 值。在程序控制和手动模式下,CV 设置为此值。 如果 CVProg 或 CVOper 的值 < 0 或 > 100,或者当 CVManLimiting 为真时 < CVLLimit 或 > CVHLimit,则将 Status 中的相应位置位,并限制 CV 的值。 | 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVOper | REAL | 操作员-手动模式下的 CV 值。在操作员控制和手动模式下,CV 设置为此值。如果未处于操作员-手动模式,则在每个功能块执行结束时,将 CVOper 设置为 CV 值。 如果 CVProg 或 CVOper 的值 < 0 或 > 100,或者当 CVManLimiting 为真时 < CVLLimit 或 > CVHLimit,则将 Status 中的相应位置位,并限制 CV 的值。 | 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVOverrideValue | REAL | 超控模式下的 CV 值。在超控模式下,CV 设置为此值。 此值应对应于 IMC 回路的安全状态输出。如果 CVOverrideValue 的值 < 0 或 >100,则将 Status 中的相应位置位,并限制 CV 的值。 | 有效值 = 0.0 至 100.0 默认值 = 0.0 |
CVTrackValue | REAL | CV 跟踪值。当启用 CVTrackReq 且 IMC 功能块处于手动模式时,将忽略 CVTrackValue 值,IMC 内部模型将以 CVOper 或 CVProg 值更新其历史数据。当启用 CVTrackReq 且 IMC 功能块处于自动模式时,内部模型将根据 CVTrackValue 的值更新其历史数据。这种情况下,CV 值将可以正常变化,就如同 IMC 功能块仍在控制该过程。在多回路选择方案中,如果希望 IMC 功能块跟随不同控制算法的输出,则该功能将非常有用,可将控制算法的输出连接到 CVTrackValue。 | 有效值 = 0.0 至 100.0 默认值 = 0.0 |
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 值进行限制。 如果 CVLLimit < 0、CVHLimit > 100 或 CVHLimit < CVLLimit,则将 Status 中的相应位置位。如果 CVHLimit < CVLLimit,则使用 CVLLimit 值限制 CV 值。 | 有效值 = CVLLimit < CVHLimit ≤ 100.0 默认值 = 100.0 |
CVLLimit | REAL | CV 下限值。该值用于设置 CVLAlarm 输出。当处于自动或级联/比率模式,或者处于手动模式并且 CVManLimiting 设置为真时,该值也用于对 CV 值进行限制。 如果 CVLLimit < 0、CVHLimit > 100 或 CVHLimit < CVLLimit,则将 Status 中的相应位置位。 如果 CVHLimit < CVLLimit,则使用 CVLLimit 值限制 CV 值。 | 有效值 = 0.0 ≤ CVLLimit < CVHLimit 默认值 = 0.0 |
CVROCPosLimit | REAL | CV 递增变化率限值(百分比/秒)。 仅当处于自动或 CascadeRatio 模式,或者处于手动模式并且 CVManLimiting 为 TRUE 时,才会使用变化率限值。 该值为零值时,禁用 CV ROC 限制。 如果 CVROCPOSLimit 的值 < 0,则会将 Status 中的相应位置位,并禁用 CV ROC 限制。 | 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
CVROCNegLimit | REAL | CV 递减变化率限值(百分比/秒)。 仅当处于自动或 CascadeRatio 模式,或者处于手动模式并且 CVManLimiting 为 TRUE 时,才会使用变化率限值。 该值为零值时,禁用 CV ROC 限制。 如果 CVROCNegLimit 的值 < 0,则会将 Status 中的相应位置位,并禁用 CV ROC 限制。 | 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
HandFB | REAL | CV HandFeedback 值。当处于手动模式下且 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 输出。 | 默认值 = 假 |
GainEUSpan | BOOL | ModelGain 单位(EU 或量程百分比)。 CV ModelGain 单位(EU 或量程百分比)。置位时将 ModelGain 表示为 EU,复位时将 ModelGain 表示为量程百分数。 | 默认值 = 假 真 = EU 形式的增益 FALSE = 量程百分比形式的增益 |
ProcessGainSign | BOOL | 仅用于自动调谐。过程增益符号 (Delta PV/Delta CV)。 置位指示负过程增益(输出增大会导致 PV 减小)。 复位指示正过程增益(输出增大会导致 PV 增大)。 | 默认值 = 假 |
ProcessType | DINT | 过程类型选项(1 = 积分,0 = 非积分) | 默认值 = 0 |
ModelGain | REAL | 内模增益参数。根据过程方向输入正增益或负增益。 | 有效值 = 最大负浮点值 −> 最大正浮点值 默认值 = 0.0 |
ModelTC | REAL | 内模时间常数(秒)。 | 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
ModelDT | REAL | 内模死区时间(秒)。 | 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
RespTC | REAL | 用于确定控制变量操作速度的调谐参数(秒)。 | 有效值 = 0.0 到最大正浮点值 默认值 = 0.0 |
PVTracking | BOOL | SP 跟踪 PV 请求。设置为真可以使 SP 跟踪 PV。级联/比率模式或自动模式下忽略该值。 | 默认值 = 假 |
CVTrackReq | BOOL | CV 跟踪请求。若设置为真,则在自动调谐设置为“关”时启用 CV 跟踪。手控和超控模式下忽略该参数。 | 默认值 = 假 |
AllowCasRat | BOOL | 允许级联/比率模式。设置为 TRUE 时,允许通过 ProgCasRatReq 或 OperCasRatReq 选择 CascadeRatio 模式。 | 默认值 = 假 |
ManualAfterInit | BOOL | 初始化后进入手动模式的请求。 该值为真时,如果 CVInitializing 设置为真,除非当前模式为超控或手控模式,否则功能块将切换为手动模式。 当 ManualAfterInit 为 FALSE 时,功能块的模式保持不变。 | 默认值 = 假 |
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 | 操作员发出的程序控制请求。由操作员界面设置为 TRUE 可请求程序控制模式。功能块将此参数复位(假)。 | 默认值 = 假 |
OperOperReq | 操作员发出的操作员控制请求。由操作员界面设置为真可请求操作员控制模式。功能块将此参数复位(假)。 | 默认值 = 假 | |
OperCasRatReq | BOOL | 操作员-级联/比率模式请求。由操作员界面设置为 TRUE 可请求 CascadeRatio 模式。功能块将此参数复位(假)。 | 默认值 = 假 |
OperAutoReq | BOOL | 操作员-自动模式请求。由操作员界面设置为真可请求自动模式。功能块将此参数复位(假)。 | 默认值 = 假 |
OperManualReq | BOOL | 操作员-手动模式请求。由操作员界面设置为真可请求手动模式。功能块将此参数复位(假)。 | 默认值 = 假 |
ProgValueReset | BOOL | 将程序控制值复位。该值为真时,Prog_xxx_Req 输入复位(假)。 该值为真且处于程序控制模式下时,将 SPProg 设置为等于 SP,将 CVProg 设置为等于 CV。 当 ProgValueReset 为真时,功能块将此参数复位(假)。 | 默认值 = 假 |
TimingMode | DINT | 选择时基执行模式。 值/说明 0 = 周期性模式 1 = 过采样模式 2 = 实时采样模式 有关时序模式的更多信息,请参见“功能块属性”部分。 | 有效值 = 0 至 2 默认值 = 0 |
OverSampleDT | REAL | 过采样模式的执行时间。 | 有效值 = 0 到 TON_Timer 经过的最长时间(4194.303 秒) 默认值 = 0 |
RTSTime | DINT | 实时采样模式的模块更新周期。 | 有效值 = 1 至 32,767 1 次计数 = 1 ms |
RTSTimeStamp | DINT | 实时采样模式的模块时戳值。 | 有效值 = 0 至 32,767 (从 32,767 跳回到 0) 1 次计数 = 1 ms |
PVTuneLimit | REAL | 以 PV 单位标定的 PV 调谐限值。当自动调谐正在运行并且预测 PV 值超过此限值时,调谐过程将中止。 | 范围:任意浮点值 默认值 = 0 |
AtuneTimeLimit | REAL | CV 发生阶跃变化后完成自动调谐所需的最长时间。自动调谐时间超出此时间时,调谐将会中止。 | 有效值范围:任意 > 0 的浮点值。 默认值 = 60 分钟 |
NoiseLevel | DINT | PV 的噪声级别估计值,在调谐期间可对该值进行补偿。 可选项包括:0 = 低、1 = 中、2 = 高 | 范围:0 至 2 默认值 = 1 |
CVStepSize | REAL | 调谐阶跃测试所用的 CV 步长(百分比)。步长将直接加到 CV(不超出上限/下限范围)。 | 范围:-100% … 100% 默认值 = 10% |
ResponseSpeed | DINT | 所需的闭环响应速度。 慢速响应:ResponseSpeed=0 中速响应:ResponseSpeed=1 快速响应:ResponseSpeed=2。 如果 ResponseSpeed 小于 0,则使用慢速响应。如果 ResponseSpeed 大于 2,则使用快速响应。 | 范围:0 至 2 默认值 = 1 |
ModelInit | BOOL | 内模初始化开关。 | 默认值 = 假 |
Factor | REAL | 非积分模型近似因子。仅用于积分过程类型。 | 默认值 = 100 |
AtuneStart | BOOL | 启动自动调谐的请求。该值为真时,启动功能块的自动调谐。如果 IMC 未处于手动模式,则忽略该值。功能块将此参数复位(假)。 | 默认值 = 假 |
AtuneUseModel | BOOL | 使用自动调谐模型请求。该值为真时,以计算出的自动调谐模型参数替换当前模型参数。功能块将该输入参数设置为假。 | 默认值 = 假 |
AtuneAbort | BOOL | 中止自动调谐的请求。该值为真时,中止 IMC 功能块的自动调谐。功能块将该输入参数设置为假。 | 默认值 = 假 |
输出参数 | 数据类型 | 说明 | 有效值和默认值 |
|---|---|---|---|
EnableOut | BOOL | 指示指令是否处于启用状态。如果 CVEU 溢出,则设置为假。 | |
CVEU | REAL | 标定控制变量输出。使用 CVEUMax 和 CVEUMin 标定,其中 CVEUMax 对应于 100%,CVEUMin 对应于 0%。此输出通常用于控制模拟输出模块或次级回路。 CVEU = (CV * CVEUSpan / 100) + CVEUMin CVEU 量程计算:CVEUSpan = ( CVEUMax − CVEUMin ) | |
CV | REAL | 控制变量输出。此值始终以 0…100% 表示。处于自动模式、级联/比率模式或手动模式且 CVManLimiting 为真时,CV 限定在 CVHLimit 和 CVLLimit 之间;否则,将限定在 0 和 100% 之间。 | |
DeltaCV | REAL | 当前 CV 与上一 CV 之间的差值(当前 CV - 上一 CV)。 | |
CVInitializing | BOOL | 初始化模式指示器。当 CVInitReq 或功能块 FirstScan 为真,或者 CVFault 由真变为假(由不良转为良好)时,该值设置为真。当功能块初始化完毕且 CVInitReq 不再为真后,CVInitializing 将设置为假。 | |
CVHAlarm | BOOL | CV 上限报警指示器。当 CV 的计算值 > 100 或 CVHLimit 时为 TRUE。 | |
CVLAlarm | BOOL | CV 下限报警指示器。计算的 CV 值 < 0 或 CVLLimit 时为真。 | |
CVROCPosAlarm | BOOL | CV 变化率报警指示器。计算的 CV 变化率超出 CVROCPosLimit 时为真。 | |
CVROCNegAlarm | REAL | CV 变化率报警指示器。计算的 CV 变化率超出 CVROCNegLimit 时为真。 | |
SP | REAL | 当前设置点的值。SP 值用于在自动、级联/比率或 PV 跟踪模式下控制 CV,以 PV 单位标定。 | |
SPPercent | REAL | 以 PV 量程百分比表示的 SP 值。 SPPercent = ((SP − PVEUMin ) * 100) / PVSpan 其中 PVSpan = PVEUMax − PVEUMin | |
SPHAlarm | BOOL | SP 上限报警指示器。当 SP ≥ SPHLimit 时为真。 | |
SPLAlarm | BOOL | SP 下限报警指示器。当 SP ≤ SPLLimit 时为真。 | |
PVPercent | REAL | 以量程百分比表示的 PV。 PVPercent = (( PV − PVEUMin ) * 100) / PVSpan PV 量程计算:PVSpan = ( PVEUMax − PVEUMin ) | |
E | REAL | 过程误差。SP 与 PV 之间的差值,以 PV 单位标定。 | |
EPercent | REAL | 以量程百分比形式表示的误差。 | |
InitPrimary | BOOL | 初始化主回路命令。当未处于级联/比率模式或 CVInitializing 为真时,为真。此信号通常供主回路的 CVInitReq 输入使用。 | |
WindupHOut | BOOL | 积分饱和上限指示器。当达到 SP 上限或 CV 上限/下限时为真。此信号通常供 WindupHIn 输入使用,用以限制主回路上 CV 输出的积分饱和。 | |
WindupLOut | BOOL | 积分饱和下限指示器。当达到 SP 或 CV 上限/下限时为真。此信号通常供 WindupLIn 输入使用,用以限制主回路上 CV 输出的积分饱和。 | |
Ratio | REAL | 当前比率乘数,无单位。 | |
RatioHAlarm | BOOL | 比率上限报警指示器。当 Ratio > RatioHLimit 时为真。 | |
RatioLAlarm | BOOL | 比率下限报警指示器。当 Ratio < RatioLLimit 时为真。 | |
ProgOper | BOOL | 程序/操作员控制指示器。在程序控制模式下为真 (TRUE)。在操作员控制模式下为假 (FALSE)。 | |
CasRat | BOOL | 级联/比率模式指示器。在 CascadeRatio 模式下为 TRUE。 | |
Auto | BOOL | 自动模式指示器。处于自动模式时为真。 | |
Manual | BOOL | 手动模式指示器。处于手动模式时为真。 | |
Override | BOOL | 超控模式指示器。处于超控模式时为真。 | |
Hand | BOOL | 手控模式指示器。处于手控模式时为真。 | |
DeltaT | REAL | 两次更新间隔的时间(秒)。 | |
StepSizeUsed | REAL | 调谐中使用的实际 CV 步长。 | |
GainTuned | REAL | 调谐完毕后计算出的内模增益值。 | |
TCTuned | REAL | 调谐完毕后计算出的内模时间常数。 | |
DTTuned | REAL | 调谐完毕后计算出的内模死区时间值。 | |
RespTCTunedS | REAL | 调谐完毕后计算出的慢速响应速度下的控制变量时间常数。 | |
RespTCTunedM | REAL | 调谐完毕后计算出的中速响应速度下的控制变量时间常数。 | |
RespTCTunedF | REAL | 调谐完毕后计算出的快速响应速度下的控制变量时间常数。 | |
AtuneOn | BOOL | 启动自动调谐后设置为真。 | |
AtuneDone | BOOL | 自动调谐成功完成后设置为真。 | |
AtuneAborted | BOOL | 当自动调谐由用户中止,或者因自动调谐过程中出错而中止时,设置为真。 | |
AtuneStatus | DINT | 指示功能块的调谐状态。 | |
AtuneFault | BOOL | 自动调谐产生以下任一故障。 | AtuneStatus 的位 0 |
AtunePVOutOfLimit | BOOL | 在自动调谐过程中,PV 或 PV 死区时间步提前预测值超过 PVTuneLimit。该值为真时,自动调谐过程将中止。 | AtuneStatus 的位 1 |
AtuneModeInv | BOOL | IMC 模式在自动调谐开始时并非手动模式,或者在自动调谐过程中由手动模式切换为其他模式。该值为真时,自动调谐不会启动或者将会中止。 | AtuneStatus 的位 2 |
AtuneCVWindupFault | BOOL | 在自动调谐开始时或自动调谐期间,WindupHIn 或 WindupLIn 为真。该值为真时,自动调谐不会启动或者将会中止。 | AtuneStatus 的位 3 |
AtuneStepSize0 | BOOL | 自动调谐开始时,StepSizeUsed = 0。该值为真时,自动调谐不会启动。 | AtuneStatus 的位 4 |
AtuneCVLimitsFault | BOOL | 在自动调谐开始时或自动调谐期间,CVLimitsInv 和 CVManLimiting 为真。该值为真时,自动调谐不会启动或者将会中止。 | AtuneStatus 的位 5 |
AtuneCVInitFault | BOOL | 在自动调谐开始时或自动调谐期间,CVInitializing 为真。该值为真时,自动调谐不会启动或者将会中止。 | AtuneStatus 的位 6 |
AtuneEUSpanChanged | BOOL | 在自动调谐期间,CVEUSpan 或 PVEUSpan 发生改变。该值为真时,自动调谐过程将中止。 | AtuneStatus 的位 7 |
AtuneCVChanged | BOOL | CVOper(操作员控制模式)或 CVProg(程序控制模式)发生改变,或者 CV 在自动调谐期间达到上/下限或 ROC 限制。该值为真时,自动调谐过程 将中止。 | AtuneStatus 的位 8 |
AtuneTimeout | BOOL | 自阶跃测试开始起经过的时间长于 AtuneTimeLimit。该值为真时,自动调谐过程将中止。 | AtuneStatus 的位 9 |
AtunePVNotSettled | BOOL | PV 变化过大而无法进行自动调谐。该值为真时,自动调谐过程将中止。等待 PV 达到更稳定状态再进行自动调谐。 | AtuneStatus 的位 10 |
Status1 | DINT | 功能块的位映射状态。 | |
Status2 | DINT | 功能块的附加位映射状态。 | |
InstructFault | BOOL | 功能块发生故障。指示 Status1 和 Status2 相应位的状态。 值为 0 时表示未发生故障。任何可能配置为无效值的参数都必须具有状态参数,来指示其无效状态。 | Status1 的位 0 |
PVFaulted | BOOL | 过程变量 PV 状况不良。 | Status1 的位 1 |
CVFaulted | BOOL | 控制变量 CV 故障 | Status1 的位 2 |
HandFBFaulted | BOOL | HandFB 值状况不良 | Status1 的位 3 |
PVSpanInv | BOOL | PV 量程无效,PVEUMax < PVEUMin。 | Status1 的位 4 |
SPProgInv | BOOL | SPProg < SPLLimit 或 > SPHLimit。限制 SP 的值。 | Status1 的位 5 |
SPOperInv | BOOL | SPOper < SPLLimit 或 > SPHLimit。限制 SP 的值。 | Status1 的位 6 |
SPCascadeInv | BOOL | SPCascade < SPLLimit 或 > SPHLimit。限制 SP 的值。 | Status1 的位 7 |
SPLimitsInv | BOOL | 限值无效:SPLLimit < PVEUMin,SPHLimit > PVEUMax 或 SPHLimit < SPLLimit。如果 SPHLimit < SPLLimit,则使用 SPLLimit 对值进行限制。 | Status1 的位 8 |
RatioLimitsInv | BOOL | 比率上下限无效,下限 < 0 或上限 < 下限。 | Status1 的位 9 |
RatioProgInv | BOOL | RatioProg < RatioLLimit 或 > RatioHLimit。将限制 Ratio 的值。 | Status1 的位 10 |
RatioOperInv | BOOL | RatioOper < RatioLLimit 或 > RatioHLimit。将限制 Ratio 的值。 | Status1 的位 11 |
CVProgInv | BOOL | CVProg < 0 或 > 100,或者当 CVManLimiting 为真时,< CVLLimit 或 > CVHLimit。将限制 CV 的值。 | Status1 的位 12 |
CVOperInv | BOOL | CVOper < 0 或 > 100,或者当 CVManLimiting 为真时,< CVLLimit 或 > CVHLimit。将限制 CV 的值。 | Status1 的位 13 |
CVOverrideValueInv | BOOL | CVOverrideValue < 0 或 > 100。将限制 CV 的值。 | Status1 的位 14 |
CVTrackValueInv | BOOL | CVTrackValue < 0 或 > 100。将限制 CV 的值。 | Status1 的位 15 |
CVEUSpanInv | BOOL | CVEU 的量程无效,CVEUMax 等于 CVEUMin。 | Status1 的位 16 |
CVLimitsInv | BOOL | CVLLimit < 0、CVHLimit > 100 或 CVHLimit <= CVLLimit。如果 CVHLimit <= CVLLimit,则使用 CVLLimit 限制 CV 值。 | Status1 的位 17 |
CVROCLimitInv | BOOL | CVROCLimit < 0,禁用 ROC 限制。 | Status1 的位 18 |
HandFBInv | BOOL | HandFB < 0 或 > 100。将限制 CV 的值。 | Status1 的位 19 |
SampleTimeTooSmall | BOOL | 模型死区时间/DeltaT 必须小于或等于 200。 | Status1 的位 20 |
FactorInv | BOOL | Factor 值 < 0。 | Status1 的位 21 |
ModuleGainInv | BOOL | ModelGain 为 1.#QNAN 或 -1.#IND(非数字),或者 ± 1.$(无穷大 ∞) | Status1 的位 22 |
ModelTCInv | BOOL | ModelTC < 0。 | Status1 的位 23 |
ModelDTInv | BOOL | ModelDT < 0。 | Status1 的位 24 |
RespTCInv | BOOL | RespTC < 0。 | Status1 的位 25 |
TimingModelInv | BOOL | TimingMode 无效。如果当前模式不是超控或手控模式,则设置为手动模式。 | Status2 的位 27 |
RTSMissed | BOOL | 仅用于实时采样模式。ABS(DeltaT - RTSTime) > 1 毫秒时为真。 | Status2 的位 28。 |
RTSTimeInv | BOOL | RTSTime 无效。 | Status2 的位 29。 |
RTSTimeStampInv | BOOL | RTSTimeStamp 无效。如果当前模式不是超控或手控模式,则设置为手动模式。 | Status2 的位 30。 |
DeltaTInv | BOOL | DeltaT 无效。如果当前模式不是超控或手控模式,则设置为手动模式。 | Status2 的位 31。 |
说明
下图所示为 IMC 功能块的配置。

每次执行时,IMC 功能块都会将实际 PV 测量值与 PV 预测值进行比较。其结果称为扰动估计值,代表未测得过程扰动性与建模不精确性的综合效应。扰动估计值用作与控制变量设置点的偏差。在无扰动和完美建模的理想情况下,扰动估计值(反馈信号)变为零。
一阶模型 | M = K/(T*s+1)*exp(-D*s) | |
模型取反 | Inv = (T*s+1)/K | |
一阶滤波器 | F = 1/(e*s+1) |
PV 预测值 = exp(-D*s)/(e*s+1) *(SP - 扰动估计值)
K... | 模型增益 |
T... | 模型时间常数 |
D... | 模型死区时间 |
e... | 响应时间常数 |
s... | 拉普拉斯变量 |
功能块随后计算 CV 值(使用 CVHLimit、CVLLimit 和变化率限值)和 PV 预测值。
当控制死区时间较长的过程时,IMC 功能块比 PID 控制变量更具优势,因此可代替 PID 功能块。
对于积分过程类型(例如液位控制和位置控制),使用内部非积分模型来近似模拟积分过程。使用 Factor 参数将确定的积分过程模型转换为用于 CV 计算的非积分内部模型。这对于稳定的 IMC 执行非常必要。
影响数学状态标志
否
严重/轻微故障
没有特定于此指令的故障。有关操作数相关的故障,请参阅 通用属性。
执行
功能块
条件/状态 | 执行的操作 |
|---|---|
预扫描 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为假 | EnableIn 和 EnableOut 位设置为假。 |
Tag.EnableIn 为真 | EnableIn 和 .EnableOut 位设置为真。 指令执行。 |
指令首次运行 | 不适用 |
指令首次扫描 | 不适用 |
后扫描 | EnableIn 和 EnableOut 位设置为假。 |
结构化文本
条件/状态 | 执行的操作 |
预扫描 | 请参见“功能块”表中的“预扫描”行。 |
正常执行 | 请参见“功能块”表中的“Tag.EnableIn 为真”行。 |
后扫描 | 请参见“功能块”表中的“后扫描”行。 |
示例
功能块

结构化文本
imcTag.PV := imcInput1;
imcTag.SPProg := imcInput2;
imcTag.CVProg := imcInput3;
IMC(imcTag);
imcOutput1 := imcTag.CVEU;
提供反馈