条件结束(END)指令:执行条件成立(左侧逻辑值为1)时,终止当前扫描周期,结束主程序,返回主程序起点。END指令可以在主程序中使用,但不能在子程序或中断服务程序中使用。END指令见表3-11。
停止指令
停止(STOP)指令:执行条件成立(左侧逻辑值为1)时,停止执行用户程序时CPU状态由 RUN转到 STOP。STP指令见表3-12。
如果STOP指令在中断程序中执行,那么该中断立即终止,并且忽略所有挂起的中断,继续扫描程序剩余部分,完成当前周期的剩余动作,包括主用户程序的执行,并在当前扫描的最后,完成从RUN 到 STOP模式的转变。
看门狗复位指令
看门狗复位(WDR)指令允许S7-200CPU的看门狗定时器被重新触发,这样可以在不引起看门狗错误的情况下,增加此扫描所允许的时间。WDR指令见表3-13。
跳转指令
跳转(JMP)指令:把程序的执行跳转到指定的标号,执行跳转后,逻辑堆栈顶总为1;
标号(LBL)指令:标记跳转目的地的位置;
操作数 n:0~255。
JMP指令见表3-14,JMP指令梯形图示例如图 3-16所示。
JMP指令可以在主程序、子程序或者中断服务程序中使用。跳转和与之相应的标号指令必须位于同一程序代码(无论是主程序、子程序还是中断服务程序)。不能从主程序跳到子程序或中断程序,同样也不能从子程序或中断程序中跳出。可以在顺序控制(SCR)程序段中使用JMP指令,但相应的标号指令必须在同一个顺序控制程序段中。
子程序指令
S7-200PLC的指令系统具有简单、方便、灵活的子程序调用功能。与子程序有关的操作有:建立子程序、子程序的调用和返回。
1.建立子程序
建立子程序是通过编程软件来完成的。可用编程软件“编辑”菜单中的“插入”选项,选择“子程序”,以建立或插入一个新的子程序,同时,在指令树窗口可以看到新建的子程序图标,默认的程序名是SBR_N,编号N从O开始按递增顺序生成,也可以在图标上直接更改子程序的程序名,把它变为更能描述该子程序功能的名字。在指令树窗口双击子程序的图标就可进入子程序,并能对它进行编辑。S7-200CPU221、CPU222、CPU 224最大支持64个(0~63)子程序;S7_200CPU 224XP.CPU 226最大支持128个(0~127)子程序。
2.子程序调用
(1)子程序调用(CALL)指令在使能输入有效时,主程序把程序控制权交给子程序。子程序的调用可以带参数,也可以不带参数。它在梯形图中以指令盒的形式编程。CALL指令见表3-15。
(2)子程序条件返回(CRET)指令在使能输入有效时,结束子程序的执行,返回主程序中(此子程序调用的下一条指令)。梯形图中以线圈的形式编程,指令不带参数。
使用说明:
(1)CRET指令多用于子程序的内部,由判断条件决定是否结束子程序调用;RET指令用于子程序的结束。用MicroWIN32编程时,不需要手工输入RET指令,而是由软件自动加在每个子程序结尾。
(2)子程序嵌套如果在子程序的内部又对另一子程序执行调用指令,则这种调用称为子程序的嵌套。子程序的嵌套深度最多为8级。
(3)当一个子程序被调用时,系统自动保存当前的堆栈数据,并把栈顶置为1,堆栈中的其他置为0,子程序占有控制权。子程序执行结束,通过返回指令自动恢复原来的逻辑堆栈值,调用程序又重新取得控制权。
(4)累加器可在调用程序和被调用子程序之间自由传递,所以累加器的值在子程序调用时既不保存也不恢复。
3.带参数的子程序调用
子程序中可以有参变量,带参数的子程序调用扩大了子程序的使用范围,增加了调用的灵活性。子程序的调用过程如果存在数据的传递,则在调用指令中应包含相应的参数。
1)子程序参数
子程序最多可以传递16个参数。参数在子程序的局部变量表中加以定义。参数包含下列信息:变量名、变量类型和数据类型。
(1)变量名变量名最多用8个字符表示,第一个字符不能是数字。
(2)变量类型变量类型是按变量对应数据的传递方向来划分的,可以是传入子程序(IN)、传入/传出子程序(IN/OUT)、传出子程序(OUT)和暂时变量(TEMP)四种类型。四种变量类型的参数在变量表中的位置必须按以下先后顺序:
①IN类型传入子程序参数。所接的参数可以是直接寻址数据(如VBI00)、间接寻址数据(如AC1)、立即数(如16#2344)和数据的地址值(如&VBI06)
②IN/OUT类型:传入/传出子程序参数。调用时将指定参数位置的值传到子程序,返回时从子程序得到的结果值被返回到同一地址。参数可以采用直接和间接寻址,但立即数(如16#1234)和地址值(如&VBl00)不能作为参数。
③OUT类型:传出子程序参数。它将从子程序返回的结果值送到指定的参数位置。输出参数可以采用直接和间接寻址,但不能是立即数或地址编号。
④TEMP类型:暂时变量类型。在子程序内部暂时存储数据,不能用来与主程序传递参数数据。
(3)数据类型局部变量表中还要对数据类型进行声明。数据类型包括:能流,布尔型,字节、字和双字型,整数、双整数型以及实型。
①能流:仅允许对位输入操作,是位逻辑运算的结果。在局部变量表中,布尔能流输入处于所有类型的最前面。
②布尔型:布尔型用于单独的位输入和输出。
③字节、字和双字型:这三种类型分别声明一个1字节、2字节和4字节的无符号输入或输出参数。
④整数、双整数型:这两种类型分别声明一个2字节或4字节的有符号输入或输出参数。
⑤实型:该类型声明一个IEEE标准的32位浮点参数。
2)参数子程序调用的规则
常数参数必须声明数据类型。例如,把值为223344的无符号双字作为参数传递时,必须用DW#223344来指明。如果缺少常数参数的这一描述,常数可能会被当作不同类型使用。
输入或输出参数没有自动数据类型转换功能。例如,局部变量表中声明一个参数为实型,而在调用时使用一个双字,则子程序中的值就是双字。参数在调用时必须按照一定的顺序排列,先是输入参数,然后是输入输出参数,最后是输出参数。
3)变量表使用
按照子程序指令的调用顺序,参数值分配给局部变量存储器,起始地址是L0.0。使用编程软件时,地址分配是自动的。在局部变量表中要加入一个参数,右击要加入的变量类型区可以得到一个选择菜单,选择“插入”,然后选择“下一行”即可。局部变量表使用局部变量存储器。当在局部变量表中加入一个参数时,系统自动给各参数分配局部变量存储空间。参数子程序调用指令格式:CALL子程序,参数 I,参数2,.,参数n.局部变量分配见表3-16,带参数调用子程序示例如图3-18所示。