找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 20798|回复: 9
打印 上一主题 下一主题

[分享] Mastercam 2D toolpath 拐角减速及圆弧速度改写后处理

[复制链接]
跳转到指定楼层
1
发表于 2012-11-6 08:33:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
UG 等其它Cam软件 2D刀路都有拐角减速及圆弧插补进给速度改写功能,MasterCAM通过编写后处理可以实现,方法下叙,代码下载地址:https://attao.blog.163.com/blog/static/205398212201210313339485/

修改pncoutput       #Movement output  
........................................
      if gcode$ = one & mi3$ = 0, plinout
      if gcode$ = one & mi3$ < 0, plinout_force_f
      if gcode$ = one & mi3$ >0, plinout_corner_dec
      if (gcode$ > one & gcode$ < four) & mi3$ = 0, pcirout
      if (gcode$ > one & gcode$ < four) & mi3$, pcirout_corner_dec
.........................................

后处理末尾插入以下代码
#----------------------------------------------------------------------------------------------------------------------
#功能说明
# 2D toolpath corner decelerate  #2D拐角减速及圆弧插补减速后处理
# Only support ABS. NCI point  #仅支持绝对编程方式
# support G02/G03 feed override, arcoutput$=1 #支持圆弧插补减速
# Nonsupport post 3D NCI, Nonsupport post Ramp #不支持3D刀路,不支持螺旋插补
#mi3$                  #mi3 进给改写,编程时在Misc values输入
                           #正值表示直线和圆弧都减速,
                           #负值仅圆弧减速,
                           #0不启用减速后处理。
#-----------------------------------------------------------------------------------------------------------------------
#用户参数
#min_distance : 5      # setting min_distance to break 直线减速距离,打断长度5
#skip_distance :10     # to skip the line length small than直线长度小于10,直接减速不打断
#small_r       : 2     # <= R2 use ov_f overiide feed  小于等于R2用Mi3参数改写圆弧插补进给
#big_r         : 10    # R2<R<=R10 use 80% feed$ override feed 小于等于R10且大于R2圆弧用80%进给改写,大于R10圆弧不改写进给
#-------------------------------------------------------------------------------------------------------------------------
#作者信息
# Programmer TA   
# Version v1.0
# Date 2012-10
# Contact email etg_taoshx@163.com
# Blog https://attao.blog.163.com
#请保留开发者个人信息,以示对作者尊重
#----------------------------------------------------------------------------------------------------------------------
fmt   1  x1    # line end point one
fmt   1  y1     
fmt   1  z1   
fmt   1  x2    # line end point two
fmt   1  y2
fmt   1  z2
#-------
fmt   1  xcenter         # arc data
fmt   1  ycenter
fmt   1  radius
fmt   1  start
fmt   1  arcsweep
#--------
fmt   "X" 2  int1x       # intersect point one (result point)
fmt   "Y" 2  int1y
fmt   "Z" 2  int1z
fmt   "X" 2  int2x       # intersect point one (result point)
fmt   "Y" 2  int2y
fmt   "Z" 2  int2z
#-----------
fmt  "F" 15  ov_f
fmt  "F" 15  ov_f2
#----------
fmt   1    min_distance
fmt   1    skip_distance
fmt   1    skip_dis
fmt   1    small_R
fmt   1    big_R

xtol$   :  0.00001    # tolerance, default = 0.0001
skip_dis :0           # Do not modify
min_distance : 5      # setting min_distance to break
skip_distance :10     # to skip the line length small than
small_r       : 2     # <= R2 use ov_f overiide feed
big_r         : 10    # R2<R<=R10 use 80% feed$ override feed
plinout_corner_dec  # postline to set corner decelerate   
  
           ov_f=feed          #init. feed
           if mi3$,ov_f=abs(mi3$)  # mi3$ override feed

           ptnearx$  =  xabs  # near point
           ptneary$  =  yabs
           ptnearz$  =  0
           x1  =  prv_xabs   # line start point one
           y1  =  prv_yabs
           z1  =  zabs
           x2  =  xabs     # line end point two
           y2  =  yabs
           z2  =  zabs
           xcenter   =  prv_xabs    # findinter
           ycenter   =  prv_yabs
           radius   =  min_distance
           start    =  0
           arcsweep  =  360
           int1x  =  xla(x1,xcenter)         
           if (t1$<0.998&t1$>0.002),skip_dis=min_distance/t1$
           if ((t1$<0.998&t1$>0.002)&skip_dis>skip_distance),pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia, *int1x, *int1y, *ov_f, e$
           # "(","intersect P1 ",*int1x," ",*int1y, " ",*int1z," ", " ", "startpiont ",*x1," ",*y1," ",*z1," ", "endpiont "*x2," ",*y2," ",*z2,*t1$,*t2$,"skip_dis",*skip_dis,"skip_distance",*skip_distance,")",e$ # only For debug
         
   
           ptnearx$  =  prv_xabs  # near point
           ptneary$  =  prv_yabs
           x1  =  prv_xabs   # line start point one
           y1  =  prv_yabs
           z1  =  zabs
           x2  =  xabs       # line end point two
           y2  =  yabs
           z2  =  zabs
           xcenter   =  xabs    # findinter
           ycenter   =  yabs
           radius   =  min_distance
           start    =  0
           arcsweep  =  360
           int1x  =  xla(x1,xcenter)
           
           if ((t1$<0.998&t1$>0.002)&skip_dis>skip_distance),pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc,pccdia, *int1x, *int1y, *feed, e$
           # "(","intersect P2 ",*int1x,*int1y,*int1z," ", " ", "startpiont ",*x1," ",*y1," ",*z1," ", "endpiont "*x2," ",*y2," ",*z2,*t1$,*t2$,"skip_dis",*skip_dis, "skip_distance",*skip_distance,")",e$ #only For debug

           if (t1$>0.998|t1$<0.002), pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,pxout, pyout, pzout, pcout, *feed, strcantext, e$ # plung linout
           else,pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,pxout, pyout, pzout, pcout, *ov_f, strcantext, e$ #linout
         

pcirout_corner_dec # postline to set corner decelerate
      ov_f=feed          #init. ov_f feed
      ov_f2=0.8*feed     #init. ov_f2 feed
      if mi3$,ov_f=abs(mi3$)  # mi3$ override feed
      if compwarn, pcompwarn
      if hel_2100 = one, pcirout2
      else, pcirout1_dec
pcirout1_dec        #Output to NC of circular interpolation
      if arcrad$<=small_r,
      pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,pxout, pyout, pzout, pcout, parc, *ov_f, strcantext, e$  #,"(","r<=2,ovf",")",e$ #only for debug
      if arcrad$>big_r,
      pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,pxout, pyout, pzout, pcout, parc, *feed, strcantext, e$  #,"(","r>10,feed",")",e$ #only for debug
      if arcrad$<=big_r&arcrad$>small_r,
      pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,pxout, pyout, pzout, pcout, parc, *ov_f2, strcantext, e$ #,"(","10<=R & R>2,ov_f2",")",e$ #only for debug

plinout_force_f      #Output to NC of linear movement - feed                    
        
        pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,
        pxout, pyout, pzout, pcout, *feed, strcantext, e$
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2012-11-6 10:33:23 | 只看该作者
哥们你是苏州 MC 代理公司的??
3
发表于 2012-11-13 15:11:42 | 只看该作者
不知道是不是我改的不对,加在后面之后生成的代码没变化呀。
4
发表于 2012-11-13 15:34:16 | 只看该作者
#mi3$                  #mi3 进给改写,编程时在Misc values输入
5
发表于 2013-3-2 09:19:22 | 只看该作者
高手好多啊!
6
发表于 2013-7-17 16:57:33 | 只看该作者
高,实在是高
7
发表于 2013-7-17 23:55:00 | 只看该作者
太强大了
8
发表于 2016-5-25 09:10:01 | 只看该作者
太厉害了!
9
发表于 2016-8-9 16:03:17 | 只看该作者
终于找到这个资料了,太感谢楼主了。
10
发表于 2016-11-17 14:31:47 | 只看该作者
找了好久,方便了点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-26 22:39 , Processed in 0.029870 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表