※ 引述《redapple34 (apple)》之銘言:
: 最近在學macro編成,使用新代控制器,使用上跟發那科大同小異,語法也都相同,
: 我目前想編寫一個簡易面銑加工,以工作臺面為程式Z軸0點,目標是把工件高度
: 銑到成品尺寸,我想編寫到向人機介面一樣輸入我要的數值完成加工,免除繁雜
: 的計算,使用機台是小龍門,macro語法邏輯我還不是很清楚是如何運作,希望各
: 位高手指導指導
: 以下為我目前寫的程式(有很多錯誤請見諒,因未完成不知道如何寫):
: //(面銑加工單向進刀)
: #1=230. //(粗銑轉速)
: #2=300. //[粗銑進給速度F(mm/min)]
: #3=320. //(精銑轉速)
: #4=180. //[精銑進給速度F(mm/min)]
: #5=25.4 //(成品高度)
: #6=2. //(粗銑切削深度)
: #7=0.3 //(精銑切削深度)
: #8=300. //(X軸正向進給行程)
: #9=-300. //(X軸反向進給行程)
: #10=100. //(面銑刀具直徑)
: #11=#10*0.8 //(切削總面積百分比)
: #12=80. //(成品切削總寬,Y軸)
: #13=#5+#7 //(粗銑最終高度)
: #14=10. //(提刀安全高度)
: G43 H1
: N010 G00 G90 G92 X0. Y0. Z0. S#1 M03; //(將刀具移動至起始點,粗銑)
: N012 G91 G01 Z-#6 F#2
: N013 X#8;
: N014 G90 G00 Z#14;
: N015 G91 G00 X#9 Y#11;
: N016 G91 G01 Z-#6
: N017 X#8;
: N018 G90 G00 Z#14;
: N019 IF (Z#5+#7>=Z#13) AND (#12<#11) THEN GOTO N020;
: END IF;
: N020 G91 G01 Z-#7 S#3 F#4 //(精銑)
: N021 X#8;
: N022 G90 G00 Z#14;
: N023 G91 G00 X#9 Y#11;
: N024 G91 G01 Z-#7
: N025 X#8;
: N026 G90 G00 Z#14;
: N027 IF (#12<#11) THEN END IF;
: N028 G28 Z#14
: N029 G28 X0.
: N030 M30
: 以上為程式
: 目前先寫一個看看
由於原po的macro都是存成固定數值 因此並不會隨著加工程序或次數變化
也因此原po的IF並不會等於 TRUE
由於原po在執行IF的前一行已經把刀子提到Z#14的工件座標位置
因此用座標來當判斷依據也沒用
所以在不變動目前macro設定的前提下 得新增兩個macro做暫存區之用
一個儲存粗胚高度 #15
一個為計數用#16=0
一個儲存銑削後高度 #17=#15-#6*#16
目前建議用WHILE
當執行過一次粗銑 #16就+1
WHILE(#17>#13)
{
//執行粗銑 把整個面都銑掉
G91 G01 Z-#6*#16 F#2
X#8;
G90 G00 Z#14;
G91 G00 X#9 Y#11;
G91 G01 Z-#6*#16
X#8;
G90 G00 Z#14;
//上述指令執行完成後 #16+1
#16=#16+1
}
同時#17的數字也會改變
從#17=#15-#16*0=#15
變成#17=#15-#16*1=#15-#16
只要WHILE的啟動條件不被滿足 也就是 #17<=#13時(粗銑後的高度<=精銑預留的高度)
程式就會忽略WHILE
往下一行讀
接著就把精銑的指令接著寫就好
由於原po的圖 精銑應該只執行一次
所以就不用任何的loop了
大致上是這樣
有錯誤煩請板友指正 感謝!