TIA Portal中的WAIT指令如何影响PLC扫描周期

来源:工控老炮儿

PLC 编程中,我们常常强调扫描周期的重要性,但很多时候它像一个“黑盒子”——我们知道它存在,却很少能直观地感受到它的影响。

今天,我们就来聊一个有趣的话题:TIA Portal 中的 WAIT 指令。通过它,我们可以人为地干预扫描周期,从而更深入地理解 PLC 的工作机制。

一、什么是扫描周期?

在深入 WAIT 指令之前,我们先简单回顾一下 PLC 的扫描周期。

当 PLC 投入运行后,其工作过程一般分为三个阶段:输入采样、用户程序执行和输出刷新。完成上述三个阶段称作一个扫描周期。

在每个扫描周期开始时,PLC 会读取所有物理输入点的状态,并将其存入输入映像区。随后,CPU 按照从上到下、从左到右的顺序执行用户程序。当程序执行完毕后,CPU 会将输出映像区中的数据一次性写入物理输出点,完成输出刷新。

关键点在于:在程序执行阶段,即使外部输入信号的状态发生了变化,输入映像区中的数据也不会改变,直到下一个扫描周期开始时才会被更新。这就是 PLC 程序“串行执行、循环扫描”的核心特征。

二、什么是 WAIT 指令?

WAIT 指令在 TIA Portal 中是一条不太常用的指令,它的作用很直接:在程序执行过程中插入一段等待时间。

当 CPU 执行到 WAIT 指令时,会在当前网络(Network)停留指定的时间,然后再继续执行后续的程序。这意味着,整个扫描周期会被人为地延长。

这就像你在跑步比赛中途停下来系鞋带——原本可以一口气跑完的赛程,因为中途的停顿,总用时被显著拉长了。

三、WAIT 指令如何影响扫描周期?

我们可以通过一个简单的实验来理解 WAIT 指令的影响。

假设我们有一个常规的 PLC 程序,正常扫描周期为10ms。现在,我们在程序的某个网络中加入一条 WAIT 指令,设置等待时间为 20ms。

当 CPU 执行到 WAIT 指令时,会发生以下情况:

CPU 暂停程序执行,进入 20ms 的等待状态

等待结束后,继续执行后续程序

程序执行完毕后,进入输出刷新阶段

整个扫描周期变为:输入采样时间 + 程序执行时间(含 20ms 等待)+ 输出刷新时间

最终结果:原本 10ms 的扫描周期,可能被延长到 30ms 以上。

通过以下实例说明 WAIT 指令对扫描周期的影响。

首先用 WAIT 指令设计一个可以自定义时间的 WAIT 等待子程序,将时间单位设定为秒。如下图:

42732a36-2d0b-11f1-90a1-92fbcf53809c.png

在程序循环 OB1 中调用以上 WAIT 等待程序,设置等待时间为 3 秒。如下图:

禁用 WAIT 等待时的循环扫描时间如下图:

43343fc8-2d0b-11f1-90a1-92fbcf53809c.png

启用 WAIT 等待时的循环扫描时间如下图:

可以看到循环扫描时间加长了 3 秒钟。

四、WAIT 指令带来的实际影响

1. 输入信号的“延迟响应”

由于扫描周期被拉长,输入信号的采样频率降低了。如果一个脉冲信号的宽度小于扫描周期,就有可能被“漏掉”。

2. 定时器的精度问题

这里需要引入一个重要的概念:定时器的异步刷新。

定时器启动后,其计时是独立于 PLC 扫描周期的——定时器本身的时间累计不受扫描周期影响。但是,定时器是否完成计时,需要在程序扫描到定时器指令时才被检查。

有经验的工程师做过这样的实验:在程序中故意加入 20ms 的 WAIT 指令拉长扫描周期,结果发现定时器的实际累计时间产生了 20ms 的误差。

原因分析:定时器在后台独立计时,到达设定时间后,它并不会立即触发程序动作,而是要等到 CPU 执行到该定时器指令时,才会检查到“定时已完成”这一状态。如果扫描周期被拉长,这个检查就会被延迟。

这也解释了为什么定时器不适合做精确定时——精确定时推荐使用循环中断(如OB30)配合计数器来实现。

3. 程序执行的“非原子性”

假设你在程序中对同一个输出线圈进行了多次赋值,最终生效的是最后一次赋值的结果。如果 WAIT 指令插在这些赋值之间,情况就会变得更加复杂,调试难度也会增加。

例如:在循环中断 OB30 中置位 Q0.0(立即输出),在程序循环 OB1 中复位 Q0.0(立即输出),如果在 OB1 中加入或不加入 WAIT 指令,将有可能产生不同的输出结果。

五、WAIT 指令的实际应用场景

既然 WAIT 指令会拉长扫描周期、影响定时精度,那它有什么用呢?其实,在一些特殊场景下,WAIT 指令还是有价值的:

1. 程序调试与模拟

在调试阶段,我们可以用 WAIT 指令模拟某些需要时间延迟的场景,观察程序在不同时序下的行为。比如,在测试顺控程序时,可以用 WAIT 指令模拟设备动作所需的时间。

2. 人为放大问题以排查故障

如前文所述,工程师会故意加入 WAIT 指令来放大定时器的异步刷新误差,从而验证定时器的特性。这种方法也适用于排查其他与扫描周期相关的问题。

3. 与外部设备的时序匹配

某些老旧的或响应较慢的外部设备,可能需要在输出信号后等待一段时间才能接收下一个指令。在这种情况下,WAIT 指令可以作为一个简单的解决方案。

需要提醒的是:WAIT 指令会拉长扫描周期,影响整个系统的实时性,在生产环境中应谨慎使用,或尽量采用循环中断等更可靠的方式替代。

以下是通过加入 WAIT 指令来观察上升沿的变化过程。

上次扫描周期:

43e66f0e-2d0b-11f1-90a1-92fbcf53809c.png

当前扫描周期:

443953f4-2d0b-11f1-90a1-92fbcf53809c.png

六、总结与思考

通过 WAIT 指令的研究,我们可以得出以下几点结论:

1. 扫描周期是 PLC 运行的基础

输入采样、程序执行、输出刷新三个阶段构成了 PLC 的基本工作模式,理解这一点是掌握 PLC 编程的前提。

2. WAIT 指令是一把“双刃剑”

它可以帮助我们调试程序、排查问题,但也会拉长扫描周期、影响定时精度。

3. 定时器的异步刷新特性需要重视

定时器是独立于扫描周期运行的,检查定时完成状态却依赖于程序扫描,这决定了定时器不适合用于精确定时。

4. 选择合适的工具做合适的事

对于需要精确定时的场景,循环中断(OB30)+计数器是更好的选择。

例如:

4491e0e6-2d0b-11f1-90a1-92fbcf53809c.png

这种方案使用的是 CPU 执行周期(循环中断)作为计时基准,配合计数器(如 Int、DInt 变量) 来实现精确定时。

返回顶部
跳到底部

Copyright ©2024 本站由 灵灵猴 版权所有,站长QQ303154759.津ICP备2024027016号-5,本站部分内容为转载,不代表本站立场,如有侵权请联系处理 open开发