22-5. PLC的程序控制指令(子程序)

22 阅读3分钟

22-5. PLC的程序控制指令(子程序)

在 PLC(可编程逻辑控制器)编程中,子程序指令是一种用于结构化编程的核心指令。它的核心思想是“模块化”:将复杂的程序分解成若干个独立的功能块,按需调用。

简单来说,子程序就像是程序里的“工具箱”,你把常用的逻辑放进去,主程序需要时就拿出来用一下,用完再放回去。


1. 子程序的三大核心指令

一套完整的子程序控制通常由以下三部分组成:

指令名称英文缩写 (常见)功能说明
子程序调用CALL / JSR在主程序中发出指令,要求 CPU 暂时离开主程序,转去执行指定的子程序。
子程序入口SBR / LBL标记子程序的开始位置,通常带有编号(如 P1, SBR_1)。
子程序返回RET / SRET标志子程序的结束。执行到此处后,CPU 会跳回刚才主程序中断的地方,继续往下运行。

2. 工作原理(扫描过程)

在正常的扫描周期中,PLC 是从上到下执行主程序的。

  1. 遇到调用指令:当 CALL 指令的触发条件满足时,扫描仪会“瞬移”到对应的子程序入口。
  2. 执行子程序:PLC 开始执行子程序内部的梯形图。
  3. 遇到返回指令:执行到 RET 时,PLC 知道任务完成了,立刻回到主程序中 CALL 指令的下一行继续执行。
  4. 不满足条件时:如果 CALL 指令的触发条件不满足,PLC 会直接跳过子程序,子程序内的代码完全不被扫描(这可以节省运行时间)。

3. 为什么要用子程序?

使用子程序不仅是为了让程序看起来“整洁”,还有以下实际好处:

  • 减少重复劳动:如果一套报警逻辑在 10 个地方都要用,你只需要写一个子程序,然后在 10 个地方执行 CALL 即可。
  • 优化扫描时间:对于一些不是每时每刻都需要运行的逻辑(比如:只有在手动模式下才运行的调试程序),放在子程序里只在需要时调用,可以显著缩短 PLC 的扫描周期(Scan Time)。
  • 便于调试:你可以独立地测试某一个功能块,而不受其他逻辑干扰。
  • 实现嵌套:高级 PLC 支持“嵌套调用”,即主程序调子程序 A,子程序 A 里面又调子程序 B。

4. 注意事项(新手易错点)

  • 状态保持问题:如果子程序在执行过程中突然停止调用(CALL 条件断开),子程序内部的非自保持线圈(Out)通常会保持在最后一次执行的状态,而不会自动复位。这可能导致设备无法关机。
  • 双线圈冲突:如果在主程序和子程序中同时操作同一个物理输出点(如 Y0),会导致逻辑混乱。
  • 嵌套层数限制:不同品牌(西门子、三菱、欧姆龙等)对子程序嵌套的层数有限制,通常不能无限叠加。