子程序帮助您对程序进行分块。主程序中使用的指令决定具体子程序的执行状况。当主程序调用子程序并执行时,子程序执行全部指令直至结束。然后,系统将控制返回至调用子程序网络中的主程序。
子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,您可以利用这项优势。通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块,可以更有效地使用PLC,因为所有的程序块可能无须执行每次扫描。
最后,如果子程序仅引用参数和局部内存,则可移动子程序。为了移动子程序,应避免使用任何全局变量/符号(I、Q、M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址)。如果子程序无调用参数(IN、OUT或IN_OUT)或仅在L内存中使用局部变量,您就可以导出子程序并将其导入另一个项目。
欲在程序中使用子程序,必须执行下列三项任务:
?建立子程序
?在子程序局部变量表中定义参数(如果有)
?从适当的POU(从主程序或另一个子程序)调用子程序
当子程序被调用时,整个逻辑堆栈被保存,堆栈顶端被设为一,所有其他堆栈位置被设为零,控制被传送至调用子程序。当该子程序完成时,堆栈恢复为在调用点时保留的数值,控制返回调用例行程序。
子程序和调用例行程序共用累加器。由于子程序的使用,对累加器不执行保存或恢复操作。
用参数调用子程序
子程序可能包含交接的参数。参数在子程序的局部变量表中定义。参数必须有一个符号名(最多为23个字符)、一个变量类型和一个数据类型。可向子程序交接16个参数或从子程序交接16个参数。
局部变量表中的变量类型域定义参数是否交接至子程序(IN)、交接至或交接出子程序(IN_OUT)或交接出子程序(OUT)。下表说明子程序的参数类型。欲增加参数条目,将光标放在您希望增加的类型的变量类型域上(IN、
IN_OUT或OUT)。单极鼠标右键,获得选项菜单。选择"插入"选项,然后选择"下一行"选项。在当前条目的下方会显示所选类型的另一个参数条目。
跳转至标签(JMP)指令对程序中的指定标签(n)执行分支操作。跳转接受时,堆栈顶值始终为逻辑1。标签(LBL)指令标记跳转目的地(n)的位置。您可以在主程序、子程序或中断例行程序中使用"跳转"指令。"跳转"及其对应的"标签"指令必须始终位于相同的代码段中(主程序、子程序或中断例行程序)。您不能从主程序跳转至子程序或中断例行程序中的标签,与此相似,您也不能从子程序或中断例行程序跳转至该子程序或中断例行程序之外的标签。您可以在SCR段中使用"跳转"指令,但对应的"标签"指令必须位于相同的SCR段内。
中断允许(ENI)指令全局性启用所有附加中断事件进程。中断禁止(DISI)指令全局性禁止所有中断事件进程。转换至RUN(运行)模式时,中断开始时被禁止。一旦进入RUN(运行)模式,您可以通过执行全局中断允许指令,启用所有中断进程。执行中断禁止指令会禁止处理中断;但是现用中断事件将继续入队等候