程序控制指令用于程序执行流程的控制。对一个扫描周期而言,跳转指令可以使程序出现跨越或跳跃以实现程序段的选择。子程序指令可调用某段子程序。循环指令可多次重复执行特定的程序段。中断指令则用于中断信号引起的子程序调用。
程序控制类指令可以影响程序执行的流向及内容。对合理安排程序的结构,有效提高程序的功能,对实现某些技巧性运算,都有重要的意义。
( 1 )跳转指令说明及跳转对扫描过程的影响
该指令的助记符、指令代码、操作数、程序步如表 9-1 所示。
表 9-1 条件跳转指令要素
指令名称 |
助记符 |
指令代码位数 |
操作数范围 |
程序步 |
D ( . ) |
条件跳转 |
CJ
CJ(P) |
FNC100
(16) |
P0~P63
P63 即 END |
CJ 和 CI (P) ~3 步
标号 P~1 步 |
跳转指令在梯形图中使用的情况如图 9-1 所示。图中跳转指令 P8 、 P9 分别对应 CJ P8 及 CJ P9 二条跳转指令。
跳转指令执行的意义为在满足跳转条件之后的各个扫描周期中, PLC 将不再扫描执行跳转指令与跳转指针 PX 间的程序,即跳到以指针 PX 为入口的程序段中执行。直到跳转的条件不再满足,跳转停止进行。在图 9-1 中,当 X0 置 1 ,跳转指令 CJ P8 执行条件满足,程序将从 CJ P8 指令处跳至标号 P8 处,仅执行该梯形图中最后三行程序。
( 2 )子程序指令的使用要素及其梯形图表示
该指令的助记符、指令代码、操作数、程序步如表 9-3 所示。
表 9-3 子程序指令要素
指令名称 |
助记符 |
指令代码位数 |
操作数范围 |
程序步 |
D ( . ) |
子程序调用 |
CALL
CALL(P) |
FNC01
(16) |
指针 P0~P62 嵌套 5 级 |
3 步(指令标号) 1 步 |
子程序返回 |
SRET |
FNC02 |
无 |
1 步 |
子程序是为了一些特定的控制目的编制的相对独立的程序。为了区别于主程序,规定在程序编排时。将主程序排在前边,子程序排在后边,并以主程序结束指令 FEND ( FNC06 )将这两部分分隔开。
子程序指令在梯形图中使用的情况如图 9-6 所示。图中,子程序调用指令 CALL 安排在主程序段中, X0 是子程序执行的条件,当 X0 置 1 时标号为 P10 的子程序得以执行。子程序 P10 安排在主程序结束指令 FEND 之后,标号 P10 和子程序返回指令 SRET 间的程序构成了 P10 子程序的内容。当主程序带有多个子程序时,子程序可依次列在主程序结
束之后。并以不同的标号相区别。
( 3 )使用跳转指令应注意点什么?
( a )由于跳转指令具有选择程序段的功能。在同一程序且位于因跳转而不会被同时执行程序段中的同一线圈不被视为双线圈
( b )可以有多条跳转指令使用同一标号。在图 9-2 中,如 X20 接通,第一条跳转指令有效,从这一步跳到标号 P9 。如果 X20 断开,而 X21 接通,则第二条跳转指令生效,程序从第二条跳转指令处跳到 P9 处。但不允许一个跳转指令对应二个标号的情况,即在同一程序中不允许存在二个相同的标号。
( c )标号一般设在相关的跳转指令之后,也 可以设在跳转指令之前。
( d )使用 CJ ( P )指令时,跳转只执行一个扫描周期,但若用辅助继电器 M8000 作为跳转指令的工作条件,跳转就成为无条件跳转。
( e )跳转可用来执行程序初始化工作。