一、概述
一汽大连柴油机厂的产品开发部门应用的cad的软件为autocad和pro/engineer两种软件,即二维和三维cad文档共存。对二维的autocad文档,转为cam加工所需的加工特征时,先通过delcam公司powermill软件生成加工特征,再进行数控编程。对三维的pro/engineer文档,可以直接通过powermill软件提取加工特征,进而进行数控编程。在一汽大连柴油机厂进行的6de2产品试制时,同时采用了上述两种方法进行编程。
由于powermill直接接收cad数据,避免了手工编程时反复查找图纸相关尺寸所浪费的时间,编程效率大大提高,为新产品上市取得了宝贵的时间。
二、对后处理技术的开发
后处理技术是cam技术的重要环节之一,针对不同的数控系统(如fanuc、siemens和toshiba等),要对cam系统编制不同的后处理程序。同时,由于二维加工与三维加工本质的区别,powermill系统要求的后处理也不尽相同。在二维加工中,特别是发动机的加工中,主要是点位的加工(主要是孔位的加工,有时带有很少的平面的加工)。而在三维加工中,主要是曲面加工。但无论曲面怎样复杂,cam系统都是以小的直线段,在精度要求的范围内来逼近复杂的曲面,在其生成的g代码中主要以g01为主。针对如图1所示的曲面加工所生成的加工程序如下:
图1 三维加工
%
:0001
n10g91g28x0y0z0
n20g40g17g80g49
n30g0g90z33.031
n40t1m6
n50g54g90
n420x1.828y21.705s1500m3
n430g43z28.031h1m8
n440g1z22.531f500
n450x1.142y21.014
n460x.247y21.705
..........
..........
n8180x22.679y35.32
n8190g0z33.031
n8200m9
n8210g91g28z0
n8220g49h0
n8230g28x0y0
n8240m30
delcam公司的powermill软件提供的缺省的后处理可以满足三维加工的要求。而在二维加工中,孔位加工(钻、扩、铰、攻丝和镗等)都以g81为主,其中攻丝时缺少节距和停留时间等参数。以fanuc为例,进行攻丝钻孔时,应用缺省的后处理,生成的g代码格式如下:
g81g99z-167.r-95.f341
应用笔者开发的后处理程序所生成的代码如下:
g84g99z-167.0r-95.0p300f2.0
针对上述情况,笔者分别为toyoda、yeongchin和toshiba三种加工中心开发了powermill软件孔位加工(钻、扩、铰、攻丝和镗等)的后处理程序,从而使所有的孔位加工功能得到充分的发挥,保证产品加工过程的工艺要求。
yeongchin加工中心的后处理如下:
machinefanuc15m
#originaloptionbyfaw_ddewliguangquan
definewordnt
addressletter="t"
addresswidth=1
fieldwidth=2
notmodal
enddefine
definewordts
addressletter="n"
addresswidth=1
fieldwidth=3
notmodal
enddefine
definewordtpn
addressletter="(toolpath:*******"
addresswidth=20
fieldwidth=30
enddefine
defineformat(id)
addressletter=":"
enddefine
defineformat(n)
notpermanent
enddefine
defineformat(g1)
leadingzeros=true
notmodal
enddefine
defineformat(f)
modal
decimalpoint=true
decimalplaces=2
trailingzeros=false
imperialformats=metricformats
enddefine
defineformat(hm1m2)
leadingzeros=true
enddefine
defineformat(p)
fieldwidth=3
metricformats
decimalpoint=false
decimalplaces=0
trailingzeros=true
imperialformats=metricformats
enddefine
definewordpf
addressletter="f"
fieldwidth=5
notmodal
metricformats
decimalpoint=true
decimalplaces=2
trailingzeros=false
imperialformats=metricformats
enddefine
defineformatall
tapeposition=0
enddefine
wordorder=(+tpnnttsppfd)
definekeys
toolradius=d
cycledwell=p
dwellnotused
enddefine
definecodes
cycleretract=g699
linear=g11
compoff=g240
componleft=g241
componright=g242
enddefine
messageoutput=false
blockorder=true
toolresetcoordinates=3
integer51=4
integer69=2
incrementalcentre=false
integer34=0
integer35=1
integer36=0
integer37=1
defineblocktapestart
"%"
idprogid
rapid;incrementaldata;g628;zcoord0
incrementaldata=c;g630;ycoord0;xcoord0
enddefine
defineblocktoolchangefirst
toolnumbertoolnumber
changetool
if(nexttool<>0)
ntnexttool
endif
tstoolnumber
setswa
enddefine
defineblocktoolchange
if(word[30]=7orword[30]=8)
m29
endif
rapid;incrementaldata;g628;zcoord0
incrementaldata;g630;ycoord0;xcoord0
compensationoff;g149;g480=c
changetool
if(nexttool<>0)
ntnexttool
endif
tstoolnumber
setswa
enddefine
defineblockmoverapid
if(swa)
tpntoolpathname;")"
g259;absolutedata;rapid;g6;xcoord;
ycoord;zcoord;spindle;toollength;m1;m2
unsetswa
else
rapid;g6;xcoord;ycoord;zcoord;spindle;
toollength;m1;m2
endif
enddefine
defineblockmovelinear
linear;g2;xcoord;ycoord;zcoord;toolradius;
feedrate;m1;m2
enddefine
defineblockmovecircle
n;g1;g3;xcoord;ycoord;zcoord;keyi; keyj;keyk;feedrate
enddefine
defineblockcyclestart
if(cycle=1)
g4;cycleretract;xcoord;ycoord;
drillholedepth;clearplane;feedrateprat
endif
if(cycle=2orcycle=3orcycle=>5)
g4;cycleretract;xcoord;ycoord;drillholedepth;
clearplane;cycledwell;feedrateprat
endif
if(cycle=4)
g4;cycleretract;xcoord;ycoord;drillholedepth;
clearplane;cycledwell;
pf(cycfed/toolspeed[toolnum])
endif
enddefine
defineblockmovecycle
xcoord;ycoord;m1;m2
enddefine
defineblockmovetap
xcoord;ycoord;m1;m2
enddefine
defineblockcycleend
endofdrill
enddefine
defineblocktapeend
if(word[30]=7orword[30]=8)
m29
endif
rapid;incrementaldata;g628;zcoord0
rapid;incrementaldata=c;g628;ycoord0
g140;g249;g480=c
changetool
endoftape
enddefine
end