(1)宏程序调用方法
(2)宏程序调用和子程序调用之间的差别 宏程序调用(G65)不同于子程序调用(G98),如下所述:
1)G65可以指定自变量(数据传送到宏程序),M98没有该功能。
2)当M98程序段包含另一个NC指令(例如:G01 X100.0 M98 Pp)时,在指令执行之后调用子程序。相反,G65无条件地调用宏程序。
3)当M98程序段包含另一个NC指令(例如:G01 X100.0 M98 Pp)时,在单程序段方式中,机床停止。相反,G65机床不停止。
4)用G65,改变局部变量的级别;用M98,不改变局部变量的级别。
1.非模态代码调用(G65)
当指定G65时,以地址P指定的用户宏程序被调用。数据(自变量)能传递到用户宏程序体中。
指令格式:G65 Pp L<自变量表>;
其中:p为要调用的程序号,为重复的次数(默认值为1),自变量为传递到宏程序的数据。
例如:下列程序中#1=1.0,#2=2.0。
(1)调用
1)在G65之后,用地址P指定用户宏程序的程序号。
2)当要求重复时,在地址L后指定从1~9999的重复次数。省略L值时,认为L等于1。
3)使用自变量指定,其值被赋到相应的局部变量。
(2)自变量指定 可用两种形式的自变量指定。自变量指定Ⅰ使用除了G、L、O、N和P之外的字母,每个字母指定一次。自变量指定Ⅱ使用A、B、C和Ii、Ji、Ki(i为1~10)。根据使用的字母,自动决定自变量指定的类型。
1)自变量指定Ⅰ
a)地址G、L、N、O和P不能在自变量中使用。
b)不需要指定的地址可以省略,对应于省略地址的局部变量为空。
c)地址不需要按字母顺序指定,但应符合字母地址的格式。I、J和K需要按字母顺序指定。
举例:B__A__D__…J__K__正确
B__A__D__…J__I__不正确
2)自变量指定Ⅱ:使用A、B和C各1次,I、J、K各10次。自变量指定Ⅱ用于传递诸如三维坐标值。I、J、K的下标用于确定自变量指定的顺序,在实际编程中不写。
(3)格式 任何自变量前必须指定G65。
(4)自变量指定Ⅰ、Ⅱ混合使用CNC内部自动识别自变量Ⅰ和自变量Ⅱ。如果自变量指定Ⅰ和自变量指定Ⅱ混合使用,后指定的自变量类型有效。举例如下:
本例中,I4.0和D5.0自变量都分配给变量#7,后者D5.0有效。
(5)小数点的位置 不带小数点的自变量,其数据单位为各地址的最小设定单位。传递不带小数点的自变量,其值会根据机床实际的系统配置变化。在宏程序调用中,使用小数点可使程序兼容性好。
(6)调用嵌套 调用可以嵌套4级,包括非模态代码调用(G65)和模态代码调用(G66),但不包括子程序调用(M98)。
(7)局部变量的级别
1)局部变量嵌套从0到4级。
2)主程序是0级。
图1-8 圆周螺纹孔
3)宏程序每调用1次(用G65或G66),局部变量级别加1。前1级的局部变量值保存在CNC中。
4)当宏程序执行M99时,控制返回到调用程序。此时,局部变量级别减1,并恢复宏程序调用时存储的局部变量值。
(8)程序示例 编制一个宏程序加工轮圆上的圆周螺纹孔(图1-8)。圆周上的半径为I,起始角为A,间隔为B,钻孔数为H,圆的中心是(X,Y)。指令可以用绝对值或增量值指定。顺时针方向钻孔时,B应指定负值。
1)调用格式。
G65 P9100 Xx Yy Zz Rr Ff Ii Aa Bb Hh;
X:圆心的X坐标(绝对值或增量值指定)(#24)
Y:圆心的Y坐标(绝对值或增量值指定)(#25)
Z:孔深(#26)
R:趋近点坐标(#18)
F:切削进给速度(#9)
I:圆半径(#4)
A:第一孔的角度(#1)
B:增量角(#2)
H:孔数(#11)
2)宏程序调用程序。
O0002;主程序名
G90 G92 X0 Y0 Z100.0;
G65 P9100 X100.0 Y50.0 R30.0 Z-50.0 F500 I100.0 A0 B45.0 H5;
M30;
变量的含义:
#3:储存03组的G代码
#5:下个孔的X坐标
#6:下个孔的Y坐标
3)宏程序(被调用的程序)。
O9100;主程序名
#3=#4003;储存03组G代码
G81 Z#26 R#18 F#9 K0;钻孔循环(K0也可以换成L0)
IF[#3 EQ 90] GOTO 1;在G90方式下转移到N1
#24=#5001+#24;计算圆心的X坐标
#25=#5002+#25;计算圆心的Y坐标
N1 WHILE[#11 GT 0]DO 1;直到剩余孔数为0
#5=#24+#4*COS[#1];计算X轴上的孔位
#6=#25+#4*SIN[#1];计算Y轴上的孔位
G90 X#5 Y#6;移动到目标位置之后执行钻孔
#1=#1+#2;更新角度
#11=#11-1;孔数减1
END 1;
G#3 G80;返回原始状态的G代码
M99;
2.模态代码调用(G66)
一旦发出G66,则指定为模态代码调用,即在指定轴移动的程序段后调用宏程序。G67为取消模态代码调用。
指令格式:G66 Pp L<自变量表>;
其中:p为要调用的程序号,为重复的次数(默认值为1),自变量为传递到宏程序的数据。
(1)调用
图1-9 G81固定循环
1)在G66之后,用地址P指定模态代码调用的程序号。
2)当要求重复时,在地址L后指定从1~9999的重复次数。
3)与非模态代码调用(G65)相同,自变量指定的数据传递到宏程序体中。
(2)取消 指定G67代码后,其后面的程序段不再执行模态宏程序调用。
(3)调用嵌套 调用可以嵌套4级,包括非模态代码调用(G65)和模态代码调用(G66),但不包括子程序调用(M98)。
(4)模态代码调用嵌套 在模态代码调用期间,指定另一个G66代码,可以嵌套模态代码调用。
注意:
1)在G66程序段中,不能调用宏程序。
2)G66必须在自变量之前指定。
3)在只有诸如辅助功能,但无移动指令的程序段中不能调用宏程序。
4)局部变量(自变量)只能在G66程序段中指定。每次执行模态代码调用时,不再设定局部变量。
(5)程序示例 用宏程序编制G81固定循环的操作(图1-9)。加工程序使用模态代码调用,为了简化程序,使用绝对值指定全部的钻孔数据。
固定循环是由下面的基本动作组成的:
第1步:沿X轴和Y轴定位;
第2步:快速移动到R点;
第3步:切削进给到Z点;
第4步:快速退回到R点或I点。
1)调用格式。
G65 P9100 Xx Yy Zz Rr Ff L1;
X:孔的X坐标(由绝对值指定)(#24)
Y:孔的Y坐标(由绝对值指定)(#25)
Z:Z点坐标(由绝对值指定)(#26)
R:R点坐标(由绝对值指定)(#18)
F:切削进给速度(#9)
L:重复次数(www.xing528.com)
2)宏程序调用程序。
O0001;
G28 G91 X0 Y0 Z0;
G92 X0 Y0 Z50.0;
G00 G90 X100.0 Y50.0;
G66 P9100 Z-20.0 R5.0 F500;
G90 X20.0 Y20.0;
X50.0;
Y50.0;
X70.0 Y80.0;
G67;
M30;
3)宏程序(被调用的程序)。
O9100;
#1=#4001;储存G00/G01
#2=#4003;储存G90/G91
#3=#4109;储存切削进给速度
#5=#5003;储存钻孔开始的Z坐标
G00 G90 Z#18;定位在R点
G01 Z#26 F#9;切削进给到Z点
IF [#4010 EQ 98] GOTO 1;返回到I点
G00 Z#18;定位在R点
GOTO2;
N1 G00 Z5;定位在I点
N2 G#1 G#3 F#4;恢复模态信息
M99;
3.用G代码调用宏程序
在参数中设置调用宏程序的G代码,方法与非模态代码调用(G65)相同。
说明:在参数(No.6050~No.6059)中设置调用宏程序(O9010~O9019)的G代码号(从1~9999),调用用户宏程序的方法与G65相同。例如设置参数,由G81调用宏程序O9010,不用修改加工程序就可以调用由用户宏程序编制的加工循环。
(1)参数号和程序号之间的对应关系
(2)重复 与非模态代码调用一样,地址L中指定从1~9999的重复次数。
(3)自变量指定 与非模态代码调用一样,可以使用两种自变量指定类型:自变量指定Ⅰ和自变量指定Ⅱ。根据使用的地址自动决定自变量的指定类型。
(4)使用G代码的宏调用嵌套 在G代码调用的程序中,不能用G代码调用宏程序,这种程序中的G代码被处理为普通G代码。在用M或T代码调用的子程序中,不能用G代码调用宏程序。这种程序中的G代码也处理为普通G代码。
4.用M代码调用宏程序
在参数中设置调用宏程序的M代码,方法与非模态代码调用(G65)相同。
说明:在参数(No.6080~No.6089)中设置调用用户宏程序(O9020~O9029)的M代码(从1~99999999)。调用宏程序的方法与G65相同。
(1)参数号与程序号之间的对应关系
(2)重复 与非模态代码调用一样,地址L中指定从1~9999的重复次数。
(3)自变量指定 与非模态代码调用一样,可以使用两种自变量指定类型:自变量指定Ⅰ和自变量指定Ⅱ。根据使用的地址自动决定自变量的指定类型。
(4)注意
1)调用宏程序的M代码必须在程序段的开头指定。
2)用G代码调用的宏程序,或用M、T代码调用的子程序中,不能用M代码调用宏程序。这种宏程序或子程序中的M代码被处理为普通M代码。
5.用M代码调用子程序
在参数中设置调用子程序(宏程序)的M代码号,按与子程序调用(M98)相同的方法调用宏程序。
说明:在参数(No.6071~No.6079)中设置调用子程序的M代码(从1~99999999),相应的用户宏程序(O9001~O9009)可按与M98同样的方法调用。
(1)参数号与程序号之间的对应关系
(2)重复 与非模态代码调用一样,地址L中指定从1~9999的重复次数。
(3)自变量指定 不允许指定自变量。
(4)M代码 在宏程序中调用的M代码被处理为普通M代码。
注意:用G代码调用的宏程序,或用M、T代码调用的子程序中,不能使用M代码调用子程序。这种宏程序或程序中的M代码被处理为普通M代码。
6.用T代码调用子程序
通过设定参数,可使用T代码调用子程序(宏程序),每当在加工程序中指定T代码时,即调用宏程序。
设置参数No.6001的5位TCS=1,当在加工程序中指定T代码时,可以调用宏程序O9000。在加工程序中,指定的T代码赋值到公共变量#149。
注意:用G代码调用的宏程序中,或用M、T代码调用的程序中,不能用T代码调用子程序。这种宏程序或程序中的T代码被处理为普通T代码。
7.示例程序
使用M代码调用子程序,实现测量每把刀具的累积使用时间。
(1)条件
1)测量T01~T05各把刀具的累积使用时间。刀号大于T05的刀具不进行测量。
2)下面的变量用于储存刀号和测量的时间。
3)当指定M03时,开始计算使用时间;当指定M05时,停止计算。在循环启动灯亮期间,用系统变量#3002测量该时间。进给暂停和单段停止时间,不计算时间,但要计算换刀和交换工作台的时间。
(2)运行检查
1)参数设置:参数No.6071中设置03,参数No.6072中设置05。
2)变量值设置:变量#501~#505中设置0。
3)调用宏程序的程序。
O0001;
T01 M06;
M03;
︙
M05;改变#501
T02 M06;
M03;
︙
M05;改变#502
T03 M06;
M03;
︙
M05;改变#503
T04 M06;
M03;
︙
M05;改变#504
T05 M06;
M03;
︙
M05;改变#505
M30;
4)宏程序(被调用的程序)。
O9001(M03);启动计算的宏程序
M01;
IF[#4120 EQ 0] GOTO9;没有指定刀具
IF[#4120 GT 5] GOTO9;超出刀号范围
#3002=0;计时器清0
N9 M03;正向旋转主轴
M99;
O9002(M05);结束计算的宏程序
M01;
IF[#4120 EQ 0] GOTO9;没有指定刀具
IF[#4120 GT 5] GOTO9;超出刀号范围
#[500+#4120]=#3002+#[500+#4120];计算累积时间
N9 M05;停止主轴
M99;
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。