精華區beta Mechanical 關於我們 聯絡資訊
※ 引述《a777starmy (那些年一起ptt的日子)》之銘言: : 用直徑4的刀具銑一個平面 : X:8 U:0 銑2刀[下刀點分別為6(第1刀)、2(第2刀)] : X:9 U:0 銑3刀[下刀點分別為7(第1刀)、4(第2刀)、2(第3刀)] : 現在問題來了,我寫了一個Macro : #24= (X) 最遠的加工X點 : #21= (U) 走到U點 : #20= (T) 刀具直徑 : While[[#24-#21] GT #20] Do 1; : G01 X[#24-[#20/2]] F#9; : END 1; : M05; : G91 G28 Z0; 試著寫一下 (#24=X, start point, width, x direction) (#21=U, end point, width, x direction) (#25=Y, start point, length, y direction) (#22=V, end point, length, y direction) (#26=Z, tool nose point) (#20=T, tool diameter) (#9=F, feedrate) Oxxxx; ...... ...... IF [#24 EQ #21] GOTO 999; IF [#20 LE 0] GOTO 999; (Set start and end point) IF [#24 GT #21] GOTO 10 #1 = #24; (Start point) #2 = #21; (End point) GOTO N20; N10; #1 = #21; (Start point) #2 = #24; (End point) N20; (Calculate step increament) #3 = #20*0.8 (20% overlap) (Set initial point) IF [#2-#1 LE #20/2] GOTO N30; #4 = #1 + #20/2; (Initial point) GOTO N40; N30; #4 = [#1+#2]/2; (Initial point) N40; (Goto initial point) G90 G0 X[#4] Y[#25]; G1 Z[#26] F500; (Start machining) #5 = 0; (counting) WHILE [#4 LT #2] DO1; G1 X[#4] F[#9]; IF [#5 MOD 2 EQ 0] THEN GOTO 100; G1 Y[#25] F[#9]; GOTO 110; N100; G1 Y[#22] F[#9]; N110; #4 = #4 + #3; #5 = #5 + 1; END1; G91 G28 Z0.; ...... ...... N999; M99; 沒有測試過,不過大概的原理是這樣 1. 起始位置 #1 和終止位置 #2 不管傳進來的參數誰大誰小,永遠是 #2 > #1 2. 如果傳進來的起始位置 = 終止位置,就跳到程式結尾不執行 3. 設定每刀切寬 #3 為刀具直徑的 80% 4. 切削起始位置 #4 有兩種設定方式   (1) 如果 #2 - #1 比刀具半徑還要大,則設定為 #1 + 刀具半徑   (2) 如果 #2 - #1 比刀具半徑還小,則設定為 [#2+#1]/2,也就是指定位置的中間 5. 迴圈中的銑削模式為來回銑削,設置 counting #5 決定移動方向 #5 為 2 的倍數時執行 Y(#25) -> V(#22) #5 不是 2 的被數時執行 V(#22) -> Y(#25) : 問題是怎麼讓它跑迴圈??用一把直徑4的刀子,可以跑X-U=20,也可以跑X-U=4的 : 用IF是可以寫的出來,但不知有無人有學過迴圈的寫法??? : 原理是:(X-U)/T 看有無小數點,有的話最後一刀的下刀點在 U+(T/2),不然最後那塊 : 肉無法銑到!! : 第一刀的下刀點則為X-(T/2) : U (T/2) X <==座標 : ----------- ---- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.41.24.40
d1d1:先推程式寫的很整齊,看了就爽 06/20 07:22
whface:附和板大講的! 06/20 12:53
yuleen123:對了,刀具直徑不要用參數傳入,直接讀刀補的資料比較好 06/20 13:00
johnnycgi:專業清爽的程式與良好的註解習慣,看了就爽 +1 06/23 14:20