宏程序基础

更新时间:2023-12-26 03:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 宏程序的基础

1.1 概述

一、宏程序的分类

首先我们来讲一下宏程序的分类,A类和B类。首先在数控车系统比较老的时候,我们系统里面有A类宏,A类宏格式为G65格式,现在已经基本淘汰。随着科技发达,系统的升级优化,现在的数控系统大多支持B类宏程序,总体而言,现在B类宏是一个主流发展趋势,所以接下来我们的实例讲解都以B类宏程序为例。

二、宏程序的概念

简单来理解宏程序是什么?可以这样理解,宏程序就是利用数学公式,函数等计算方式,配合数控系统中的G代码编制出的一种程序,主要加工一些像椭圆,曲线,各类大螺距螺纹和刀具路线相识的一些零件。随着科技发达,像椭圆,抛物线,等线性零件,用软件或则系统自代G代码可以完成加工,而大螺距异型螺纹这类零件,软件还没达到成熟,所以我们学会宏程序在加工中可以起到一个非常大的作用。可以弥补多年来数控车对大螺距螺纹的编程难的一个提高。

三、宏程序的特征

1.赋值

在宏程序中我们通常用法最多的就是变量,比如:

#1=1 它就是一个变量。我们把这一过程,称为赋值。也就是说,我们把等号后面的数值1,赋值给#1。而现在#1的值就等于1,也可以理解为#1就是一个代号,用来代替数值1。

2.变量和应用

比如:#1=2(把数值2赋值给#1)

1

#2=1(把数值1赋值给#2)

#2=#1(程序从上往下执行,思考一下现在#2的值等于多少?)

解: 当程序执行第一步的时候#1的值等于2,当执行第二步的时候#2的值等于1,当执行第三步的时候这里要注意了,刚才讲过赋值过程,是等号后面的值赋值给等号前面,所以当#1在第一步赋值以后,#1已经等于2了,所以在执行第三步的时候#2的值应该等于2,不在是第二步的1了。从这里我们可以看出,当程序中有相同的变量#的时候,后面的#号代替前面的#号。

比如:#1=2 #1=3

最后结果#1的值因该是等于3的。所以说后面的代替前面的。

四、变量的取值范围

1.局部变量(#1-#33)

什么叫局部变量,局部变量就是在局部或则可以理解为在单个程序中有效。断电以后系统自动清零。

2.公共变量(#100-#199,#500-#999)

公共变量和局部变量的区别在于,局部变量是在局部,或则单个程序中有效,而公共变量是指如果一个程序同时拥有主程序和子程序的情况下,在主程序中如果已经赋值,在子程序中可以不用从新赋值,可以共用。而#100-#199和#500-#999的区别在于,前者断电清零,而后者不会清零会一直保存在系统内部。比如: #500=TAN[15]

#500一旦赋值就将保存在系统内部,下次可以直接调用#500使用。

3.系统变量(#1000-#17200)

系统变量是用于我们机床系统储存一些刀补数据参数等等的东西,我们可以不用管它,不会

用的,慎用)

总结:一般情况下我们写程序用#1-#33,当有子程序的时候我们用#100-#199.

五、宏程序中常用的计算

1.加法运算 例如:#1=2

#1=#1+3 那么#1的值等于2+3=5

2.减法运算 例如:#1=3

#1=#1-1 那么经过计算我们的#1的值等于3-1=2

3.乘法运算

程序中用*号来代替乘法 例如:#1=5

#2=#1*2 那么计算出来#2的值等于5*2=10

4.除法运算

程序中用/ 号来代替除法运算 例如:#1=10

#1=#1/2 那么经过计算#1的值等于10/2=5

六、常用三角函数运算 1.TAN(正切)

例如#1=2*TAN[20] 中括号里面是角度

2.SIN(正玄)

例如#1=3*SIN[3] 同上

3.COS(余玄) 例如#1=COS[15]

4.ASIN、ACOS、ATAN(反三角)

5.SQRT(数学中的开平方的意思,和数学中根号一样)

例如#1=SQRT[9] 那么计算出来#1的值等于3

2

七、宏程序的常用符号和含义 GT(大于)

GE(大于或等于) LT(小于)

LE(小于或等于) EQ(等于) NE(不等于) ABS(绝对值) AND(与) OR(或者)

八、常用的语法和应用

1.无条件转移 GOTO n(n表示数值) 例如:GOTO01 此程序段的意思是当程序中执行到这一程序段的时候无条件跳转到程序段中N1的地方,执行N1后面的程序段。 M3 S500 G99

T101 M08

GOTO 10 (当程序执行到这里的时候,直接跳转到N10那个程序段执行M30,跳过了G0那一步,所以这叫做无条件跳转,和我们一般程序中跳段功能一样)

G0 X100. Z100.

N10 M30

2.有条件跳转 IF[条件表达式] GOTO n

例如:IF[#1 GT 15] GOTO 10 从这段程序当中,我们这样理解,如果中括号里面的条件满足,那么就执行后面的GOTO跳转语句,如果中括号里面条件不满足,那么不执行后面的GOTO跳转,执行后面一个程序段。 我们简单来写一个程序: M3 S500 G99

T101 M08

N10#1=30(把数值30赋值给#1)

IF[#1 LT 50] GOTO 10(首先判断中括号是不是满足条件,如果满足执行跳转,不满足执行下一步) M30

从这个程序中我们可以发现当#1=30的时候,我们执行条件判断,我们来判断一下,#1现在等于30,那么重括号里面就可以理解为30小于50,现在条件满足。所以他会执行后面GOTO跳转语句,跳转到N10地方继续执行)

3.强制赋值语句 IF[条件表达式]THEN(执行语句) 例如:IF[#1 GT 20] THEN#1=20 (我们这样来理解这个语句,如果#1大于20,那么#1等于20,也就是说和上面一样,中括号里面条件满足的话,执行后面THEN语句,如果不满足,不执行后面then语句。) 写一段简单程序:

#1=3(把数值3赋值给#1)

#1=#1-5(把#1-5计算出来的值从新赋值给#1,也就是3-5=-2,现在#1=-2)

IF[#1 LT 0] THEN#1=0(强制赋值,如果#1小于0,那么强制让#等于0) M30

我们来分析一下上面程序段,当我们#1执行完减法运算以后#1的值已经等于-2,那么我们在执行强制赋值语句的时候我们来判断一下中括号里面条件是不是满足,-2小于0,条件满足,所以执行后面THEN语句,如果不满足的时候不执行THEN语句)

4.条件判断语句 WHILE[表达式]DO n ( n为数值,取值范围1-99)

END n(n 与开头n的数值对应)

例如:WHILE[#12 GT 50]DO 1

END 1

3

下面写一个程序段:

#1=60

WHILE[#1 GT 50] DO 1

G0 X#1

G1 Z-20. F0.2

G0 U1. Z1.

END 1 M30

这个程序当条件判断语句里面中括号里面条件满足的时候执行DO 1和END 1中间的程序段,如果条件不满足,执行END 1后面的程序段M30。

以上介绍的语法格式用法,以FANUC oi系列,广数,三菱系统为例。西门子,宝源,新代等系统以说明书为准!!!

第二章 宏的入门

实例 1.单外径粗车宏的应用

本实例介绍一个简单的车削外径的宏程序,目的为了让读者熟悉宏语句用法和逻辑。

3.图纸要求直径30赋值给#2

4.吃刀量赋值给#3,每层吃刀量为3.

4.0加工程序编程与注释 O0010

M3 S300 G99

T101 M08

G0 X51. Z10. Z0.

G1 X-0.7 F0.12(平端面)

G0W1.X50.

#1=50(毛培赋值)

#2=30(图纸要求尺寸)

#3=3(吃刀量赋值)

上图为一个单一外圆车削图,材料为直径50的棒料,车削到直径30,长度30.

图纸要求,平面见光就行,采用宏程序粗加工,每刀吃刀量为3毫米。

2.0工艺分析

1.采用3爪自定心卡盘夹持直径50,台阶爪定位左端面。

2.选择加工刀具,选用90度外圆机架刀车刀。

3.0宏程序编程思路 1.模仿G71路线。

2.毛培直径50赋值给#1,通过毛培每次递减,实现车削到指定直径。

4

N10#1=#1-#3(利用减法运算,计算出每一层的X值)

G0 X#1(X进刀)

G1 Z-30. F0.12

G0 U1. Z1.

IF[#1 GT #2] GOTO 10(如果#1大于#2,那么执行跳转到N10的地方执行后面程序,如果不满足,执行后面一步)

G0 X120. Z130. M30

程序编制完成,我们来检查一下这个程序对不对,首先我们来看#1=#1-#3这一步,当#1等于50,#3=3的时候,我们就因该是50-3=47,然后把47从新赋值给#1,当执行完一刀外径车削以后,我们条件判断,如果#1大于#2,也可以理解为如果47大于30,跳转到N10继续执行N10后面程序段,现在47明显大于30,所以跳回N10的地方,继续执行,当跳回N10以后,#1=#1-#3,现在的#1应该是前面计算出来的47,也就是说#1现在等于47-3=44,然后在执行外径车削,条件判断。但是我们现在来想一下,当他一直这样循环,循环6次以后,每次吃刀量3,也就是50-3*6=32,当#1等于32的时候,#1任然大于#2,所以他会继续跳转N10,循环第七次,当第7次执行#1=#1-#3的时候,结果#1=32-3=29,然后在执行G0X#1,也就是G0X29. 通过这里我们就可以看出如果程序这样编制,它会过切一个毫米,也就是说本来图纸要求直径为30,现在它车到了直径29,所以报废!下面我们看一下下面的程序怎么改进。

改进后程序如下: O0010

M3 S300 G99

T101 M08

G0 X51. Z10. Z0.

G1 X-0.7 F0.12(平端面)

G0 W1. X50.

#1=50(毛培赋值)

#2=30(图纸要求尺寸)

#3=3(吃刀量赋值)

N10#1=#1-#3(利用减法运算,计算出每一层的X值)

5

IF[#1 LT #2] THEN#1=#2(强制赋值语句,如果#1每次递减3,当它小于了我们图纸要求直径30的时候,强制让#1=30)

G0 X#1(X进刀)

G1 Z-30. F0.12

G0 U1. Z1.

IF[#1 GT #2] GOTO 10(如果#1大于#2,那么执行跳转到N10的地方执行后面程序,如果不满足,执行后面一步)

G0 X120. Z130. M30

从这个优化过的程序我们可以看到,其实我们就在#1=#1-#3这一步计算后面加了一个强制赋值语句,防止过切,通过这一个强制赋值语句,刚才第一个程序的问题得到解决!接下来我们来讲解一下还有一种情况,如果IF[#1 GT #2] GOTO 10这个条件判断,把GT大于换成GE大于或等于,会出现什么情况呢?我们来看一下,当换成大于或等于以后,也就是说当我们#1大于或者等于只要满足其中一个条件他就执行GOTO 10语句,继续循环,我们现在已经加了强制赋值语句,#1已经等于#2,但是现在条件判断任然满足,所以他会继续跳转N10,从而出现一个问题,他会一直在循环下去,停不下来了。。。。。。。。这个我们把它称为死循环!下面我们来解决一下死循环的问题,程序继续优化,如下: O0010

M3 S300 G99

T101 M08

G0 X51. Z10. Z0.

G3 X49. W-0.5 R0.5 F0.06(倒右侧圆角)

G0 X50.5(退刀)

IF[#1 GT #2] GOTO 10(条件判断如果#1大于#2跳转N10继续执行下一个切槽)

G0 X120. Z1.(退刀)

M30(程序结束)

根据上面程序,我们可以实现给出一个曹的走刀路线,就可以切削多个曹的作用,如果中途在任意一个曹停下来了,我们只需要改一下#1的赋值,就可以实现从停的那个曹开始加工,这个是宏程序的一个特点!仔细思考这个程序为什么没有加强制赋值语句和跳出死循环语句!!!!什么时候改加,什么时候可以不用加,这个要多多思考!!

下面我们还是用这个图来编制一个不用G75循环切槽,用G1模仿G75路线来增加难度,前面我们都是一重循环,下面我们来编制一个2重循环的程序: O0001

M3 S600 G99

T101 M08

G0 X50.5 Z10. Z1.

#1=0(平面Z值)

#2=-80(最后一个曹的Z值)

#4=50(曹大直径)

N10#1=#1-10(算出每个曹的Z值坐标)

G0 Z#1(Z定位)

G1 X50. F0.2(定位到大直径处)

11

N20 #4=#4-0.5(算出每次X的值)

IF[#4 LT 45] THEN#4=45(强制赋值防止X过切,这里可以不用写)

G1 X#4 F0.06(切曹)

G0 X[#4+0.2](以上次切曹的深度退刀0.2)

IF[#4 EQ 45] G0TO 30(防止死循环)

IF[#4 GE 45] GOTO 20(如果切曹深度现在大于或等于45,跳转N20继续切曹)

N30 #4=50(这里很关键,当执行到这里的时候,#4实际已经等于45,所以这里从新赋值,下一个曹才能正确加工,仔细思考这里)

G0 X50.5(退刀)

W-0.5(进刀到左侧倒角起点)

G1 X50. F0.2

G2 X49. W0.5 R0.5 F0.06(倒左侧圆角)

G0 X50.5

W0.5(进刀到右侧圆角起点)

G1 X50. F0.2

G3 X49. W-0.5 R0.5 F0.06(倒右侧圆角)

G0 X50.5(退刀)

IF[#1 GT #2] GOTO 10(如果#1大于#2跳转N10执行下一个曹的加工)

G0 X120. Z1.(退刀)

M30(程序结束)

上面程序我们用G1来代替G75的走刀路线来编制程序,目的是为了锻炼各位学者的思维,从而真正的掌握宏程序,相比G75来编制增加了难度,从一重循环提升到2重循环,希望各位学者仔细思考,跟着程序思路去理解,而不是像G代码一样一直向下执行!如果这一节课程你已经理解透测,恭喜你,你的宏程序又更上一个台阶了。

工。

工艺要求:

1.采用3毫米切刀。 2.每层吃刀量1.5

3.刀具以左侧对平面Z0.

4.夹持大直径30以左平面定位

外径平面已加工到位下面来编制这个程序: O0001

M03 S600 G99

T0101 M8

G0 X35 Z10

Z-13.

#1=30(外圆大直径为30)

#2=12 (槽底直径为12)

#3=17 (如图槽宽度为20,我们用3毫米刀,所以20-3=17,槽的宽度)

#4=1.5(每层的吃刀深度为1.5)

N10#1=#1-#4 (算出第一层的X值)

IF[#1 LT #2] THEN#1=#2(强制赋值,防止过切)

#5=0(Z方向的赶刀初始值)

N20 G0 X[#1+#4+0.3] (算出每车完一层的X定位)

Z[-13-#5](Z方向的实际定位)

G1 X#1. F0.04(径向车削)

IF[#5 EQ #3] GOTO 30(如过加工完一层跳转到N30的地方,如果条件不满足走下面的程序段)

12

第五章 外径深曹的宏程序分层法加工

今天我们来讲解一下外径深曹的加工,大家因该知道我们在加工深曹的时候,铁销不容易排出,容易卡削坏刀!利用G代码G75循环只能径向车削到底部,在执行Z进刀,这样的加工方式有所不足,今天我们利用宏程序分层法可以合理解决这个问题,也为后面的矩形螺纹打好基础,看下图:

从上图可以看出,我们曹大直径30,底部直径12,曹宽20,曹比较深。我们采用分层加工的方法来加

#5=#5+2.5(Z方向每次赶刀2.5)

IF[#5 GT #3] THEN#5=#3(防止每层的宽度过切,所以强制赋值)

IF[#5 LE #3] GOTO 20(条件判断,判断如果赶刀的宽度没有达到槽宽,跳转N20的地方继续循环)

N30 G0 X35(X退到安全位置)

Z-13(Z方向退到第一刀加工起点)

IF[#1 EQ #2] GOTO 40(判断如果切槽深度到达跳转N40,跳出循环)

IF[#1 GE #2] GOTO 10(如果深度没有到达跳转N10的地方继续循环)

N40 G0 X120 Z150(退刀程序结束) M30

通过上面程序我们可以实现分层切削,当切削完一个径向车削以后,退刀,Z方向往负方向移动2.5,继续执行径向车削,当一层宽度到达以后,执行下一层,重复执行,直到深度到达!

下面我在这里介绍一种利用宏程序和G75并用的程序,这样写法可以让程序更加简单化,程序如下: O0001

M3 S800 G99

T0101 M08

G0 X35. Z10.

#1=30

#2=12

#3=1.5

13

N10#1=#1-#3

IF[#1 LT #2] THEN#1=#2

G0 Z-13.

X[#1+#3+0.2]

G75 R0.2

G75 X#1 Z-30. P500 Q2500 F0.08

G0 X35.

Z-13.

IF[#1 EQ #2] GOTO 20

IF[#1 GE #2] GOTO 10

N20 G0 X100.

Z130. M30

仔细思考这个程序,完全理解以后,以这个图编写一个Z方向从中间下刀往两边移动的宏程序,多思考多动手,祝愿你早日达到目标!

第六章 端面深曹的分层加工

下图需要加工大直径为80,小直径为60,深度15的端面曹,如果轴向进刀到槽底,铁销卡住刀具难以承受,今天我们介绍分层法用宏程序来解决:

M3 S500 G99

T101 M08

G0 X60. Z10. Z1.

#1=60(小直径赋值)

#2=[80-6]-60(用大直径减去两个刀宽在减去小直径等于实际需要移动的X值)

#3=2(初始Z方向吃刀量)

#4=0(平面Z值)

#5=-15(曹深度)

N10 #3=#3-0.1(吃刀量每层递减0.1)

IF[#3 LT 0.5] THEN#3=0.5(强制赋值最小吃刀量为0.5)

#4=#4-#3(算出每层的Z值)

IF[#4 LT #5] THEN#4=#5(强制赋值防止Z深度过切)

#6=0(X移动初始值)

N20 G0 X[#1+#6](X每次定位)

Z[#4+#3+0.3] (Z每次定位离上次切曹起点距离0.3的地方)

G1 Z#4 F0.06(曹车削)

Z[#4+#3+0.3](退刀到距离上次切曹定位0.3的地方) IF[#6 EQ #2] GOTO 30(防止X方向死循环)

#6=#6+5(刀具每次移动直径5,刀宽为3,端面曹我们需要刀宽*2)

14

工艺安排:

1.夹持直径100,以左端面定位

2.选用3毫米宽端面切曹刀分层加工 3.刀具以刀具内侧对刀

4.初始吃刀量为2,每层递减0.1,最小吃刀量0.5

程序注释如下: O0001

IF[#6 GT #2] THEN#6=#2(强制赋值,防止X曹宽过切)

IF[#6 LE #2] GOTO 20(条件判断,如果宽度没有到达跳转N20继续循环)

N30 IF[#4 EQ #5] GOTO 40(防止Z方向死循环)

IF[#4 GE #5] GOTO 10(如果深度没有到达,跳转N10继续下一层车削)

N40 G0 Z10.(退刀,程序结束)

Z130. M30

上图程序整体思路为,执行完一个切槽动作,然后移动X方向,切削下一个切槽,直到曹宽到达,进入下一层,重复执行!直到深度到达!由于端面曹加工涉及曹刀宽度,如果不好理解我们下面介绍宏和G74代码共同使用的方法可以简化程序。 程序如下: O0001

M3 S600 G99

T101 M08

G0 X60. Z10. Z1.

#1=60(曹小直径)

#2=80-6(大直径减去2个刀宽等于X终点坐标)

#3=-15(曹深度)

#4=2(初始吃刀量)

#5=0(平面Z值)

15

N10 #4=#4-0.1(吃刀量每层递减0.1)

IF[#4 LT 0.5] THEN#4=0.5(最小吃刀量为0.5)

#5=#5-#4(算出每一层的Z值)

IF[#5 LT #3] THEN#5=#3(防止深度过切)

G0 Z[#5+#4+0.3](Z每次定位)

G74 R0.2

G74 X#2 Z#5 P2500 Q500 F0.06(端面切槽循环)

IF[#5 EQ #3] GOTO 20(如果深度到达跳出循环)

IF[#5 GE #3] GOTO 10(如果深度没有到达跳转N10进入下一层)

N20 G0 Z10.

X120. Z130.

M30(程序结束)

上面程序通过宏和G74的共用,简化了程序,让思路更加清晰。

总结:

1.强化2重循环的思维‘

2.理解切端面曹刀宽对X坐标的影响 3.利用分层合理保护刀具

4.利用现有G代码G74切曹循环和宏共用的方法 5.学习完这以上课程完全理解以后可进入第三章学习

更多数控宏程序请访问 http://www.zgsklm.com

本文来源:https://www.bwwdw.com/article/6j9x.html

Top