PID 指令时序

PID 指令和过程变量的采样需要定期进行更新。更新时间与所控制的物理过程有关。对于非常缓慢的回路(如温度回路),每秒一次甚至更长的更新时间通常足以获得良好的控制效果。某些稍快的回路(如压力或流量回路)则可能需要像 250 ms 一次这样的更新时间。只有少数情况(例如,开卷机卷轴上的张力控制)需要每经过 10 ms 或更短的时间更新一次。
由于 PID 指令在计算中使用时基,因此需要将该指令的执行与过程变量 (PV) 的采样进行同步。
执行 PID 指令最简单的方式是将 PID 指令用在周期性任务中。将回路更新时间 (.UPD) 设置为等于周期任务速率,并确保每次扫描周期性任务都执行 PID 指令。
执行 PID 指令最简单的方式是将 PID 指令用在周期性任务中。将回路更新时间 (.UPD) 设置为等于周期任务速率,并确保每次扫描周期性任务都执行 PID 指令。
继电器梯形图
小贴士: 为避免以无效内部浮点值将 PID 锁定,请确保 PV 不是 INF 或 NAN 值,然后再调用指令,例如:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
结构化文本
PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data, Local:1:O.Ch4Data,0,Local:1:I.Ch4InHold, Local:1:I.Ch4Data);
使用周期性任务时,应确保以比周期性任务速率快得多的速率将用于过程变量的模拟输入更新到处理器。理想情况下,至少应以比周期性任务数率快 5 - 10 倍的速率将过程变量发送到处理器。这可使过程变量的实际采样与 PID 回路执行的时间差最小。例如,如果 PID 回路位于 250 ms 的周期性任务中,则可使用 250 ms 的回路更新时间 (.UPD = .25),并将模拟输入模块配置为大约至少每 25 - 50 ms 产生一次数据。
执行 PID 指令的另一种方法是,将该指令放在连续任务中,并使用计时器完成位来触发 PID 指令的执行,但这种方法准确性稍差。
继电器梯形图
小贴士: 为避免以无效内部浮点值将 PID 锁定,请确保 PV 不是 INF 或 NAN 值,然后再调用指令,例如:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
结构化文本
PID_timer.pre := 1000
TONR(PID_timer);
IF PID_timer.DN THEN PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
小贴士: 为避免以无效内部浮点值将 PID 锁定,请确保 PV 不是 INF 或 NAN 值,然后再调用指令,例如:
  • XIC (PC_timer.DN)
  • MOV(Local:0:1.Ch0Data, Local:0:1.Ch0Data)
  • XIO(S:V)
  • PID(...)
在此方法中,应将 PID 指令的回路更新时间设置为等于计时器预设值。与使用周期性任务的情况相同,应将模拟输入模块产生过程变量的速率设置为比回路更新时间快得多。仅当回路的回路更新时间至少比连续任务在最差情况下的执行时间长几倍时,才可使用 PID 执行的计时器方法。
执行 PID 指令的最精确方法是使用 1756 模拟输入模块的实时采样 (RTS) 功能。模拟输入模块以您在设置模块时配置的实时采样速率对其输入进行采样。当模块的实时采样周期结束时,模块会更新其输入并更新由模块产生的滚动时戳(由模拟输入数据结构的 .RollingTimestamp 成员表示)。
时戳范围为 0 至 32,767 ms。应监视时戳。当时戳发生变化时,说明已接收到新的过程变量样本。每次时戳变化时,都会执行一次 PID 指令。由于过程变量采样由模拟输入模块驱动,因此输入采样时间非常准确,应将 PID 指令使用的回路更新时间设置为等于模拟输入模块的 RTS 时间。
为确保不丢失过程变量的样本,应以快于 RTS 时间的速率执行逻辑。例如,如果 RTS 时间为 250 ms,您可以将 PID 逻辑放在每 100 ms 运行一次的周期性任务中,以确保不会漏采样。只要能确保逻辑更新频率高于每 250 ms 一次,甚至可以将 PID 逻辑放在连续任务中。
下图显示了一个 RTS 执行方法的示例。当接收到新的模拟输入数据时,将执行 PID 指令。如果模拟输入模块发生故障或被移除,控制器将停止接收滚动时戳,PID 回路也将停止执行。应监视 PV 模拟输入的状态位,如果指示不良状态,则强制回路进入软件手动模式,并在每次扫描时都执行该回路。这样操作员仍然可以手动更改 PID 回路的输出。
继电器梯形图
结构化文本
IF (Local:0:I.Ch0Fault) THEN TIC101.SWM [:=] 1;
ELSE TIC101.SWM := 0; END_IF;
IF (Local:0:I.RollingTimestamp<>PreviousTimestamp) OR (Local:0:I.Ch0Fault) THEN
PreviousTimestamp := Local:0:I.RollingTimestamp; PID(TIC101,Local:0:I.Ch0Data,Local:0:I.Ch1Data,
Local:1:O.Ch0Data,0,Local:1:I.Ch0InHold,
Local:1:I.Ch0Data);
END_IF;
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal