1.3 子程序
原则上主程序和子程序之间并没有区别。零件加工主程序也可作为子程序被调用。可以用子程序编写经常重复进行的加工,比如某一确定的轮廓形状。子程序单独在一个文件中进行编程,在需要时进行调用。
子程序的一种形式就是加工循环,加工循环包含一般通用的加工工序,如螺纹切削,坯料切削加工等等。通过对规定的计算参数赋值就可以实现各种具体的加工。为了方便地选择某一个子程序,必须给子程序取一个程序名。程序名可以自由选择,但必须符合相关规定(与主程序相同),并且建议具有一定含义。
1.3.1 子程序的分类和定义
子程序分类:
标准子程序:不带参数的子程序,可以被主程序和其他子程序调用。
参数子程序:调用参数子程序时,通过传递参数给子程序来实现具体功能。
子程序定义:
标准子程序:和主程序一样。
参数子程序:子程序中开头处必须有PROC,末尾处RET。
示例:
PROC SUN (TYPE1 VAR1, TYPE2 VAR2, ……)
……
RET
1.3.2 子程序调用
在一个程序中(主程序或子程序)可以直接用程序名调用子程序。被调用的子程序必须与主程序在同一目录下。子程序调用要求占用一个独立的程序段。如果要求多次连续地执行某一子程序,则在编程时必须在所调用子程序的程序名后对地址P进行次数编程,最大次数为99次。
示例1:标准子程序的调用,后面“()”可以省略
N10 WELLE7() P3 ;调用子程序WELLE7 3次
或N10 CALL WELLE7() P3 ;调用子程序WELLE7 3次
示例2:参数子程序的调用(假设WELLE8有5个参数)
N10 WELLE8(10, 50, R32, , R45) P5 ;调用子程序WELLE8 5次
或N10 CALL WELLE8(10, 50, R32, , R45) ;调用一次子程序WELLE8
实参可以是常量、变量或R参数,没有赋值的参数以零代之,也就是说第四个参数为零。
注意:
1. 在退出子程序后,主程序中必须重新进行技术定义(G91/G90,G71/G70,DIAMOF/DIAMON等等)。另外,子程序的名称是区分大小写的,后缀名必须是小写iso;
2. 在子程序中执行M02时,程序跳出子程 序,返回到主程序,同时主程序结束。
1.3.3 程序嵌套深度
子程序不仅可以从主程序中调用,也可以从其它子程序中调用,这个过程称为子程序的嵌套,嵌套的深度可以为12级(包括主程序)。
图1.4 程序调用嵌套
1.3.4 子程序参数传递
子程序参数传递分为两种形式,按值传递和按地址传递。按值传递的参数仅作为输入参数,在被调用子程序中参与计算,即使其值发生变化也不反馈回上层程序。而按地址传递的参数作为输入输出参数,在被调用子程序中参与计算后,其值将重新返回至上层程序。为实现参数的按地址传递,只需在被调用子程序的对应参数前加上“VAR”关键字即可。
示例:
PROC SUB1 (……)
DEF REAL PT
DEF REAL M2PIT
……
SUB2 (PT, M2PIT)
……
RET
PROC SUB2 (VAR REAL PT, REAL M2PIT)
……
RET
在子程序“SUB1”中定义了两个参数“PT”和“M2PIT”。在调用子程序“SUB2”时,“PT”为按地址传递,“M2PIT”为按值传递。调用的目的是在“SUB2”中根据“M2PIT”的值对“PT”进行相应修改,并把结果反馈给“SUB1”继续使用。即“SUB2”对“PT”的更改能够传递至“SUB1”。