在一个加工程序的若干位置上,如果包括有一个或多个在加工轨迹上完全相同或类似的内容,为了简化编程,可以把这些程序段单独抽出,并按照一定的格式编成子程序并单独加以命名,称之为子程序,原来的程序称为主程序。主程序在执行时可以调用子程序,执行完子程序后又可返回到主程序,继续执行后面的程序段。
在FANUC 0i-MC面板中,子程序的调用格式为:
M98 P□□□○○○○;
在FANUC 0i-MD面板中,子程序的调用格式为:
M98 P□□□□○○○○;或M98 P○○○○L□□□□□□□□;
其中,□□□或□□□□为子程序重复调用的次数,在FANUC 0i-MC面板中,最多可以重复调用999次;在FANUC 0i-MD面板中,前一种格式可以重复调用9999次,后一种格式可以调用99999999次,如果省略,则表示调用1次。当调用次数未输入时,子程序名的前导0可省略;当输入调用次数时,子程序名必须为4位数。
○○○○指定调用的子程序名。
M99通常用在子程序末尾,它表示子程序结束,并返回主程序。除此之外,它还有另外的用法。
①M99用在主程序末尾或MDI方式中程序的末尾,表示无限循环,执行了M99之后光标返回程序开头。可以这样使用:“/M99;”或“G04 X;/M99;”,用跳段来控制M99是否执行。有些工人用“G04 X;/M99;”编程来结束主程序,他装卸工件的时间比较短,编写的暂停时间相对较长,当暂停没有结束时已经换上了新的工件,但不建议这么编程,以免出现危险。还有,主程序末尾使用M99时,和使用M30结尾不同,M99不给工件计数器计数。
②特殊用法:如果用P指定一个顺序号,当子程序结束时,子程序不是返回到调用该子程序的那个程序段后的一个程序段,而是返回到有P指定其顺序号的那个程序段。但是,要注意如果主程序不是在存储器方式工作,则P被忽略。用这种方法比起正常返回到子程序方法要耗费长得多的时间。
M98、M99也可以编在含有移动的指令后面。此时,M98、M99在产生移动后执行,即为后作用M功能,例如:
G00 X100.M98 P1234;
G00 X100.M99;
在FANUC 0i-MC面板中,子程序调用可以嵌套4级;在FANUC 0i-MD面板中,子程序调用可以嵌套10级。
【例3-27】 使用M98、M99编程,完成图3-81所示1、2、3、4位置M8螺纹的攻螺纹。
图3-81 固定循环时M98的应用
【例3-28】 很多时候图样上标注的孔的尺寸是刀具尺寸所没有的,比如某孔标注为ϕ11.4mm,孔心坐标为(10,10),深为20mm,材质为铝合金。用ϕ10mm中心有刃的立铣刀去加工,程序如下:
下面是粗铣的子程序,左侧的是没有使用刀具半径补偿的程序,右侧的是使用了刀具半径补偿的程序,设置为5.000,铣削方式为顺铣。
00059:不合刀具半径补偿
Nlo G91 G01 Z-2.F50;
N20 G90 Xl0.5 F160;
N30 G03 l-0.5;
N40 G01 Xl0.;
N50 M99;
l00059;含刀具半径补偿
IN10 G91 C01 Z-2.F50;
IN20 G90 CAl X15.5 D 01 F160;
IN30 G03 I-5.5;
IN40 G01 C40 Xl0.;
IN50 M99;
下面是精铣的子程序,左侧的是没有使用刀具半径补偿的程序,右侧的是使用了刀具半径补偿的程序,D 02设置为5.000,铣削方式为顺铣。00060:不合刀具半径补偿
G90 C01 Xl0.7 F160;
C03 I-0.7;
N40 C01 Xl0.;
M99;
100060;含刀具半径补偿
G90 C41 C01 X15.7 D 02 F160;
G03 I-5.7;
N40 C01 C40 Xl0.;
M99;
注意:每一次调用子程序,子程序结尾时都要让刀具返回到原来的X、Y轴的位置上,否则下一次调用的起点就不是前一次调用的起点,如上述子程序O0059和O0060的N40程序段。
上述介绍的是一个孔的加工程序的编写。但是,如果所要加工的孔不是1个,而是2个或多个,且在同一个平面上,用上面的程序来加工,第一个孔能正常加工,后面的就会产生碰撞,因为上面的程序中只有Z轴是G91方式,X、Y轴都是G90方式的。修改如下:
则O0059可以修改如下:
00059:不合刀具半径补偿
N10 C91 C01 Z-2.F50;
N20 XO.5 F160;
N30 C03 I-0.5;
N40 C01 X-0.5;
N50 M99:
100059;含刀具半径补偿
N10 G91 G01 2-2.F50;
N20 G41 X5.5 D01 F160;
N30 G03 I -5.5;
N40 G01 G4O X-5.5;
N50 M99;
O0060可以修改如下:
00060:不合刀具半径补偿
G91 C01 XO.7 F160:
G03 I-0.7:
G01 X-0.7:
M99:
00060:含刀具半径补偿
G91 G41 G01 X5.7 D 02 F160:
G03 I-5.7:
G01 G4O X -5.7:(www.xing528.com)
M99:
注意:子程序中保持的模态信息,在返回主程序时仍然保持有效!主程序O0058中“N60G0 G90 Z2.;”和“N80 G0 G90 Z2.;”这两段程序,如果没有编写“G90”,就会产生严重碰撞:因为这里的“Z2.”仍然是子程序O0060末尾的G91方式!
一般情况下,如果多次铣削,只把产生分层的轴的分层动作指令编写在子程序中,并以G91方式编写在子程序的开头,该轴不产生分层动作的指令编在主程序中,但需注意G90和G91方式的区别;当铣削多个孔时,其他轴也以G91方式编写;建议铣孔时的子程序中使用刀具半径补偿指令。
如果上述孔不在同一个平面上,需要在主程序中的孔心定位后(子程序调用前)的程序段和主程序调用完成返回主程序后的第一个程序段,指令Z轴移动到合适的位置上,然后再下刀。
铣孔时常见的情况分析:
1)调用了多次子程序,但铣削了一层之后就不再下刀。此时可把子程序中下刀的指令修改为G91方式。
2)铣不通孔时深度尺寸正常或浅了一层,孔底中心有刀具下刀的凹坑。此时,注意要把分层铣削下刀的指令编在程序的开头,在结束时已经完成了平面的铣削;如果在子程序开头是平面的铣削,结束时就是Z轴的下刀,必然在不通孔中心留下凹坑。另外,要注意调用子程序前Z轴到达的位置,切入一层后调用子程序,尺寸正常,但孔底中心有凹坑;未切入就调用子程序,会浅一层,孔底中心有凹坑。
图3-82 子程序用法举例
【例3-29】 如图3-82所示,在一块长方体上铣去一部分,成为一个凹槽,长方体已经加工好,材料为铝。
设工件上表面的对称中心为X、Y、Z轴的坐标原点,用ϕ20mm的立铣刀加工。
O0062;
T01 M06;
G00 G56 G90 X64.8 Y-42.;
G43 H01 Z50.M03 S1000;
Z0.4 M08;
M98 P60064;
G01 X0.2 F300 M03 S1400;
M98 P66;
G00 G90 Z2.M09;
G91 G30 Z0 M05;
G90 G00 X 0 Y 100.; 移动到便于装卸工件的位置上
M30;
100064;
GOO G91 Z -6.7
G01 Y84. F150;
GOO X -14.8;
G01 Y - 84;
GOO X -15.;
G01 Y84;
GOO X -15.;
G01 Y - 84;
GOO X -15.;
G01 Y84;
GOO X -15.;
G01 Y - 84;
GOO X -15.;
G01 Y84;
GOO X -15.;
G01 Y - 84;
GOO X -15.;
GOl Y84;
GOO X -9.8;
G01 Y - 84;
GOO X129.6;
M9;
100066;
G01 G91 Z -0.2 F400;
G01 Y84. F120;
GOO X -15.;
G01 Y - 84.;
GOO X -15.;
G01 Y84.;
GOO X -15.;
G01 Y - 84.;
GOO X -15.;
G01 Y84.;
GOO X -15.;
G01 Y - 84.;
GOO X -15.;
G01 Y84.;
GOO X -15.;
G01 Y - 84.;
GOO X -15.;
G01 Y84;
GOO X -10.;
G01 Y - 84;
IM99;
此例中,从Z0.4平面开始调用O0064子程序6次,由于刀具在工件外,所以每次快速下刀6.7mm,铣削至Z-39.8mm,Z向留有0.2mm精加工余量,+X、-X方向均留有0.2mm精加工余量,X向行距前几刀为75%刀具直径,最后一刀为剩余的量,当分层加工完最后一刀后,刀具停留在-Y一侧,和刀具起始位置同一侧,因此不需抬刀,直接快速移动至起始点的X、Y坐标,G00 X129.6。
O0066和O0064类似,只是不需要返回起始点的X、Y坐标。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。