关键词:挤压模线切割; G代码; 偏移; 暂停点
作者来自亚洲铝厂
在挤压模制作过程中,线切割加工是非常重要的一个环节。模孔表面质量将直接影响挤出铝型材的表面质量。 我司对该环节一向非常重视,率先引进高精度慢走丝对模孔进行加工,极大的提高了模具表面质量。随着公司业务的扩大及对制造精度的不懈追求,对线割编程的要求也越来越高。
由于现有线割编程软件参数设置繁琐, 产生的NC代码与机床性能不完全匹配,需再次检查及更改,不同机床须分别处理。而在挤压模线割编程编程中,加工参数相对固定,为减轻线割编程员劳动强度,降低新人培训周期,遂提出通过CAD软件Think3的GPL语言,利用曲线偏移的功能产生挤压模模孔线割刀路及对应G代码的过程,并对模孔进行自动相切检查的设想。
具体流程如下:
1.输入待割型材选择集,要保证集合首尾顺序相接。若所选起始点或方向不合适可通过起始点前移/后移及反相进行变更。
2.对待割铝型材选择集进行自动检查,以保证过渡圆滑。
2.对待割铝型材选择集进行自动检查,以保证过渡圆滑。
具体方法为:由程序对相邻两图素进行检查:
(1)若为直线和圆弧,通过求直线两端点与圆弧起点和终点距离取得交点,再判断交点与圆心所成直线与直线夹角,若非90度则判定直线和圆弧非相切关系,在交点处按指定图层及颜色绘点提醒此处需更正;
(2)若为圆弧和圆弧,判断圆心距离是否等于半径和或差,若不等判定圆弧和圆弧非相切关系,在交点处按指定图层及颜色绘点提醒此处需更正;
(3)若为直线和直线,直接在交点处按指定图层及颜色绘点提醒编程员检查。
3.定义加工参数,入丝点:
3.定义加工参数,入丝点:
主要输入切割厚度,入丝点,精加工次数。
4.用偏移功能产生加工轨迹线:
4.用偏移功能产生加工轨迹线:
依加工参数确定偏移距离,利用CAD软件的偏移功能产生偏移线(将偏移线第一刀放到999层,即粗割轨迹线;其余依次放到998、997...层),对输入待割型材的总长与新产生轨迹线总长比对,轨迹线总长大于待割型材的总长则将其删除,变更偏移方向,重新产生轨迹线。具体GPL程序代码如下:
#procedure SelsOfst(IDS,offsetDist,InOut) !No005将给定图素偏移指定距离 若相等则失败不产生偏移图素[自ek_confw.prbs]W::->WrTp::
*保留原始环境WrTp::SelsOfst(ek_prese(1),0.2,1) //SelsOfst(ek_prese(1),0.2,1)
currCol:=$PG(EP_COL) ekpar EP_COL 60 !EP_COL
currLTYPE:=$PG(EP_LTYPE) ekpar EP_LEV 999 !EP_LTYPE
currWIDTH:=$PG(EP_WIDTH) ekpar EP_WIDTH 2 !EP_WIDTH
currLEV:=$PG(EP_LEV) ekpar EP_LEV 999 !EP_LEV
TmpTPth_IDS
TmpTPth_IDS
TmpTPth_IDS::=0#0
ekpar EP_CVOF_DIST 1 !DIST/point
Sids::=IDS !保留待处理集合
exitflag::=0
m(IDS,"IDS")
Sperim::=WrTp::GetLensBySels(IDS)
lastEnt::=$lastent
m($lastent,"$lastent Prv")
Sids::=IDS !保留待处理集合
exitflag::=0
m(IDS,"IDS")
Sperim::=WrTp::GetLensBySels(IDS)
lastEnt::=$lastent
m($lastent,"$lastent Prv")
WrTp::SelsHIGHZYYSXS(Sids,20,1)
AAG_2011::SelByIds(Sids)
AAG_2011::SelByIds(Sids)
ekpar EP_CVOF_DIST 1 !DIST/point
ekpar EP_OFFSET_N offsetDist !0.2/-0.2 offsetDist
ekpar EP_OFF_OPTMC 0 !copy 0/Move 1 -》ekpar EP_OFF_OPTMC 1
ekpar EP_OFFSET_N offsetDist !0.2/-0.2 offsetDist
ekpar EP_OFF_OPTMC 0 !copy 0/Move 1 -》ekpar EP_OFF_OPTMC 1
* ekpar EP_CVOF_NUMOF ek_num_edit
ekpar EP_CVOF_NUMOF 1 !层数 UNDO
ekpar EP_CVOF_TRFL 1 !Extended0/1Fillet是否倒圆
ekpar EP_CVOF_NUMOF 1 !层数 UNDO
ekpar EP_CVOF_TRFL 1 !Extended0/1Fillet是否倒圆
user::ek_offset_onpln !执行 产生偏移线
eos
Halt
if($lastent.eq.lastEnt) ek_w_m('最后建立的[$lastent为空 请查证!'//m(IDS)) goto('e0') ! exit
eos
Halt
if($lastent.eq.lastEnt) ek_w_m('最后建立的[$lastent为空 请查证!'//m(IDS)) goto('e0') ! exit
m($lastent,"$lastent Nxt")
OfstIds::=(lastEnt+1):$lastent !首次 产生的偏移线
Dperim::=WrTp::GetLensBySels(WrTp::OfstIds)
*
if((WrTp::Dperim.lt.WrTp::Sperim).and.(InOut.eq.1)) then !目标周长小于源+InOut=1 ->exitflag::=1
m('SelsOfst ok in',IDS,offsetDist,InOut,OfstIds)
TmpTPth_IDS::=OfstIds
exitflag::=1
elseif(WrTp::Dperim.eq.WrTp::Sperim) then
OfstIds::=0
m('SelsOfst ==',IDS,offsetDist,InOut,OfstIds)
exitflag::=2
elseif((WrTp::Dperim.gt.WrTp::Sperim).and.(InOut.ne.1)) then !目标周长小于源+InOut<>1 ->exitflag::=1
m('SelsOfst ok Out',IDS,offsetDist,InOut,OfstIds)
exitflag::=1
else
ekpar EP_OFFSET_N -offsetDist
endif
OfstIds::=(lastEnt+1):$lastent !首次 产生的偏移线
Dperim::=WrTp::GetLensBySels(WrTp::OfstIds)
*
if((WrTp::Dperim.lt.WrTp::Sperim).and.(InOut.eq.1)) then !目标周长小于源+InOut=1 ->exitflag::=1
m('SelsOfst ok in',IDS,offsetDist,InOut,OfstIds)
TmpTPth_IDS::=OfstIds
exitflag::=1
elseif(WrTp::Dperim.eq.WrTp::Sperim) then
OfstIds::=0
m('SelsOfst ==',IDS,offsetDist,InOut,OfstIds)
exitflag::=2
elseif((WrTp::Dperim.gt.WrTp::Sperim).and.(InOut.ne.1)) then !目标周长小于源+InOut<>1 ->exitflag::=1
m('SelsOfst ok Out',IDS,offsetDist,InOut,OfstIds)
exitflag::=1
else
ekpar EP_OFFSET_N -offsetDist
endif
*
if(WrTp::exitflag.eq.1) m("WrTp::exitflag.eq.1") eos goto('e0') ! exit
if(WrTp::exitflag.eq.2) m("WrTp::exitflag.eq.2") eos undo eos goto('e0') ! !目标周长等于源 exit
if(WrTp::exitflag.eq.1) m("WrTp::exitflag.eq.1") eos goto('e0') ! exit
if(WrTp::exitflag.eq.2) m("WrTp::exitflag.eq.2") eos undo eos goto('e0') ! !目标周长等于源 exit
m("SelsOfst -offsetDist",-offsetDist,now)
undo
undo
*重新设置选择集
WrTp::SelsHIGHZYYSXS(Sids,2,1)
AAG_2011::SelByIds(Sids)
lastEnt::=$lastent
user::ek_offset_onpln eos m("SelsOfst -offsetDist Do") !执行 产生偏移线
Halt
if($lastent.eq.lastEnt) ek_w_m('最后建立的[$lastent为空 请查证!02'//m(IDS)) goto('e0') ! exit
OfstIds::=(lastEnt+1):$lastent !undo后 产生的偏移线
WrTp::SelsHIGHZYYSXS(Sids,2,1)
AAG_2011::SelByIds(Sids)
lastEnt::=$lastent
user::ek_offset_onpln eos m("SelsOfst -offsetDist Do") !执行 产生偏移线
Halt
if($lastent.eq.lastEnt) ek_w_m('最后建立的[$lastent为空 请查证!02'//m(IDS)) goto('e0') ! exit
OfstIds::=(lastEnt+1):$lastent !undo后 产生的偏移线
Dperim::=WrTp::GetLensBySels(WrTp::OfstIds)
if((WrTp::Dperim.lt.WrTp::Sperim).and.(InOut.eq.1)) then
* exit
m('SelsOfst ok2 in',IDS,offsetDist,InOut,OfstIds)
TmpTPth_IDS::=OfstIds
exitflag::=1
elseif((WrTp::Dperim.gt.WrTp::Sperim).and.(InOut.ne.1)) then ! ??应无机会执行到
m('SelsOfst ?ok? Out2 >>ERR!',IDS,offsetDist,InOut,OfstIds)
exitflag::=1
endif
m('SelsOfst ok2 in',IDS,offsetDist,InOut,OfstIds)
TmpTPth_IDS::=OfstIds
exitflag::=1
elseif((WrTp::Dperim.gt.WrTp::Sperim).and.(InOut.ne.1)) then ! ??应无机会执行到
m('SelsOfst ?ok? Out2 >>ERR!',IDS,offsetDist,InOut,OfstIds)
exitflag::=1
endif
if(exitflag.eq.1) goto('e0') ! exit
m('SelsOfst err ',now)
*
end:
* exit(values) !
exit
exit
e0: m("SelsOfst->e0 ") !TTError("PLSort",WERROR,TTMsg('_TTGEN'\\15,''))
*恢复原始环境
ekpar EP_COL currCol !EP_COL
ekpar EP_LTYPE currLTYPE !EP_LTYPE
ekpar EP_WIDTH currWIDTH !EP_WIDTH
ekpar EP_LEV currLEV !EP_LEV
goto('end')
ekpar EP_COL currCol !EP_COL
ekpar EP_LTYPE currLTYPE !EP_LTYPE
ekpar EP_WIDTH currWIDTH !EP_WIDTH
ekpar EP_LEV currLEV !EP_LEV
goto('end')
#end
5.按给定支撑距离计算,取得支撑位打断点,并将粗割刀路打断,对打断点进行判断:
a.所需剩余长度计算:
依支撑所需长度,判断最后的图素长度是否足够,若不足则将“所需长度-最后图素长度”得出“所需剩余长度;同理依次对前一图素长度作判断,直至前一图素长度大于所需剩余长度。
依支撑所需长度,判断最后的图素长度是否足够,若不足则将“所需长度-最后图素长度”得出“所需剩余长度;同理依次对前一图素长度作判断,直至前一图素长度大于所需剩余长度。
b.建立支撑位打断点:
当前一图素长度大于所需剩余长度时,计算所需剩余长度占前一图素长度的比例数(以下简称为比例数),利用在曲线指定比例处画点功能建立支撑位打断点(此时需注意曲线起始点是否与切割方向吻合,当方向相反时所用比例值 =(1-比例数)。以便使点位与切割方向相符。
c.在点位处打断,重排刀路:
接着利用曲线分割函数在刚刚建立的点位处打断曲线,将打断建立的新图素依其位置对刀路图素选择集重排,使打断产生的新图素在刀路正确的序列中。
6.在易断丝处设置暂停点
接着利用曲线分割函数在刚刚建立的点位处打断曲线,将打断建立的新图素依其位置对刀路图素选择集重排,使打断产生的新图素在刀路正确的序列中。
6.在易断丝处设置暂停点
即在给定位置点将刀路打断,并在该位置建立点。(具体方法同5)
7.对刀路进行模拟,以确认刀路序列正确。
8.产生Nc程序
按刀路进行模拟时图素显示顺序产生加工点位坐标序列,再在适当位置插入必要的辅助控制码及G代码。因刀路依次排列的图素不是严格按首尾相接(可能有头接尾的情况), 产生加工点位坐标序列时必须对此进行判别,以保证坐标序列正确。
通过以上过程,实现程序所见即所得。加工参数可直接由输入的模厚自动生成,最终程序格式可根据实际机床灵活调整,避免对不同类型机床需多次编程的弊端;程序设置更加便捷.