FANUC用户宏程序解析课件.ppt
用户宏程序,用 户 宏 程 序,用户宏程序,一、变量二、运算指令三、控制指令四、简单练习五、系统变量六、宏程序调用,主要内容:,用户宏程序,主程序,宏程序,下一页,用户宏程序,宏程序的适用范围:,形状类似但大小不同(圆、方及其它),其它,自动化功能(刀具长度测量、生产管理等),特殊形状(椭圆、球等),大小相同但位置不同(组孔、阵列等),上一页,用户宏程序,宏程序与子程序的比较:,用户宏程序,宏程序相关的参数,#5(SBM) 用户宏程序语句中, 0: 单程序段不停止 1: 单程序段停止,#6(CCV) 复位(Reset)后,公共变量#100#1990: 清空1: 不清空#7(CLV) 复位(Reset)后,局部变量#1#33 0: 清空1: 不清空,用户宏程序,#4(NE9) 编辑程序号为90009999的程序0: 不禁止1: 禁止,#6(NPE) 程序登录时,对含有M02,M99,M30的程序段0: 视为登录结束1: 不视为登录结束,用户宏程序,变量的种类 变量的显示与设定 变量的使用 未定义变量,一、变量,用户宏程序,1. 变量的种类,例:#10,#1005表达式也可以用于指定变量号,需封闭在括号中。 例:#2-1,#500/2可在程序段结尾加注释说明变量内容,需用括号封闭。 例:#2=#3-1(TOOL NUMBER);,变量符号(#)+ 变量号,变量的表示,用户宏程序,变量的种类,用户宏程序,变量的范围,用户宏程序,2.变量的显示与设定,变量的显示,1.按下MDI面板上的功能键,OFFSETSETTING,2.按几次 键,直至出现,用户宏程序,3.按下 显示宏程序变量值,用户宏程序,4.按 、 显示局部和公共变量值,用户宏程序,公共变量的设定,1.找到显示公共变量的画面。2.将光标移至欲设定的变量号上。键入变量号并按 键按换页键 、 和光标键将光标移至欲设定的变量号上3.键入数据并按,用户宏程序,3.变量的使用,# i = ,将计算结果赋值给对应的变量号,常数、变量、函数和运算符的组合,表示方法,#1= #2 + 100 ;#1= #2 + #18 SIN#5 ;,用户宏程序,变量的定义,当在程序中定义变量值时,小数点可以省略,#1 = 123;,#1,123.000,变量的引用,跟在地址后面的数值可用变量来代替。,G01 X10.0 F#1;,F,把#1值作为F的指令值,G01 X-#1+#2 F#1;,把表达式放在括号中,用户宏程序,把变量用于地址数据的时候,被引用变量的值根据地址的最小设定单位自动地四舍五入,G01 X#1;当#1赋值为12.3456时,实际指令值为G01 X12.346;,改变引用变量的值的符号,要把负号放在#的前面,G00 X-#1;,用户宏程序,当引用未定义的变量时,变量及地址字都被忽略,G00 X#1 Y#2;当#1=0,#2为空时, G00 X0;,程序号、顺序号和任选程序段跳转号不能使用变量,O#1;N#3 Y200.0;/#2 G00 X10.;,用户宏程序,4.未定义变量,当变量值未定义时,这样的变量成为变量,变量#0 总是空变量,它不能写只能读,未定义变量的引用,当引用一个未定义的变量时,地址本身也被忽略,用户宏程序,未定义变量的计算,除了用赋值以外,其余情况下与0 相同,用赋值,用户宏程序,条件表达式,EQ和NE中的不同于0,用户宏程序,示例,用户宏程序,二、运算指令,运算命令的种类 运算顺序,用户宏程序,1.运算命令的种类,加减乘除,用户宏程序,下取整(FIX):舍去小数点以下部分上取整(FUP):将小数后部分进位到整数部分,数据处理,用户宏程序,1.0,2.0,-1.0,-2.0,1.0,1.234,-2.0,1.679,计算相应的变量值#1,下取整(FIX):舍去小数点以下部分上取整(FUP):将小数后部分进位到整数部分,用户宏程序,三角函数的角度单位为度。如:9030表示为90.5,三角函数,用户宏程序,反三角函数的取值范围,#1=SIN90;#1=COS90;#1=TAN45;#1=ATAN1/1;#1=ATAN-1/-1;,1,0,1,123.000,123.000,#1#1#1#1#1,用户宏程序,其它函数,#2=2;#1=SQRT#2;,1.414,#1,用户宏程序,逻辑运算,对32位的每一位按二进制进行逻辑运算,用户宏程序,29254,00011101,00011001,00000100,从BCD转为BIN: #i= BIN#j;从BIN转为BCD: #i= BCD#j;,用户宏程序,2. 运算顺序, 函数 乘除运算( ,/,AND ) 加减运算(+, - , OR , XOR ),#1=#2 + #3 SIN#4;,用户宏程序,可以利用 来改变运算顺序,可嵌套5次,可以使用函数名前面的两个字母来指定该函数。ROUNDRO FIXFI,用户宏程序,三、控制指令,GOTO 语句 IF 语句 WHILE 语句,用户宏程序,1.无条件转移(GOTO 语句),GOTO n; n:程序段号(1- 99999),无条件地转移到程序段n去。,n也可用变量或表达式来代替GOTO 10;GOTO #10;,用户宏程序,IF GOTO n;,若满足,下步操作转移到程序段号为n的程序段去。若不满足,执行下个程序段。,2. 条件转移(IF语句),IF THEN ;,若满足,执行THEN后的宏程序语句,只执行一个语句。IF#1 EQ #2 THEN #3=0;,用户宏程序,条件表达式,条件不满足时执行的操作,条件满足时,是,否,IF,GOTO,上一页,用户宏程序,#j 和 #k 也可用来代替。,条件表达式,用户宏程序,N1 ;IF#2 GT 10 GOTO 5;GOTO 1;N5 ;,无条件转移,条件转移,IF GOTO #1;N1 ; GOTO 9;N2 ; GOTO 9;N3 ; GOTO 9;N9 ;,#1=1时,#1=2时,#1=3时,用户宏程序,3. 循环(WHILE语句),WHILE DO m; (m=1,2,3),条件成立时执行的程序,END m;,DO m和 END m必须成对使用,并以 其中的m作为识别号相互识别。m的范围为1,2,3。可以根据需要多次使用。,用户宏程序,END1;程序WHILE DO 1;,DO的区域不能交叉,DO 一定要在END之前规定,识别号( 1,2,3)可多次使用,用户宏程序,可以从DO区域的内部向外部转移,不可以从DO区域的外部向内部转移,DO 循环可以嵌套3级,用户宏程序,G00 G91 X100.0;Y100.0;,要求:对以上动作重复执行三次。,设#1为动作执行次数,初始值为零。,#1=0; G00 G91 X100.0; Y100.0;#1=1; G00 G91 X100.0; Y100.0;#1=2; G00 G91 X100.0; Y100.0;#1=3;,#1=0;WHILE#1 LT 3 DO 1; G00 G91 X100.0; Y100.0; #1=#1+1;END1;,用户宏程序,常用格式,(当前值)=(初值);WHILE (当前值)比较(目标值) DO m;(执行循环操作);(当前值)=(当前值)1;ENDm;,用户宏程序,四、简单练习,深孔加工 铣圆内腔 粗车外圆 数据计算,用户宏程序,深孔加工,G00 G90 Z0;G01 Z-10. F300;G00 Z0;G00 Z-10. ;G01 Z-20. F300;G00 Z0;G00 Z-20. ;G01 Z-30. F300;G00 Z0 ;,G00 G90 Z#2;G01 Z#1 F300;G00 Z0;,#1 当次钻孔深度坐标#2 前次钻孔深度坐标,用户宏程序,#26= - 30.0;#17= - 10.0;#1= 0;#2= 0;WHILE#1 GT #26 DO1; #1=#1+#17; G00 G90 Z#2; G01 Z#1 F300; G00 Z0; #2=#1;END1;,使用WHILE语句限制循环次数,钻孔最终深度赋值,每次钻孔深度赋值,当次钻孔深度坐标初始化,前次钻孔深度坐标初始化,计算当次钻孔深度坐标,记录当次钻孔深度,用户宏程序,#26= - 30.0;#17= - 10.0;#1= 0;#2= 0;WHILE#1 GT #26 DO1; #1= #1 + #17; IF#1 GE #26 GOTO1; #1= #26; G00 G90 Z#2; G01 Z#1 F300; G00 Z0; #2= #1;END1;,使用IF语句限制最终钻孔深度,N1,计算当次钻孔深度坐标,与最终钻孔深度比较,钻孔最终深度赋值,每次钻孔深度赋值,当次钻孔深度坐标初始化,前次钻孔深度坐标初始化,记录当次钻孔深度,用户宏程序,#26= -30.0;#17= -10.0;#1= 0;#2= 0;#3= 0;WHILE#1 GT #26 DO1; #1= #1+ #17; IF#1 GE #26 GOTO1; #1= #26; G00 G90 Z#2 + #3; G01 Z#1 F300; G00 Z0; #2= #1; #3= 1.0;END1;,N1,钻孔最终深度赋值,每次钻孔深度赋值,当次钻孔深度坐标初始化,前次钻孔深度坐标初始化,计算当次钻孔深度坐标,记录当次钻孔深度,与最终钻孔深度比较,钻孔深度空程量初始化,钻孔深度空程量赋值,用户宏程序,#26= -30.0;#18= 3.0;#17= -10.0;#9= 300;#1= #18;#2= #18;#3= 0;WHILE#1 GT #26 DO1; #1=#1+ #17; IF#1 GE #26 GOTO1; #1=#26; G00 G90 Z#2+#3; G01 Z#1 F#9; G00 Z#18; #2= #1; #3= 1.0;END1;M30;,N1,钻孔最终深度赋值,每次钻孔深度赋值,当次钻孔深度坐标初始化,前次钻孔深度坐标初始化,计算当次钻孔深度坐标,记录当次钻孔深度,与最终钻孔深度比较,钻孔深度空程量初始化,钻孔深度空程量赋值,初始点坐标赋值,进给速度赋值,返 回,用户宏程序,铣圆内腔,#5:圆半径的增量#18:最终圆弧半径,O9999; #5= 10.0; #18= 45.0; #1= 0; #2= 0; WHILE#1 LT #18 DO 1; #1= #1+ #5; IF#1 LE #18 GOTO1; #1= #18; G01 G91 Y#1- #2 F300; G02 J-#1; #2= #1; END1;M30;,N1,当次圆弧半径,前次圆弧半径,用户宏程序,粗车外圆,WHILE#26 GT 0 DO1; #26=#26- #6; IF#26 GE 0 GOTO 1; #6=#6 + #26; G00 W-#6+#4; G01 U-#24 F#9; #4=#3; G00 U#4*2 W#4; U#24- #4*2;END1;M30;,O9999; #3=1.0; #4=0; #6=10.0; #9=300.0; #24=20.0; #26=48.0;,#26,#3,#6,#24,#3: 空程量#6:每次切削量#9: 切削速度#24: X方向切削量#26: Y方向切削量,N1,用户宏程序,O9999;#1=500;WHILE#1 LE 507 DO1; #1=#0 ; #1=#1+1;END1;M30;,O9999;#1=0;WHILE#1 LE 9 DO1; #500+#1=SIN#1*10 ; #1=#1+1;END1;M30;,将#500#507的值设为,计算SIN0SIN90的值并赋值给#500#509,用户宏程序,O9999;#1=501;#506=#500;WHILE#1 LE 505 DO1;IF#506 GT #1 GOTO1;#506=#1;N1 #1=#1+1;END1;M30;,O9999;#2=501;WHILE#2 LE 505 DO2; #1=#2; #506=#2-1; WHILE#1 LE 505 DO1; IF#506 GT #1 GOTO1; #506=#1; #1=#2-1; #2-1=#506; #1=#1+1; END1; #2=#2+1;END2;M30;,N1,用户宏程序,五、系统变量,刀具补偿值 CNC报警 时间信息 模态信息 位置信息 工件零点偏移,用户宏程序,刀具补偿值,示 例,用户宏程序,CNC报警,表达式后为不超过26个字符的报警信息屏幕上显示报警号和报警信息,报警号为#3000的值加上3000,#3000=1 (WRONG DATA INPUT);,屏幕显示:,3001 WRONG DATA INPUT,例:,示 例,用户宏程序,时间信息,示 例,用户宏程序,自动运行控制,当电源接通时,#3003的值为0当单程序段停止无效时,即使操作面板上的单程序段开关设为ON,也不执行单程序段停止。当不指定等待辅助功能M 、S 和T 功能完成时,在辅助功能完成之前程序执行到下列程序段而且分配完成信号DEN不输出,示 例,用户宏程序,:有效:无效,示 例,用户宏程序,当电源接通时该变量的值为0当进给暂停无效时1 当进给暂停按钮被按下时,机床在单段停止方式停止,但是当用变量#3003使单程序段方式无效时,单程序段停止不执行2 当进给暂停按钮压下又松开时,进给暂停灯亮但是机床不停止,程序继续执行,并且机床停在进给暂停有效的第一个程序段当进给速度倍率无效时,总是100%的倍率,而不管机床操作面板上的进给速度倍率开关的设置,用户宏程序,SETTING值,用户宏程序,镜向,用户宏程序,加工零件数,用户宏程序,模态信息,示 例,用户宏程序,位置信息,示 例,用户宏程序,工件零点偏移值,示 例,用户宏程序,PMC信号,用户宏程序,手动刀具长度测量,O9999 IF#4111 EQ 0GOTO 9; #1= #5043; G00 G90 G43 Z50.0; M00; #11000+#4111= #5043; G00 G49 Z#1; M30;N9 #3000=9(OFFSET # ERROR);,操作步骤,#2200+#4111,返 回,用户宏程序,六、宏程序调用,非模态调用G65模态调用G66G、M代码调用宏程序 M、T代码调用子程序,用户宏程序,O9999;#21=90.0;#22=120.0;N1 G01 G91 X#21 F300;N2 Y#22;N3 X- #21;N4 Y- #22;M30;,简单的四边形铣削,用户宏程序,简单的四边形铣削,O0001;M98 P9999;M30;,O9999;#21=90.0;#22=120.0;N1 G01 G91 X#21 F300;N2 Y#22;N3 X-#21;N4 Y-#22;M99;,O0001;M98 P9999 #21=90.0 #22=120.0;M30;,O0001;G65 P9999 U90.0 V120.0;M30;,用户宏程序,G65 Pp Ll 自变量赋值;,要调用的程序号,重复次数,用G65指令,把由P指令的宏程序体调用L次L的缺省值为1按照自变量赋值的规定,将自变量的实际数值调到相应的程序体中,1. 非模态调用G65,用户宏程序,O0001; G65 P9010 L2 A1.0 B2.0; M30;,O9010;#3=#1+#2;IF#3 GT 360 GOTO 9;G00G90 X#3;N9 M99;,用户宏程序,有两种形式的自变量赋值规定:,自变量赋值自变量赋值,用户宏程序,自变量赋值,对字母A-Z后加数值来赋值,但G,L,N,O,P除外 I,J,K须按字母顺序指定,用户宏程序,G65 P9003 X30. Y45. Z-3. F300;,#9= 300;,#24= 30.0;,#25= 45.0;,#26= -3.0;,用户宏程序,自变量赋值,I,J,K的下标代表自变量赋值的顺序,在实际编程中不写,用户宏程序,G65 P9999 A1.0 B1.3 C4.1 I100.0 J50.0 K30.0 I50.0 J30.0 K10.0 I40.0 J60.0 K30.0;,G65 P9999 J1.0 I2.0 K3.0 J4.0 I5.0;,#5(J1) =1.0;,#7(I2) =2.0;#9(K2) =3.0;,#11(J3) =4.0;,#13(I4) =5.0;,用户宏程序,G65 A1.0 B2.0 I-3.0 I4.0 D5.0 P1000;,CNC 内部自动识别自变量赋值和自变量赋值。如果自变量赋值和自变量赋值混合指定的话,后指定的自变量类型有效,自变量指定的混合,用户宏程序,系统变量的存储,O0001;N10 G00 G90 X100.0 Y50.0;N11 G65 P9999 U90.0 V120.0;N12 X200.0 Y100.0;M30;,O9999;N1 G01 G91 X#21 F300;N2 Y#22;N3 X-#21;N4 Y-#22;M99;,O9999;#30=#4001;#31=#4003;#32=#4109;N1 G01 G91 X#21 F300;N2 Y#22;N3 X-#21;N4 Y-#22;G#30 G#31 F#32;M99;,用户宏程序,倾斜的四边形加工,O9999;#30= #4001;#31= #4003;#32= #4109;#10= #21 * COS#1;#11= #21 * SIN#1;#12= #22 * COS90 + #1;#13= #22 * SIN90 + #1;N1 G01 G91 X#10 Y#11 F300;N2 X#12 Y#13;N3 X-#10 Y-#11;N4 X-#12 Y-#13;G#30 G#31 F#32;M99;,O0001;G92 X0 Y0;G00 G90 X100.0 Y50.0;G65 P9999 U100.0 V50.0 A30.0;M30;,用户宏程序,深孔钻削,O0001;G00 G90 Z50.0;G65 P9999 Z-25.0 R3.0 Q-10.0 F300;M30;,O9999;#1= #18;#2= #18;#3= 0;WHILE#1 GT #26 DO1; #1= #1+ #17; IF#1 GE #26 GOTO1; #1= #26; G00 G90 Z#2+#3; G01 Z#1 F300; G00 Z#18; #2= #1; #3= 1.0;END1;M30;,N1,上一页,用户宏程序,内圆铣削,O9999;#30= #4001;#31= #4003;#32= #4109;#1=#13000+#7;#2=#18 - #1;IF #2 LE 0 GOTO9;#3=#2/2;N1 G01 G91 X#3 Y#3 F#9;N2 G02 G17 X#3 Y-#3 R#3;N3 I-#2;N4 X -#3 Y-#3 R #3;N5 G01 X -#3 Y #3;G#30 G#31 G#32;M99;N9 #3000=1(OFFSET ERROR);,O0001;G92 X0 Y0 Z0;G65 P9999 R50.0 D1 F300;M30;,R:圆半径(#18)D:刀具半径补偿号(#7)F:进给速度(#9),返 回,用户宏程序,上一页,用户宏程序,圆周上等距钻孔,B,B,B,X:圆心坐标(#24)Y:圆心坐标(#25)Z:孔的深度(#26)R:钻孔初始高度坐标(#18)U:圆弧半径(#21)A:起始角度(#1)B:角度增量值(#2)H:孔的个数(#11)F:进给速度(#9),用户宏程序,O9999;#30=#4001;#31=#4003;#32=#4109;IF#31 EQ 90 GOTO 1;#24= #24 + #5001;#25= #25 + #5002;#26= #26 + #5003;#18= #18 + #5003;N1 WHILE#11 GT 0 DO1;#5=#24 + #21*COS#1;#6=#25 + #21*SIN#1;G81 G90 X#5 Y#6 Z#26 R#18 F#9;#1= #1 + #2;#11= #11 - 1;END1;G80 G#30 G#31 F#32;M99;,O0001;G90 G92 X0 Y0 Z100.0;G65 P9999 X100.0 Y50.0 R3.0 Z-50.0 F300 U100.0 A0 B45.0 H5.0;M30;,#5:孔当前的位置#6:孔当前的位置,用户宏程序,O0001;G92 X0 Y0;G65 P9999 U100.0 R80.0 A1.0 F300;M30;,椭圆插补,O9999;#30=#4001;#31=#4003;#32=#4109;#5=#1;#24= #5001;#25= #5002;WHILE #5 LE 360 DO1;#2= #24 + #21*COS#5;#3= #25 + #18*SIN#5;G01 G90 X#2 Y#3 F#9;#5=#5+#1;END1;G#30 G#31 F#32;M99;,用户宏程序,球体加工,G65 P9999 Rr Dd Aa Ff;,R:球的半径(#18)D:刀具半径补偿号(#7)A:分层角度(#1)F:进给速度(#9),#2:角度#3:切削起始点的X坐标#4:切削起始点的Y坐标#5:走刀点球半径#6:刀具半径补偿值#10:最终加工角度#24:球心的X坐标#25:球心的Y坐标,用户宏程序,O9999;#30= #4001;#31= #4003;#32= #4109;#24= #5001;#25= #5002;#6= #13000 + #7;#5= #18 + #6;#2= 90 + #1;#10= ATAN#6/#5;G01 G90 Z#5 F#9;WHILE#2 GT #10 DO1;#2= #2 - #1;,IF #2 GT #10 GOTO 1;#2= #10;#3= #24 + #5*COS#2;#4= #25 + #5*SIN#2;G00 X#24+#3;G01 Z#4;G02 I-#3;END1;G#30 G#31 F#32;M99;,N1,用户宏程序,O9999; #30= #4001; #31= #4003; #32= #4109; #1= 300; #2= 100; G28 G91 Z0; #4= #5003;,自动刀具长度测量,G00 G90 G53 X200.0 Y150.0;G91 G43 Z- #1 H#11;#5= #5003 - #2;G31 Z-#2*2 F300;G00 G90 G49 Z#4;#6= #5063 - #11000 + #11;IF #6 LE #5 - #2 GOTO 9;#11000+#11 = #5063 - #5;G#30 G#31 F#32;M99;N9 #3000=1(CAN NOT MEASURE);,用户宏程序,O9500;#1= #4001;#3= #4003;#9= #4019;G28 G91 Z0;G28 X0 Y0;G53 G90 X100.0 Y50.0;G31 G91 Z-200.0 F200;#5= #5063; #2000 + #11= #5;G53 G90 G49 G00 Z0; IF #5 EQ 200.0 GOTO 9;G28 G91 Z0;G28 X0 Y0;G#1 G#3 F#9;M99;N9 #3000=1;,用户宏程序,测量孔中心,用户宏程序,若变量 A 没有指定,认为零。WHILE (#1 EQ #0) DO1; #1= 0; GOTO 15;END1;N15 ,当变量B没有指定或为零或负值时,报警IF#2 EQ #0 GOTO 111;IF#2 LE 0 GOTO 111; N111 #3000=11(ERROR PARA INPUT);,用户宏程序,2.模态调用G66,G66 Pp Ll 自变量赋值; ; ;G67;,每一轴移动指令调用一次宏程序,:要调用的宏程序号l:重复次数(默认值为1)G67:取消模态调用指令,用户宏程序,O0001;G66 P9100 L2 A1.0 B2.0;G00 G90 X100.0;Y200.0;X150.0 Y300.0;G67; M30;,O9100;G00 Z-#1;G01 Z-#2 F300;M99;,用户宏程序,3.G、M指令进行宏程序方式调用,G65 P9010 X100. Y20. R3. Z-20. F300;,G81 X100. Y20. R3. Z-20. F300;,将宏程序调用指令G65 P901用G 来代替宏程序号901与G代码之间的对应关系由参数指定在被调用的宏程序中不能再使用G、M代码调用宏程序,程序体中的G、M代码作为普通的G、M代码处理,G指令调用,变量赋值,用户宏程序,用户宏程序,将参数No.6050设为81,G代码调用宏程序时:,上一页,用户宏程序,G65 P9020 A1.0 B2.0;,M50 A1.0 B2.0;,将宏程序调用指令G65 P902用M 来代替宏程序号902与M代码之间的对应关系由参数指定在被调用的宏程序中不能再使用M、G代码调用宏程序,程序体中的M、G代码作为普通的M、G代码处理,M指令调用,变量赋值,用户宏程序,将参数No.6080设为50,M代码调用宏程序时:,上一页,用户宏程序,用G代码模态调用宏程序,用户宏程序,4.M、T指令进行子程序方式调用,M指令调用,M98 P9001;,M03;,将子程序调用指令M98 P900用M 来代替宏程序号900与M代码之间的对应关系由参数指定在被调用的子程序中不能再使用G、M代码调用宏程序,程序体中的G、M代码作为普通的G、M代码处理,不能进行变量赋值,用户宏程序,将参数No.6071设为03,M代码调用子程序时:,上一页,用户宏程序,当参数No.6071设为06时,用户宏程序,T指令调用,当参数No.6001#5设为1时,使用T代码可调用O9000子程序,T代码所指定的数值自动赋值给变量#149,T代码调用O9000,t,刀具选择指令,用户宏程序,用户宏程序,刀具T1T5 的使用时间,O9001;M01;IF#4120 LE 0 GOTO 9;IF#4120 GT 5 GOTO 9;#3002= 0;N9 M03;M99;,O9002;M01;IF#4120 LE 0 GOTO 9;IF#4120 GT 5 GOTO 9;#500 + #4120 = #500 + #4120 + #3002;N9 M05;M99;,参数No. 6071设为 03,参数No.6072设为 05,用户宏程序,