首页 理论教育 使用指令分块:子程序的作用和限制

使用指令分块:子程序的作用和限制

时间:2023-06-25 理论教育 版权反馈
【摘要】:主程序中使用的指令决定具体子程序的执行状况。子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在子程序完成执行后,控制返回至“调用子程序”之后的指令。每个子程序调用的输入/输出参数最大限制为16。

使用指令分块:子程序的作用和限制

1.子程序的定义

子程序可以帮助用户对程序进行分块。主程序中使用的指令决定具体子程序的执行状况。当主程序调用子程序并执行时,子程序执行全部指令直至结束。然后,系统将控制返回至调用子程序网络中的主程序。

子程序用于为程序分段和分块,使其成为较小的、更易管理的块。在程序中调试和维护时,用户可以利用这项优势。通过使用较小的程序块,对这些区域和整个程序简单地进行调试和排除故障。只在需要时才调用程序块,可以更有效地使用PLC,因为所有的程序块可能无须执行每次扫描。

最后,如果子程序仅引用参数和局部内存,则可移动子程序。为了移动子程序,应避免使用任何全局变量/符号(I、Q、M、SM、AI、AQ、V、T、C、S、AC内存中的绝对地址)。如果子程序无调用参数(IN、OUT或IN_OUT)或仅在L内存中使用局部变量,用户就可以导出子程序并将其导入另一个项目。

2.子程序的建立

欲在程序中使用子程序,必须执行下列三项任务:

(1)建立子程序

(2)在子程序局部变量表中定义参数(如果有)

(3)从适当的POU(从主程序或另一个子程序)调用子程序

当子程序被调用时,整个逻辑堆栈被保存,堆栈顶端被设为1,所有其他堆栈位置被设为0,控制被传送至调用子程序。当该子程序完成时,堆栈恢复为在调用点时保留的数值,控制返回调用子程序。

子程序和调用子程序共用累加器。由于子程序的使用,对累加器不执行保存或恢复操作。

978-7-111-45066-5-Chapter02-55.jpg

图2-47 CALL语句(www.xing528.com)

978-7-111-45066-5-Chapter02-56.jpg

图2-48 子程序的调用

3.子程序CALL指令

西门子PLC802为了解决主程序语句过多的问题,通常可以采用“调用子程序(CALL)指令”将控制转换给子程序(SBR_n)。用户可以使用带参数或不带参数的“调用子程序”指令。图2-47所示为CALL语句。

在子程序完成执行后,控制返回至“调用子程序”之后的指令。每个子程序调用的输入/输出参数最大限制为16。如果下载的程序超过此限制,则会返回错误信息。用户可以为子程序指定一个符号名,例如USR_NAME,该符号名会出现在指令树的“子程序”文件夹中。

将参数值指定给子程序中的局部内存时应遵循以下几点:

1)参数值指定给局部内存的顺序由CALL指定,参数从Lx.0开始;

2)1~8个连续位参数值被指定给从Lx.0开始持续至Lx.7的单字节;

3)字节、字和双字数值被指定给局部内存,位于字节边界(LBx、LWx或LDx)位置;

4)在带参数的“调用子程序”指令中,参数必须与子程序局部变量表中定义的变量完全匹配。

5)参数顺序必须以输入参数开始,其次是输入/输出参数,然后是输出参数。

图2-48所示为子程序的调用,其中箭头所指语句不用编程,由PLC802编程软件自动处理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈