#28 = $1; /* 儲存Group[1]狀態 G0/G1/G2/G3 */ #34 = $2; /* 儲存Group[2]狀態 G17/G18/G19 */ GOTO 01000; ;/* 巨集的引數合法判斷 */ N01000 IF( (#11!=#0) && (#11>=0) ) GOTO 01001; #11=1; /* K值重新指定 */ N01001 IF(#16==#0) GOTO 01002; #16=FIX(ABS(#16)); IF(#16>=1) GOTO 01002; #16=1+#16; /* G04 暫停時間必須大於0 */ N01002 GOTO 02000; ;/* 第一次進來巨集的初始化 */ N02000 IF(#30!=#0) GOTO 02099; #30=0; /* 巨集已初始化過 */ ;IF(@1100!=#0) GOTO 02104; IF(#34==17) GOTO 02101; IF(#34==18) GOTO 02102; IF(#34==19) GOTO 02103; ; /* G17 平面 */ N02101 @1100 = $32; /* 第3軸程式座標(如此不需停止預解來取得絕對座標) */ GOTO 02104; ; /* G18 平面 */ N02102 @1100 = $31; /* 第2軸程式座標(如此不需停止預解來取得絕對座標) */ GOTO 02104; ; /* G19 平面 */ N02103 @1100 = $30; /* 第1軸程式座標(如此不需停止預解來取得絕對座標) */ GOTO 02104; N02104 GOTO 02001; N02001 #5 = 1; /* G04暫停時間至少為1才不會卡住 */ #4 = 91; /* XYZ值初始化預設為G91狀態 */ #7 = 91; /* R值初始化預設為G91狀態 */ #27 = $407; /* 參數 G74/G84啄式攻牙循環加工時的刀具逃脫量(LU) */ IF( (0<=#27) && (#27<=32767.) ) GOTO 02099; /* d回退量,由參數決定,#38由控制器填入 */ #27 = 0.2; N02099 GOTO 03000; ;/* 巨集的引數變動,重新指定引數 */ N03000 IF( ($3==#0) || ($3==#29) ) GOTO 03001; #29 = $3; /* G90/G91記錄 */ N03001 IF( ($10==#0) || ($10==#35) ) GOTO 03002; #35 = $10; /* G98/G99記錄 */ #30 = 3; /* 引數更動,需重新計算 */ N03002 IF(#24==#0) GOTO 03003; #40 = #24; /* 第1軸的位置座標值(mm) */ IF(#34!=19) GOTO 03003; #30 = 3; /* 引數更動,需重新計算 */ #4 = #29; /* XYZ值為G90/G91狀態 */ N03003 IF(#25==#0) GOTO 03004; #41 = #25; /* 第2軸的位置座標值(mm) */ IF(#34!=18) GOTO 03004; #30 = 3; /* 引數更動,需重新計算 */ #4 = #29; /* XYZ值為G90/G91狀態 */ N03004 IF(#26==#0) GOTO 03005; #42 = #26; /* 第3軸的位置座標值(mm) */ IF(#34!=17) GOTO 03005; #30 = 3; /* 引數更動,需重新計算 */ #4 = #29; /* XYZ值為G90/G91狀態 */ N03005 IF(#18==#0) GOTO 03006; #48 = #18; /* R點座標值(即回歸點)(mm) */ #30 = 3; /* 引數更動,需重新計算 */ #7 = #29; /* R值為G90/G91狀態 */ N03006 IF( (#16==#0) || (#16==#5) ) GOTO 03007; #5 = #16; /* P暫停時間 */ N03007 IF( (#17==#0) || ((#17==#49)&&(#29!=91)) ) GOTO 03008; #49 = #17; /* Q每次切削進給量(mm) */ #30 = 3; /* 引數更動,需重新計算 */ N03008 GOTO 04000; ;/* 重新計算 */ N04000 IF(#30!=3) GOTO 04005; #30 = 0; /* 重新計算數值 */ IF(#34==17) GOTO 04100; IF(#34==18) GOTO 04101; IF(#34==19) GOTO 04102; N04100; /* G17 平面 */ #8 = #42; /* 啄鑽軸的位置座標值(引數第1~3軸) */ #9 = @1100-$32; /* 起始點至目前座標差量,在第1次動作時補償才能移到R點 */ GOTO 04103; N04101; /* G18 平面 */ #8 = #41; /* 啄鑽軸的位置座標值(引數第1~3軸) */ #9 = @1100-$31; /* 起始點至目前座標差量,在第1次動作時補償才能移到R點 */ GOTO 04103; N04102; /* G19 平面 */ #8 = #40; /* 啄鑽軸的位置座標值(引數第1~3軸) */ #9 = @1100-$30; /* 起始點至目前座標差量,在第1次動作時補償才能移到R點 */ GOTO 04103; N04103 GOTO 04001; N04001; /* 增量模式計算 */ IF(#7!=91) GOTO 04201; #36 = #48; /* 起始點到R點的差量 */ GOTO 04202; N04201; /* 絕對模式計算 */ #36 = #48-@1100; /* 起始點到R點的差量 */ GOTO 04202; N04202; /* 增量模式計算 */ IF(#4!=91) GOTO 04203; #37 = #8; /* R點到孔底的差量 */ GOTO 04204; N04203; /* 絕對模式計算 */ #37 = #8-@1100-#36; /* R點到孔底的差量 */ GOTO 04204; N04204 GOTO 04002; N04002 #20 = @1100 + #36; /* 攻牙R點絕對座標位置 */ /* 啄鑽計算 */ IF( (#49==#0) || (#49==0) ) GOTO 04304; IF(ABS(#37/#49)>1.) GOTO 04301; #47 = 3; /* TYPE III: 行程小於啄鑽量 */ GOTO 04303; N04301 IF($406!=0) GOTO 04302; #47 = 1; /* TYPE I : 啄鑽模式設定(0:高速,1:一般) */ GOTO 04303; N04302 #47 = 2; /* TYPE II : 啄鑽模式設定(0:高速,1:一般) */ GOTO 04303; N04303 GOTO 04305; N04304 #47 = 3; /* TYPE III: 鑽孔沒有指定Q值 */ N04305 GOTO 04003; N04003 IF( (#47!=1) && (#47!=2) ) GOTO 04005; IF(#37 < 0) GOTO 04401; #46 = ABS(#49); /* Q啄鑽量 */ #38 =-ABS(#27); /* d回退量 */ GOTO 04004; N04401 #46 =-ABS(#49); /* Q啄鑽量 */ #38 = ABS(#27); /* d回退量 */ N04004 #39 = FIX(ABS(#37/#49)); /* 啄鑽次數 */ #43 = #37-#46*#39; /* 最後剩餘啄鑽量 */ #39 = #39 - 1; /* 啄鑽次數扣除剩餘啄鑽的最後一次 */ #44 = #46-#38; /* 每次啄鑽深度(切削進給量+回退量) */ #45 = #43-#38; /* 最後一次啄鑽深度(最後剩餘啄鑽量+回退量) */ N04005 GOTO 10000; ;/* 加工程式開始 */ N10000 IF(#11==0) GOTO 10001; IF(#34==17) GOTO 11000; IF(#34==18) GOTO 12000; IF(#34==19) GOTO 13000; N11000; /* G17 平面 */ #31=1; N11001 IF(#31>#11) GOTO 11003; /* K重覆次數 */ G#29 G0 X#24 Y#25 A#1 B#2 C#3 U#21 V#22 W#23 /* 致能剛攻模式 */ G91 G0 Z(#36+#9) F#6; /* 移到R點 */ M11000; /* DISABLE SBK */ M11002; /* DISABLE CHANGE MODE */ M10001; /* Stop Pre-interpretation */ M10029; /* ENABLE RIGTAP MODE */ IF( (#47!=1) && (#47!=2) ) GOTO 11109; G91 G1 Z#46 M3; /* 第1次啄鑽點 */ #32=1; N11100 IF(#32>#39) GOTO 11103; IF(#47!=1) GOTO 11101; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Z#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Z#44 M3; /* 下一個啄鑽點 */ GOTO 11102 N11101 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Z(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Z(#33+#44) M3; /* G84從R點經#95點到下一個啄鑽點 */ GOTO 11102; N11102 #32=#32+1; GOTO 11100; N11103 GOTO 11105; N11105; /* 處理剩餘距離 */ IF(#43==0) GOTO 11108; IF(#47!=1) GOTO 11106; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Z#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Z#45 M3; /* 最後到達孔底位置 */ GOTO 11107; N11106 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Z(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Z(#33+#45) M3; /* G84從R點經#95點到達孔底位置 */ GOTO 11107; N11107 GOTO 11108; N11108 GOTO 11110; N11109 G91 G1 Z#37 M3; /* 移到孔底,當Q無指定=>TYPE_III */ N11110 IF(#35!=99) GOTO 11002; #36=#0; /* G99,清除起始點到R點的差量 */ N11002 M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Z-#37 M4; /* 移到R點 */ M5; /* 主軸停轉 */ M10028; /* DISABLE RIGTAP MODE */ M11003; /* ENABLE CHANGE MODE */ G90 G0 Z#20; /* 修正攻牙未完全到位 */ G4 P#5; /* 孔底暫停時間 */ G91 G0 Z-#36; /* G98移到起始點,G99只到R點 */ #9=#0; /* 清除起始點至目前座標差量(僅第1次動作需補償) */ M11001; /* ENABLE SBK */ #31=#31+1; GOTO 11001; N11003 GOTO 10002; N12000; /* G18 平面 */ #31=1; N12001 IF(#31>#11) GOTO 12003; /* K重覆次數 */ G#29 G0 X#24 Z#26 A#1 B#2 C#3 U#21 V#22 W#23; G91 G0 Y(#36+#9) F#6; /* 移到R點 */ M11000; /* DISABLE SBK */ M11002; /* DISABLE CHANGE MODE */ M10001; /* Stop Pre-interpretation */ ;M10029; /* ENABLE RIGTAP MODE */ IF( (#47!=1) && (#47!=2) ) GOTO 12109; G91 G1 Y#46 M3; /* 第1次啄鑽點 */ #32=1; N12100 IF(#32>#39) GOTO 12103; IF(#47!=1) GOTO 12101 M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Y#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Y#44 M3; /* 下一個啄鑽點 */ GOTO 12102 N12101 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Y(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Y(#33+#44) M3; /* G84從R點經#95點到下一個啄鑽點 */ GOTO 12102 N12102 #32=#32+1; GOTO 12100; N12103 GOTO 12105; N12105; /* 處理剩餘距離 */ IF(#43==0) GOTO 12108; IF(#47!=1) GOTO 12106 M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Y#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Y#45 M3; /* 最後到達孔底位置 */ GOTO 12107; N12106 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Y(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 Y(#33+#45) M3; /* G84從R點經#95點到達孔底位置 */ GOTO 12107; N12107 GOTO 12108; N12108 GOTO 12110 N12109 G91 G1 Y#37 M3; /* 移到孔底,當Q無指定=>TYPE_III */ N12110 IF(#35!=99) GOTO 12002; #36=#0; /* G99,清除起始點到R點的差量 */ N12002 M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 Y-#37 M4; /* 移到R點 */ M5; /* 主軸停轉 */ ;M10028; /* DISABLE RIGTAP MODE */ M11003; /* ENABLE CHANGE MODE */ G90 G0 Y#20; /* 修正攻牙未完全到位 */ G4 P#5; /* 孔底暫停時間 */ G91 G0 Y-#36; /* G98移到起始點,G99只到R點 */ #9=#0; /* 清除起始點至目前座標差量(僅第1次動作需補償) */ M11001; /* ENABLE SBK */ #31=#31+1; GOTO 12001; N12003 GOTO 10002; N13000; /* G19 平面 */ #31=1; N13001 IF(#31>#11) GOTO 13003; /* K重覆次數 */ G#29 G0 Y#25 Z#26 A#1 B#2 C#3 U#21 V#22 W#23; G91 G0 X(#36+#9) F#6; /* 移到R點 */ M11000; /* DISABLE SBK */ M11002; /* DISABLE CHANGE MODE */ M10001; /* Stop Pre-interpretation */ ;M10029; /* ENABLE RIGTAP MODE */ IF( (#47!=1) && (#47!=2) ) GOTO 13109 G91 G1 X#46 M3; /* 第1次啄鑽點 */ #32=1; N13100 IF(#32>#39) GOTO 13103; IF(#47!=1) GOTO 13101; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 X#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 X#44 M3; /* 下一個啄鑽點 */ GOTO 13102 N13101 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 X(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 X(#33+#44) M3; /* G84從R點經#95點到下一個啄鑽點 */ GOTO 13102; N13102 #32=#32+1; GOTO 13100; N13103 GOTO 13105; N13105; /* 處理剩餘距離 */ IF(#43==0) GOTO 13108; IF(#47!=1) GOTO 13106; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 X#38 M4; /* G73僅退回退量 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 X#45 M3; /* 最後到達孔底位置 */ GOTO 13107; N13106 #33=#46*#32+#38; M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 X(#38-#33) M4; /* G83先退到#95,再退到R點 */ M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G1 X(#33+#45) M3; /* G84從R點經#95點到達孔底位置 */ GOTO 13107; N13107 GOTO 13108; N13108 GOTO 13110 N13109 G91 G1 X#37 M3; /* 移到孔底,當Q無指定=>TYPE_III */ N13110 IF(#35!=99) GOTO 13002; #36=#0; /* G99,清除起始點到R點的差量 */ N13002 M5; /* 主軸停轉 */ G4 P#5; /* 孔底暫停時間 */ G91 G1 X-#37 M4; /* 移到R點 */ M5; /* 主軸停轉 */ ;M10028; /* DISABLE RIGTAP MODE */ M11003; /* ENABLE CHANGE MODE */ G90 G0 X#20; /* 修正攻牙未完全到位 */ G4 P#5; /* 孔底暫停時間 */ G91 G0 X-#36; /* G98移到起始點,G99只到R點 */ #9=#0; /* 清除起始點至目前座標差量(僅第1次動作需補償) */ M11001; /* ENABLE SBK */ #31=#31+1; GOTO 13001; N13003 GOTO 10002; N10001; /* K重覆次數若設0,僅做軸向移動 */ IF(#34==17) GOTO 14000; IF(#34==18) GOTO 14001; IF(#34==19) GOTO 14002; N14000; /* G17 平面 */ G#29 G0 X#24 Y#25 A#1 B#2 C#3 U#21 V#22 W#23; GOTO 14003; N14001; /* G18 平面 */ G#29 G0 X#24 Z#26 A#1 B#2 C#3 U#21 V#22 W#23; GOTO 14003; N14002; /* G19 平面 */ G#29 G0 Y#25 Z#26 A#1 B#2 C#3 U#21 V#22 W#23; GOTO 14003; N14003 GOTO 10002; N10002 GOTO 20000; ; /* 程式結束 */ N20000 #11 = #0; /* K VACANT */ #16 = #0; /* P VACANT */ #17 = #0; /* Q VACANT */ #18 = #0; /* R VACANT */ #24 = #0; /* X VACANT */ #25 = #0; /* Y VACANT */ #26 = #0; /* Z VACANT */ #1 = #0; /* A VACANT */ #2 = #0; /* B VACANT */ #3 = #0; /* C VACANT */ #21 = #0; /* U VACANT */ #22 = #0; /* V VACANT */ #23 = #0; /* W VACANT */ G#29 G#28; /* Restore modal */ M99; ;/**********************************************************************/ ;/* 建立日期: 2011-12-07 By JH */ ;/* 最後修改: 2011-12-07 By JH */ ;/* 指令說明: 右螺紋攻牙循環 */ ;/* 指令用法: G84 X_ Y_ Z_ R_ P_ Q_ K_ F_ */ ;/**********************************************************************/