课题三: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类宏程序编程 一、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变量引数赋值方法Ⅱ G65P0020A50.0X40.0F100.0; 经赋值后#1=50.0,#24=40.0,#9=100.0。 例3变量引数赋值方法I和Ⅱ混合使用 G65P0030A50.0D40.0I100.0K0I20.0; 经赋值后,I20.0与D40.0同时分配给变量#7,则后一个#7有效,所以变量#7=20.0,其余同上。 实例采用变量赋值后,图3-4实例的A类精加工宏程序可改成如下形式: O0503;主程序 …… C65P0504A12.5B25.0CO.0D126.86F100.0;赋值后,X向半轴长#l=12.5,Z向半轴长#2=25.0,角度起始角#3=0.0,角度终止角#7=126.86,进给速度#9=100.0 。 …… O504;精加工宏程序 N1000#4=#l×SIN[#3]; #5=#2×COS[#3]; #6=#4×2; #8=#5-#2; G01X#6Z#8F#9; #3=#3+0.0l: IF[#3LE#7]GOTO1000; M99; 3、运算指令 B类宏程序的运算指令与A类宏程序的运算指令有很大的区别,它的运算类似于数学运算,仍用各种数学符号来表示。运用运算指令见表: 表3-6B类宏程序变量的各种运算 (1)函数SIN、COS等的角度单位是0,’和”要换算成0。如90030’应表示为90.50,30018’应表示为30.30。 (2)宏程序数学计算的次序依次为:函数运算(SIN、COS、ATAN等),乘和除运算(×、/、AND等),加和减运算(+、-、OR、XOR等)。 例#l=#2+#3×SIN[#4]; 运算次序为:函数SIN[#4]→乘和除运算#3×SIN[#4]→加和减运算#2+#3×SIN[#4]。 (3)函数中的括号。括号用于改变运算次序,函数中的括号允许嵌套使用,但最多只允许嵌套5层。 例#1=SIN[[[#2+#3]×4+#5]/#6]; (4)宏程序中的上、下取整运算。CNC处理数值运算时,若操作产生的整数大于原数时为上取整,反之则为下取整。 例设#1=1.2,#2=-1.2 执行#3=FUP[#1]时,2.0赋给#3; 执行#3=FIX[#l]时,1.O赋给#3; 执行#3=FUP[#2]时,-2.O赋给#3; 执行#3=FIX[#2]时,-1.0赋给#3; 4控制指令:控制指令起到控制程序流向的作用。 (1)分支语句 格式一GOTOn; 例GOTO1000 该例为无条件转移。当执行该程序段时,将无条件转移到N1000程序段执行。 格式二IF[条件表达式]GOTOn; 例IF[#1GT#100]GOTO1000 该例为有条件转移语句。如果条件成立,则转移到N1000程序段执行;如果条件不成立,则执行下一程序段:条件表达式的种类见表3-7。 表3-7B类宏程序条件表达式的种类 注意:条件判断中条件的表示方法 (2)循环指令循环指令格式为: WHlLE[条件表达式]DOm(m=l、2、3…) …… ENDm: 当条件满足时,就循环执行WHlLE与END之间的程序段m次;当条件不满足时,就执行ENDm的下一个程序段。 5、B类宏程序编程示例 例:试用B类宏程序编写如图3-5所示的玩具喇叭凸模曲线的精加工程序。 图3-5B类宏程序编程示例 实例分析:本例的精加工采用B类宏程序编程,以Z值为自变量,每次变化0.1mm、X值为应变量,通过变量运算计算出相应的X值。编程时使用以下变量进行运算: 注:宏程序编程时,首先要找出各点X坐标和Z坐标之间的对应关系。 #101为方程中的Z坐标(起点Z=72); #102为方程中的X坐标(起点半径值X=3.5); #103为工件坐标系中的Z坐标,#103=#101-72.0; #104为工件坐标系中的X坐标,#104=R2×2; 精加工程序如下: 0420 …… G00X9.0Z2.0;宏程序起点 #101=72.0: #102=3.5: N100#103=#10l-72.O;跳转目标程序段 #104=#102×2; C01X#104Z#103; #101=#101-0.1;Z坐标每次增量-0.1mm #102=36/#101+3;变量运算出X坐标 IF[#101GE2.0]GOTO100;有条件跳转 G28U0W0; M30: 二、编程实例 例:试用B类宏程序编写图3-6所示绕线筒曲线轮廓的数控车床加工程序。 图3-6应用B类宏程序的示件 本例编程与加工思路:本课题的精加工轮廓采用B类宏程序编程。由于宏程序编程中不能使用复合固定循环。因此,本课题粗加工时,采用坐标平移指令(G52)编写出类似于仿形车复合循环G73指令的加工程序。其加工程序见表3-8。 1、实例分析 该正弦曲线由两个周期组成,总角度为7200(-6300~900)。将沿Z轴方向将该曲线分成1000条线段,每段直线在Z轴方向的间距为0.04mm,对应其正弦曲线的角度增加7200/1000。根据公式,计算出曲线上每一线段终点的X坐标值,X=34+6sin 。 工件粗加工时,采用局部坐标进行编程,编程时使用以下变量进行运算: #100为局部坐标系中的X坐标变量; #10l为正弦曲线角度变量; #102为正弦曲线各点X坐标; #103为正弦曲线各点Z坐标。 2、参考程序(见表3-8) 表3-8数控车床参考程序 刀具 1号刀具:350硬质合金外圆车刀 程序段号 FANUC0i系统程序 程序说明 O0400; 主程序 N10 G98G40G21F100; 程序开始部分 N20 T0101; N30 M03S800; N40 G0042.0Z-13.0; 宏程序起点 N50 #100=10.0; 局部坐标系X附初值 N60 N200G52X#100Z0; 局部坐标系 N70 M98P402; 调用宏程序 N80 #100=#100-2.0; 径向每次切深2mm N90 IF[#100GE0]GOTO200; 条件判断 N100 G00X100.0Z100.0; 程序结束 N110 M30; O0402 曲线加工宏程序 N10 G01X40.0Z-15.0; 加工与曲线相连的直线段 N20 Z-20.0; N30 #101=90.0; 正弦曲线角度赋初值 N40 #103=-20.0; 曲线Z坐标赋初值 N50 N300#102=34+6×SIN[#101]; 曲线X坐标 N60 G01X#102Z#102F100; 直线段拟合曲线 N70 #101=#101-0.72; 角度增量为-0.720 N80 #103=#103-0.04; Z坐标增量为-0.04mm N90 IF[#101GE-630.0]GOTO300; 条件判断 N100 G01X40.0Z-67.0; 加工与曲线相连的线段并退刀 N110 X42.0; N120 G00Z-13.0; N130 M99; 返回主程序 |
|