1.算法的设计
(1)为了简化编程,选择编程原点为图2-1中所示的A点,轮廓加工时采用的走刀路线为A→B→C→D→A→E,E点处于毛坯的外侧,为进刀和退刀之处。
(2)为了简化编程,采用增量方式(G91)编程。
(3)变量设置:采用#103号变量控制Z方向深度的变化,#100号变量控制正方形的边长,#101号变量控制毛坯余量的变化。
图2-2 精铣轮廓的刀路 轨迹示意图
(4)本实例编程的思路:
①规划轮廓精加工的刀路轨迹并编写程序。
②在精加工轮廓程序的基础上,利用#103号变量实现分层铣削。
③在实现分层的基础上再结合#101号变量,实现去除余量的分层轮廓粗铣加工。
2.程序流程框图设计
根据上述算法的设计思路,规划精加工刀路轨迹如图2-2所示,规划Z方向(深度方向)的分层(共5层)铣削刀路轨迹如图2-3所示,规划的程序流程框图如图2-4所示。
图2-3 分层铣削正方形凸台刀路轨迹示意图
图2-4 分层铣削正方形凸台的程序流程框图
3.根据算法以及流程框图编写加工的精铣宏程序代码
程序1:精加工轮廓程序
实例2-1 程序1编程要点提示:
(1)关于刀具半径补偿建立和取消的补充说明:
1)G41表示刀具半径的左补偿,即沿着刀具进给的方向看,刀具中心在加工零件轮廓的左侧;G42表示刀具半径的右补偿,即沿着刀具进给的方向看,刀具中心在加工零件轮廓的右侧。
在本程序中G41G01X0Y-10F150D02的语句后面的D02不能省略,如果G41G01X0Y-10F150省略了D的值,即使在程序中有G41或G42指令,刀具半径补偿也无法建立。G41和G42是可以互用的,即如果用G41而D的值不小心输为刀具半径的负值,就相当于使用G42,反之也成立。
2)从无刀具半径补偿进入刀具半径补偿状态,或撤销刀具半径补偿时,刀具必须移动一段距离且移动的距离要大于刀具的半径,否则刀具会沿运动的直径方向偏移一个刀具的半径值,从而造成过切情况,在腔体内铣削时就会发生碰撞。
3)在执行G41、G42、G40指令时,其移动指令只能用G01或G0,而不能用G02或G03以及别的G指令,否则系统会触发报警。
4)为了保证切削轮廓的完整性、平滑性,在外轮廓加工过程中切入或退出零件时,应采用线性过渡或圆弧过渡的方式切入或退出零件(如本程序中的G91G01Y10F250语句的作用)。内轮廓(型腔)的加工,应该采用圆弧的方式切入或退出零件。
5)在应用子程序的调用或宏程序进行分层切削时,刀具半径补偿的建立和取消应该在子程序中完成,即每调用一次子程序时,刀具半径补偿的方式为:用G41或G42建立刀具半径补偿→走过渡段(线性过渡或圆弧过渡)→进行轮廓的加工→走过渡段(线性过渡或圆弧过渡)→用G40指令取消刀具半径补偿。
6)使用G17平面时,刀具半径补偿的切入点应该选择在零件轮廓的最外围,且应当采用线性或圆弧过渡。加工圆形型面轮廓时,应该选择在圆弧象限点的位置。
7)在刀具半径补偿的切削程序中(即从G41/G42开始的程序段到G40结束的程序段之间),FANUC系统处理2个或更多刀具非移动指令时(如暂停、M99、子程序名等),刀具将产生过切现象。
(2)关于语句#100=-#100的几点说明:
1)#100=-#100的含义是使#100号变量取#100号变量的负值。例如:#100=10,机床读入#100=-#100时,#100=-10。
2)应用的主要范围:取负赋值语句在数控铣宏程序编程中的应用要比在数控车宏程序编程中的应用频繁,特别是在以中心为编程原点时,经常需要进行机床移动方向和数值取反的转换操作。
以程序O2001为例:程序中的#100=-#100语句,因为执行完G91G01X[#100]铣削直线进给运动到X60、Y60的位置,即C点时,X、Y轴的移动量要由原来的正方向移动(在程序中采用的是增量编程的方式,增量变量有绝对值编程不具有的优势:增量数值正负的改变,可以控制机床移动方向的改变)转化为向负方向的移动,且移动量是相等的,因此为了简化编程需要通过#100=-#100语句来转换移动方向。
3)本实例也可以不采用刀具半径补偿,而采用刀心轨迹编程。在实际编程中设一个变量控制刀具半径的值,来增加程序的通用性。
程序2:分层铣削正方形凸台的程序
对本实例采用调用子程序的方式进行程序编制,程序如下:
实例2-1程序2编程要点提示:
(1)关于FANUC数控系统子程序调用的问题:
1)子程序应用的范围:在实际编制零件加工程序时,如果某程序段重复且有规律地出现时,可以把这些程序段按照一定的格式编写成独立的程序,然后像主程序一样将它们作为单独的程序输入到机床的存储器中。在机床加工到这些相同的轨迹时,可以在主程序中调用这些程序(即子程序),子程序调用结束后,返回到主程序中,继续执行后面的程序段。
2)子程序调用的格式:子程序调用的格式为M98PΔΔΔ××××,ΔΔΔ为重复调用的次数(最多999次,如果省略则为1次),××××为调用子程序的程序号。例如:M98P60010表示调用的子程序号的程序为0010,调用的次数为6次;M98P0010表示调用的子程序的程序号为0010,调用的次数为1次。每调用1次子程序,则需要返回到主程序;如果子程序没有调用完毕,再继续执行下一次调用子程序,否则执行下一程序段。
3)关于子程序书写的格式:子程序的编写和一般程序基本相同,只是子程序用M99(子程序结束并返回到主程序)结束。例如:
图2-5 子程序嵌套示意图
注意:M99不一定要单独写一行,也可以写成G91G28Z0M99。
4)关于子程序嵌套的问题:不但主程序中可以调用子程序,子程序也可以调用二级子程序,在FANUC0i系统中最多可以嵌套4层子程序,如图2-5所示。采用子程序嵌套进行编程,要衔接好它们之间的顺序关系。
请读者自行分析上述程序和O2003程序的区别。最后强调一点:在使用子程序以及调用子程序嵌套时,要特别注意调用程序和被调用程序之间的衔接问题。(www.xing528.com)
(2)设置#103号变量控制深度来实现分层铣削正方形凸台的程序。该思路的刀路轨迹如图2-3所示,程序设计的流程框图如图2-4所示,编制的宏程序代码如下:
O2013 程序编程要点提示:
1)本程序合理设置了#103号变量,用来控制Z向铣削深度的变化,相当于子程序调用功能。
2)#103=#103-2是控制每层铣削的深度为2mm,和IF[#103GT-10]GOTO10语句结合就控制了整个轮廓分层铣削的过程。
3)数控铣削宏程序编程和子程序编程的比较:
①从使用范围来比较:子程序和宏程序两者既可以应用于相同轨迹的零件程序的编制,也可以简化编程。
子程序的使用范围:在实际进行零件编程时,重复且有规律出现的程序段,优先考虑使用子程序编程以简化编程。
宏程序编程的范围:包含但不仅限于重复且有规律出现的程序段,既可以实现与普通G代码、固定循环、子程序等相同的功能,也具备它们无法实现的功能,如非圆型面的加工等,甚至可以实现多轴的联动加工。
②从改变程序执行流向来比较。子程序和宏程序都可以改变程序执行的流向。子程序改变程序的流向是顺序执行的,而且必须返回到调用它的程序段的下一程序段进行顺序执行;宏程序使用条件判断语句或者无条件跳转语句以及循环语句,可以任意控制程序执行的流向,而且不必返回到跳转指令前程序段的下一程序段进行顺序执行。例如:
先分析O2014程序的执行情况:机床顺序执行到M98 P32015时,由于M98是子程序调用的指令,因此该程序不会再顺序执行M98 P32015下一程序段的代码,而是改变了程序执行的流向,转而顺序执行程序号为O2015中的程序代码。顺序执行到O2015的M99指令时,由于M99指令功能是返回到调用该子程序的主程序中执行相应的程序代码,而根据调用子程序语句M98 P32015可知其调用的次数为3,因此机床会重复执行上述的步骤,直到子程序调用完毕,机床则顺序执行M98 P32015程序段的下一程序段。以上所述就是子程序控制程序执行流向的过程。
再来分析程序为O2016程序的执行情况:机床顺序执行到GOTO 20时,由于GOTO 20是无条件跳转语句,因此会跳转到标号为20的程序段处,顺序执行N20后面的程序段。执行到IF[条件表达式2]GOTO 30时,由于IF[条件表达式2]GOTO 30是条件判断语句,当条件表达式2的值为TRUE时,则跳转到标号为30的程序段处顺序执行;当条件表达式2的值为FALSE时,机床执行IF[条件表达式2]GOTO 30下一个程序段的程序。在此假设表达式的值为TRUE,会跳转到标号为30的程序段处,顺序执行N30后面的程序段。执行到IF[条件表达式1]GOTO 10时,执行过程和语句IF[条件表达式2]GOTO 30的执行过程一样,请读者自行分析,在此不再赘述。
由以上的分析可以看出:宏程序控制程序执行流向与子程序控制程序执行流向相比要灵活得多,也复杂得多。
③从程序调用结构来比较:
子程序需要主程序中的调用指令M98才能产生作用,而且调用结束后要采用M99指令返回到相应的主程序中。
宏程序也有相应的调用指令,模态调用格式为:G65 P<p>L<l><自变量赋值>;其中,<p>为要调用的程序号;<l>为重复的次数(默认值为1);<自变量赋值>为传递到宏程序的数据。
关于FANUC0i宏程序调用方面的说明,可以参考FANUC0i操作手册和参数说明书,在此不再赘述。
程序3:编程原点设在上表面中心的精加工宏程序
将本实例的编程原点设在零件上表面中心处,即O点上,采用铣削非圆型面的思路来编写正方形凸台宏程序代码如下:
实例2-1程序3编程要点提示:
1)本程序中采用拟合法铣削正方形凸台。拟合法采用的是无限逼近思想,主要是利用曲线拟合进行非圆型面零件加工程序的编制,也可以用于规则型面的加工。拟合法的核心思想是:把整个零件的轮廓分成无数个近似于零件轮廓的线段,然后把这无数个线段连接起来,就形成了整个零件的轮廓。
2)在实际编程中,采用拟合法要建立合适的数学模型,根据数学模型找出其中内在的联系,用合理的变量表示出来,再采用G01直线插补指令来铣削零件的轮廓。
3)在本程序中,针对正方形凸台轮廓设置一个变量控制铣削过程即可,设置#100=-30、#102=-30的目的是为了方便编程,其中A点的坐标值为(-30,-30)。
4)设置#101=0.5控制步距大小。步距大小决定了加工的效率与表面轮廓加工的精度。建议粗加工中采用相对较大的步距,在精加工中采用相对较小的步距。
图2-6 粗铣加工的刀路轨迹示意图
5)采用#103号变量控制每层铣削的深度,通过赋值语句#103=#103-2和条件语句IF[#103 GT-10]GOTO50实现分层铣削。
程序O2001、O2002、O2012、O2017的程序代码不能应用于轮廓粗加工,只能应用于粗加工后精加工轮廓。下面通过设置一个变量来控制毛坯余量的变化,从而实现轮廓的粗加工,其刀路轨迹的规划如图2-6所示。
以上分析了精加工轮廓的算法和分层铣削的算法,这样能否可以实现如图2-6所示的刀路轨迹算法呢?还需要进一步考虑以下问题:
1)分析图2-6所示刀路轨迹的特点,可以看出:该刀路轨迹是有规律地向长度和宽度方向等距偏置而成的。可见,实现这两个方向等距偏置可以从实现深度方向的分层铣削中获得启发。
2)可设置一个变量#104来控制毛坯的余量变化,通过毛坯余量的自减语句#104=#104-10和条件语句IF[#104 GT 0]GOTO n来实现刀路轨迹的等距偏置。通过该思路所实现程序的流程设计如图2-7所示。
图2-7 粗加工程序设计算法流程框图
程序4:编程原点设在上表面中心的粗加工宏程序
本程序编程原点设在零件上表面中心,即O点上,编制的宏程序代码如下:
实例2-1 程序4编程要点提示:
1)该程序为正方形凸台的粗加工轮廓,上述方法适用于毛坯的粗加工。
2)编程原点在正方形凸台上表面的中心。要注意X、Y方向的改变决定了毛坯余量以及步距表达式的变化。在数控铣编程中,起刀点设置的不同,表达式也会有所变化,下面结合本例来详细说明这一问题。
该程序中起刀点设置在A点,由于采用刀路等距偏置方法,偏置后的起刀点应该为X-70、Y-60的位置,进刀的表达式为G01 X[-30-#104]F400,而不是G01 X[-30+70]F400,从A点到B点的铣削、从B点到C点的铣削,铣削的表达式应为G01 Y[#100+#104]F400,步距增量为#100=#100+#101;从C点铣削到D点、D点到A点的铣削,步距增量发生了变化,步距增量为#100=#100-#101,铣削表达式为G01 Y[#100-#104]F400。
原因在于从A点到B点、B点到C点的位移量是正值,而从C点到D点、D点到A点的位移量是负值。
3)该程序是在前面程序的基础上变化而来的,在此说明宏程序编程的基本要点:在涉及变量、逻辑关系、循环语句嵌套等复杂程序时,先编写出最重要的循环语句,然后再通过增加控制变量来层层递进。下面结合本实例程序来说明这一点。
在本实例程序中,铣削正方形凸台精加工轮廓的宏程序是最为重要的,在此基础上增加了#103号变量控制铣削的深度,实现了Z方向的分层铣削。在分层铣削基础上增加了#104号变量控制毛坯的余量,实现了刀路在X、Y方向的等距偏置编程。
4)该程序涉及的变量和逻辑关系相对复杂,对于IF语句的嵌套等基本编程技能操作时,需要在实际编程练习中不断加以理解。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。