程序控制
流程与执行
掌握程序的逻辑流。从条件跳转到实时诊断工具,优化控制器的执行结构。
什么是 TIA Portal 中的程序控制操作?
程序控制操作允许修改程序段的顺序执行顺序。它们用于跳过部分代码(跳转)、创建复杂的分支(分流器)或管理 CPU 的内部行为(停止、看门狗、时间测量)。
这些指令非常强大,但必须谨慎使用,特别是会阻塞循环的 WAIT 指令,或者如果跳转过多可能会使程序难以调试。TIA Portal 还提供现代化的工具,用于在每个块内部局部拦截错误。
跳转与流程
程序重定向指令
JMP / JMPN — 条件跳转
JMP功能
如果 RLO 为 1,则 JMP 中断顺序执行并跳转到标签 (LABEL)。如果 RLO 为 0,JMPN 执行相同操作。
适用场景
跳过不应在特定模式下执行的代码段,或在 LAD/FBD 中创建简单的循环。
专家提示
跳转目的地 (LABEL) 必须在同一个块(FC 或 FB)内。
不要使用向后跳转来创建没有退出条件的循环,否则会面临循环时间超时的风险。
在 SCL 中,请改用 IF...THEN 或 CASE...OF 结构。
SWITCH — 多分支分流器
SWITCH功能
将输入值与多个目标值进行比较,并跳转到与第一个验证案例相对应的程序段。Switch/Case 的图形等效形式。
适用场景
管理机器状态(简单 Grafcet)、选择运行模式或根据类型代码分流零件。
专家提示
比一系列串联的 == 比较器更简洁易读。
使用 'ELSE' 输入处理没有匹配值的情况。
非常适合 HMI 上的菜单结构。
RET — 返回
RET功能
强制结束当前块 (FC/FB) 的执行并返回到调用块。
适用场景
如果在块开始时检测到错误,或者不满足安全条件,则提前终止函数。
专家提示
有助于优化循环时间,避免不必要地处理剩余代码。
注意:尚未处理的块输出将保持其最后状态。
在 SCL 中,使用 RETURN; 指令。
运行控制
CPU 循环管理与性能测量
RUNTIME — 测量时间
RUNTIME功能
以微秒 (µs) 为单位测量程序部分或整个块的执行时间。
适用场景
代码优化、诊断沉重的程序段或计算机器性能。
专家提示
调用一次 RUNTIME 以初始化测量,第二次调用以获取结果。
使用 LReal 数据类型存储测量结果。
便于检查复杂的 FOR 循环是否接近看门狗限制。
WAIT — 固定延迟
WAIT功能
将程序执行挂起指定的微秒时长。警告:与定时器不同,WAIT 会完全阻塞 CPU 循环。
适用场景
等待几微秒以使超高速 I/O 卡上的电子信号稳定。
专家提示
务必谨慎使用。过长的 WAIT 将触发看门狗错误并停止 PLC。
切勿用于过程延迟(秒/分);请使用 TON 定时器。
仅适用于 S7-1500。
STP — CPU 停止
STP功能
强制 CPU 进入 STOP 模式。
适用场景
不应再控制机器的致命错误情况,或诊断测试。
专家提示
停止是立即发生的。需要手动干预(HMI 或开关)才能重启。
尽可能优先选择带安全故障处理的报警管理,而不是粗暴地停止 CPU。
在调试项目中用于在特定位置进行“断点”。
错误处理
局部拦截执行故障
GET_ERROR / GET_ERR_ID
功能
检索有关块内发生的第一个错误的信息(例如:访问不存在的数组索引)。
适用场景
通过拦截编程错误而不停止 PLC 来增强块的鲁棒性。
专家提示
GET_ERROR 提供详细结构,GET_ERR_ID 仅返回错误号。
将这些指令放在关键块的末尾。
允许创建自定义错误日志。
跳转 vs 控制结构
使用哪种方法重定向程序?
| 您需要... | 推荐指令 | 为什么? |
|---|---|---|
| LAD 中的简单跳转 | JMP | 跳过一个程序段 |
| 复杂的多重选择 | SWITCH / CASE | 比 10 个 JMP 更具可读性 |
| 测量内部时长 | RUNTIME | 性能优化 |
| 立即停止 | STP | 硬件严重错误 |
| 极短等待 | WAIT | 电子稳定 |
| 局部诊断 | GET_ERROR | 避免 CPU 停止 |
常见问题
JMP 和 JMP_LIST 有什么区别?
JMP 是向目标的单次跳转。JMP_LIST 允许定义目的地列表。根据数字索引,程序跳转到列表中的第 1、第 2 或第 N 个标签。
WAIT 指令危险吗?
是的,如果使用不当。它会挂起整个用户程序的执行。如果 WAIT 和代码的总和超过看门狗时间(通常为 150ms),CPU 将进入 STOP。
如何测量 PLC 的总循环时间?
您不需要使用 RUNTIME 指令。您可以直接在线查看 CPU 属性,或使用 OB1 的系统变量。
标签 (LABEL) 放在哪里?
标签可以放在任何程序段的开头。在 LAD 中,它们出现在左侧母线正上方。标签名称在块内必须是唯一的。