| 数控宏程序的编程及应用 
 
 
 1. 什么场合会用到宏程序编程? 
 其实说起来宏就是用公式来加工零件,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加一个量,那么宏就会自动算出X坐标并且进行切削, 实际上宏在程序中主要起到的是运算作用。 
 
 
 手工编程加工公式曲线(计算简单,输入快捷)有规律的切削路径(作为一个切削模块)程序间的控制(程序的调度)刀具的管理(刀具的磨损)自动测量(机内测头) 
 
 2. 什么叫宏程序? 
 在编程时,我们会把能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来调用它们,使用时只需给出这个总指令就能执行其功能所存入的这一系列指令称作用户宏程序本体,简称宏程序。 
 这个总指令称作用户宏程序调用指令。在编程时,编程员只要记住宏指令而不必记住宏程序。 
 3. 用户宏程序与普通程序的区别 
 1)在用户宏程序本体中,能使用变量,可以给变量赋值,变量间可以运算,程序可以跳转。 2)普通程序中,只能指定常量,常量之间不能运算,程序只能顺序执行,不能跳转,因此功能是固定的,不能变化。 3)用户宏功能是用户提高数控机床性能的一种特殊功能,在相类似工件的加工中巧用宏程序将起到事半功倍的效果。 
 4. 变量的三种类型 
 数控系统变量表示形式为“#”后跟1~4位数字,变量种类有三种: 
 (1)局部变量:#1~#33是在宏程序中局部使用的变量,它用于自变量转移。 
 (2)公用变量:用户可以自由使用,它对于由主程序调用的各子程序及各宏程序来说是可以公用的。#100~#149在关掉电源后,变量值全部被清除,而#500~#509在关掉电源后,变量值则可以保存。 
 (3)系统变量:由后跟4位数字来定义,它能获取包含在机床处理器或NC内存中的只读或读/写信息,包括与机床处理器有关的交换参数、机床状态获取参数、加工参数等系统信息。 
 5. 宏程序的特点 
 宏程序可使用变量,可用变量执行相应操作;实际变量值可由宏程序指令赋给变量。 
 6. 指令 
 (1)宏程序的简单调用格式 
 宏程序的简单调用是指在主程序中,宏程序可以被单个程序段单次调用。 
 调用指令格式: G65 P(宏程序号)L(重复次数)(变量分配)。 其中:G65―宏程序调用指令; P(宏程序号)―被调用的宏程序代号; L(重复次数)―宏程序重复运行的次数,重复次数为1时,可省略不写; (变量分配)―为宏程序中使用的变量赋值。 
 宏程序与子程序相同的一点是,一个宏程序可被另一个宏程序调用,最多可调用4重。 
 (2)宏程序的编写格式 
 宏程序的编写格式与子程序相同。其格式为: 0~(0001~8999为宏程序号) N10 指令 N~ M99 
 上述宏程序内容中,除通常使用的编程指令外,还可使用变量、算术运算指令及其它控制指令。变量值在宏程序调用指令中赋给。 
 7. FANUC系统宏程序应用 
 (1)宏程序切槽 
 
 
 1)WHILE语句 G00 X52 Z2; #2=-14;     是刀具z向的起刀点(因为刀宽为4mm,所以起刀点定在Z-14的位置) WHILE〔#2 GE -30〕DO2;     是z方向的约束条件,当z等于-30时,z向就不再移动 G00 Z〔#2〕;     z方向的当前位置 #2=#2-2;     z方向的移动步距,每次移动2mm #1=52;   是x方向的起刀点 WHILE〔#1 GE 20〕DO1;   X方向的约束条件,当直径等于20时就不再切削 G01 X〔#1〕F0.2;   x方向的切深 G00 X〔#1+1〕;   x方向的相对退刀量 #1=#1-1;   x方向的步距(每次切1mm) END1; G00 X52; END2; 
 完整程序: O1234;
 G40 G97 G99;                   T0101;                             S1000 M3;                         G00 X52 Z2;                     #2=-14;                           WHILE〔#2GE-30〕DO2;    END1; G00 Z〔#2〕;                     #2=#2-2;                         #1=52                             WHILE〔#1GE20〕DO1; G01X〔#1〕F0.2; G00X〔#1+1〕; #1=#1-1; G00 X52; END2; G00 X150 Z150; M30; 
 2)IF语句 G00 X52 Z-2; #1=-14;   是刀具的z向起刀点(刀宽为4mm) N2 #1=#1-2;     是z方向的移动步距 #2=52;   为x方向的起刀点 N1#2=#2-1;   是x方向的步距(每次切深1mm) G01 X〔#2〕F0.2;   X方向的当前位置 G00 X〔#2+1〕;     X方向的相对退刀量 IF 〔#2 GE 21〕GOTO1;       x方向的约束条件(当x的数值切到20时就进行下面程序,不再返回) G00 X52;     X退刀到52的位置 G00 Z〔#1〕;     Z方向的当前位置 IF 〔#1 GE -30〕GOTO2;     Z方向的约束条件,当z等于-30时,z向就不在移动 
 完整程序: O1234; G40G97G99;                     T0101;                             S1000M3;                         G00 X52 Z-2;                   #1=-14;                           N2 #1=#1-2;                     #2=52;                             N1#2=#2-1;                       G01 X〔#2〕F0.2; G00 X〔#2+1〕; IF〔#2GE21〕GOTO1; G00X52; G00Z〔#1〕; IF〔#1GE-30〕GOTO2; G00X200; Z200; M5; M30; 
 (2)椭圆编程 
 1)椭圆WHILE语句的标准格式: #1=a;   a :为刀具的起刀点在相对椭圆的轴线Z的正方向a mm处 WHILE〔#1 GE b〕DO1;     b: 为椭圆加工的终点在相对椭圆的轴线Z的负方向b mm处(如果加工的是一个完整的半椭圆,那a、b是数值相同符号不同的两个数值) 
 #2= c*SQRT〔1-#1*#1/d*d〕;     c: 椭圆的短半轴       d: 椭圆的长半轴(根据椭圆公式求#2,长半轴为d,短半轴为c,#2代表X的数值,#1为Z的数值,SQRT是开方的意思) 
 G01 X〔±2*#2+e〕Z〔#1±f〕; e: 椭圆的X向轴线相对工件坐标系的偏移量(直径值) f: 椭圆的Z向轴线相对工件坐标系的偏移量 
 #1=#1-1;步距(每次移动1mm) END1; 
 注意事项:当车削凹椭圆时X后括号中的“±”取“﹣”;当车削凸椭圆时X后括号中的“±”取“+”。 
 当椭圆的X轴线向正向偏移则Z后括号中的“±”取“+”;当椭圆的X向轴线向负向偏移则Z后括号中的“±”取“﹣” 
 2)椭圆IF语句的标准格式 
 #1=a; a: 为刀具的起刀点在相对椭圆的轴线Z的正方向a mm处 
 N1#2=b*SQRT〔1-#1*#1/c*c〕; b:椭圆的短半轴c:椭圆的长半轴(根据椭圆公式X/c+ Y/b=1,SQRT是开方的意思) 
 G01X〔±2*#2+d〕Z〔#1±e〕F0.2; d:椭圆的X向轴线相对坐标零点的偏移量(直径值)e:椭圆的Z向轴线相对零面的偏移量 
 #1=#1-1;   步距(每次移动1mm) 
 IF〔#1 GE -f〕GOTO1     f:椭圆加工的终止   注意事项:当车削凹椭圆时X后括号中的“±”取“﹣”;当车削凸椭圆时X后括号中的“±”取“+”。当椭圆的X轴线向正向偏移则Z后括号中的“±”取“+”;当椭圆的X向轴线向负向偏移则Z后括号中的“±”取“﹣”。 
 
 
 WHILE语句 #1=20; WHILE〔#1GE-20〕DO1; #2=10*SQRT〔1-#1*#1/400〕; G01X〔-2*#2+50〕Z〔#1-25〕; #1=#1-1; END1; 
 IF语句 #1=20; N1#2=10*SQRT〔1-#1*#1/400〕; G01X〔-2*#2+50〕Z〔#1-25〕F0.2; #1=#1-1; IF〔#1GE-20〕GOTO1; 
 完整程序 
 O1234; G40G97G99;                 T0101;                     S1000 M3;                   G00 X50 Z2;                 G73 U5 R5;                 G73 P10 Q20 U0.5 F0.2;       N10 G0 G42 Z-5;             #1=20;                   WHILE〔#1GE-20〕DO1;       #2=10*SQRT〔1-#1*#1/400〕; G01X〔-2*#2+50〕Z〔#1-25〕F0.2; #1=#1-1; END1; G00 X50; N20 G00 G40 Z2; G70 P10 Q20; G00 X200; Z200; M5; M30; 
 IF语句完整格式省略,(IF语句也一样,只要加上循环就可以),在FANUC-0i系统中宏程序只能加在G73中。 
 (3)抛物线的加工 
 1)抛物线WHILE语句的标准格式: 
 #1=a; a: 为刀具的起刀点在抛物线轴线Z的方向a mm处 
 WHILE〔#1 GE -b〕DO1; b: 为椭圆z向的加工长度 
 #2=SQRT〔-#1*5/3〕;     (根据抛物线公式Z=-3/5*X*X,求其中的X值,也就是#2,其中SQRT是开平方的意思) 
 G01 X〔±2*#2+c〕Z〔#1〕; c: 为抛物线的X向轴线相对工件坐标系的偏移量(直径值),“±” 取“+”时为凸,取“-”时为凹 
 #1=#1-1;  步距(每次移动1mm) END1; 
 2)抛物线IF语句的标准格式 
 #1=a; a: 为刀具的起刀点在抛物线轴线Z的方向a mm处 
 N1 #2=SQRT〔-#1*5/3〕;   (根据抛物线公式Z=-3/5*X*X,求其中的X值,也就是#2,其中SQRT是开平方的意思) 
 G01 X〔±2*#2+b〕Z〔#1〕; b:为抛物线的X向轴线相对坐标零点的偏移量(直径值),“±”取“+”时为凸,取“-”时为凹 
 #1=#1-1; (Z方向的步距,每次移动1mm) 
 IF〔#1 GE -c〕GOTO1; c:为椭圆z向的加工长度 
 抛物线IF语句的另一种形式 #1=a; N1 #2=SQRT〔(+)#1*5/3〕;   “+”号可省略 G01 X〔2*#2+b〕Z〔-#1〕; #1=#1+1; IF〔#1 LE c〕GOTO1; 
 假设抛物线是向Z的正方向,再用Z〔-#1〕;把抛物线对称到负方向 
 
 WHILE语句 #1=0; WHILE〔#1 GE -15〕DO1; #2=SQRT〔-#1*5/3〕; G01 X〔2*#2+30〕Z〔#1〕; #1=#1-1; END1; 
 IF语句 #1=0; N1 #2=SQRT〔-#1*5/3〕; G01X〔2*#2+30〕Z〔#1〕; #1=#1-1; IF〔#1 GE -15〕GOTO1; 
 完整程序 O1234; G40 G97 G99;                 T0101;                       S1000 M3;                   G00 X42 Z1;                   G73 U5 R5;                   G73 P10 Q20 U0.5 F0.2;         N10 G00 G42 Z0;               #1=0;                     WHILE〔#1 GE -15〕DO1;       #2=SQRT〔-#1*5/3〕;         G01 X〔2*#2+30〕Z〔#1〕; #1=#1-1; END1; G00 X42; N20 G00 G40 Z2; G70 P10 Q20; G00 X200; Z200; M5; M30; 
 (4)WHILE语句与IF语句的区别 
 1)两种语句返的方向不同 WHILE语句向后返 例:WHILE〔#1 GE 20〕DO1; G01 X〔#1〕F0.2;   假设机床执行到此句时#1=20,它会继续往下执行,执行到#1=#1-1后#1的值变为19,不再满足约束条件所以就不会返回去。(X方向切到20) G00 X〔#1+1); #1=#1-1; END1; 
 2)IF语句向前返 例:N1 #2=#2-1; G01X〔#2〕F0.2;假设机床执行到此句时#2=20,它会继续往下执行,执行到IF〔#2 GE 20〕GOTO1;仍然满足条件,它会继续返回到N1 #2=#2-1;而现在的X值就会变为19,不再满足约束条件,而后再执行一 G01X〔#2〕F0.2;最后就执行下面的程序(X方向已经切到19) G00X〔#2+1); IF〔#2 GE 20〕GOTO1;   
 3)从上面的切槽程序可以看出,IF语句要比WHILE语句的字数要少很多。 
 4)由于返回的方向不同,在加工中WHILE语句少读一句,IF语句要多读一句。 
 8. SIEMENS系统(车床)宏程序应用 
 说明:宏程序是用变量编程,西门子系统的变量号用R表示。 例如用普通编程方法编写的:G01X-10 用宏程序可表示为: R1=-10 G01 X=R1 
 条件转移: IF GOTOB:向后跳转 IF GOTOF:向前跳转 
 用普通编程方法编写的 GO1X100 用变量可表示为: R1=0 AA:R1=R1+1 G01X=R1 IF R1<100 GOTOB AA R1是自变量,初始值为0,R1=R1+1表示的是自变量的递增数值为1,当程序每次走过此行时,R1的值增加1,R1<100是条件式,IF R1<100 GOTOB  AA此行的意思是如果自变量R1<100则程序向后跳转到标记处:AA 如果R1大于或等于100,则程序往下走。 
 宏程序在G90和G91模态下都可以使用,不过它们含义不同,例如; R1=0,G90R1=R1+1,G1X=R1,此程序走完第二遍X的值是2. R1=0,G91R1=R1+1,G1X=R1,此程序走完第二遍X的值是3.   解释:程序走完第一遍R1的值是1,走第二遍的时候R1的值是2,但是在G91模态下它是在前面的基础上走的。 
 (1)切槽 
 
 T1 TC T1D1 G0G40X100Z100 M03S1000 G0X54Z2                 快速到达起刀点 Z-10 R1=3                       定义刀片宽度为3mm     R2=-10-R1-0.2         起刀点 为-10,对刀时以刀片左边; 对刀,所以应减去刀片的宽度,0.2为精加工余量 G1Z=R2F0.1           刀具到达Z轴起刀点 AA:R2=R2-2.5     R3=50                     槽X轴起到点 BB:R3=R3-2         定义每刀切削深度为2 mm G1X=R3               X=R3+1                 每切深2mm单边退0.5mm排屑 IF R3>30+0.4 GOTOB BB 定义槽深10mm,如果R3>30mm程序向后跳转到标记处BB,0.4为精加工余量 G0X50                   刀具到达X轴起刀点 G1Z=R2 IF R2>-30+0.2  GOTOB AA   定义槽宽为20mm,0.2是精加工余量 G0X50 G01Z-13     精加工 X30 Z-16 G0X50 Z-30 G01X30 Z-16 G0X50       退刀 G0X100 Z100 M05 M30 
 (2)椭圆 
 1)基本格式 
 R1=0 定义变量R1初始值为0 
 AA:R2=b×SQRT(1-R1×R1/a×a) 根据椭圆方程所得,a是椭圆的长半轴,b是椭圆短半轴,SQRT是开平方符号。 
 G1X=±2×R2+X Z=R1-Z   设定椭圆的位置和形状,+2为凸形,-2为凹形,X、Z分别是工件轴线和椭圆轴线的距离(直径制)。 
 R1=R1-1   设定加工步距 
 IF R1>=n GOTOB AA   如过变量R1<n,则向后跳转到标记处AA,n为Z向终点坐标。 
 2)编程举例: 
 
 T1D1 G0G40X100Z100 M3S1000 G0X52Z2 Z-20 CYCLE95(   ) G42S1500 OO: R1=20 AA:R2=5×SQRT(1-R1×R1/400) G1X=-2×R2+50 Z=R1-40 R1=R1-2 IF R1>=-20 GOTOB AA PP:X42 G0G40X100Z100 M05 M09 M30 
 (3)抛物线 
 1)基本格式: 
 R1=0                 设定变量R1的初始值为0 
 AA:R2=SQRT(-R1×n) 根据抛物线基本格式所得,式中SQRT为开平方符号,n是系数 
 G01X=2×R2+n     Z=R1   加工路径,+2是凸形,n是X轴起点数值 
 R1=R1-1             变量增量值为1mm 
 IF R1>-30 GOTOB AA     如果变量R1>-30,程序向后跳转到标记处:AA 
 2)编程举例: 
 
 T1 Tc T1D1 G0G40X100Z100 M03S1000 G0X52Z2 CYCLE95(  ) G0G42 OO: R1=0 AA:R2=SQRT(-R1×5/3) G01X=2×R2+30  Z=R1 R1=R1-2 IF R1>-60  GOTOB  AA PP:X52 G0X100Z100 M05 M30 
 
 |