课题三:A类宏程序编程 一、用户宏程序简介
用户宏程序是FANUC数控系统及类似产品中的特殊编程功能。用户宏程序的实质与子程序相似,它也是把一组实现某种功能的指令,以子程序的形式预先存储在系统存储器中,通过宏程序调用指令执行这一功能。在主程序中,只要编入相应的调用指令就能实现这些功能。
一组以子程序的形式存储并带有变量的程序称为用户宏程序,简称宏程序;调用宏程序的指令称为“用户宏程序指令”或宏程序调用指令。 宏程序与普通程序相比较,普通程序的程序字为常量,一个程序只能描述一个几何形状,所以缺乏灵活性和适用性。而在用户宏程序的本体中,可以使用变量进行编程,还可以用宏指令对这些变量进行赋值、运算等处理。通过使用宏程序能执行一些有规律变化(如非圆二次曲线轮廓)的动作。
用户宏程序分为A、B两类。通常情况下,FANUC0TD系统采用A类宏程序,而FANUC0i系统则采用B类宏程序。 二、A类宏程序 1、变量
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址,为了使程序更加具有通用性、灵活性,故在宏程序中设置了变量。
(1)变量的表示。一个变量由符号“#”和变量序号组成,如:#i(i=1,2,3,…)。 (2)变量的引用。将跟随在地址符后的数值用变量来代替的过程称为引用变量。 例C01X#100Y-#10lF#102;
当#100=100.0、#101=50.0、#102=80时,上面这句程序即表示为G01X100.OY-50.OF80;
(3)变量的种类变量分为局部变量、公共变量(全局变量)和系统变量三种。在A、B类宏程序中,其分类均相同。
1)局部变量:局部变量(#1~#33)是在宏程序中局部使用的变量:当宏程序1调用宏程序2而且都有变量#1时,由于变量#l服务于不同的局部,所以1中的#l与2中的#1不是同一个变量,因此可以赋于不同的值,且互不影响。 2)公共变量。公共变量(#100~#149、#500~#549)贯穿于整个程序过程。同样,当宏程序1调用宏程序2而且都有变量#100时,由于#100是全局变量,所以1中的#100与2中的#100是同一个变量。
3)系统变量。系统变量是指有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置值变量、接口输入与接口输出信号变量及位置信号变量等。 2、用户宏程序的格式及调用
(1)宏程序格式用户宏程序与子程序相似。以程序号O及后面的4位数字组成,以M99指令作为结束标记。
比较一下主程序、子程序和宏程序的格式。 O0060;
G65H01P#100Q100;将值100赋给#100 G00X#100Y……; ……
M99;宏程序结束
(2)宏程序的调用。宏程序的调用有两种形式:一种与子程序调用方法相同,即用M98进行调用。另一种用指令G65进行调用,如: G65P0070X100.0Y100.0Z-30.0;
此处的X、Y、Z并不代表坐标功能字
其中,G65为调用宏程序指令,该指令必须写在句首;P0070表示宏程序的程序号为O0070;L5表示调用次数为5;X100.0Y100.0Z-30.0变量引数,引数为有小数点的正、负数。
3、宏程序的运算和转移指令(表3-2) 指令 H码 功能 定义
G65 H01 定义、替换 #i=#j G65 H02 加 #i=#j+#k G65 H03 减 #i=#j-#k G65 H04 乘 #i=#j×#k G65 H05 除 #i=#j/#k
G65 H11 逻辑或 #i=#jOR#k G65 H12 逻辑与 #i=#jAND#k G65 H13 异或 #i=#jXOR#k
G65 H21 平方根 #i= G65 H22 决定值 #i= G65 H23 求余 #i=#j-trunc(#j/#k)×#k
G65 H24 十进制码变为二进制码 #i=BIN(#j) G65 H25 二进制码变为十进制码 #i=BCD(#j) G65 H26 复合乘/除 #i=(#i×#j)/#k
G65 H27 复合平方根1 #i= G65 H28 复合平方根2 #i= G65 H31 正弦 #i=#j×sin(#k)
G65 H32 余弦 #i=#j×cos(#k) G65 H33 正切 #i=#j×tan(#k)
G65 H34 反正切 #i=arctan(#j/#k) G65 H80 无条件转移 GOTOn
G65 H81 条件转移1(EQ) IF#j=#k,GOTOn
G65 H82 条件转移2(NE) IF#j #k,GOTOnG65 H83 条件转移3(GT) IF#j>#k,GOTOn
G65 H84 条件转移4(LT) IF#j<#k,GOTOn
G65 H85 条件转移5(GE) IF#j #k,GOTOnG65 H86 条件转移6(LE) IF#j #k,GOTOnG65 H99 产生P/S报警 P/S报警号500+n出现
(1)宏程序的运算指令宏程序的运算指令通过G65的不同表达形式实现,其指令的一般形式为:
G65H(m)P(#i)Q(#j)R(#k):
其中,m可以是01~99中的任何一个整数,表示运算指令或转移指令的功能;#i表示存放运算结果的变量;#j为需要运算的变量1,也可以是常数,常数可以直接表示,不带“#”;#k为需要运算的变量2,也可以是常数,常数可以直接表示,不带“#”;
指令所代表的意义为:#i=#j #k; 代表运算符号,它由H(m)指定。
例1G65H02P#100Q#10lR#102:表示#100=#101+#102 G65H03P#100Q#101R15;表示#100=#101—15 G65H04P#100Q-100R#102:表示#100=-100×#102 G65H05P#100Q-100R#102;表示#100=-100÷#102
变量值是不含小数点的数值,它以系统的最小输入单位为其值的单位。
例如,当#100=10时,X#100代表0.01mm。当运算结果出现小数点后的数值时,其值将被舍去。另外,用G65指定的H代码,对选择刀具长度补偿的偏置号没有任何影响。 例2若#100=37,#101=10执行如下指令,其运算结果如下:#110=#100÷#101;结果为3;小数点后的数值被舍去。
在使用宏程序运算指令中,当变量以角度形式指定时,其单位是0.0010。在各运算中,当必要的Q、R没有指定时,系统自动将其值作为“0”参加运算。而且运算、转移指令中的H、P、Q、R都必须写在G65之后,因此在G65以前的地址符只能有0、N。
(2)宏程序的转移指令宏程序的转移指令与运算指令相似,即通过指令G65的不同表达形式实现。A类宏程序的转移指令格式见表4—8,分为无条件转移和条件转移两类。
1)无条件转移指令。指令格式: G65H80Pn;“n”为目标程序段号。
例G65H80P120;执行该程序段时,将无条件转移到N120程序段。 2)条件转移指令。指令格式:G65H8PnQ#JR#k;H81~H86。
例G65H83P1000Q#20lR#202;当#201>#202时,转移到N1000程序段,当#201 #202时,程序继续执行。 4、A类宏程序编程示例
例:试用A类宏程序编写如图3-3所示的椭圆加工的数控车床加工程序。
图3-3椭圆加工
课题分析:本例以Z为自变量,每次增量为-0.1mm。X为应变量(注意公式中的X为半径值),直径量X=2 = 。编写该工件宏程序时,使用以下变量进行操作运算。
#101:曲线上各点的Z坐标。 #102:曲线上各点的X坐标。 曲线精加工程序如下: O0501; 主程序 …… 程序开始部分 G00X0.0Z2.0; 宏程序起点
G65G01P#101Q0; Z坐标赋初值 G65G01P#102Q0; X坐标附初值 N100G01X#102Z#101F100;
G65H03P#101Q#101R100; Z坐标每次减0.1mm
G65H04P#100Q#101R-64000; 注意R值为64000,而不能用64 G65H21P#102Q#100; X坐标值
G65H86P100Q#102R32000; 如果X坐标小于32mm,则返回N100 G01X100.0Z100.0; M30;
三、编程实例
例:试用A类宏程序的编程方法编写如图3-4所示的椭圆手柄的数控车床精加工程序。
图3-4椭圆手柄
课题编程与加工思路:本课题的轮廓表面为非圆曲线,无法采用常规的直线和圆弧指令进行编程。因此,本课题引人宏程序编程的方式进行曲线拟合编程。其加工程序见表3-3。 1、编程说明
如图3-4所示,该椭圆的方程为X2/12.52+(Z+25)2/252=1;该椭圆方程的另一种表达式为“X=12.5sin ,Z=25cos -25”,椭圆上各点坐标分别是(12.5sin ,25cos -25),坐标值随角度的变化而变化,“ ”是自变量,每次角度增量为0.10,而坐标“X”和“Z”是应变量。
注:用极坐标编写该椭圆时,应注意M点处的极角不等于图样上已知的平面角14630需经换算后得到该点的极角为12686。
本课题编程时使用以下变量进行运算(过渡用变量略) #100:椭圆X向半轴A的长度。 #101:椭圆Z向半轴B的长度。 #102:椭圆上各点对应的角度a。 #103:Asina。 #104:Bcosa。
#105:椭圆上各点在编程坐标系中的X坐标。 #106:椭圆上各点在编程坐标系中的Z坐标。 2、参考程序(表3-3)
刀具 1号刀具:930硬质合金外圆车刀 程序段号 FANUC0i系统程序 程序说明 O0400; 主程序
N10 G98G40G21F100; 程序开始部分
N20 T0101; 换菱形刀片外圆车刀,选精加工转速 N30 M03S1200;
N40 G00X0.0Z5.0; 宏程序起点 N50 M98P402; 调用精加工宏程序 N60 G02X20.0Z-70.0R40.0; 加工圆弧 N70 G01Z-85.0;
N80 G00X100.0Z100.0; 程序结束 N90 M30; O0402
N10 G65H01P#100Q12500; N20 G65H01P#101Q25000;
N30 G65H01P#102Q0;
N40 G65H31P#103Q#100R#102; N50 G65H32P#104Q#101R#102; N60 G65G04P#105Q#103R2;
N70 G65H03P#106Q#104R25000; N80 G01X#105Z#106F100;
N90 G65H02P#102Q#102R100; N100 G65H86P40Q#102R126860; N110 M99; 一、B类宏程序
在FANUC0MD等老型号的系统面板上没有“+”、“一”、“×”、“/”、“=”、“[]”等符号,故不能进行这些符号输入,也不能用这些符号进行赋值及数学运算。所以,在这类系统中只能按A类宏程序进行编程。而在FANUC0i及其后(如FANUC18i等)的系统中,则可以输入这些符号,并运用这些符号进行赋值及数学运算,即按B类宏程序进行编程. 1、变量
B类宏程序的变量与A类宏程序的变量基本相似,主要区别有以下几个方面。 (1)变量的表示B类宏程序除可采用A类宏程序的变量表示方法外,还可以用表达式进行表示,但其表达式必须全部写入方括号“[]”中,程序中的圆括号“()”仅用于注释。 例#[#l+#2+lO]
当#1=lO,#2=100时,该变量表示#120。 (2)变量的引用引用变量也可以采用表达式。 例G01X[#l00-30.0]Y-#101F[#101+#103];
当#100=100.O,#101=50.O,#103=80.O时,上面语句即表示为G01X70.OY-50.OF130。 2、变量的赋值
(1)直接赋值变量可以在操作面板上用MDI方式直接赋值,也可在程序中以等式方式赋值,但等号左边不能用表达式。 例#100=100.0; #100=30.O+20.O:
(2)引数赋值宏程序以子程序方式出现,所用的变量可在宏程序调用时赋值。 例G65P1000x100.0Y30.OZ20.0F100.0;
该处的X、Y、Z并不代表坐标字,F也不代表进给字,而是对应于宏程序中的变量号,变量的具体数值由引数后的数值决定。引数宏程序中的变量对应关系有两种,这两种方法可以混用,其中G、L、N、O、P不能作为引数代替变量赋值。 例1变量引数赋值方法I
G65P0030A50.0I40.0J100.0K0I20.0J10.0K40.0;
经赋值后#l=50.0,#4=40.0,#5=100.0,#6=0,#7=20.0,#8=10.0,#9=40.0。 表3-4变量引数赋值方法Ι 表3-5变量引数赋值方法Ⅱ 例2变量引数赋值方法Ⅱ

