1、发那科用户宏程序资料最多最多999次次一、变量一、变量1、变量、变量 使用用户宏程序时,数值可以直接指定或用使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用变量指定。当用变量时,变量值可用程序或用MDI面板上的操作改变。面板上的操作改变。#1=#2+100;G01 X#1 F300;2、变量的表示、变量的表示 计算机允许使用变量名,用户宏程序不行。计算机允许使用变量名,用户宏程序不行。变量用变量符号变量用变量符号(#)和后面的变量号指定。和后面的变量号指定。表达式可以用于指定变量号。此时,表达式表达式可以用于指定变量号。此时,表达式必须封闭在括号中。必须封闭在括号
2、中。例如:例如:#1#1+#2-123、变量的类型、变量的类型4、变量值得范围、变量值得范围 局部变量和公共变量可以有局部变量和公共变量可以有0值或下面值或下面范围中的值:范围中的值:1047至至1029 或或 1029至至1047 5、变量的引用、变量的引用 为在程序中使用变量值,指定后跟变为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,量号的地址。当用表达式指定变量时,把表达式放在括号中。把表达式放在括号中。例如:例如:G01 X#1 F#2+#3 被引用变量的值根据地址的最小设定单位自被引用变量的值根据地址的最小设定单位自动地舍入。动地舍入。例如例如:G00 X#1,以
3、以11000mm的单位执行时,的单位执行时,CNC把把12.3456赋值给变量赋值给变量#1,实际指令值为,实际指令值为G00 X12.346;。改变引用变量的值的符号,要把负号改变引用变量的值的符号,要把负号(一一)放放在在#的前面。的前面。例如:例如:G00 X#1;当引用未定义的变量时,变量及地址字都被当引用未定义的变量时,变量及地址字都被忽略。忽略。例如:例如:当变量当变量#1的值是的值是0,并且变量,并且变量#2的值是空时,的值是空时,G00X#1Y#2的执行结果为的执行结果为:G00X0;6、未定义的变量、未定义的变量 变量值未定义时,这样的变量成为变量值未定义时,这样的变量成为“
4、空变量。变量空变量。变量#0总是空变量。它不总是空变量。它不能写,只能读。能写,只能读。(1)引用引用(2)运算运算(3)条件表达式条件表达式7、限制、限制 程序号、顺序号和程序跳转号不能使程序号、顺序号和程序跳转号不能使用变量用变量 例如:例如:O#1;二、系统变量二、系统变量1、刀具补偿值、刀具补偿值2、时间信息、时间信息3、自动运行控制、自动运行控制 可以改变自动运行的控制状态可以改变自动运行的控制状态当电源接通时,该变量的值为当电源接通时,该变量的值为0。当单程序段停顿无效时,即使单程序段开关设为当单程序段停顿无效时,即使单程序段开关设为ON,也不执行单程序段,也不执行单程序段停顿。停
5、顿。当不指定等待辅助功能当不指定等待辅助功能(M,S和和T功能功能)完成时,在辅助功能完成之前,程完成时,在辅助功能完成之前,程序执行到以下程序段。而且分配完成信号序执行到以下程序段。而且分配完成信号DEN不输出。不输出。当电源接通时,该变量的值为当电源接通时,该变量的值为0。当进给暂停无效时:当进给暂停无效时:(1)当进给暂停按钮被按下时,机床在单段停顿方式停顿。但是。当用变量当进给暂停按钮被按下时,机床在单段停顿方式停顿。但是。当用变量#3003使单使单程序段方式无效时,单程序段停顿不执行。程序段方式无效时,单程序段停顿不执行。(2)当进给暂停按钮压下又松开时,进给暂停灯亮,但是,机床不停
6、顿;程序继续执当进给暂停按钮压下又松开时,进给暂停灯亮,但是,机床不停顿;程序继续执行,并且机床停在进给暂停有效的第一个程序段。行,并且机床停在进给暂停有效的第一个程序段。当进给速度倍率无效时,总是当进给速度倍率无效时,总是100的倍率,而不管机床操作面板上的进给速度倍的倍率,而不管机床操作面板上的进给速度倍率开关的设置。率开关的设置。当准确停顿检测无效时,即使那些不执行切削的程序段也不进展准确停顿检测当准确停顿检测无效时,即使那些不执行切削的程序段也不进展准确停顿检测(位位置检测置检测)。攻丝循环中使用变量攻丝循环中使用变量3004的例子的例子N5N74、已加工的零件数、已加工的零件数5、当
7、前位置只读、当前位置只读图中第图中第1位代表轴号位代表轴号(从从1到到4)。变量变量#5081#5084存储的刀具长度偏置值存储的刀具长度偏置值是当前的执行值,不是后面的程序段的是当前的执行值,不是后面的程序段的处理值。处理值。在在G31(跳转功能跳转功能)程序段中跳转信号接通程序段中跳转信号接通时的刀具位置贮存在变量时的刀具位置贮存在变量#5061到到#5068中。当中。当G31程序段中的跳转信号不接通程序段中的跳转信号不接通时,这些变量中贮存指定程序段的终点时,这些变量中贮存指定程序段的终点值。值。移动期间不能读是指由于缓冲移动期间不能读是指由于缓冲(预读预读)功能功能的原因,不能读期望值
8、的原因,不能读期望值.6、工件坐标系补偿值工件零点偏移值、工件坐标系补偿值工件零点偏移值三、算术和逻辑运算三、算术和逻辑运算 以下的运算可以在变量中执行。运算符以下的运算可以在变量中执行。运算符右边的表达式可包含常量和或由函数或右边的表达式可包含常量和或由函数或运算符组成的变量。表达式中的变量运算符组成的变量。表达式中的变量#j和和#k可以用常数赋值。左边的变量也可以用可以用常数赋值。左边的变量也可以用表达式赋值。表达式赋值。1、定义赋值:、定义赋值:#i=#j;2、加法:、加法:#i=#j+#k3、减法:、减法:#i=#j-#k4、乘法:、乘法:#i=#j*#k5、除法:、除法:#i=#j/
9、#k6、正弦:、正弦:#i=SIN#j;7、反正弦:、反正弦:#i=ASIN#j;8、余弦:、余弦:#i=COS#j;角度以度指定角度以度指定9、反余弦:、反余弦:#i=ACOS#j;9030表示为表示为10、正切:、正切:#i=TAN#j;11、反正切:、反正切:#i=ATAN#j/#K;12、平方根:、平方根:#i=SQRT#j;13、绝对值:、绝对值:#i=ABS#j;14、舍入:、舍入:#i=ROUND#j;15、上取整:、上取整:#i=FUP#j;16、下取整:、下取整:#i=FIX#j;17、自然对数:、自然对数:#i=LN#j;y=lnx18、指数函数:、指数函数:#i=EXP#
10、j;y=ex19、或、或:#i=#j OR#k;20、异或:、异或:#i=#j XOR#k;按位执行按位执行21、与:、与:#i=#j AND#k;22、从、从BCD转为转为BIN#i=BIN#j;23、从、从BIN转为转为BCD#i=BCD#j;注:注:ARCSIN#i=ASIN#j 取值范围取值范围 当当No.6004.0=0时时:27090 No.6004.0=1时时:-9090ARCCOS#I=ACOS#j 取值范围取值范围 1800/20-/21-13/2/20-111-1 0/2 ARCTAN#i=ATAN#j/#K;取值范围取值范围 当当No.6004.0=0时时:0360 No
11、.6004.0=1时时:-1801803/2/220/2-/2-0第一象限第二象限第四象限第一象限第二象限第三象限第三象限第四象限0-002ROUND函数函数在逻辑运算指令在逻辑运算指令IF、WHILE中,中,ROUND函数在第函数在第一个小数位四舍五入。一个小数位四舍五入。例如例如#2=1.2345;在在NC语句地址中,语句地址中,ROUND函数根据地值得最小设函数根据地值得最小设定单位指定四舍五入。定单位指定四舍五入。例如例如#1=1.2345;#2=2.3456;G00 G91 X-#1;G01 X-#2 F300;G00 X#1+#2;或或 G00 X-ROUND#1+ROUND#2
12、1.235+2.346=3.581 刀具返回到初始位置刀具返回到初始位置上取整和下取整上取整和下取整CNC处理数值运算时,假设操作后产生的处理数值运算时,假设操作后产生的整数绝对值大于原数的绝对值时为上取整数绝对值大于原数的绝对值时为上取整,整,小于原数的绝对值时为下取整。小于原数的绝对值时为下取整。#3=FUP#1;那么那么2.0赋给赋给#3#3=FIX#1;那么那么1.0赋给赋给#3#3=FUP#2;那么那么-2.0赋给赋给#3#3=FIX#2;那么那么-1.0赋给赋给#3运算次序运算次序 函数函数乘、除乘、除(*、/、AND)加、减加、减(+、-、OR、XOR)括号嵌套方括号括号嵌套方括
13、号,圆括号用于说明,圆括号用于说明 括号用于改变运算次序,可以使用括号用于改变运算次序,可以使用5级。级。四、宏程序语句和四、宏程序语句和NC下面的程序段为宏程序语句:下面的程序段为宏程序语句:包含算术或逻辑运算包含算术或逻辑运算()的程序段。的程序段。包含控制语句包含控制语句(例如,例如,GOTO,DO,END)的程序段。的程序段。包含宏程序调用指令包含宏程序调用指令(例如,用例如,用G65,G66,G67或其它或其它G代码,代码,M代码调用宏程序代码调用宏程序)的程序段。的程序段。除了宏程序语句以外的任何程序段都为除了宏程序语句以外的任何程序段都为 NC语句。语句。说明说明 与与NC语句的
14、不同语句的不同 即使置于单程序段运行方式,机床即使置于单程序段运行方式,机床也不停顿。但是,当参数也不停顿。但是,当参数No.6000.5SBM设定为设定为1时,在单程序段方式中,机床停时,在单程序段方式中,机床停顿。顿。在刀具半径补偿方式中宏程序语句在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理。段不做为不移动程序段处理。与宏程序语句有一样性质的与宏程序语句有一样性质的NC语句语句 含有子程序调用指令含有子程序调用指令(例如,用例如,用M98或其它或其它M代码或用代码或用T代码调用子程代码调用子程序序)句句 不包含不包含O.N.P或或L以外的指令地址的程序段其性质与宏程序语句一样。以
15、外的指令地址的程序段其性质与宏程序语句一样。五、转移和循环五、转移和循环 使用使用GOTO语句和语句和IF语句可以改变控制的流语句可以改变控制的流向。有三中转移和循环可供使用。向。有三中转移和循环可供使用。GOTO无条件转移无条件转移 IF条件转移条件转移 WHILE当型循环当型循环1、无条件转移、无条件转移 GOTO n;n为顺序为顺序 例如:例如:GOTO 1;GOTO#10;2、条件转移、条件转移 IF GOTO n 例如:例如:IF#1 GT 10 GOTO 2 程序程序 IF THEN 例如:例如:IF#1 EQ#2 THEN#3=0 运算符运算符:EQ 等于等于(=)NE 不等于不
16、等于 ()GT 大于大于()GE 大于等于大于等于()LT 小于小于()LE 小于等于小于等于()条件不满足条件满足例:求例:求110的总和。的总和。O9000;#1=0;#2=1;N1 IF#2 GT 10 GOTO 2;#1=#1+#2;#2=#2+1;GOTO 1;N2 M30;3、循环、循环 WHILE DO m;程序程序;END m;程序;程序;说明:说明:m=1,2,3,可以屡次使用。,可以屡次使用。最多嵌套三层。最多嵌套三层。省略省略WHILE,那么产生从,那么产生从DO 到到END的的 无限循环。无限循环。WHILE比比GOTO 处理快。处理快。条件满足条件不满足标号可以屡次使
17、用:标号可以屡次使用:WHILE DO 1;程序程序;END1;WHILE DO 1;程序程序;END1;可以嵌套可以嵌套3层:层:WHILE DO 1;WHILE DO 2;WHILE DO 3;程序程序;END3;END2;END1;可以跳到循环外边:可以跳到循环外边:WHILE DO 1;IF GOTO n;END1;N1DO的范围不能穿插:的范围不能穿插:WHILE DO 1;程序程序;WHILE DO 2;END1;程序程序;END2;转移不能进入循环区:转移不能进入循环区:IF GOTO n;WHILE DO 1;N1;END1;六、宏程序调用六、宏程序调用宏程序调用方法:宏程序调
18、用方法:非模态调用非模态调用G65 模态调用模态调用G66、G67 用用G代码调用宏程序代码调用宏程序 用用M代码调用宏程序代码调用宏程序 用用M代码调用子程序代码调用子程序 用用T代码调用子程序代码调用子程序1、非模态调用、非模态调用G65 格式:格式:G65 Pp Ll 其中:其中:p:要调用的程序号:要调用的程序号 l:重复次数默认值为重复次数默认值为1 自变量:数据传递到宏程序,自变量:数据传递到宏程序,其值被赋值到相应的局部变量,有两种其值被赋值到相应的局部变量,有两种指定形式。指定形式。地址变量号 地址变量号 地址变量号ABCDEFH#1#2#3#7#8#9#10IJKMQRS#4
19、#5#6#13#17#18#19TUVWXYZ#20#21#22#23#24#25#26自变量指定注:每个字母只指定一次,可以不按顺序,但I、J、K需 按顺序指定。地址地址变量号变量号 地址地址变量号变量号 地址地址变量号变量号ABCI1J1K1I2J2K2I3J3#1#2#3#4#5#6#7#8#9#10#11K3I4J4K4I5J5K5I6J6K6I7#12#13#14#15#16#17#18#19#20#21#22J7K7I8J8K8I9J9K9I10J10K10#23#24#25#26#27#28#29#30#31#32#33自变量指定自变量指定 自变量指定自变量指定、混合。混合。CN
20、C内部能够自动内部能够自动识别自变量指定识别自变量指定、,后指定的有效。,后指定的有效。例如:例如:G65 A1.0 B2.0 I-3.0 I4.0 D5.0 P1000;#3#5=#6#7=4.0 调用嵌套和局部变量的级别:可以嵌套调用嵌套和局部变量的级别:可以嵌套4级。级。主程序局部变量局部变量(0级)级)1#1#33(1级)级)2#1#33(2级)级)3#1#33(3级)级)4#1#33(4级)级)5#1#33O001;#1=1;G65 P2 A2;M30;O002;#1=2;G65 P3 A3;M99;O003;#1=3;G65 P4 A4;M99;O004;#1=4;G65 P5 A
21、5;M99;O005;#1=5;M99;(0级)级)宏程序(宏程序(1级)级)宏程序(宏程序(2级)级)宏程序(宏程序(31级)级)宏程序(宏程序(4级)级)例:如下图,编制一个宏程序加工圆上的孔,孔例:如下图,编制一个宏程序加工圆上的孔,孔深为深为Z。圆周的半径为。圆周的半径为I,起始角为,起始角为A,间隔为,间隔为B,钻孔数为钻孔数为H,圆的中心是,圆的中心是(X,Y)。(X,Y)1000BBBB50YX调用格式:调用格式:G65 P9100 Xx Yy Zz Rr Ii Aa Bb Hh;X:圆心的:圆心的X坐标坐标(#24)Y:圆心的:圆心的Y坐标坐标(#25)Z:孔深:孔深(#26)
22、R:快速趋近点坐标:快速趋近点坐标(#18)F:切削进给速度:切削进给速度(#9)I:圆半径圆半径(#4)A:第一孔的角度:第一孔的角度(#1)B:增量角:增量角(指定负值时为顾时针指定负值时为顾时针)(#2)H:孔数:孔数(#11)主程序:主程序:O002;G90 G92 X0 Y0 Z100;G65 P9100 X100 Y50 R30 Z-50 F500 I100 A0 B45 H5;M30;宏程序宏程序:O9100;#3=#4003;储存;储存03组组G代码代码 G81Z#26R#18F#9K0;钻孔循环;钻孔循环,也可以使用也可以使用L0 IF#3 EQ 90 GOTO1;在;在G9
23、0方式转移到方式转移到N1#24=#5001+#24;计算圆心的;计算圆心的X坐标坐标#25=#5002+#25;计算圆心的;计算圆心的Y坐标坐标 N1 WHILE#11 GT 0 DO1;直到剩余孔数为;直到剩余孔数为0#5=#24+#4COS#1;计算;计算X轴上的孔位轴上的孔位#6=#25+#4SIN#1;计算;计算Y轴上的孔位轴上的孔位 G90 X#5 Y#6;移动到目标位置之后执行钻孔;移动到目标位置之后执行钻孔#1=#1+#2;更新角度;更新角度#11=#11-1;孔数;孔数-1 END1;G#3 G80;返回原始状态的;返回原始状态的G代码代码 M99;2、模态调用、模态调用G6
24、6格式:格式:G66 Pp Ll 其中:其中:p:要调用的程序号:要调用的程序号 l:重复次数默认值为重复次数默认值为1 自变量:数据传递到宏程序自变量:数据传递到宏程序 G67取消模态调用。取消模态调用。注:嵌套可以注:嵌套可以4级;级;在在G66程序段中,不能调用多个宏程序程序段中,不能调用多个宏程序 在只有辅助功能无移动指令的程序段中在只有辅助功能无移动指令的程序段中不能调用宏程序;不能调用宏程序;局部变量只能在局部变量只能在G66程序段中指定,每程序段中指定,每次执行模态调用时,不再指定局部变量。次执行模态调用时,不再指定局部变量。O0001;G66P9100 L2 A1.0 B2.0
25、;G00 G90 X100.0;X150 Y300;G67;M30;O9100;G00 Z-#1;G01 Z-#2 F300;M99;例:用宏程序编制例:用宏程序编制G81固定循环的操作固定循环的操作第1步第2步第3步第4步Z=0R点点ZR初始平面初始平面I点点G65 P9110 Xx Yy Zz Rr Ff L1X:孔的孔的X坐标坐标(由绝对值指定由绝对值指定)(#24)Y:孔的孔的Y坐标坐标(由绝对值指定由绝对值指定)(#25)Z:Z点坐标点坐标(由绝对值指定由绝对值指定)(#26)R:R点坐标点坐标(由绝对值指定由绝对值指定)(#18)F:切削进给速度切削进给速度 (#9)L:重复次数重
26、复次数主程序:主程序:O001;G92 X0 Y0 Z50;G00 G90 X100 Y50;G66 P9110 Z-20 R1 F500;G90 X20 Y20;X50;Y50;X0 Y80;G67;M30;宏程序:宏程序:O9110;#1=#4001;储存;储存G00/G01#2=#4003;储存;储存G90/G91#3=#4019;储存切削进给速度;储存切削进给速度#5=#5003;储存钻孔开场的;储存钻孔开场的Z坐标坐标G00 G90 Z#18;定位在定位在R点点G01 Z#26 F#9;切削进给到切削进给到Z点点IF4010 EQ 98 GOTO 1;返回到返回到I点点G00#18;
27、定位在定位在R点点GOTO 2;N1 G00 Z#5;定位在定位在I点点N2 G#1 G#2 G#3;恢复模态信息。恢复模态信息。M99;3、用、用G代码调用宏程序代码调用宏程序 在参数在参数No.6050 到到 No.6059中设置中设置调用用户宏程序调用用户宏程序O9010 到到 O9019的的G代码号从代码号从1到到 9999,调用方法同,调用方法同G65.注:不能嵌套!注:不能嵌套!程序号程序号参数号参数号O9010O9011O9012O9013O9014O9015O9016O9017O9018O90196050605160526053605460556056605760586059参
28、数号和程序号参数号和程序号之间的对应关系:之间的对应关系:O0001;G81 X10 Y20 Z-10M30;O9010;M99;参数参数No.6050=814、用、用M代码调用宏程序代码调用宏程序 在参数在参数No.6080 到到 No.6089中设置中设置调用用户宏程序调用用户宏程序O9021 到到 O9029的的M代码号从代码号从1到到 9999,调用方法同,调用方法同G65.注:不能嵌套!注:不能嵌套!程序号程序号参数号参数号O9020O9021O9022O9023O9024O9025O9026O9027O9028O90296080608160826083608460856086608
29、760886089参数号和程序号参数号和程序号之间的对应关系:之间的对应关系:O0001;G50 A1 B2;M30;O9020;M99;参数参数No.6080=505、用、用M代码调用子程序代码调用子程序 在参数在参数No.6071 到到 No.6079中设置中设置调用用户宏程序调用用户宏程序O9001 到到 O9009的的M代码号从代码号从1到到 9999,调用方法同,调用方法同M98.程序号程序号参数号参数号O9001O9002O9003O9004O9005O9006O9007O9008O9009607160726073607460756076607760786079参数号和程序号参数号
30、和程序号之间的对应关系:之间的对应关系:O0001;M03;M30;O9001;M99;参数参数No.6071=036、用、用T代码调用子程序代码调用子程序 设置参数设置参数No.6001的第的第5位位TCS=1,当加,当加工程序中指定工程序中指定T代码,可以调用宏程序代码,可以调用宏程序O9000。在加工程序中指定的。在加工程序中指定的T代码赋值代码赋值到公共变量到公共变量#149中。中。O0001;T23;M30;O9000;M99;参数No.6001的5位=1#149=23使用以下保持型变量:使用以下保持型变量:#502:半径:半径r;#503:起始角度:起始角度;#504:孔数:孔数n
31、,当,当n时,按逆时针方向加工,时,按逆时针方向加工,当当n时,按顺时针方向加工;时,按顺时针方向加工;#505:孔底:孔底Z坐标值;坐标值;#506:平面平面坐标值;坐标值;#507:进给量。:进给量。使用以下变量进展操作运算:使用以下变量进展操作运算:#100:表示第:表示第i步钻孔的记数器;步钻孔的记数器;#101:记数器的最终值为:记数器的最终值为n的绝对值的绝对值#102:第:第i个孔的角度位置的值;个孔的角度位置的值;#103:第:第i个孔的个孔的X坐标值;坐标值;#104:第:第i个孔的个孔的Y坐标值;坐标值;O9010N110 G65 H01 P#100 Q0 N120 G65
32、 H22 P#101 Q#504 N130 G65 H04 P#102 Q#100 R360 N140 G65 H05 P#102 Q#102 R#504 N150 G65 H02 P#102 Q#503 R#102 N160 G65 H32 P#102 Q#502 R#102 N170 G65 H31 P#104 Q#502 R#102 N180 G90 G00 X#103 Y#104 N190 G00 Z#506 N200 G01 Z#505 F#507 N210 G00 Z#506 N220 G65 H02 P#100 Q#100 R1 N230 G65 H84 P130 Q#100 R
33、#101 N240 M99 O0010N10 G54 G90 G00 X0 Y0 Z20 /进入加工坐标系进入加工坐标系N20 M98 P9010 /调用钻孔子程序,加工圆周等分孔调用钻孔子程序,加工圆周等分孔N30 Z20 /抬刀抬刀N40 G00 G90 X0 Y0 /返回加工坐标系零点返回加工坐标系零点N50 M30 /程序完毕程序完毕首先在首先在MDI方式中,方式中,设定以下变量的值:设定以下变量的值:#502:半径:半径r为为50;#503:起始角度:起始角度=30;#504:孔数:孔数n为为8;#505:孔底:孔底Z坐标值为坐标值为20;#506:R平面平面Z坐标值为坐标值为5;#
34、507:F进给量为进给量为50。O6000N6010#30=#101 /基准点保存基准点保存N6020#31=#102 /基准点保存基准点保存N6030#32=1 /计数值置计数值置1N6040 WHILE#32 LE ABS#11 DO1 /进入孔加工循环体进入孔加工循环体N6050#33=#1+360*#32-1/#1 /计算第孔的角度计算第孔的角度N6060#101=#30+#18*COS#33 /计算第孔的计算第孔的X坐标值坐标值N6070#102=#31+#18*SIN#33 /计算第孔的计算第孔的Y坐标值坐标值N6080 G90 G81 G98 X#101 Y#102 Z#26 R#3 F#9 /钻削第孔钻削第孔N6090#32=#32+1 /计数器对孔序号计数累加计数器对孔序号计数累加N6100#100=#100+1 /计算已加工孔数计算已加工孔数N6110 END 1 /孔加工循环体完毕孔加工循环体完毕N6120#101=#30 /返回返回X坐标初值坐标初值X0N6130#102=#31 /返回返回Y坐标初值坐标初值Y0M99 /宏程序完毕宏程序完毕