数控编程之MasterCAM文件的后处理.docx
《数控编程之MasterCAM文件的后处理.docx》由会员分享,可在线阅读,更多相关《数控编程之MasterCAM文件的后处理.docx(17页珍藏版)》请在冰豆网上搜索。
数控编程之MasterCAM文件的后处理
数控编程之MasterCAM文件的后处理
数控编程之MasterCAM文件的后处理
2009-10-1622:
56:
20|分类:
机械类|举报|字号订阅
2.数控自动编程原理
我们在进行数控手工编程时,先是求出组成零件几何图形的基本线圆图素的节点(交点)坐标值,然后按数控程序的格式要求固定地排列起来,再少量地在某些部位嵌入一些加工工艺指令而已。
也就是说只要求出各交点坐标,则转化成数控程序是就相当于填表一样有规则。
自动编程就是利用计算机来计算这些交点,再按规律自动组成数控程序。
对于简单零件图形,由于各交点坐标很容易求出,通常都只需要采用手工编程即可,若用自动编程则感觉不出其优势,但对于复杂零件图形,由于交点坐标手工很难计算,所以往往需要借助于自动编程。
当然,对于简单图形,若需要经常性地进行数学变换,同样需要使用自动编程系统。
数控自动编程从发展的历史来分,可有:
1).数控语言型批处理式自动编程
早期的自动编程都是编程人员根据零件图形及加工工艺要求,采用数控语言,先编写成源程序单,再输入计算机,由专门的编译程序,进行译码、计算和后置处理后,自动生成数控机床所需的加工程序清单,然后通过制成纸带或直接用通讯接口,将加工程序送入到机床CNC装置中。
这其中的数控语言是一套规定好的基本符号和由基本符号描述零件加工程序的规则,它比较接近工厂车间里使用的工艺用语和工艺规程,主要由几何图形定义语句、刀具运动语句和控制语句三种语句组成。
编译程序是根据数控语言的要求,结合生产对象和具体的计算机,由专家应用汇编语言或其它高级语言编好的一套庞大的程序系统。
这种自动编程系统的典型就是APT语言。
APT语言最早于1955年由美国研制成功,经多次修改完善,于70年代发展成APT-Ⅳ,一直沿用至今。
其它如法国的IFAPT、德国的EXAPT、日本的FAPT、HAPT以及我国的ZCK、SKC等都是APT的变形。
这些数控语言有的能处理3~5坐标,有的只能处理2坐标,有车削用的、铣削及点位加工用的等。
这种方式的自动编程系统,由于当时计算机的图形处理能力较差,所以一般都无图形显示,不直观,易出错。
虽然后来增加了一些图形校验功能,但还是要反复地在源程序方式和图形校验方式之间来回切换,并且还需要掌握数控语言,初学者用起来总觉不太方便。
2).人机对话型图形化自动编程
在人机对话式的条件下,编程员按菜单提示的内容反复与计算机对话,陆续回答计算机的提问。
从一开始,对话方式就紧密与图形显示相联,从工件的图形定义,刀具的选择,起刀点的确定,走刀路线的安排直到各种工艺
指令的及时插入,全在对话过程中提交给了计算机,最后得到的是所需的机床数控程序单。
这种自动编程具有图形显示的直观性和及时性,能较方便地进行对话修改,易学且不易出错。
图形化自动编程系统有EZ-CAM、MasterCAM、UGII、PRO/E、CAXA制造工程师等。
由于图形显示的直观性和及时性,图形化自动编程现在已经是数控加工领域应用最广的自动编程方式。
这类软件一般包括几何绘图的CAD部分和加工刀路定义的CAM部分。
然而,就CAM部分来说,刀路定义完成后,怎样针对不同的数控系统来生成相对应的NC程序呢?
那就涉及到后置处理技术。
3.MasterCAM软件及其后置处理技术
3.1MasterCAM软件的数据处理流程
MasterCAM软件由CAD模块绘制图形,存盘后保存为*.MCx(x为版本号,如MC7、MC8、MC9等);进行加工刀路定义后,即可生成相对独立的*.NCI刀路数据文件,该文件存放了关于刀具、工艺参数、加工节点坐标等按照刀路定义顺序产生的一些格式固定的数据;最后需要生成NC程序时,由后置处理模块读取NCI文件中的数据,根据选用的机床数控系统后置处理文件(MP*.PST)的要求,编译组合成适于数控加工机床用的NC程序清单文件*.NC。
当然,MasterCAM中还有存放刀具参数、毛坯及刀具材质、配置系统状态、加工工艺表单等的一些数据格式文件。
3.2MasterCAM软件针对数控系统的后置处理技术
从以上MasterCAM软件的数据处理流程可知,MasterCAM经刀路定义后生成的刀路数据文件NCI是不变的,最后生成NC程序时需要用到不同的后置处理格式文件*.PST,从而生成不同的NC格式程序代码。
系统提供适于各种不同数控系统的后置处理文件,如适于日本FANUC系统的MPFAN.PST,适于美国Dynapth数控系统的Mpdypth.pst,适于德国马豪数控系统的Mpmahoxy.pst、Mpmahoxz.pst,适于mazakm数控系统的Mpmazakm.pst等等。
尽管如此,由于我们所使用到的机床很多功能处理上经机床生产厂家做过各式各样的改变,可能无法直接使用由默认后置处理各式生成的NC程序,因此,研究探索后置处理文件就很有必要。
MasterCAM软件最后NC程序的生成取决于不同的后置处理文件PST,通过探索修改PST文件即可获得我们所需要的适应不同数控系统的NC程序格式。
4.后置处理文件参数项对NC程序输出的影响简述
通过修改后置处理(*PST)文件参数的变量赋值,可控制NC程序输出,以下是控制程序输出单节的内容,我们由此来简单的看一看修改各参数项的影响。
#GeneralOutputSettings基本输出选项设置
#--------------------------------------------------------------------------
sub_level:
1#Enableautomaticsubprogramsupport
breakarcs:
2#Breaka
rcs,0=no,1=quadrants,2=180deg.maxarcs
arcoutput:
1#0=IJK,1=Rnosign,2=Rsignedneg.over180
arctype:
2#Arccenter1=abs,2=St-Ctr,3=Ctr-St,4=unsignedinc.
do_full_arc:
0#Allowfullcircleoutput?
0=no,1=yes
helix_arc:
2#Supporthelixarcoutput,0=no,1=allplanes,2=XYplaneonly
arccheck:
3#Checkforsmallarcs,converttolinear
atol:
.01#Angularitytoleranceforarccheck=2
ltol:
.002#Lengthtoleranceforarccheck=1
vtol:
.0001#Systemtolerance
maxfeedpm:
500#Limitforfeedininch/min
ltol_m:
.05#Lengthtoleranceforarccheck=1,metric
vtol_m:
.0025#Systemtolerance,metric
maxfeedpm_m:
10000#Limitforfeedinmm/min
force_wcs:
yes#ForceWCSoutputateverytoolchange?
spaces:
0#Numberofspacestoaddbetweenfields
omitseq:
no#Omitsequencenumbers?
seqmax:
9999#Max.sequencenumber
stagetool:
0#0=Donotpre-stagetools,1=Stagetools
use_gear:
0#Outputgearselectioncode,0=no,1=no
max_speed:
10000#Maximumspindlespeed
min_speed:
50#Minimumspindlespeed
nobrk:
no#Omitbreakupofx,y&zrapidmoves
progname:
1#Useuppercaseforprogramname(sprogname)
xflip:
no#ReverseXaxisorientation-eap1/17/03
yflip:
no#ReverseYaxisorientation-eap1/17/03
zflip:
no#ReverseZaxisorientation-eap1/17/03
#---------------------------------------------------------------------
以breakarcs为例:
当breakarcs=0时,不打断圆弧,以整圆形式输出;当baeakarcs=1时,将圆弧划为4等分,分4象限的形式输出:
当breakarcs=2时,按180度打断圆弧,分2部分输出。
如图5所示外形铣削,当baeakarcs=1时,其程序输出为:
%
O1234
N100G21
N102G0G17G40G49G80G90
(10.FLATENDMILLTOOL-1DIA.OFF.-1LEN.-1DIA.-10.)
N104T1M6
N106G0G90G54X-65.Y-45.A0.S2000M3
N108G43H1Z10.M8
N110Z5.
N112G1Z-2.F200.
N114X-55.F500.
N116X40.
N118G3X55.Y-30.R15.
N120G1Y15.505
N122G3X75.Y40.R25.
N124X50.Y65.R25.
N126X25.505Y45.R25.
N128G1X-30.
N130Y40.
N132G2X-50.Y20.R20.
N134G1X-55.
N136Y-45.
N138Y-55.
N140Z3.F10000.
N142G0Z10.
N144M5
N146G91G28Z0.M9
N148G28X0.Y0.A0.
N150M30
%
当breakarcs=2时,程序输出如下:
%
O1234
N100G21
N102G0G17G40G49G80G90
(10.FLATENDMILLTOOL-1DIA.OFF.-1LEN.-1DIA.-10.)
N104T1M6
N106G0G90G54X-65.Y-45.A0.S2000M3
N108G43H1Z10.M8
N110Z5.
N112G1Z-2.F200.
N114X-55.F500.
N116X40.
N118G3X55.Y-30.R15.
N120G1Y15.505
N122G3X45.Y64.495R25.
N124X25.505Y45.R25.
N126G1X-30.
N128Y40.
N130G2X-50.Y20.R20.
N132G1X-55.
N134Y-45.
N136Y-55.
N138Z3.F10000.
N140G0Z10.
N142M5
N144G91G28Z0.M9
N146G28X0.Y0.A0.
N148M30
%
5.后置处理文件的改编
5.1南通XH713A—FANUC-0i系统的后置处理
南通XH713A立
式加工中心采用斗笠式刀库,和机械手换刀不同,它无法预先进行选刀操作,其选刀和自动换刀过程密不可分,必须先将主轴上的刀具装回到原刀袋中,才可以往下进行选刀。
换刀时主轴应移动到第二Z参考点的位置,卸刀时主轴则提升到第一Z参考点的高度。
换刀过程中还需要控制刀库座盘的整体移动,动作相当复杂,因此机床厂家对其所用的FANUC-0i系统进行了适当的改造,根据换刀动作的要求,编写了一个O9000的子程序,要求用户在编写自动换刀的程序时,采用M98P9000的程序格式,且换刀前应让机床Z轴处于第二参考点的位置上。
另外,机床开启冷却液是使用的M7指令,而非M8指令。
其他方面基本采用FANUC的标准程序形式。
针对该机床的特点,我们在改写MPFAN.PST文件时就需要将所有可能生成“TxxM6”的指令改为生成“TxxM98P9000”的指令,将生成“M8”的指令改为生成“M7”的指令输出,将换刀前自动回第一参考点的“G28”的指令改为生成回第二参考点“G30”的指令输出。
针对M8改M7,可改动字符串定义单节的定义,将sm08、sm08_1、sm08_2变量都用“M7”这一字符串进行赋值定义,即将如下定义段
fstrselsm04spdir2spindle
#--------------------------------------------------------------------------
#CoolantMcodeselection
sm09M9#CoolantOff
sm08M8#CoolantFlood
sm08_1M8#CoolantMist
sm08_2M8#CoolantTool
scoolant#Targetforstring
fstrselsm09coolantscoolant
#--------------------------------------------------------------------------
改为:
fstrselsm04spdir2spindle
#-------------------------------------------
#CoolantMcodeselection
sm09M9#CoolantOff
sm08M7#CoolantFlood
sm08_1M7#CoolantMist
sm08_2M7#CoolantTool
scoolant#Targetforstring
fstrselsm09coolantscoolant
#-------------------------------------------
如果要兼顾到可能会用到M8的情形,可改动其中一个如sm08_1为M7,这样在刀路定义时选择开启冷却液的第三项“喷雾”,即可。
针对换刀程序格式输出,可直接将程序格式预定义单节中所有“M6”改为“M98P9000”,将所有“G28”改为“G30”即可。
#------------------------------------------------------------
#StartofFileandToolchangeSetup
#---------------------------------------------------------
psof0#Startoffilefortoolzero
psof
psof#Startoffilefornon-zerotoolnumber
pcuttype
toolchng=one
ifntools=one,
[
#skipsingletooloutputs,stagetoolmustbeon
stagetool=m_one
!
next_tool
]
"%",e
*progno,e
"(PROGRAMNAME-",sprogname,")",
e
"(DATE=DD-MM-YY-",date,"TIME=HH:
MM-",time,")",e
pbld,n,*smetric,e
pbld,n,*sgcode,*sgplane,"G40","G49","G80",*sgabsinc,e
sav_absinc=absinc
ifmi1<=one,#Workcoordinatesystem
[
absinc=one
pfbld,n,sgabsinc,*sg28ref,"Z0.",e
pfbld,n,*sg28ref,"X0.","Y0.",e
pfbld,n,"G92",*xh,*yh,*zh,e
absinc=sav_absinc
]
pcom_moveb
c_mmlt#Multipletoolsubprogramcall
ptoolcomment
comment
pcan
ifstagetool>=zero,pbld,n,*t,"M6",e
pindex
ifmi1>one,absinc=zero
pcan1,pbld,n,*sgcode,*sgabsinc,pwcs,pfxout,pfyout,
pfcout,*speed,*spindle,pgear,strcantext,e
pbld,n,"G43",*tlngno,pfzout,scoolant,next_tool,e
absinc=sav_absinc
pcom_movea
toolchng=zero
c_msng#Singletoolsubprogramcall
ptlchg0#CallfromNCInulltoolchange(toolnumberrepeats)
pcuttype
pcom_moveb
c_mmlt#Multipletoolsubprogramcall
comment
pcan
result=newfs(15,feed)#Resettheoutputformatfor'feed'
pbld,n,sgplane,e
pspindchng
pbld,n,scoolant,e
ifmi1>one&workofs<>prv_workofs,
[
sav_absinc=absinc
absinc=zero
pbld,n,sgabsinc,pwcs,pfxout,pfyout,pfzout,pfcout,e
pe_inc_calc
ps_inc_calc
absinc=sav_absinc
]
ifcuttype=zero,ppos_cax_lin
ifgcode=one,plinout
else,prapidout
pcom_movea
c_msng#Singletoolsubprogramcall
ptlchg#Toolchange
pcuttype
toolchng=one
ifmi1=one,#Workcoordinatesystem
[
pfbld,n,*sg28ref,"X0.","Y0.",e
pfbld,n,"G92",*xh,*yh,*zh,e
]
pbld,n,"M01",e
pcom_moveb
c_mmlt#Multipletoolsubprogramcall
ptoolcomment
comment
pcan
result=newfs(15,feed)#Resettheoutputformatfor'feed'
pbld,n,*t,"M6",e
pindex
sav_absinc=absinc
ifmi1>one,absinc=zero
pcan1,pbld,n,*sgcode,*sgabsinc,pwcs,pfxout,pfyout,
pfcout,*speed,*spindle,pgear,strcantext,e
pbld,n,"G43",*tlngno,pfzout,scoolant,next_tool,e
absinc=sav_absinc
pcom_movea
toolchng=zero
c_msng#Singletoolsubprogramcall
pretract#Endoftoolpath,toolchange
sav_absinc=absinc
absinc=one
sav_coolant=coolant
coolant=zero
#cc_posisresetinthetoolchangehere
cc_pos=zero
gcode=zero
pcan
pbld,n,sccomp,*sm05,psub_end_mny,e
pcan1,pbld,n,sgabsinc,sgcode,*sg28ref,"Z0.",scoolant,s
trcantext,e
pbld,n,*sg28ref,"X0.","Y0.",protretinc,e
pcan2
absinc=sav_absinc
coolant=sav_coolant
protretinc#ResettheCaxisrevolutioncounter
iffrc_cinit&rot_on_x,
[
rev=zero
sav_rev=zero
cabs=zero
csav=zero
indx_out=zero
ifindex,e,pindxcalc,pindex
else,*cabs
prvcabs=zero
!
csav,!
cabs
]
peof0#Endoffilefortoolzero
peof
peof#Endoffilefornon-zerotool
pretract
comment
#Removepoundcharactertooutputfirsttoolwithstagedtools
#ifstagetool=one,pbld,n,*first_tool,e
n,"M30",e
mergesub
clearsub
mergeaux