子程序指令 设计者:苑国伟 学校:兵团工贸学校
子程序指令 S7-200PLC的控制程序由主程序、子程序和中断程序组成。软件窗口里为每POU(Program Organizational Unit,程序组织单元)提供了一个独立的页。主程序总是第1页,后面是子程序和中断程序。 各个程序在编辑器窗口里被分开,编译时,在程序结束的地方自动加入无条件结束指令END、MEND、RET或RETI。如果在程序里加了这些指令,编译时反而会出错。
学习目标: 1、理解所有子程序指令的功能。 2、掌握所有子程序指令的表示形式和使用方法。
指令功能: 子程序常用于需要多次反复执行相同任务的地方,只需要写一次子程序,别的程序在需要子程序的时候就可以调用它,而无需重写该程序。子程序的调用是有条件的,未调用它时不会执行子程序的指令,因此使用子程序可以减少扫描时间。使用子程序还可以将程序分成容易管理的小块,使程序结构简单清晰,易于查错和维护。 如果子程序中只引用参数和局部变量,可以将子程序移植到其他项目。为了移植子程序,应避免使用全局符号和变量,如I、Q、M、SM、AI、AQ、V、T、C、S、AC等存储器中的绝对地址。
建立子程序方法 建立子程序最简单的方法是在程序编辑器中的空白处单击鼠标右键,再选择“插入”→“子程序”命令即可,如图所示。
也可以采用选择菜单栏“编辑”→“插入”→“子程序”命令,或者从“指令树”,用鼠标右键点击“程序块”图标,并从弹出的菜单中选择“插入”→“子程序”建立子程序。程序编辑器将从原来的POU显示进入新的子程序,程序编辑器底部将出现标志新的子程序的新标签,在程序编辑器窗口中可以对新的子程序编程。可以使用该子程序的局部变量表定义参数,各子程序最多可以定义16个IN、OUT参数。用右键双击指令树中的子程序或中断程序的图标,在弹出的窗口中选择“重新命名”,可修改它们的名称。
子程序指令 子程序指令包括子程序调用指令CALL和子程序返回指令RET,其梯形图及语句表见表1所示。
子程序的调用 可以在主程序、另一子程序或中断程序中调用子程序,但是不能在子程序中调用自己(即不允许递归调用)。调用子程序时将执行子程序的全部指令,直至子程序结束,然后返回调用程序中子程序调用指令的下一条指令之处。 在梯形图程序中插入子程序调用指令时,首先打开程序编辑器视窗中需要调用子程序的POU,找到需要调用子程序的地方。在指令树的最下面用左键打开子程序文件夹,将需要调用的子程序图标从指令树拖到程序编辑器中的正确位置。或将光标置子程序编辑器视窗中,然后双击指令树中的调用指令。
应为子程序调用指令的各参数指定有效的操作数,有效操作数为存储器地址、常量、全局符号和调用指令所在的POU中的局部变量(不是被调用于程序中的局部变量)。 如果在使用子程序调用指令后修改该子程序中的局部变量表,调用指令将变为无效。必须删除无效调用,并用能反映正确参数的新的调用指令代替。 在语句表程序中调用子程序时使用调用指令“SBR_n”。在调用子程序时,CPU保存整个逻辑堆栈后,将栈顶值置为l,堆栈中的其他值清0,控制转移至被调用的子程序。子程序执行完成时,用调用时保存的数据恢复堆栈,控制返回调用程序。子程序和调用程序共用累加器,不会因使用子程序自动保存或恢复累加器。
子程序的嵌套调用 程序中最多可创建64个子程序。子程序可以嵌套调用(在子程序中调用别的子程序),最大嵌套深度为80。
程序的有条件返回 在程序中,用触点电路控制RET(从子程序有条件返回)指令,触点电路接通时条件满足,子程序被终止。编程软件自动地为主程序和子程序添加无条件返回指令。 类似地,可以在主程序中用触点电路驱动END(有条件结束)指令。
子程序中的定时器 停止调用子程序时,在子程序内的线圈的ON/OFF状态保持不变。如果在停止调用时子程序中的定时器正在计时,100ms定时器将停止计时,当前值保持不变,重新调用时继续计时;但是1ms定时器和10ms定时器将继续定时,定时时间到,它们的定时器位变为1状态,并且可以在子程序之外起作用。
应用案例: 设计子程序。当I0.0闭合时,执行手动程序;I0.0断开时,执行自动程序。
a.主程序
子程序SBR_0
子程序SBR_1