子程序的编程形式和方法与定义子程序的格式有关。本书仅就常用的一些编程方法简单介绍如下:
(1)子程序的嵌套 一个主程序可以调用子程序,而该子程序又能继续调用另一个子程序,因此各个程序以相互嵌套的方式运行。此时,每个程序都在各自的程序级上运行。
主程序始终在最高的程序级上运行,即0级。而子程序始终在下一个更低级别的程序级上运行。因此,程序级1是第一个子程序级。如图5-1所示为程序级的划分。
1)程序级0:主程序级。
2)程序级1~15:子程序级1~15(SINUMERIK 828D BASIC子程序级为1~11级)。
图5-1 程序级的划分
考虑到如果在中断程序的范围内调用了子程序,为了在最低的程序级上也能执行上述步骤,必须在构建零件程序时加以考虑。一般在编制程序时,零件程序处理程序级可以为12级。
(2)查找子程序的路径 在调用没有指定路径的子程序时,控制系统会按照规定的顺序查找以下目录,见表5-1。
表5-1 查找子程序的路径目录
(3)子程序返回指令M17 返回指令M17或零件程序结束指令M30位于子程序的末尾。它使得程序执行后返回到主程序中、子程序调用指令后的零件程序段上。M17和M30在NC语言中被视为同等的指令。
1)编程格式:
PROC<程序名称>
…
M17/M30
2)使用条件:子程序返回对连续路径运行的影响。如果M17或M30位于单独的零件程序段中,则通道中激活的连续路径运行被中断。
为避免此类中断,应在最后一个运行程序段中写入M17或M30。此外,还必须将以下机床数据设为0:MD20800 $MC_SPF_END_TO_VDI=0(没有M30/M17输出给NC/PLC接口)。
3)编程示例
①M17位于单独程序段中的子程序。
程序代码 注释
N10 G64 F2000 G91 X10 Y10
N20 X10 Z10
N30 M17 ;返回,中断连续路径运行。
②M17位于最后一个运行程序段中的子程序。
程序代码 注释
N10 G64 F2000 G91 X10 Y10 ;返回,不中断连续路径运行。
N20 X10 Z10 M17
(4)子程序返回指令RET 编程指令RET在子程序中可以代替M17。RET必须在一个单独的零件程序段中设定。和M17类似,RET使得程序执行返回到主调程序中、子程序调用指令之后的零件程序段上。如果不希望因为返回而中断G64连续路径运行(G641~G645),则必须使用RET指令。
1)编写格式:
PROC<程序名称>
…
RET(www.xing528.com)
2)使用条件:只能在未定义SAVE属性的子程序中使用RET指令。
3)编程示例
程序代码 注释
主程序
PROC MAIN_PROGRAM ;程序开始
…
N50 SUB_PROG ;调用子程序
N60…
…
N100 M30 ;程序结束
子程序
PROC SUB_PROG
…
N100 RET ;返回到主程序的程序段N60
(5)保存模态G功能(SAVE) 属性“SAVE”用于保存子程序调用前激活的模态G指令,在子程序结束后再次激活。
1)编程格式:
PROC<子程序名称>SAVE
2)指令参数说明:
SAVE:保存子程序调用前激活的模态G功能,并使功能在子程序结束后再次生效。
3)使用条件。如果在连续路径运行生效时调用了含有SAVE属性的子程序,则在使用RET指令的该子程序结束(返回)时,连续路径运行会中断。
4)编程示例。在子程序KONTUR中,模态G指令G91有效(增量尺寸)。在主程序中模态G指令G90有效(绝对尺寸)。通过带SAVE的子程序定义,G90在主程序中的子程序结束后再次生效。
程序代码 注释
子程序
PROC KONTUR(REAL WERT1) SAVE;带参数SAVE的子程序定义
N10 G91… ;模态G指令G91(增量尺寸)
N100 M17 ;子程序结束
主程序
N10 G0 X...Y...G90 ;模态G指令G90(绝对尺寸)
N20…
…
N50 KONTUR(12.4) ;调用子程序
N60 X...Y... ;模态G指令G90通过SAVE再次激活
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。