• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏机械男的工作与生活博客

用户宏程序——FANUC(法那克)

工作经验 jixienan 4年前 (2022-06-16) 1449次浏览 0个评论

用户宏程序——FANUC(法那克)

随着软件不断发展,目前CAD/CAM软件普遍应用,手工编程的应用空间日趋减小。其实宏程序有着广泛的应用空间,并且能够方便工人编程。锻炼我们的编程能力,帮助我们更加深入的了解自动编程的本质。所以,在能应用手工编程的的地方尽量不要使用自动编程,比在必要时可以采用自动编程。

       宏程序定义:宏程序是手工编程的高级形式。

      宏程序的特点:

1、 将有规律的形状或尺寸用最简短的程序表达出来。

2、 具有极好的易读性和易修改性,编写出来的程序非常简洁,逻辑严密。

3、 宏程序的运用是手工编程中最大的亮点和最后的堡垒。

4、 宏程序具有灵活性、智能性、通用性。

 

宏程序与普通程序的比较

宏程序可以使用变量,并且给变量赋值、变量之间可以运算、程序运行可以跳转。

普通编程只能使用常量、常量之间不能运算、程序只能顺序执行,不能跳转。

 

宏程序分为两类:A类和B类。

A类宏程序是机床的标配。用G65H**来调用。

B类宏程序相比A类来说,容易简单,可以直接赋值运算,所以B类用的多。

 

1)变量功能

1) 变量的形式:变量符号+变量号  法那克系统变量符号用 # ,变量号为123

2) 变量的种类:空变量、局部变量、公共变量和系统变量四类。

                空变量:#0。该变量永远是空的,没有值能赋它。

局部变量:#1#33。只在本宏程序中有效,断电后数值清除,调用宏程序时赋值。

                公共变量:#100#199#500#999。在不同的宏程序中意义相同,#100#199断电后清除,#500#999断电后不被清除。

                系统变量:#1000以上。系统变量用于读写CNC运行时的各种数据,比如刀具补偿等。

提示:局部变量和公共变量称为用户变量。

    3) 赋值:赋值是指将一个数赋予一个变量。例#1=2   #1表示变量,# 是变量符号,数控系统不同,变量符号也不同,= 表示赋值符号,起语句定义作用。 2 就是给变量#1 赋的值。

4) 赋值的规律:

    1、赋值号 = 两边内容不能随意互换,左边只能是变量,右边可以是表达式、数值或者变量。

    2、一个赋值语句只能给一个变量赋值。

    3、可以多次给一个变量赋值,新的变量将取代旧的变量,即最后一个有效。

    4、赋值语句具有运算功能,形式:变量=表达式,在运算中,表达式可以是变量自身与其他数据的运算结果,如:#1=#1+2,则表示新的#1等于原来的#1+2,这点与数学等式是不同的。

    5、赋值表达式的运算顺序与数学运算的顺序相同。

5) 变量的引用

    1、当用表达式指定变量时。必须把表达式放在括号中。如 G01 X[#1+#2] F#3

    2、引用变量的值的符号,要把负号()在在#的前面。如 G01 X-#6 F1000

 

2)运算功能

1)  运算符号:加(+) 减() 乘(*) 除(/

             正切(TAN) 反正切(ATAN) 正弦(SIN) 余弦(COS)开平方根(SQRT

             绝对值(ABS) 增量值(INC) 四舍五入(ROUND)舍位去整(FIX) 进位取整(FUP

 

2) 混合运算:

1、 运算顺序:函数——乘除——加减

2、 运算嵌套:最多五重,最里面的[ ]”运算优先。

3)转移功能

1) 无条件转移:格式 GOTO + 目标段号(不带N)。例如转到N50   GOTO50

2) 有条件转移:格式 IF + [ 条件表达式 ] + GOTO + 目标段号(不带N

3) 转移条件: 

等于

=

EQ

IF[#1EQ#2]GOTO10

不等于

NE

IF[#1NE#2]GOTO10

大于

>

GT

IF[#1GT#2]GOTO10

小于

<

LT

IF[#1LT#2]GOTO10

大于等于

GE

IF[#1GE#2]GOTO10

小于等于

LE

IF[#1LE#2]GOTO10

 

 

 

 

 

举例1:同心圆 刀具Φ8 所以步距取6mm   

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X0 Y0

位置定位

Z2.

安全高度,二次验刀

G01 Z-__ F1000  

下刀多深,根据零件需要

#1=6.

赋值 每次刀具移动量为6mm

N10 G01 X#1 Y0 F1000

刀具移动到(60)的位置

G02 X#1 Y0 I-#1 J0 F2000

刀具在(60)的位置走一个顺时针整圆

#1=#1+6

每次往外移动6 mm

IF[#1LE43]GOTO10

条件转换,假如#143,条件满足跳转到第N10这段,条件不满足往下走

G01Y-30.

切线出去,要是上面走G03,这里就要用Y10

G00 Z50.

抬刀

G00 X100. Y100.

退刀

M05

主轴停止

M30

程序结束

练习:试着编半圆和3/4圆                       

举例2:类似阿基米德螺旋线  刀具Φ8 所以步距取3mm6mm

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X0 Y0

位置定位

Z2.

安全高度,二次验刀

G01 Z-__ F1000  

下刀多深,根据零件需要

#1=3 #2=6.

赋值 每次刀具移动量为36mm

N10 G03 X-#2 Y0 R#1 F2000

刀具走半径为3的半圆到(-60)的位置

G03 X#2 Y0 R#2

刀具走半径为6的半圆到(60)的位置 上下两个半圆错开

#1=#1+6 #2=#2+6

每次往外移动6 mm,每次加#2的值,要是#1 #2 48 这里就加8

IF[#1LE43]GOTO10

条件转换,假如#143,条件满足跳转到第N10这段,条件不满足往下走

G00 Z50.

抬刀

G00 X100. Y100.

退刀

M05

主轴停止

M30

程序结束

 

 

 

举例3:深度方向和平面2次跳转铣圆  刀具Φ8 所以步距取6mm 材料Φ80 铣深10mm

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X0 Y0

位置定位

Z2.

安全高度,二次验刀

#1=0

赋值 深度方向开始位置为Z0

N10 #1=#1+2

深度方向每次递增2mm

G01 Z-#1 F1000

Z方向第一次切深到-2的位置

#2=6

赋值 平面内每次移动量为6mm

N20 G01 X#2 Y0 F2000

刀具移动到(60)的位置

G02 X#2 Y0 I-#2 J0

在(60)的位置走一个半径为6的整园

#2=#2+6

刀具每次往外移动6mm

IF[#2LE43]GOTO20

条件转换#2小于等于43,条件满足跳转到第N20这段,条件不满足往下走

G00 G91 Z1.

增量方式快速往上抬1mm

G90 X0 Y0

绝对方式快速运动到(00

IF[#1LE10]GOTO10

条件转换#1小于等于10,条件满足跳转到第N10这段,条件不满足往下走

G00 Z50.

抬刀

M05

主轴停止

M30

程序结束

练习:试着变换思路,用2次跳转编一个整圆铣平面的宏程序。

 

举例4:深度方向和平面2次跳转铣矩形 刀具Φ8 所以步距取6mm 材料160 X 96  铣深10mm

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X0 Y0

位置定位

#4=2.

深度方向赋值

N10 #1=6.

长度方向移动量

#3=#1

此处赋值#3就等于#1

N20 #2=48/80*[#1]

长度是80宽度是48 宽度与长度之比48/80 #1代表长度 那么#2就等于宽度

G01 Z-#4 F1000

Z方向第一次到-2的位置

X#1 Y#2

往矩形的右上角一个点进刀

X-#1

往左上角第二个点

Y-#2

往右下角第三个点

X#1

往右下角第四个点

Y#2

往右上角第四个点

#1=#1+#3

深度宽度方向每次移动6mm 宽度方向#2 会根据#1的变化会自动变化

IF[#1LE80]GOTO20

条件转换#1小于等于80,条件满足跳转到第N20这段,条件不满足往下走

G00 G91 Z1.

增量方式快速往上抬1mm

G90 X0 Y0

绝对方式快速运动到(00

#4=#4+2

深度方向每次增量2mm

IF[#4LE10]GOTO10

条件转换#4小于等于10,条件满足跳转到第N10这段,条件不满足往下走

G00 Z50.

抬刀到50

X100. Y100.

退刀

M05

主轴停止

M30

程序结束

练习:试着变换思路,用类似螺旋线原理走一个平面内的矩形宏程序

 

 

举例5:简单椭圆    长轴80  短轴48   刀具Φ8 mm

椭圆上任意一点的坐标(XY)          长半轴=a   短半轴=b  角度α

X = a * COS [ α ]    Y= b * SIN [ α ]

常用三角函数 SIN 0=0    SIN 90=1   COS 0=1   COS 90=0    SIN 30=0.5  COS 60=0.5  

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X-50 Y15

位置定位

G00 Z2.

安全高度,二次验刀

G01 Z-___F1000

根据零件需要

G42 G01 X40. Y-5. D01 F1500

往(40,-5)的位置加刀补 刀具半径补偿量为4.0mm

G01 Y0

切入

#1=0

赋值 起始角度为0

#2=40

赋值 #2等于长轴的一半 就是长半轴

#3=24

赋值 #3等于短轴的一半 就是短半轴

N10 #4=#2*COS[#1]

计算X坐标 因为#1初始为0 所以 #4=#2*1=40

#5=#3*SIN[#1]

计算Y坐标 因为#1初始为0 所以 #5=#3*0=0

G01 X#4 Y#5 F8000

刀具往(XY)直线逼近拟合 第一点就是(400

#1=#1+1

角度每次增量,因为椭圆是用直线拟合所以精度取决于角度增量。

IF[#1LE360]GOTO10

条件转换#1小于等于360,条件满足跳转到第N10这段,条件不满足往下走

G01 Y5. F1500

切出

G40 G01 X50. Y15.

取消角度

G00 Z20.

抬刀

M05

主轴停止

M30

程序停止

练习:1、试着改变思路,编一个长轴与X轴成30度的斜椭圆。

      2、结合西门子SCALE比例系数,来编一个椭圆。

 

 

举例6:方变方 高度30 上表面正方形边长12 下表面正方形周长20 刀具Φ8 mm

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X45. Y45.;

位置定位

G00 Z2.;

安全高度,二次验刀

G01 Z0 F1000;

切削进给到z0的位置

#1=0.15 #2=0.04  #3=12 #4=12  #5=0

赋值 1是深度 #2x y方向的移动量 #3 4 x y初始值

N10 G01 Z-#5 F1000;

切削进给到5的位置 就是z0的位置

G41 G01 X#3 Y#4+5 D01;

加刀补到(1217)的位置 此时的Y4+5是随着#4的变化而变化

Y-#4;

到正方形的右下角

X-#3;

到正方形的左下角

Y#4;

到正方形的左上角

X#3+5;

切出

G40 G01 X45. Y45.;

取消刀补

#5=#5+#1

运算 深度方向从0 每次增量0.15

#3=#3+#2  #4=#4+#2

运算 x y方向每次往外移动0.04

IF[#5LE30]GOTO10.;

条件转换 要是深度小于30 条件满足往N10跳 不满足继续往下走

G00 Z100.;

抬刀

G00 X100. Y100.;

退刀

M05;

主轴停止

M30;

程序结束

 

举例7:圆环阵列打孔  R80的圆上隔30度打孔 起始角为0度,钻头Φ8 mm

解一 角度变化钻孔

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X100. Y20.;

位置定位

#1=0

赋值 起始角度为0

N10 #2=80*COS[#1];

计算孔的X坐标

#3=80*SIN[#1];

计算孔的Y坐标

G99 G81 X#2 Y#3 R5. Z-10.F50;

G81点钻 返回到安全高度 钻深10mm

#1=#1+30

运算 角度增量 每次增加30度 根据图纸来定

IF[#1LE331]GOTO10;

假如#1小于等于331时返回N10 这里不能写361 最后一个孔在330

G00 Z100.;

抬刀

M05;

主轴停止

M30;

程序停止

 

解二  孔数变化钻孔

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X100. Y20.;

位置定位

#1=1

赋值 起始孔数为1

N10 #2=80*COS[[#1-1]*30];

计算孔的X坐标

#3=80*SIN[[#1-1]*30];

计算孔的Y坐标

G99 G81 X#2 Y#3 R5. Z-10.F50;

G81点钻 返回到安全高度5mm 钻深10mm

#1=#1+2

运算 孔数增加 这里不是加1 因为#2里面要用#1-1 所以用2递增

IF[#1LE12]GOTO10;

假如#1小于等于12时返回N10 这里是孔数增加 直到钻满12

G00 Z100.;

抬刀

M05;

主轴停止

M30;

程序停止

 

 

 

 

 

 

8:在R80的圆周上阵列钻空并且半径依次递减20再次阵列打孔,其他参数同举例7

T0101 G54 G90 G17 G40

定义参数

M03 S1500

定义主轴

G00 Z20.

高度定位

G00 X100. Y20.;

位置定位

#1=0

赋值 起始角度为0

#2=80

起始半径为80

N10 #3=#2*COS[#1];

计算孔的X坐标

#4=#2*SIN[#1];

计算孔的Y坐标

G99 G81 X#3 Y#4 Z-10. R5. F50;

G81点钻 钻深10 安全高度5mm

#1=#1+30

运算 角度每次增量30

IF[#1LE331]GOTO10;

条件转移 #1小于等于331 条件满足返回N10 不满足继续往下走

#2=#2-20

半径以20递减 此时在60的地方

IF[#2EQ60]GOTO10;

条件转移 2等于60 条件满足返回N10 不满足继续往下走

G00 Z100.;

抬刀

G00 X100.Y100.;

退刀

M05;

主轴停止

M30;

程序停止

练习:试着用孔数的变化来编宏程序

 


机械男 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:用户宏程序——FANUC(法那克)
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址