陕西西门子S7-200SMARTPLC模块代理经销商
西门子S7-200 PLC的子程序指令
S7-200系列PLC的指令系统具有简单、方便和灵活的子程序调用功能。与子程序有关的操作有子程序建立、子程序调用和返回。
1.子程序建立指令(SBR)
建立子程序是通过编程软件来完成的。可用编程软件“编辑”菜单中的“插入”选项,选择“子程序”,以建立或插入一个新的子程序,同时,在指令树窗口可以看到新建的子程序图标,默认的程序名为SBR_N,编号N从0开始按递增顺序生成,也可以在图标上直接更改子程序的程序名,把它变为更能描述该子程序功能的名字。在指令树窗口双击子程序的图标就可以进入子程序,并对它进行编辑。表7.13所示为子程序调用指令格式。
表7.13 子程序调用指令格式
2.子程序调用
(1)子程序调用指令( CALL)
在使能输入有效时,主程序把程序控制权交给子程序。子程序的调用可以带参数。它在梯形图中以指令盒的形式编程。指令格式参见表7.13。
(2)子程序条件返回指令(CRET)
在使能输入有效时,结束子程序的执行,返回主程序中(此子程序调用的下一条指令)。梯形图中以线圈的形式编程,指令不带参数,指令格式参见表7.13。
图7.20所示为子程序调用指令的应用举例。
图7.21所示为子程序返回指令的应用举例。
图7.20 子程序调用指令的应用
图7.21 子程序返回指令的应用
必须指出的是,STEP7-Micro/Win32没有子程序无条件返回指令,但它会自动加一无条件返回指令到每一个子程序的结尾。
当子程序结束时,程序执行应返回原调用指令(CALL)的下一条指令。子程序可以嵌套,嵌套层数可达8层。不禁止自调用(子程序调用自己),但使用时应特别小心。
当一个子程序被调用时,整个逻辑堆栈另存别处,然后栈顶置1,其余栈位置0,程序执行转到被调用的子程序。子程序执行完毕,逻辑堆栈恢复原调用点的值,程序执行返回到主调用程序。因为调用子程序后,栈顶总为1,所以跟随SBR指令后的输出线圈或功能框可直接接到梯形图左边母线上,在指令表中,跟在SBR后的Load指令可省略。
累加器值可在主、子程序间自由传递,调用子程序时无需对累加器作存储及重装操作。
FOR指令和NEXT指令必须成对使用,FOR标记循环的开始,NEXT标记循环的结束。FOR标记在FOR和NEXT标记之间执行指令,必须给FOR指令指定当前循环计数(INDX)、初值(INIT)和终值(FINAL)。
NEXT指令标记循环的结束,并且置栈顶值为1。
例如,给定初值(INIT)为1,终值(FINAL)为10,那么随着当前计数值(INDX)从1增加到10,FOR与NEXT之间的指令被执行10次。
如果初值大于终值,那么循环体不被执行。每执行一次循环体,当前计数值增加1,并且将其结果同终值作比较,如果大于终值,那么终止循环。
WDR称为看门狗复位指令,也称为警戒时钟刷新指令。它可以把警戒时钟刷新,即延长扫描周期,从而有效地避免看门狗超时错误。WDR指令在梯形图中以线圈形式编程,无操作数。
表7.12所示为看门狗指令形式。
图7.18所示为WDR指令的应用举例。
图7.18 WDR指令的应用
表7.12 看门狗指令形式
使用警戒时钟刷新指令(WDR)时应当非常小心,若在FOR、NEXT循环中写入WDR指令,则可能使一次扫描的时间拖得很长。而在一次扫描结束之前,下面的处理是被禁止的:
1)通信(自由口通信除外)。
2) I/O刷新(直接I/O除外)。
3)强制刷新。
4)特殊标志位刷新(SM0,SM5~SM29均不可刷新)。
5)运行时间诊断。
6)扫描时间超过25s时,使10ms、100ms定时器不能正确计时。
7)不处理中断程序中的STOP指令。
表7.11所示为停止指令形式。
表7.11 停止指令形式
停止指令( STOP)有效时,可以使主机CPU的工作方式由RUN切换到STOP,从而立即中止用户程序的执行。STOP指令在梯形图中以线圈形式编程。
STOP指令可以用在主程序、子程序和中断服务程序中。如果在中断服务程序中执行STOP指令,则中断处理立即中止,并忽略所有挂起的中断。继续扫描程序的剩余部分,在本次扫描周期结束后,完成将主机从RUN到STOP的切换。
STOP:停止指令,执行条件成立(左侧逻辑值为1)时停止执行用户程序,令CPU状态由RUN转到STOP。
操作数:无。
STOP指令和END指令通常在程序中用来对突发紧急事件进行处理,以避免实际生产中的重大损失。
图7.16所示为END指令的应用举例。
图7.17所示为STOP指令的应用举例。
图7.16 END指令的应用
图7.17 STOP指令的应用
陕西西门子S7-200SMARTPLC模块代理经销商