FANUC系统宏程序应用

FANUC系统宏程序应用
FANUC系统宏程序应用

宏程序的应用

宏程序与子程序类似,对编制相同加工的操作可以使程序简化.同时宏程序中可以使用变量,算术和逻辑运算及转移指令,还可以方便地实现循环程序设计。使相同加工操作的程序更方便,更灵活。

使用子程序编程可以重复同样的操作,简化程序的书写工作,但是用户宏B提供了更丰富的编程功能,它允许使用变量、算术和逻辑操作及条件分支,使得用户可以自行编辑软件包、固定循环程序。

本章以FANUC系统为例介绍宏程序设计的内容。

8.1 变量的定义

1. 变量概述

一个普通的零件加工程序指定G码并直接用数字值表示移动的距离,例:G100 X100.0。而利用用户宏,既可以直接使用数字值也可以使用变量号。当使用变量号时,变量值既可以由程序改变,也可以用MDI面板改变。

变量书写规格:

宏程序中使用的变量与日常生活中使用的变量不同,变量用符号“#”后跟变量的变量号指定。

当指定一个变量时,在#后指定变量号。个人计算机允许赋名给变量,宏没有此功能。

例:#1

也可以用表达式指定变量号,这时表达式要用方括号括起来。例:#[#1+#2—12]

变量值的范围:

2.变量可分为四种类型。

1. 空变量

#0为空变量,该变量不能赋值。

2. 局部变量

#1~#33为局部变量,局部变量只能在宏程序中存储数据。当断电时局部变量被初始化为空,调用宏程序时,自变量对局部变量赋值。局部变量的数值范围10-29~1047或-1047~-10-29,如果计算结果超过该范围则发出P/S报警No.111。

3. 公共变量

#100~#199、#500~#999为公共变量,公共变量在不同的宏程序中意义相同。当断电时,变量#100~#199被初始化为空,变量#500~#999的数据不会丢失。全局变量的数值范围

10-29~1047或-1047~-10-29,如果计算结果超过该范围则发出P/S报警No.111。

1

4. 系统变量

#1000~为系统变量,系统变量用于读和写CNC运行时的各种数据,如刀具的当前位置和补偿值等。

5. 变量与地址(自变量)的对应关系

系统可用两种形式的自变量指定,表12-1为自变量指定I的自变量与变量的对应关系。表12-2为自变量指宾II的自变量与变量的对应关系。

表12-1 自变量指定I的变量对应关系

在自变量指定I中,G、L、O、N、P不能用,地址I、J、K必须按顺序使用,其它地址顺序无要求。

举例:G65 P3000 L2 B4 A5 D6 J7 K8 正确(J、K符合顺序要求)

在宏程序中将会把4赋给#2,把5赋给#1,把6赋给#7,把7赋给#5,把8赋给#6

举例:G65 P3000 L2 B3 A4 D5 K6 J5 不正确(J、K不符合顺序要求)

表12-2 自变量指定II的变量对应关系

系统能够自动识别自变量指定I和自变量指定II并赋给宏程序中相应的变量号。如果自变量指定I和自变量指定II混合使用,则后指定的自变量类型有效。

举例:G65 A1.0 B2.0 I-3.0 I4.0 D5.0 p1000

宏程序中:#1:1.0

#2:2.0,

#3:

#4:-3.0

2

#5:

#6:

#7:5.0

说明:I4.0为自变量指定II,D为自变量指定I,所以#7使用指定类型中的D5.0,而不使用自变量指定II中的I4.0。

6. 本级变量#1~#33

作用于宏程序某一级中的变量称为本级变量,即这一变量在同一程序级中调用时含义相同,若在另一级程序(如子程序)中使用,则意义不同。本级变量主要用于变量间的相互传递,初始状态下未赋值的本级变量即为空白变量。

局部变量#1~#33(一个宏程序中的同名变量)从0到4级,主程序是0级。每调用一个含有同名变量的宏程序,级别加1,前一级的变量被保存。当一个宏程序结束(执行M99)时,级别减1。

例如:

主程序宏程序宏程序宏程序宏程序

(0级)(1级)(2级)(3级)(4级)

O0001 O0002 O0003 O0004 O0005

#1=1;#1=2 #1=3 #1=4 #1=5

G65P2A2;G65P3A3 G65P4A4 G65P5P5 ……

……………………M99

M30 M99 M99 M99

10.2 变量的运算

对宏程序中的变量可以可以进行算术运算和逻辑运算。

1. 算术运算

可以进行加、减、乘、除运算。运算功能和格式如表12-3所示。

举例:G00X[#1+#2]

X坐标的值是变量1与变量2之和。

2. 三角函数计算

对宏程序中的变量可进行正弦(SIN)、反正弦(ASIN)、余弦(COS)、反余弦(ACOS)、正切(TAN)、反正切(ATAN)函数运算。三角函数中的角度以度为单位。运算功能和格式如表12-3所示。

表12-3 变量运算功能表

3

对于反反正弦(ASIN)取值范围如下:

当参数(No.6004#0)NAT位设为0时:270°~90°

当参数(No.6004#0)NAT位设为1时:-90°~90°

当#j超出-1~1时发出P/S报警No.111。

对于反余弦(ACOS)的取值范围如下:

取值范围180°~0°

当#j超出-1~1时发出P/S报警No.111。

对于反正切(ATAN)的取值范围如下:

当参数(No.6004#0)NAT位设为0时:0°~360°

当参数(No.6004#0)NAT位设为1时:-180°~180°

3. 其它函数计算

对宏程序中的变量还可以进行平方根(SQRT)、绝对值(ABS)、舍入(ROUN)、上取整(FIX)、下取整(FUP)、自然对数(LN)、指数(EXP)运算。运算功能和格式如表12-3所示。

对于自然对数LN[#j],相对误差可能大于10-8。当#j≤0时,发出P/S报警No.111。

对于批数函数EXP[#j],相对误差可能大于10-8。当运算结果大于3。65×1047(j大约110)时,出现溢出并发出P/S报警No.111。

对于取整函数ROUN[#j],根据最小设定单位四舍五入。

例如,假设最小设定单位为1/1000mm,#1=1.2345,则#2=ROUN[#1]的值是1.0。

对于上取整FIF[#j],绝对值值大于原数的绝对值。对于下取整FUP绝对值小于原数的绝对值。

例如,假设#1=1.2,则#2=FIX[#1]的值是2.0。

假设#1=1.2,则#2=FUP[#1]的值是1.0。

假设#1=-1.2,则#2=FIX[#1]的值是-2.0。

假设#1=-1.2,则#2=FUP[#1]的值是-1.0。

4. 逻辑运算

4

对宏程序中的变量可进行与、或、异或逻辑运算。逻辑运算是按位进行。运算功能和格式如表所示。

5. 数制转换

变量可以在BCD码与二进制之间转换。

6. 关系运算

由关系运算符和变量(或表达式)组成表达式。系统中使用的关系运算符如下。

(1)等于(EQ)

用EQ与两个变量(或表达式)组成表达式,当运算符EQ两边的变量(或表达式)相等时,表达式的值为真,否则为假。

例如,#1EQ#2,当#1与#2相等时,表达式的值为真。

(2)不等于(NE)

用NE与两个变量或表达式组成表达式,当运算符NE两边的变量(或表达式)不相等时,表达式的值为真,否则为假。

例如,#1NE#2,当#1与#2不相等时,表达式的值为真。

(3)大于等于(GE)

用GE与两个变量或表达式组成表达式,当左边的变量(或表达式)大于或等于右边的变量(或表达式)时,表达式的值为真,否则为假。

例如,#1GE#2,当#1大于或等于#2时,表达式的值为真。否则为假。

(4)大于(GT)

用GT与两个变量或表达式组成表达式,当左边的变量(或表达式)大于右边的变量(或表达式)时,表达式的值为真,否则为假。

例如,#1GT#2,当#1大于#2时,表达式的值为真。否则为假。

(5)小于等于(LE)

用LE与两个变量或表达式组成表达式,当左边的变量(或表达式)小于或等于右边的变量(或表达式)时,表达式的值为真,否则为假。

例如,#1LE#2,当#1小于或等于#2时,表达式的值为真。否则为假。

(6)小于(LT)

用LT与两个变量或表达式组成表达式,当左边的变量(或表达式)小于右边的变量(或表达式)时,表达式的值为真,否则为假。

例如,#1GE#2,当#1大于#2时,表达式的值为真。否则为假。

7. 运算优先级

运算符的优先顺序是

(1)函数。函数的优先级最高。

(2)乘、除、与运算。乘、除、与运算的优先级次于函数的优先级。

(3)加、减、或、异或运算。加、减、或、异或运算的优先级次于乘、除、与运算。乘、除、与运算的优先级。

(4)关系运算。关系运算的优先级最低。

用方括号可以改变优先级,括号不能超过5层。超过5层时,发出P/S报警No.111。

8. 变量值的精度

变量值的精度为8位十进制数。

5

例如,用赋值语句#1=9876543210123.456时,实际上#1=9876543200000.000。

用赋值语句#2=9876543277777.456时,实际上#1=9876543300000.000。

11. 宏程序结构

宏程序从结构上可以有顺序结构、分支结构和循环结构。本节介绍分支和循环结构的实现方法。

1. 无条件转移(GOTO)

格式:GOTOn;n为顺序号(1~9999)

例如,GOTO6;

语句组

N6 G00X100;

执行GOTO6语句时,转去执行标号为N6的程序段。

2. 条件转移(IF)

功能: 在IF后面指定一个条件表达式,如果条件满足,转向第N句,否则执行下一段。

格式IF [条件表达式] GOTO n;

其中:

条件表达式一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量

]。

操作符

4. 循环(WHILE)

格式:WHILE[关系表达式]DO m;

语句组;

END m;

当条件表达式成立时执行从DO到END之间的程序,否则转去执行END后面的程序段。

例如,#1=5;

WHILE[#1LE30]DO 1;

#1=#1+5;

G00X#1Y#1;

END 1;

M99;

当#1小于等于30时,执行循环程序,当#1大于30时结束循环返回主程序。

6

7

13.1 宏程序的调用与返回

1. 宏程序的简单调用

宏程序的简单调用是指在主程序中,宏程序可以被单个程序段单次调用。 调用指令格式: G65 P (宏程序号) L (重复次数)(变量分配) 其中:G65——宏程序调用指令

P (宏程序号)——被调用的宏程序代号;

L (重复次数)——宏程序重复运行的次数,重复次数为1时,可省略不写; (变量分配)——为宏程序中使用的变量赋值。

宏程序与子程序相同的一点是,一个宏程序可被另一个宏程序调用,最多嵌套4层。 2. 宏程序的开始与返回

宏程序的编写格式与子程序相同。其格式为: O0010(0001~8999为宏程序号) //程序名 N10 …… //指令 ……

N30 M99 //宏程序结束 宏程序以程序号开始,以M99结束。

加工如图所示的凹槽表面。零件材料为中碳钢。为保证表面质量,内外轮廓先粗加工后精加工,粗加工内轮廓时刀补半径比刀具半径大0.2mm ,作为精加工余量。精加工的刀补半径与刀具半径相同。

图12-2 凹槽表面零件

表12-1 实用刀具卡片

表数控加工工序卡

8

图12-3 工步1~工步4的走刀路线图图12-4 工步5~工步7的走刀路线图

图12-5 工步8~工步10的走刀路线图图12-16 工步5~工步7的走刀路线图

图12-3至图12-6给出了有关工步的走刀路线图。

主程序

O0100

N0101 G92X0.0Y0.0Z150.0; 设定坐标系

N0102 M06T01H01; 换第1号刀

N0103 G00Z1.0M03S300.0; 接近工件起动主轴

N0104 G00X30.0Y25.0; 进入切削起点A

N0105 G01Z-6.0F50.0; Z向切入工件(粗加工第1次深度)

N0106 G01X15.0Y15.0G42D1F100.0; A-B(D1刀补比实际直径大0.2mm,右刀补)N0107 G65P0200I15.0J15.0; 调用切矩形宏程序

9

N0108 G01X30.0Y25.0G40; 回切削起点A

N0109 G01Z-12.0F50.0; Z向切入工件(粗加工第2次深度)

N0110 G01X15.0Y15.0G42D1F100.0; A-B(D1刀补比实际直径大0.2mm,右刀补)N0111 G65P0200I15.0J15.0; 调用切矩形宏程序

N0112 G01X30.0Y25.0G40; 回切削起点A

N0113 G01X15.0Y15.0G42D2F100.0; A-B(D2与实际直径相同,精加工)

N0114 G65P0200I15.0J15.0; 调用切矩形宏程序

N0115 G01X30.0Y25.0G40; 回切削起点A

N0116 G00Z-6.0; 抬刀(粗加工第1次深度)

N0117 G01X35.0Y29.0; A-B(切削矩形无刀补)

N0118 G65P0200I35.0J29.0; 调用矩形宏程序

N0119 G01X30.0Y25.0 回切削起点A

N0120 G01Z-12.0F50.0;Z向切入工件(粗加工第2次深度)

N0121 G01X35.0Y29.0; A-B(切削矩形无刀补)

N0122 G65P0200I35.0J29.0; 调用矩形宏程序

N0123 G01X30.0Y25.0 回切削起点A

N0124 G01Z-6.0; 切削两端余量(粗加工第1次深度)

N0125 G65P0300; 切第1层

N0126 G01X30.0Y25.0 回切削起点A

N0127 G01Z-12.0; Z向进刀(粗加工第2次深度)

N0128 G65P0300; 切第2层

N0129 G01X30.0Y25.0 回切削起点A

N0130 M06T02H02; 换第2把刀

N0131 G01X30.0Y25.0; 进入切削起点

N0132 G00Z1.0; 接近工件

N0133 G01Z-6.0F50.0; 切入6mm深(粗加工第1次深度)

N0134 G01X0.0Y44.0G41D3F100.0; A-B(切入曲线轮廓到上部长边的中点)

N0135 G65P0400; 调曲线轮廓宏程序

N0136 G01X30.0Y25.0G40; 进入切削起点A

N0137 G01Z-12.0F50.0; Z向切入深度12mm(粗加工第2次深度)

N0138 G01X0.0,Y44.0G41D3F100.0; A-B(切入曲线轮廓到上部长边的中点)

N0139 G65P0400; 调曲线轮廓宏程序

N0140 G01X30.0Y25.0G40; 回起刀点A

N0141 G01X0.0Y44.0G41D4F100.0;A-B(切入到长边中点第4号刀补)

N0142 G65P0400; 调用曲线轮廓宏程序

N0143 G01Z-2; 抬刀至斜面顶点高度

N0144 G01X30.0Y25.0G40; 加工切削起点A

N0145 M06T01H01; 换第1号刀

N0146 G01X30.0Y0.0G42D2 进入上斜面起点处

N0147 G65P0500I30.0J0.0I-30.0J30.0; 加工上斜面

10

N0148 G00Z-2.0; 抬刀

N0149 G00X30.0Y25.0G40; 回切削起点

N0150 G01X30.0Y0.0G41D2F100.0;进入下斜面起点处

N0151 G65P0600I30.0J0.0I-30.0J-30.0; 加工下斜面

N0152 G00Z1.0; 抬刀

N0153 G00X30.0Y25.0G40; 回切削起点

N0154 G01Z-2.0 F100.0 下刀

N0155 G01X0.0Y30.0G41D2;进入右斜面起点

N0156 G65P0700I0.0J30.0I30.0J-30.0; 加工右斜面

N0157 G00Z1.0 抬刀

N0158 G00X30.0Y25.0Z-2G42F100.0; 回切削起点

N0159 G01Z-2.0 下刀

N0160 G01X0.0Y30.0G42D2 进入左斜面起点

N0161 G65P0800I0.0J30.0I-30.0J-30.0; 加工左斜面

N0162 G00Z150.0; Z向回初始位置

N0163 G00X0.0Y0.0G42; XY回坐标原点

N0164 M30; 程序结束

切削矩形宏程序,直刀路线如图12-3和12-4所示。

O0200

N0201 G01X-#4F100.0; B-C

N0202 G01Y-#5; C-D

N0203 G01X#4; D-E

N0204 G01Y#5; E-B

N0205 M99; 返回主程序

切削内内腔两端余量宏程序,走刀路线如图12-5所示。

O0300

N0301 G01X48.0Y29.0F100;A-B

N0302 G01X-48.0;B-C

N0303 G01X-35.0Y0.0;C-D

N0304 G01X-48.0Y-29.0;D-E

N0305 G01X48.0;E-F

N0306 G01X35.0Y0.0;F-G

N0307 G01X48.0Y29.0; G-B

N0308 M99; 返回主程序

切削曲线轮廓宏程序,走刀路线如图12-6所示。

O0400

11

N0401 G01X-53.0F100.0;B-C

N0402 G03X-63.0Y34.0R10.0;C-D

N0403 G01Y20.365;D-E

N0404 G03X-58.8Y12.219R10.0;E-F

N0405 G02X-58.8Y-12.219R15.0;F-G

N0406 G03X-63.0Y-20.365R10.0;G-H

N0407 G01Y-34.0;H-I

N0408 G03X-53.0Y-44.0R10.0;I-J

N0409 G01X53.0;J-K

N0410 G03X63.0Y-34.0R10.0;K-L

N0411 G01Y-20.219;L-M

N0412 G03X58.8Y-12.219R10.0;M-N

N0413 G02X58.8Y12.219R15.0;N-P

N0414 G03X63.0Y20.365R10.0;P-Q

N0415 G01Y34.0;Q-R

N0416 G03X53.0Y44.0R10.0;R-S

N0417 G01X0.0;S-B

N0418 M99;返回主程序

加工上斜面宏程序

O0500

#1=-2.0; Z初值为-2

WHILE[#1GE-8] DO1;当Z值小于-8时斜面加工结束

N0501 G01X#6;-X方向走刀

#1=#1-0.01*8.0/15.0;计算Z值

#5=#5+0.05; 计算Y值

N0502 G01Y#5Z#1; 斜面插补走刀

N0503 G01X#4; +X方向走刀

END1; 循环终止

N0504 M99; 返回主程序

加工下斜面宏程序

O0600

#1=-2.0;Z初值为-2

WHILE[#1GE-8] DO1;当Z值小于-8时斜面加工结束

N0601 G01X#6;-X方向走刀

#1=#1-0.01*8.0/15.0;计算Z坐标

#5=#5-0.05;计算Y坐标

N0602 G01Y#5Z#1;斜面插补走刀

N0603 G01X#4;+X方向走刀

12

END1;循环终止

N0604 M99;返回主程序

加工右斜面宏程序

O0700

#1=-2.0;Z初值为-2

WHILE[#1GE-8] DO1 当Z值小于-8时斜面加工结束

N0701 G01X#7;-Y方向走刀

#1=#1-0.01*6.0/15.0;计算Z坐标

#4=#4+0.05; 计算X坐标

N0702 G01X#4Z#1;斜面插补走刀

N0703 G01X#5;+Y方向走刀

END1; 循环终止

N0704 M99; 返回主程序

加工左斜面宏程序

O0800

#1=-2.0;Z初值为-2

WHILE[#1GE-8] DO1;当Z值小于-8时斜面加工结束

N0801 G01X#7;-Y方向走刀

#1=#1-0.01*6.0/15.0;计算Z坐标

#4=#4-0.05;计算X坐标

N0802 G01X#4Z#1;斜面插补走刀

N0803 G01X#5;+Y方向走刀

END1;循环终止

N0804 M99;返回主程序

13

相关主题
相关文档
最新文档