螺旋铣削宏优化(第三版,例行更新!)
原帖见UG螺旋铣削宏最强版本可以模态(希望升为精华帖!)
第二版见螺旋铣削宏最强版本(第二版,最实用更新!)
闲话不多说,本次更新内容如下:
1,优化程序结构。增加了F值默认。(之前不能缺省F,省略了有时会发生一些莫名其妙的问题。)
2,修正了K值缺省的小bug。(之前机床第一次运行时如果缺省了K值会报错,达不到默认的效果。当然之后没有指定则不会报错,程序也会正常运行。本次修正之后,则可以避免这个问题。)
欢迎各种挑毛病,提要求。本人会持续维护该螺旋宏的更新活动。
使用格式:G133 X_Y_Z_R_Q_C_D_K_F_
使用说明:
1. 支持Z值与R值,高低位置不限定。均从R值起始螺旋。
2. Q值为固定螺距,不必区分螺距整除。
3. K值有四种状态可选:K02,K03,K12,K13
十位为0表示螺纹末尾添加清理刀路为1表示不添加
个位为2表示顺时针螺旋,为3表示逆时针螺旋
当K值缺省时,则默认K03即逆时针螺旋带清理刀路
4.F值可以指定也可以继承模态
调用示例:
G54G43 G90G0Z50
M3S1000F2000
G133 X100 Y0 Z-20 R3 C20 D30 Q1 (D20的铣刀做30的圆20个深)
G133X0(X0Y0位置做50的圆)
G133D50(X0Y0位置做50的圆)
M5
M30
G133自定义指令设定方法:
1, 确认参数#3202的NE9为0,(为1,则隐藏并保护O9000~O9999,不能修改或者添加9000号开始的程序。若不能修改为0,提示写保护。则需要在#3211里输入机床密码,若需要解密码可以留言探讨)
2, 在参数#6050~6059设置G代码调用宏程序的数字,6050~6059分别对应程序号O9010~O9019。
3, 导入该宏程序到机器内改名为O9010~O9019。
例如:在参数#6054里面输入133(0~255之间的数字),则调用O9014程序。 把宏程序改名为O9014即可。
注意:
1. G133这样的自定义指令,不能像G81等循环指令一样。需要每行首加G133
2. 欢迎不吝测试指正,补全完善。本人期待能与G81等循环一样调用。
附:
宏变量说明:
#24 X #25Y #26 Z
#3 C #7D #6 K
#9 F #17Q #18R
%
O9014( G133 XYZRCDQK )
#100=60*FIX[#3012/10000]+FIX[#3012/100]-100*FIX[FIX[#3012/100]/100]
IF[[#100-#999]GE60]THEN#500=#0
IF[[#100-#999]GE60]THEN#501=#0
IF[[#100-#100]GE60]THEN#502=#0
IF[[#100-#999]GE60]THEN#503=#0
IF[[#100-#999]GE60]THEN#504=#0
IF[[#100-#999]GE60]THEN#505=#0
IF[[#100-#999]GE60]THEN#506=#0
IF[[#100-#999]GE60]THEN#507=#0
IF[[#100-#999]GE60]THEN#508=#0( TEMP CLEAN )
#999=#100( SET CLEAN LABEL )
#500=#5003(START POIT Z )
IF[[[1000*#24]OR[1000*#501]]EQ0]THEN#24=#5001( GET X )
IF[#24NE#0]THEN#501=#24( SET TEMP X )
IF[#24EQ#0]THEN#24=#501
G04
IF[[[1000*#25]OR[1000*#502]]EQ0]THEN#25=#5002( GET Y )
IF[#25NE#0]THEN#502=#25( SET TEMP Y )
IF[#25EQ#0]THEN#25=#502
IF[[[1000*#26]OR[1000*#503]]EQ0]THEN#26=#5003( GET Z )
IF[#26NE#0]THEN#503=#26( SET TEMP Z )
IF[#26EQ#0]THEN#26=#503
IF[[[1000*#18]OR[1000*#504]]EQ0]THEN#18=#5003( GET R )
IF[#18NE#0]THEN#504=#18( SET TEMP R )
IF[#18EQ#0]THEN#18=#504
G04
IF[[[1000*#3]OR[1000*#505]]EQ0]THEN#3000=133( NEED SET C )
IF[#3NE#0]THEN#505=#3
IF[#3EQ#0]THEN#3=#505
IF[[[1000*#7]OR[1000*#506]]EQ0]THEN#3000=133( NEED SET D )
IF[#7NE#0]THEN#506=#7
IF[#7EQ#0]THEN#7=#506
IF[[[1000*#6]OR[1000*#507]]EQ0]THEN#6=03( CUSTOM SET K=13 )
IF[#6NE#0]THEN#507=#6
IF[#6EQ#0]THEN#6=#507
G04
IF[[[1000*#17]OR[1000*#508]]EQ0]THEN#3000=133( NEED SET Q )
IF[#17NE#0]THEN#508=#17
IF[#17EQ#0]THEN#17=#508
IF[#9EQ#0]THEN#9=#4109( SET F )
#101=15
IF[#4017EQ16]THEN#101=16( CHECK G15/G16 )
G#101
G90G00X#24Y#25
G15
#24=#5001
#25=#5002
IF[#18LT#26]THEN#17=-#17
#31=ABS[FIX[[#18-#26]/#17]]
#32=ABS[#18-#26]-#31*#17
#33=[#7-#3]/2
#27=360*ABS[#32/#17]
IF[#31EQ0]THEN#27=360*ABS[[#18-#26]/#17]
IF[[#6-10*FIX[#6/10]]EQ3]THEN#28=#24-#33*SIN[#27]
IF[[#6-10*FIX[#6/10]]EQ2]THEN#28=#24+#33*SIN[#27]
#29=#25+#33*COS[#27]
IF[#33LT0.1]THEN#3000=133( ROTATE LE 0.1 )
IF[[FIX[#6/10]]NE0]GOTO2
#6=#6-10*FIX[#6/10]
G90G00Z#18
G01Y[#25+#33]F#9
#30=1
WHILE[#30LE#31]DO1
G#6Z[#18-#17*#30]I0.J-#33
#30=#30+1
END1
G#6X#28Y#29Z#26I0.J-#33
G#6X#28Y#29Z#26I[#24-#28]J[#25-#29]
G01X#24Y#25
GOTO99
N2
#6=#6-10*FIX[#6/10]
G90G00X#24Y#25
G00Z#18
G01Y[#25+#33]F#9
#30=1
WHILE[#30LE#31]DO2
G#6Z[#18-#17*#30]I0.J-#33
#30=#30+1
END2
G#6X#28Y#29Z#26I0.J-#33
G01X#24Y#25
GOTO99
N99
G90G00Z#500
G#101
M99
%