机床图纸吧 关注:25贴子:193
  • 7回复贴,共1

宏程序在简单,大批量产品(内加工)加工的应用实例,原创

只看楼主收藏回复

先介绍一下产品,6个厚的Q235板,如图

加工6个直径12孔公差0到11丝
2个48孔,1个18孔,1个24孔,1个28孔,1个38孔,公差各正6.3丝
冷却方式:吹气
工步:
1. 11.7钻头钻上面所有孔位,不点孔
2.16R0.8铣刀粗加工第二排文字所写的6个孔
3.12硬质合金两刃铣刀,镗6个直径12孔 , (方法,使用ER夹头,单边垫张厚度0.04纸张,夹紧后加工,第一个孔+0.10 1300个孔后+0.05,把刀松开垫在对面,再加工1300个孔,然后线切割割去刀具一段,磨刀再加工)
4.12硬质合金两刃铣刀光工步2的6个孔
我进厂前程序是手工编的,用子程序,存在问题: 可能因为气冷的原因,16R0.8铣刀粗加工后的尺寸变化大,导致工步4光刀后的尺寸不稳定(让刀),5到6件产品就得改尺寸,也没在半径补偿,我到现在也没发现有几个人会用半径补偿,改尺寸改错导致报废的也时有发生,16R0.8铣刀换刀片后,工步4的尺寸又得重新调整
工具3原来是两个工步,因为没有镗刀,原来8的铣刀螺旋开粗后用10的铣刀光刀,因为麻烦,所以我进厂之前人都跑光了
为了减少自己的劳动量,变智力劳动为纯体力劳动,我用心研究一下,准备用参数化编程来一次性解决上面的问题
程序介绍在二楼
以下可以不看,
参数化编程的概念可以参考UG的参数化建模,像G81,G82这样的固定循环就是,打个比方,你铣个长多少宽多少,高多少的立方体, 编程直接用宏程序做好铣立方体的宏程序,调用时输长多少宽多少深多少这样的方式就是了


IP属地:江苏1楼2016-12-03 18:55回复
    产品主程序,程序分公步介绍在3楼
    %
    O0021
    (CTB V2 2015/1/8)
    (8 RS.150.341 OR 342)
    (-----------)
    (11.7ZT #508)
    #5=120.( SEZI)
    IF[#508GE#5]THEN#3000=1( MO 10 ZUANDOU)
    (16R0.8 #509)
    #5=40.( SEZI)
    IF[#509GE#5]THEN#3000=2( D16R0.8 HUAN DAO PIAI)
    ( 12JT #512)
    #5=180.( SEZI)
    IF[#510GE#5]THEN#3000=3( MO 12JT)
    (-----------)
    ( 11.7ZT #508)
    G91G28Z0.
    M6T1
    T2
    G0G90G54X-35.Y-17.M3S700
    G43H1Z80.M09
    G98G73Z-11.5Q4.R2.F150.
    (24)
    X-21.Y-45.
    (12)
    X-15.Y-68.
    X-140.Y-20.
    (28)
    X-135.Y-55.
    (18)
    X-155.Y-95.
    (12)
    X-174.Y-106.
    (38)
    X-200.Y-90.
    (48)
    X-245.Y-50.
    X-309.5Y-65.
    (12)
    X-321.Y-106.
    X-346.Y-17.
    G80
    M5
    M9
    #508=#508+1.
    G91G28Z0.
    M01
    ( D16 R0.8 #509)
    M6T2
    T7
    G0G90G54X-309.5Y-65.M3S1800
    G43H2Z80.M09
    (-----)
    #3=16.40( D)
    #4=0.0035(MOSUN)
    #5=-8.5( Z)
    (------)
    IF[#4GE0.01]THEN#3000=5
    #2=#3-#509*#4
    G65P2345A48.07B32.C1.D#2R3.H1.Z#5Q0.4F2000.X-309.5Y-65.
    G65P2345A48.09B32.C1.D#2R3.H0.5Z#5Q0.4F2500.X-245.Y-50.
    G65P2345A38.09C1.D#2R3.H0.5Z#5Q0.4F2400.X-200.Y-90.
    G65P2345A18.12C1.D#2R3.H0.5Z#5Q0.3F1100.X-155.Y-95.
    G65P2345A28.12C1.D#2R3.H0.5Z#5Q0.5F2300.X-135.Y-55.
    G65P2345A24.17C1.D#2R3.H1.Z#5Q0.5X-21.Y-45.
    M5
    M09
    #509=#509+1.
    G91G28Z0.Y0.
    M01
    (12JT #512)
    M6T7
    T5
    (12)
    G0G90G54X-15.Y-68.M3S1000
    G43H7Z80.M09
    G98G81Z-8.5R1.P1000F120.
    X-35.Y-17.
    X-140.Y-20.
    X-174.Y-106.
    X-321.Y-106.
    X-346.Y-17.
    M9
    M5
    G91G28G0Z0.Y0.
    #512=#512+1.
    M00
    ( D12 J)
    M6T5
    T1
    G0G90G54X-309.5Y-65.M3S2000
    G43H5Z80.M09
    (------)
    #3=11.98( D)
    #4=0.0003(MOSUN)
    #5=-8.( Z)
    (------)
    IF[#4GE0.001]THEN#3000=5
    #2=#3-#511*#4
    F500
    ( D48)
    G65P2345A48.10C4.D#2R-5.H0.5Z#5X-309.5Y-65.
    G65P2345A48.11C4.D#2R-5.H0.5Z#5X-245.Y-50.
    ( D38)
    G65P2345A38.11C4.D#2R-5.H0.5Z#5X-200.Y-90.
    ( D18)
    G65P2345A18.11C4.D#2R-5.H0.5Z#5X-155.Y-95.
    ( D28)
    G65P2345A28.11C4.D#2R-5.H0.5Z#5X-135.Y-55.
    ( D24)
    G65P2345A24.11C4.D#2R-5.H0.5Z#5X-21.Y-45.
    #511=#511+1.
    M5
    M09
    G91G28Z0.Y0.
    G0G90X-150.
    M01
    M6T1
    #501=#501+1.
    #513=#513+1.
    M30
    %


    IP属地:江苏2楼2016-12-03 18:55
    回复
      程序头
      (-----------)
      (11.7ZT #508)
      #5=120.( SEZI)
      IF[#508GE#5]THEN#3000=1( MO 10 ZUANDOU)
      (16R0.8 #509)
      #5=40.( SEZI)
      IF[#509GE#5]THEN#3000=2( D16R0.8 HUAN DAO PIAI)
      ( 12JT #512)
      #5=180.( SEZI)
      IF[#510GE#5]THEN#3000=3( MO 12JT)
      刀具寿命管理,#5是计数器
      加工数量到达后报警,要求换刀片或磨刀
      IF[#508GE#5]THEN#3000=1( MO 10 ZUANDOU) 这一行10应为11.7钻头,原来是10的钻头,没改


      IP属地:江苏3楼2016-12-03 18:55
      回复
        工步1钻头不说明了,工步2 16R0.8铣刀
        ( D16 R0.8 #509)
        M6T2
        T7
        G0G90G54X-309.5Y-65.M3S1800
        G43H2Z80.M09
        (-----)
        #3=16.40( D) 刀具直径补偿
        #4=0.0035(MOSUN) 刀具自动磨损补偿因子
        #5=-8.5( Z)
        (------)
        IF[#4GE0.01]THEN#3000=5 保险,防输错
        #2=#3-#509*#4 根据刀具直径补偿和磨损补偿以及加工数量求得的实际刀具直径
        以下为宏程序调用,也就是上面的说的参数化编程,
        G65P2345A48.07B32.C1.D#2R3.H1.Z#5Q0.4F2000.X-309.5Y-65.
        G65P2345A48.09B32.C1.D#2R3.H0.5Z#5Q0.4F2500.X-245.Y-50.
        G65P2345A38.09C1.D#2R3.H0.5Z#5Q0.4F2400.X-200.Y-90.
        G65P2345A18.12C1.D#2R3.H0.5Z#5Q0.3F1100.X-155.Y-95.
        G65P2345A28.12C1.D#2R3.H0.5Z#5Q0.5F2300.X-135.Y-55.
        G65P2345A24.17C1.D#2R3.H1.Z#5Q0.5X-21.Y-45.
        M5
        M09
        #509=#509+1. 计数器,本刀具加工数量加1 #509在换刀片后手工清零,不清零程序报警
        G91G28Z0.Y0.
        M01
        计数器和磨损补偿因子的存在使16R0.8铣刀开粗的尺寸达到稳定
        工步4就不介绍了,与工具2类似,下一楼介绍宏子程序的调用格式及功能


        IP属地:江苏4楼2016-12-03 18:56
        回复
          G65 P2345 A B C D R H Z Q X Y F
          C模式
          C1 螺旋下刀,不光底 G65 PXXXX ABCDRHZQXYF
          C2 光刀,一刀 G65 PXXXX ACDRZXYF
          C3 分层下刀, 不光底 G65 PXXXX ACDRHZQXYF
          C4 Z抬高1MM,螺旋0.5光两刀 G65 PXXXX ACDRZXYF
          C5 螺旋下刀,光底 G65 PXXXX ABCDRHZQXYF
          C6 T型刀模式,绕圈 G65 PXXXX ABCDRZQXYF
          A B参数,A加工大孔,B加工小孔,针对需要分两次加工完的模式,如C1,C5,,,对于C6模式来说,B参数为起始加工直径
          D为刀具直径
          R为最小安全平面
          H为进刀点
          Z为深度
          Q为吃刀量
          XY为孔中心点坐标
          F为进给
          求大神做个UG8.5螺旋铣后处理,直接生成以上的宏程序


          IP属地:江苏5楼2016-12-03 18:57
          回复
            下面的M00实为M99,但M99只能传入机床一段,余下的为传入另外一个程序,只好用M00代替了,传入机床后再改为M99,程序第一段有中文说明的为规则,约束操机者的行为,防止程序出错,我认为建立规则是宏程序里很重很重的一部分
            %
            O2345( XI YUAN 2013/06/14)
            ( A B C D R H Z Q X Y F)
            (---------)
            IF[#1LE0.] THEN #3000=1(A ERROR) A参数不能小于等于0
            IF[#2LT0.] THEN #3000=2(B ERROR) B参数不能小于等于0
            IF[#2GE#1] THEN #3000=2(B ERROR) B参数不能大于等于A
            IF[#7GE#1] THEN #3000=3(D ERROR) D参数不能大于等于A
            IF[#18EQ#0] THEN #3000=4(R ERROR) R参数不能为空
            IF[#26EQ#0]THEN #3000=5(Z ERROR) Z参数不能为空
            IF[#24EQ#0]THEN#24=#5001 如果X为空则X为当前MCS值X
            IF[#25EQ#0]THEN#25=#5002 如果Y为空则Y为当前MCS值Y
            IF[#11EQ#0]THEN#11=#18 如果H参数值为空则H参数等于R
            IF[#11GT#18]THEN#11=#18 如果H参数大于R则H参数等于R
            IF[#26GT#11]THEN#26=#11 如果Z参数于等H则Z参数等于H
            IF[#9EQ#0]THEN#9=#4109 如果F参数为空则F参数等于当前模态F值
            #17=ABS[#17] Q值为绝对值
            #6=#5003 #6为当前MCS Z值
            #100=[#1-#7]/2 #100为(A-D)/2
            #101=[#2-#7]/2 #101为(B-D)/2
            #102=#24+#101 #102为X+#101
            #103=#24+#100 #103为X+#100
            (---------) 模式选择
            IF[#3EQ1.]GOTO1
            IF[#3EQ2.]GOTO3
            IF[#3EQ3.]GOTO6
            IF[#3EQ4.]GOTO7
            IF[#3EQ5.]GOTO9
            IF[#3EQ6.]GOTO11
            #3000=6( C ERROR)
            N1
            ( --- C1---)
            (ABCDRHZQXYF)
            IF[#17EQ0.]THEN #3000=7(Q ERROR)
            IF[#2EQ#0]GOTO2
            IF[#7GE#2]THEN #3000=2(B ERROR)
            (B)
            G0G90X#102Y#25
            Z#18
            #104=#11
            G01Z#104F[#9/8]
            WHILE[#104GE#26]DO1
            #104=#104-#17
            G03I-#101Z#104F#9
            END1
            G91G01X-0.1
            G0G90Z#18
            (A)
            N2G0G90X#103Y#25
            Z#18
            #104=#11
            G01Z#104F[#9/8]
            WHILE[#104GE#26]DO2
            #104=#104-#17
            G03I-#100Z#104F#9
            END2
            G91G01X-0.1
            G0G90Z#6
            M00
            N3
            (--- C2---)
            (ACDRZXYF)
            IF[#100GT2.]THEN#24=#24+#100-2.
            #106=#100/2.
            IF[#100GT2.]THEN#106=1.
            G0G90X#24Y#25
            Z#18
            G01Z#26F[#9/2]
            G03X#103Y#25R#106F#9
            G03I-#100
            G01G91X-0.1
            G0G90Z#6
            M00
            N6
            (---C3---)
            (ACDRHZQXYF)
            IF[#17EQ0.]THEN #3000=7(Q ERROR)
            G0G90X#24Y#25
            Z#18
            #104=#11
            G01Z#104F#9
            WHILE[#104GE#26]DO2
            G01Z#104F[#9/3]
            G03X#103Y#25R[#100/2]F#9
            G03I-#100
            G03X#24Y#25R[#100/2]
            #104=#104-#17
            END2
            G0G90Z#6
            M00
            N7
            (---C4---)
            (ACDRZXYF)
            IF[#100GT2.]THEN#24=#24+#100-2.
            #106=#100/2.
            IF[#100GT2.]THEN#106=1.
            G0G90X#24Y#25
            Z#18
            G01Z[#26+1.]F[#9/2]
            G03X#103Y#25R#106F#9
            G91
            G03I-#100Z-0.5
            G03I-#100Z-0.5
            G01G91X-0.1
            G0G90Z#6
            M00
            N9
            (---C5---)
            (ABCDRHZQXYF)
            IF[#17EQ0.]THEN #3000=7(Q ERROR)
            IF[#2EQ#0]GOTO8
            IF[#7GE#2]THEN #3000=3(D ERROR)
            (B)
            G0G90X#102Y#25
            Z#18
            #104=#11
            G01Z#104F[#9/8]
            WHILE[#104 NE#26]DO1
            #104=#104-#17
            IF[#104 LT #26] THEN #104=#26
            G03I-#101Z#104F#9
            END1
            G03I-#101 F[#9/2]
            G91G01X-0.1
            G0G90Z#18
            (A)
            N8G0G90X#103Y#25
            Z#18
            #104=#11
            G01Z#104F[#9/8]
            WHILE[#104 NE#26]DO2
            #104=#104-#17
            IF[#104 LT #26] THEN #104=#26
            G03I-#100Z#104F#9
            END2
            G03I-#100 F[#9/2]
            G91G01X-0.1
            G0G90Z#6
            F#9
            M00
            N11
            (---C6---)
            (ABCDRZQXYF)
            IF[#17EQ0.]THEN #3000=7(Q ERROR)
            IF[#2EQ#0]THEN #3000=2(B ERROR)
            G0G90X#24Y#25
            Z#18
            #104=#101
            G01Z#26F#9
            #107=#9
            WHILE[#104 NE#100]DO2
            #104=#104+#17
            IF[#104 GT #100] THEN#104=#100
            #105=#24+#104
            IF[#104 EQ #100] THEN#107=#107/2
            F#107
            G03X#105Y#25R[#104/2]
            G03I-#104
            G03X#24Y#25R[#104/2]
            END2
            G0G90Z#6
            F#9
            M00
            N119#3000=1( ERROR)
            %


            IP属地:江苏6楼2016-12-03 18:58
            回复
              写了几个小时了,大家鼓鼓掌啊,下次我把UG可以直接编程出具有刀具磨损补偿因子和刀具寿命管理的后处理发上来,现在正在研究中


              IP属地:江苏8楼2016-12-03 18:58
              回复
                每天自动清零加工数量的宏程序供大家研究学习用,没啥实际用途
                %
                O005
                (1)
                #802= FIX[#3012/10000.]
                IF[ FIX[#802/8] NE[#802/8]] THEN#801=0.
                IF[ FIX[#802/8] NE[#802/8]] GOTO100
                IF[#801 EQ0.] THEN#3901=0.
                #801=1.
                N100 M30
                %
                %
                O005
                (2)
                IF[#802 EQ#3011] GOTO100
                3901=0.
                #802=#3011
                N100 M30
                %
                (1)加工数量在每第一次满足时间小时8,16,0时清零,以上主程序
                (2)加工数量每天清零
                用来修改系统指令 M30的方法
                MDI方式下,写参数保护为1
                参数3202号 #4(NE9)改为0
                上面程序名改为 O9003
                参数6073号改为30
                参数3202号#4改为1
                MDI方式,写参数护改为0
                根据变量表:


                IP属地:江苏9楼2016-12-03 18:59
                回复