3、PLC核心工作原理:扫描周期详解、输入采样、程序执行、输出刷新、中断机制
各位同学,今天我们来聊聊PLC最核心的东西——扫描周期。
说实话,我见过不少工程师,梯形图画得飞起,但一问到PLC到底怎么工作的,就支支吾吾了。这不行。你想想看,不懂扫描周期,就像开车不懂发动机原理,能开,但真出了问题,你根本不知道从哪下手。
3.1 扫描周期:PLC的“心跳”
PLC的工作方式,说白了就是“循环往复”。它不像电脑那样随时响应你的鼠标点击,它有自己的节奏。这个节奏,就是扫描周期。
一个完整的扫描周期,包含三个阶段:输入采样 → 程序执行 → 输出刷新。这三个阶段,一个都不能少,顺序也不能乱。
核心要点:PLC在一个扫描周期内,只读取一次输入,只更新一次输出。这意味着,输入信号的变化,必须等到下一个扫描周期才能被程序感知。
我记得刚入行时,有个老工程师跟我说过一句话,我一直记到现在:“PLC是个瞎子,它只看一眼世界,然后闭着眼睛把活干完,再睁眼看下一眼。” 话糙理不糙。
3.2 输入采样阶段:PLC的“眼睛”
这个阶段,PLC会快速扫描所有输入端子(比如按钮、传感器、限位开关),把它们的ON/OFF状态读进来,存到输入映像寄存器里。
注意,这里有个坑。我曾在项目现场遇到过一个问题:一个急停按钮按下去,程序就是没反应。查了半天,发现是输入信号抖动,在采样瞬间刚好读到了“0”,但实际按钮已经按下了。后来加了硬件滤波和软件延时才解决。
避坑指南:输入信号的持续时间,必须大于一个扫描周期,否则PLC可能“看不见”。我曾经因为一个只有10ms的脉冲信号,折腾了整整一个下午。
为什么会这样?因为PLC在输入采样阶段,只读取一次。采样结束后,即使输入端子上的信号变了,程序里用的还是之前采到的值。直到下一个扫描周期,才会更新。
3.3 程序执行阶段:PLC的“大脑”
这个阶段,PLC从上到下、从左到右,逐条执行用户程序。它只从输入映像寄存器里读数据,计算结果写到输出映像寄存器和中间寄存器里。
这里有个非常重要的特性:程序执行时,不直接读取物理输入,也不直接驱动物理输出。
我个人的习惯是,在写梯形图时,会特别注意线圈的重复使用问题。你想想看,如果同一个线圈在程序里出现了两次,那最终的状态由谁决定?答案是:最后执行的那条指令。
经验之谈:我建议大家在写程序时,尽量保证每个线圈只出现一次。如果实在需要多次使用,一定要搞清楚执行顺序。我曾经见过一个同事,因为线圈重复使用,导致设备动作混乱,差点酿成事故。
程序执行阶段,还有一个容易忽略的点:立即刷新指令。比如三菱的MOV指令,或者西门子的“立即输入/输出”指令。这些指令会打破常规的扫描周期,直接读写物理端口。嗯,这里要注意,使用这类指令时要格外小心,因为它们会影响程序的时序一致性。
3.4 输出刷新阶段:PLC的“手”
程序执行完毕后,PLC会把输出映像寄存器里的数据,一次性全部送到物理输出端口(比如继电器、晶体管、晶闸管)。
这个阶段,所有输出是同时刷新的。也就是说,你程序里先置位了Y0,后置位了Y1,但在物理输出上,Y0和Y1是同时动作的。
我记得有一次调试一个包装机,客户反映说气缸动作总是慢半拍。我检查了程序逻辑,没问题。后来用示波器一测,发现是输出模块的响应时间太长。嗯,这里要提醒大家,不同输出类型的响应时间是不一样的:
| 输出类型 | 典型响应时间 | 适用场景 |
|---|---|---|
| 继电器输出 | 10ms左右 | 低频、大电流 |
| 晶体管输出 | 0.2ms左右 | 高频、小电流 |
| 晶闸管输出 | 1ms左右 | 交流负载 |
避坑指南:如果你需要高速输出(比如步进电机脉冲),千万别用继电器输出。我曾经吃过这个亏,继电器还没吸合完,脉冲已经发完了。
3.5 中断机制:打破常规的“特权指令”
前面说的都是常规扫描周期。但有些紧急情况,比如急停、过流、位置超限,等不了你一个完整的扫描周期。这时候,就需要中断出场了。
中断,说白了就是“插队”。当外部或内部的中断信号触发时,PLC会暂停当前正在执行的程序,转而去执行一段专门的中断服务程序。执行完毕后,再回到刚才暂停的地方继续。
中断的类型,常见的有这么几种:
- 外部中断:由物理输入信号触发,比如上升沿、下降沿。
- 定时中断:每隔固定时间触发一次,比如每10ms执行一次。
- 高速计数器中断:当计数值达到预设值时触发。
- 通信中断:接收到特定数据时触发。
我个人在项目中用得最多的是外部中断和定时中断。比如一个高速旋转的编码器,我需要实时读取它的位置,用常规扫描周期根本来不及。这时候,我就会用高速计数器中断,每转一圈触发一次,精度高得多。
经验之谈:中断虽然好用,但别滥用。中断服务程序要尽量短小精悍,别在里面写复杂的逻辑。我曾经见过有人把整个主程序都塞进中断里,结果PLC直接死机。记住,中断是“特事特办”,不是“常规操作”。
另外,中断的优先级也很重要。如果多个中断同时触发,PLC会先处理优先级高的。这个优先级,不同品牌PLC的设置方式不一样,有的在硬件上配置,有的在软件里设置。我建议大家在项目初期就把中断优先级规划好,不然后期改起来很麻烦。
3.6 扫描周期对程序的影响
理解了扫描周期,你就能明白很多看似“诡异”的现象了。
比如,为什么同一个输入信号,在程序的不同位置读取,结果可能不一样?因为程序执行是顺序的,前面的指令和后面的指令,读取的是同一个输入映像寄存器的值,所以结果是一样的。但如果你用了立即刷新指令,那就不一样了。
再比如,为什么两个输出不能同时动作?其实可以,但前提是它们必须在同一个扫描周期的输出刷新阶段同时更新。如果你想让Y0先动作,Y1后动作,那就需要两个扫描周期。
核心总结:
- 扫描周期 = 输入采样 + 程序执行 + 输出刷新
- 输入采样:一次扫描只读一次输入
- 程序执行:只读映像寄存器,不直接读物理输入
- 输出刷新:所有输出同时更新
- 中断:用于处理紧急或高速事件,要短小精悍
好了,这一章的内容就到这里。扫描周期是PLC的基石,理解透了,后面学什么都会轻松很多。下一章,我们聊聊PLC的编程语言,看看梯形图、指令表、功能块图到底有什么区别,以及在实际项目中该怎么选。