数控宏程序入门----宏程序调用
宏程序可以和普通程序一样被其他程序当做子程序调用(M98),也可以通过宏程序专用调用指令(G65,G66)进行带变量数据的传递调用。
使用M98调用时用法与调用普通程序相同,具体用法参考M98调用子程序
非模态调用 G65
代码格式:G65 P_ L_ 变量数据。
其中P后面为被调用的程序号(完整程序号0不可省略)
L后面为调用次数(省略不写默认一次)
同子程序调用一样,宏程序调用也可进行嵌套调用(嵌套层级根据系统有所不同),我感觉日常加工中也不一定用得到多级嵌套,就不说了
变量数据对应的变量号有下面两种方式传递

示例:G65 P0110 A1 B2 C3 F4
调用0110的程序一次,同时为0110程序中的变量赋值#1=1 #2=2 #3=3 #9=4

FANUC系统方式二是否有效由参数决定,所以无特殊需求建议使用方式一
在车床加工中的应用举例
车床中进行深孔钻孔
以端面Z0为基准,钻孔深度50,单次钻深3MM,钻孔提前量0.5MM
主程序
O0002
T0101 G99 M3 S500
G0 X0
Z1
G65 P0001 Z-50 Q3 R0.5 F0.1 (调用0001号程序一次 ZQRF对应变量传递方式一)
G0 X100 Z100 M5
M30
子程序
O0001
#1=#5043 (记录当前Z轴坐标值)
#2=#1
N1 #2=#2-#17 (每次钻孔终点Z值)
IF[#2LE#26]THEN #2=#26(防止Z过切)
#3=#2+#18 (下次钻孔起点Z值)
G1 Z#2 F#9 (钻孔)
G0 Z#1 (退回钻孔起点)
IF[#2EQ#26]GOTO 2(判断钻孔深度达到后跳转N2)
G0 Z#3 (定位到下次钻孔起点)
IF[#2GT#26]GOTO 1(判断钻孔深度不够后跳转N1)
N2 G0 Z#1 (退回钻孔起点)
M99
模态调用 G66
代码格式:G66 P_ L_ 变量数据。(各项含义同G65)
代码说明:G66执行后一直有效,直到G67执行取消。
G66模式下,当系统执行移动完指令(G01,G02,G03,G05)后都会自动调用G66指定的宏程序,执行M代码不会调用子程序,不能使用G71等循环指令。
G66也可进行多级嵌套,但是我个人不推荐使用,因为多级嵌套对于大部分人都容易搞混淆程序的执行顺序(非要来杠说你能搞清楚,那你就用,我也不拦着)
G66在车床加工中的应用举例
车床中在不同的位置加工槽

假设切刀2.5MM宽,编辑文档的时候发现忘记标注槽深了,就当是5MM深吧
主程序
O0002
T0101 G99 M3 S500
G0 X50
Z5
G66 P0001 U10 W-1.5 F0.1(进入G66模式,并设定变量数值,刀宽2.5分两次切槽,借刀宽度1.5MM)
G0 Z-13.5 (调用0001一次)
Z-21.5(调用0001一次)
Z-33.5(调用0001一次)
G67(取消G66模式)
G0 X100 Z100 M5(本段不再调用子程序)
M30
子程序
O0001
G1 U-#21 F#9(接收变量数值#21=10,#9=0.1)
G0 U#21
W#23(接收变量数值#23=-1.5)
G1 U-#21
G0 U#21
M99