在S7-1200PLC中,程序控制指令主要包含两部分:一是改变程序执行顺序的的跳转指令;二是程序运行过程中用于控制的指令;本节主要分享跳转和标签指令:
1.对于正常的PLC程序,PLC的程序段是按照从上往下的顺序依次执行;当程序中有跳转指令时,程序可以终止运行,直接跳到相对应的标签位置开始执行;在这个期间,跳转程序与标签之间的所有程序不被执行;
2.跳转指令可以往前跳转,也可以往后跳转;
3.跳转指令分为3类:类就是逻辑结果跳转指令,第二类就是定义跳转列表的跳转指令(JMP_LIST),第三类是跳转分支指令(SWITCH)指令;
关键点:针对所有的跳转指令均有效
1.跳转指令只能一个程序块中跳转,不能从一个程序块跳转到另外一个程序块中;简单地说,就是只能在它自己的FC或FB中跳转,不能从FC跳到FB,或是FC1跳转到FC2;或是FB1跳转到FB2等情况;
2.在一个程序块里面,跳转的标签名称具有唯一性,也就是只能使用一次;
3.一个程序段中,只能设置一个跳转标签/跳转线圈;也就是一个Network中只能有一个跳转标签;
具体指令的讲解及其案例实现方式见下图所示;
本节是在跳转与标签指令(第1节)的基础上分享的第2节:定义跳转列表指令JMP_LIST;
TIPS:
1.该指令,有多个条件跳转,并继续执行由 K 参数的值指定的标签段的程序,跳转标签则可以在指令框的输出指定;
2.可在指令框中点击*号,可以增加DEST输出的数量;其中,针对CPU S7-1200 多可以声明 32 个输出,而 CPU S7-1500 多可以声明 256 个输出;
3.DEST输出编号,必须符合标签命名规则;
4.指令的输出中只能指定跳转标签,而不能指定指令或操作数;
5.K参数值将指定输出编号,因而程序将从跳转标签处继续执行。如果 K 参数值大于可用的输出编号,则继续执行块中下个程序段中的程序。简单地说,K值就是与DEST管脚一一对应;比如K=0,对应DEST0管脚,执行DEST0对应的标签段的程序,K=1,对应DEST1管脚,执行DEST1对应的标签段的程序;
6.仅在 EN 使能输入的信号状态为“1”时,才执行“定义跳转列表”指令;
具体指令的讲解及其案例实现方式见下图所示;
本节是在跳转与标签指令(第2节)的基础上分享的第3节:跳转分支指令SWITCH;
该指令根据一个或多个比较指令的结果,定义要执行的多个程序标签处跳转,在参数K中指定要比较的值。
可以从指令框的“???”下拉列表中选择该指令的数据类型。如果选择了比较指令而尚未定义指令的数据类型,“???”下拉列表将仅列出所选比较指令允许的那些数据类型。
特点:
1.该指令从个比较开始执行,直至满足比较条件为止。如果满足比较条件,则将不考虑后续比较条件。如果未满足任何指定的比较条件,将在输出 ELSE 处执行跳转。如果输出 ELSE 中未定义程序跳转,则程序从下一个程序段继续执行。
2.可在指令框中增加输出的数量。输出从值“0”开始编号,每次新增输出后以升序继续编号DEST0、DEST1、DEST2等。在指令的输出中指定跳转标签 (LABEL)。但是不能在该指令的输出上指定指令或操作数。
3.输入将自动插入到每个附加输出中。如果满足输入的比较条件,则将执行相应输出处设定的跳转。
4.输入引脚可以与K值做等于,大于,小于,大于等于,小于等于,不等于等比较运算;
具体指令的讲解及其案例实现方式见下图所示;
本节是在跳转与标签指令(第3节)的SWITCH指令的基础上分享的第4节:返回指令RET;
1.返回指令可以用来实现对程序执行的控制,当CPU在执行代码块时,执行到RET指令,如果该指令的条件满足,则CPU退出代码块的执行,此时发奎指令RET后面的程序段不被执行。
2.应用该指令时,可以与跳转指令一起配合实现对程序段的选择执行;例如在每个程序段中加入RET指令,则执行完该标签段到RET指令之间的程序后,可自动返回,不继续执行后续的程序;
3.程序块退出时,返回值(操作数)的信号状态与调用程序块的使能ENO相对应;也就是说返回值的信号是0或是1,将决定FC或FB的ENO状态;
4.RET 与 JMP 和 JMPN 指令相关
如果程序段中已包含有“JMP:若 RLO = "1" 则跳转”或“JMPN:若 RLO = "0" 则跳转”指令,则不得使用 RET:返回指令。每个程序段中只能使用一个跳转线圈。
具体指令的讲解及其案例实现方式见下图所示;