您现在的位置是:首页 > PLC技术 > PLC技术

S7-200 PLC的子程序调用指令

来源:艾特贸易2017-06-04

简介S7-200 程序结构中有主程序 (OB1) 、子程序 (SBRn) 和中断程序 (INTn) 三类程序。实际应用中把可能被反复使用的程序编成一个独立的程序块,存放在程序的某一个区域中,程序的模块化是结

    S7-200程序结构中有主程序(OB1)、子程序(SBRn)和中断程序(INTn)三类程序。实际应用中把可能被反复使用的程序编成一个独立的程序块,存放在程序的某一个区域中,程序的模块化是结构化程序设计方法的核心思想,通过程序块的组合来完成一个大的复杂的应用程序的编写。执行程序时可以随时反复调用这些程序块,避免重复输入,这些程序块可以带一些参数,也可以不带参数。这类程序块被称为子程序,它具有特定功能,并且可以多次重复使用。    子程序由子程序标号开始,到子程序返回指令结束,S7-200STEP 7-Micro/WIN32编程软件为每个子程序自动加入子程序标号和子程序返回指令,在编程时,子程序开头不用编程者另加子程序标号,子程序末尾也不需另加返回指令。    子程序的优点在于它可以用于对一个大的程序进行分段及分块,使其成为较小的更容易管理的程序块,程序调试、检查、维护时可充分利用这项优势;通过使用较小的子程序块,对一些区域及整个程序检查及故障排除变得更加简单;子程序只有在需要时才被调用、执行,有利于有效使用PLC、充分利用CPU以缩短程序扫描时间。    (1)建立子程序。系统默认SBR_0为子程序,可采用下列方法中的一种方法建立子程序。    1)在“编辑”菜单中,选择“插入”→“子程序”命令。    2)在“指令树”中,右击“程序块”图标,并从弹出菜单选择“插入”→“子程序”命令。    3)在“程序编辑器”窗口中右击,并从弹出菜单选择“插入”→“子程序”命令。    只要插入了子程序,程序编辑器底部就会出现一个新标签( SBR_n),标志新的子程序,此时可对新的子程序编程。    (2)子程序调用与返回指令。子程序调用指令的梯形图由调用助记符SBR、使能端EN和标号n构成;返回指令由返回助记符RET构成。子程序调用指令的语句表由操作码CALL和子程序标号nn063,随着子程序个数的增加自动生成)构成,即CALL SBR_n;返回指令由返回条件、返回操作码CRET构成,如图3-104所示。
子程序调用与返回指令
    3-104    子程序调用与返回指令    主程序用CALL来调用一个子程序,调用后程序控制权就交给了子程序SBR_n,程序扫描将转到子程序人口处执行,子程序结束后,必须返回主程序。每个子程序必须以无条件返回指令RET作为结束,STEP 7-Micro/WIN32为每个子程序自动加入了无条件返回指令RET;有条件子程序返回指令CRET,在使能端有效时,终止子程序SBR_n。子程序执行完毕,控制程序回到主程序中子程序调用指令CALL的下一条指令处。    子程序被调用时,系统会保存当前的逻辑堆栈,保存后再置栈顶值为1,堆栈的其他值为0,把控制权交给被调用的子程序;子程序执行完毕,通过返回指令自动恢复逻辑堆栈原调用点的值,把控制权交还给调用程序。主程序和子程序共用累加器,调用子程序时无须对累加器作存储及重装操作。在中断程序、子程序中也可调用子程序,但在子程序中不能调用自己,子程序的嵌套深度为8层。    (3)带参数的子程序(可移动子程序)调用。子程序调用可以带参数也可以不带参数,如带参数则可附上调用时所需的参数;子程序返回有条件和无条件之分。图3-105所示为带参数调用的子程序指令。
带参数调用的子程序指令
    3-105    带参数调用的子程序指令    子程序可能有要传递的参数(变量和数据),这时可以在子程序调用指令中包含相应参数,它可以在子程序与调用程序之间传送。为了移动子程序,应避免使用任何全局变量/符号(IQMSMAIAQVTCSAC内存中的绝对地址),这样可以导出子程序并将其导入另一个项目。子程序中的参数由地址符号名、参数名称(最多8个字符)、变量类型和数据类型来描述。子程序最多可传递16个参数,传递的参数在子程序局部变量表中定义,见表3-16    3-16    STEP 7-Micro/WIN32局部变量表
STEP 7-Micro/WIN32局部变量表
    局部变量表使用局部变量存储器,当在局部变量表中加入一个参数时,系统自动给该参数分配局部变量存储空间。子程序传递的参数放在子程序的局部存储器L中,局部变量表最左列是系统指定的每个被传递参数的局部存储器地址。当调用子程序时,输入参数值被复制到子程序的局部变量存储器;当执行完子程序时,从局部变量存储器区复制输出参数值到指定的输出参数地址。在子程序中,局部变量存储器的参数值分配如下:按照子程序指令的调用顺序,将参数值分配给局部变量存储器,起始地址是L0.018连续位参数值分配一个字节,从Lx.0Lx.7;字节、字和双字值按照字节顺序分配在局部变量存储器中( LBxLWxLDx)。系统保留局部变量存储器L内存的4个字节(LB60LB63),用于调用参数。    子程序编程的步骤是:①建立子程序SBR_n;②在子程序SBR_n中编写应用程序;③在主程序或其他子程序或中断程序中编写调用子程序SBR_n指令。