3、PLC工作原理:扫描周期、输入采样、程序执行、输出刷新

好,咱们今天聊点硬核的。PLC到底是怎么工作的?

很多人刚接触PLC时,总觉得它就是个“高级继电器”。其实不然。PLC的工作方式,跟咱们人脑的思考方式有点像——看情况、做判断、动手干。只不过它把这个过程拆成了三个固定的步骤,周而复始地跑。

这三个步骤,就是我今天要讲的:输入采样、程序执行、输出刷新。它们合在一起,构成了一个完整的扫描周期

3.1 什么是扫描周期?

扫描周期,说白了就是PLC“睁眼-思考-动手”的一个完整循环。

我习惯把它比作一个保安巡逻:

  • 输入采样:保安走到门口,看一眼门锁状态(输入信号)。
  • 程序执行:保安根据看到的状况,决定要不要报警(逻辑运算)。
  • 输出刷新:保安按下报警按钮(输出信号)。

然后,保安再走回门口,重新开始下一轮巡逻。

这个“巡逻一圈”的时间,就是扫描周期。通常以毫秒计。比如一个中型PLC,扫描周期可能在10ms左右。你想想看,一秒钟它能跑100轮,够快了吧?

核心要点:PLC不是“实时响应”的,而是“周期扫描”的。这是理解PLC所有行为的基础。

3.2 第一步:输入采样

这一步,PLC会“拍照”一样,把所有的输入信号状态读进来。

注意,它只拍一次。拍完之后,这张“照片”就被锁定了。哪怕外部信号变了,PLC也不管,直到下一个扫描周期才会重新拍照。

我在项目中遇到过一个问题:一个急停按钮按下后,PLC没有立即停止。排查了半天,发现是输入采样阶段已经过了,程序还在用旧的“照片”在跑。嗯,这里要注意——输入信号的响应延迟,往往就出在这个环节

避坑指南:我曾经在调试一条包装线时,发现传感器信号偶尔丢失。后来发现是传感器抖动太快,PLC采样时刚好错过了。解决办法?加一个硬件滤波,或者在程序里做软件去抖。

3.3 第二步:程序执行

这一步,PLC开始“动脑子”了。

它从上到下、从左到右,逐条执行用户编写的梯形图或指令表。注意,它用的是刚才拍下来的“照片”(输入映像区),而不是实时信号。

为什么?因为如果一边执行一边读输入,程序逻辑会乱套。比如一个自锁电路,如果读到的是实时信号,那自锁可能永远锁不住。

我个人习惯,在写程序时会把关键逻辑放在前面。因为PLC执行顺序是固定的,前面的逻辑会影响后面的结果。你想想看,如果输出线圈在前面,而它的触点却在后面,那这个触点用的就是上一周期的状态了。

重要提醒:程序执行阶段,只读写映像寄存器,不直接操作物理I/O。这是PLC稳定性的关键设计。

3.4 第三步:输出刷新

程序跑完了,PLC开始“动手”。

它把输出映像区里的数据,一次性全部送到物理输出模块。这时候,继电器才真正吸合,指示灯才真正点亮。

这一步也是“批量操作”。不管程序里有多少个输出,PLC都会在输出刷新阶段统一处理。所以,如果你在程序中间修改了输出值,它不会立即生效,要等到这个扫描周期结束才行。

注意:输出刷新是“一次性”的。如果程序执行过程中,某个输出被反复修改,只有最后一次修改的值会生效。我曾经见过新手在程序里写了两个相同的输出线圈,结果输出一直不稳定——因为后一个覆盖了前一个。

3.5 扫描周期的实际影响

了解了这三个步骤,你就能理解很多PLC的“怪现象”了。

比如:

  • 为什么PLC响应有延迟?——因为要等下一个扫描周期。
  • 为什么同一个输入在程序里用多次,结果都一样?——因为用的是同一张“照片”。
  • 为什么输出不能立即反映输入变化?——因为输出刷新在最后一步。

我建议,在调试时可以用示波器或PLC的监控功能,观察扫描周期的实际长度。如果发现周期过长(比如超过50ms),就要检查程序里有没有死循环、定时器太多、或者通讯指令卡住了。

个人经验:我曾经优化过一个老程序,扫描周期从80ms降到了12ms。怎么做的?把一些不常用的子程序放到“条件调用”里,别让它们每个周期都跑。就这么简单,效果立竿见影。

3.6 一张表总结

步骤 做什么 操作对象 时间点
输入采样 读取所有输入信号 物理输入 → 输入映像区 扫描周期开始
程序执行 逐条执行用户程序 输入映像区 → 输出映像区 输入采样之后
输出刷新 将结果输出到物理设备 输出映像区 → 物理输出 程序执行之后

好了,这就是PLC工作的核心原理。说白了,就是“拍照-思考-动手”三个动作,循环往复。你只要记住这个节奏,以后看任何PLC程序,都不会觉得神秘了。