创建一个宏指令,它自开始角度A沿半径为I的一个圆的圆周上每隔角度B钻H个孔。
如图5-5所示,圆的中心位置是(X,Y),可在绝对方式或增量方式下指定指令。另外,为了沿顺时针方向钻孔,为B指定一个负值。
1.调用格式
G65 P9100 X_Y_Z_R_F_I_A_B_H_;
#1=A,钻孔开始角度。
#2=B,增量角度(当负值被指定时,按顺时针方向旋转)。
#4=I,圆半径。
#9=F,切削进给速度。
#11=H,孔数目。
图5-5 圆周孔群加工
#18=R,接近点的坐标。
#24=X,圆心的X坐标(绝对或增量指令)。
#25=Y,圆心的Y坐标(绝对或增量指令)。
#26=Z,孔深度。
2.调用宏指令的程序。
O0002;
G90 G54 G00 X0 Y0;
G43 H08 Z100.M08;
M03 S800;
G65 P9100 X100.Y50.R2.Z-30.F200 I100.A0 B45.H5;
M30;
3.宏指令(被调用的程序)
O9100;
N1#3=#4003; 存储03组的G代码
N2 G81 Z#26 R#18 F#9 K0; 钻孔循环
N3 IF[#3 EQ 90]GOTO 6; 在G90方式下转移到N6
N4#24=#24+#5001; 计算G91方式下孔心X轴绝对坐标值
N5#25=#25+#5002; 计算G91方式下孔心Y轴绝对坐标值
N6 WHILE[#11 GT 0]DO 1; 直到剩余孔的数目为0
N7#5=#24+#4∗COS[#1]; 计算X轴的钻孔位置
N8#6=#25+#4∗SIN[#1]; 计算Y轴的钻孔位置
N9 G90 X#5 Y#6; 移动到孔上方后钻孔
N10#1=#1+#2; 更新角度
N11#11=#11-1; 每次减少孔的数目
N12 END 1; 结束循环体1
N13 G#3 G80; 释放03组原来的G90/G91模态信息
N14 M99;
这是一个非常经典的宏程序,在FANUC Series 0i-MD车床系统/加工中心系统通用用户手册B-64304CM/01、FANUC 0i-MC操作说明书B-64124CM/01等多本说明书里都有介绍,它被用来加工直角坐标系下共圆、如参数描述的多孔位的加工,它实现了用户宏指令和机床已有的G81固定循环指令很好地结合。为了便于阅读,略作修改。
4.注释
N1,存储了当前的G90/G91代码;N2,存储了G81循环的Z、R、F信息,但未钻孔;N3,如果是G90方式,就转移到N6程序段继续执行(言外之意,如果不是G90方式,就顺序执行,即执行N4);N4,(在G91方式下)孔心所共圆的圆心的X轴坐标为原X轴坐标位置与工件坐标系X轴程序段终点位置的和,即在G54坐标系中的绝对位置;N5,(在G91方式下)孔心所共圆的圆心的Y轴坐标为原Y轴坐标位置与工件坐标系Y轴程序段终点位置的和,即在G54坐标系中的绝对位置。
N4和N5表明,即使主程序编写如下也能无误地加工:
此时,计算得出的孔心所共圆的圆心的X坐标值为(20.0+100.0),Y坐标值为(30.0+50.0),而如果没有N3~N5,指定G91方式就会钻错位置。
N6,直到剩余孔数>0,才结束循环1,孔总数为5,每次孔数递减1个,即剩余孔数依次为5、4、3、2、1,如果这里的GT改为GE,就会多钻1个孔。如果程序为“WHILE[#11 GE 1]DO 1;”,会钻5个孔。
这个经典的钻孔宏程序有多个其他版本。
①宏程序中将用到以下变量:
#1:第1个孔的起始角度A,在主程序中用对应的文字变量A赋值
#3:孔加工固定循环中R点平面值,在主程序中用对应的文字变量C赋值。
#9:孔加工的进给量F,在主程序中用对应的文字变量F赋值。
#11:要加工的孔数H,在主程序中用对应的文字变量H赋值。
#18:被加工孔群所共圆的半径值R,在主程序中用对应的文字变量R赋值。
#26:孔深坐标值Z,在主程序中用对应的文字变量Z赋值。
#30:基准点,即被加工孔群所共圆圆心X坐标值X0。
#31:基准点,即被加工孔群所共圆圆心Y坐标值Y0。
#32:当前加工的孔的序号i。
#33:当前加工的第i孔在孔群所共圆心上所对应的角度。
#100:已加工的孔的数量。
#101:当前加工的孔的X坐标值,初始值设为孔群所共圆心的X坐标值X0。
#102:当前加工的孔的Y坐标值,初始值设为孔群所共圆心的Y坐标值Y0。
调用宏指令的程序:
O0009;
G90 G54 G00 X0 Y0;
G43 H08 Z100.M08;
M03 S800;
G65 P8000 X100.Y50.A0 C2.F200 H5 R100.Z-30.;
M30;
用户宏程序编写如下:
O8000;
#30=#101; 基准点保存(www.xing528.com)
#31=#102; 基准点保存
#32=1; 计数器置1
WHILE[#32 LE ABS[#11]]DO 1; 进入孔加工循环体
#33=#1+360.0∗[#32-1]/#11; 计算第i孔的角度
#101=#30+#18∗COS[#33]; 计算第i孔的X坐标值
#102=#31+#18∗SIN[#33]; 计算第i孔的Y坐标值
G90 G81 G98 X#101 Y#102 Z#26 R#3 F#9; 钻削第i孔
#32=#32+1; 计数器对孔序号i计数累加
#100=#100+1; 计算已加工孔数
END 1; 孔加工循环体结束
#101=#30; 返回X坐标初值X0
#102=#31; 返回Y坐标初值Y0
M99; 宏程序结束
分析:这个宏程序的通用性差一些,原因如下:
a.这里的第1个孔孔心与第1轴正方向的夹角α,和第1个到第n个孔间每相邻两个孔心间的所夹的圆心角β是相等的,如果不相等,是不能用这个程序的,比如当α=60°,β=40°时。
b.不适合在G91方式下运用。
②调用宏指令的程序:
O0002;
G90 G54 G00 X0 Y0;
G43 H08 Z100.M08;
M03 S800;
G65 P0089 X100.Y50.R2.Z-30.F200 I100.A0 B45.H5;
M30;
各变量的含义:
#1=A:第1个孔孔心与第1轴正方向的夹角α。
#2=B:第1个到第n个孔间,每相邻两个孔心间的所夹的圆心角β。
#4=I:孔心所共圆的半径。
#9=F:切削进给速度。
#11=H:孔数。
#18=R:固定循环中R点平面的坐标,绝对或相对值。
#24=X:孔心所共圆的圆心X坐标。
#25=Y:孔心所共圆的圆心Y坐标。
#26=Z:孔深坐标,绝对或相对值。
宏指令(被调用的程序):
O0089;宏程序
#3=1;孔序号计数器置1(即从第1个孔开始加工)
WHILE[#3 LE#11]DO 1; 如果孔序号#3≤孔数#11,执行循环体1
#5=#1+[#3-1]∗#2; 第#3个孔中心所对应的角度
#6=#24+#4∗COS[#5]; 计算第#3个孔中心的X坐标值
#7=#25+#4∗SIN[#5]; 计算第#3个孔中心的Y坐标值
G98 G81 X#6 Y#7 Z#26 R#18 F#9; 以G81方式加工第#3个孔
#3=#3+1; 孔序号更新,递增1
END 1; 循环1结束
G80; 取消固定循环
M99; 宏程序结束,返回主程序
分析:这个程序对孔序号计数器和每个孔心所对应角度的理解直白明了,但是,其缺点也很明显,不适合在G91方式下运行。如果能把这种编程方法和说明书上的方法相互结合,使宏程序和机床原有的钻孔循环结合,编写简单,应用起来更加得心应手。程序如下:
O1012;
G90 G54 G00 X0 Y0;
G43 H08 Z100.M08;
M03 S800;
G65 P7100 X100.Y50.R2.Z-30.F200 I100.A0 B45.H5;
M30;
宏指令(被调用的程序):
O7100;
N1#8=#4003; 存储03组的G代码
N2 G81 Z#26 R#18 F#9 K0; 钻孔循环
N3 IF[#8 EQ 90]GOTO 6; 在G90方式下转移到N6
N4#24=#24+#5001; 计算G91方式下孔心X轴绝对坐标值
N5#25=#25+#5002; 计算G91方式下孔心Y轴绝对坐标值
N6#3=1; 孔序号计数器置1(即从第1个孔开始加工)
N7 WHILE[#3 LE#11]DO 1 ;如果孔序号#3≤孔数#11,执行循环体1
N8#5=#1+[#3-1]∗#2; 第#3个孔中心所对应的角度
N9#6=#24+#4∗COS[#5]; 计算第#3个孔中心的X坐标值
N10#7=#25+#4∗SIN[#5]; 计算第#3个孔中心的Y坐标值
N11 G90 X#6 Y#7; 移动到孔上方后钻孔
N12#3=#3+1; 孔序号更新,递增1
N13 END1; 结束循环1
N14 G#8 G80; 恢复03组模态代码,取消钻孔循环
M99;
注意:这里的N2可以在去掉“K0”后,合并在N11程序段里吗?当然不可以。如果在调用宏指令前是G91方式,G65程序段中的R、Z也是G91方式,如果N2、N11合在一起编写,原来G91方式的R、Z到N11这里就变成G90方式了。N9、N10,如果该例题用G16极坐标方式编写,就是把极坐标系下的极径、极角转化为右手直角坐标系下的X、Y坐标值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。