宏程序基础

宏程序基础
宏程序基础

第一章宏程序的基础

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)#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 七、宏程序的常用符号和含义

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 下面写一个程序段:

#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.单外径粗车宏的应用

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

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

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

2.0工艺分析

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

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

3.0宏程序编程思路

1.模仿G71路线。

2.毛培直径50赋值给#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(吃刀量赋值)

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值)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.

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

G0 W1. X50.

#1=50(毛培赋值)

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

#3=3(吃刀量赋值)

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

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

G0 X#1(X进刀)

G1 -30. F0.12

G0 U1. Z1.

IF[#1 EQ #2]GOTO 20

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

N20 G0 X120. Z130.

M30

从上面程序中我们可以看出,我们在执行完一个外圆车削路线后面加上了一步IF[#1EQ#2]GOTO20如果#等于#2那么跳转到N20的地方执行G0X120.Z130.

如果#1不等于#2,继续执行下面一步程序段,通过这一步我们可以达到一个防止死循环的作用。程序完美运行!总结:

1.赋值的应用。

2.减法运算的应用

3.有条件转移的应用

4.强制赋值语句的应用

5.对宏程序循环体的认识

今天我们讲的课程虽然简单,但是里面包含了学习宏程序必须的语法和逻辑思维,看完教程仔细思考,一定务必把这一个实例完全理解透彻在学习下一课内容,教程都是循循渐进的,如果这一课内容不能理解透测后面内容根本无法学习,多动手,多思考是学习宏程序的关键!文字教程配合视频讲解更通熟易懂,希望各位学者多多努力。

第三章宏程序在深孔钻削的应用

今天我们来讲解一个钻深孔的宏,我们都知道我们

在钻深孔的时候由于钻头难以冷却,铁销难以排出,会造成钻头寿命减短,卡削,严重会断钻头,今天

我们利用宏程序可以让钻头得到冷却,铁销容易排出,合理保护刀具寿命,我们来看下图:

从上图可以看出,我们需要钻孔直径为12,长度100,我们一般G代码G74循环代码,难以达到理想,效果,所以我们采用宏程序,每次钻深2毫米,然后

快速退刀到Z10.地方,带出铁销,钻头冷却,然后

在快速进刀到离上次钻削深度0.5的地方继续钻孔,重复同一动作,直到钻孔深度到达。

图纸要求:

1.每次钻深2毫米,退刀,排铁销,冷却钻头。

2.平面见光

3.防止钻孔偏,先用中心钻打引孔。

刀具使用:

1.90度平面外径车

2.中心钻

3.直径12的钻头

装夹:采用三爪自定心卡盘,夹持毛培直径30,以左端面定位。

数控程序与注释如下:

O0010

M3 S1000 G99

T101 M08(平面刀)

G0 X31. Z10.

Z1.

G1 Z0. F0.3

G1 X-0.7 F0.12(平面)

G0 X120. Z150.

T0202 M08(中心钻)

G0 X0. Z10.

Z1.

G1 Z-1. F0.08(钻引孔防止钻孔的时候偏心)

G0 Z10.

X120. Z150.

T303 S600(直径12的钻头)

G0 X0. Z10.

#1=2(每一次钻深的深度)

#2=-105(这里为什么不是-100?因为按上图要求孔是通孔考虑钻头前面有锥度,所以多钻深5)

#3=0(平面Z0赋值)

N10#3=#3-#1(计算出每次钻深的Z值坐标)

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

G0 Z[#3+#1+0.5](Z每次定位,定位在离上次钻深0.5的地方)

G1 Z#3 F0.06(钻孔)

G0 Z10.(当钻完一个深度退刀到Z10的地方)

G4 X1.(暂停1秒,让钻头冷却)

IF[#3 EQ #2] GOTO 20(防止死循环,如果#3等于#2那么跳转N20的地方)

IF[#3 GE #2] GOTO 10(条件判断,如果#3大于或等于#2跳转到N10地方继续循环)

N20 G0 X120. Z150.(退刀)

M30(程序结束)

从上程序可以看出,我们实现了每次钻深2毫米,然后快速退刀,暂停,快速进刀,继续钻深2毫米,重复执行同一动作,直到深度到达跳出循环,退刀。这里我们使用G1 Z#3来钻孔,下面我把G1改进为G74 钻孔,和宏程序配合使用,效果更佳,程序如下:

T303 S600 (直径12的钻头)

G0 X0. Z10.

#1=2 (每一次钻深的深度)

#2=-105 (这里为什么不是-100?因为按上图要求孔是通孔考虑钻头前面有锥度,所以多钻深5)

#3=0 (平面Z0赋值)

N10#3=#3-#1 (计算出每次钻深的Z值坐标)

IF[#3 LT #2] THEN#3=#2(强制赋值,防止深度过切)G0 Z[#3+#1+0.5](Z每次定位,定位在离上次钻深0.5的地方)

G74 R0.2(每次钻深0.5,退刀0.20)

G74 Z#3 Q500 F0.06(钻孔循环)

G0 Z10.(当钻完一个深度退刀到Z10的地方)

G4 X1.(暂停1秒,让钻头冷却)

IF[#3 EQ #2] GOTO 20(防止死循环,如果#3等于#2那么跳转N20的地方)

IF[#3 GE #2] GOTO 10(条件判断,如果#3大于或等于#2跳转到N10地方继续循环)

N20 G0 X120. Z150.(退刀)

M30(程序结束)

通过上面程序优化,我们可以达到一个最佳加工效果!下面我们来讲一下目前国内用的最多的系统,前面的程序都是以FANUC OI 系列编程,如果你是广数系统,你需要改动一些程序段,按照上面程序我来讲解一下广数和FANUC的区别,程序如下:T303 S600 (直径12的钻头)

G0 X0. Z10.

#1=2 (每一次钻深的深度)

#2=-105(这里为什么不是-100?因为按上图要求孔是通孔考虑钻头前面有锥度,所以多钻深5)

#3=0 (平面Z0赋值)

N10#3=#3-#1 (计算出每次钻深的Z值坐标)

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

#4=[#3+#1+0.5] (计算Z每次定位,定位在离上次钻深0.5的地方)区别在这里,先计算带入#号,下

面一步定位,把#号带入进去

G0 Z#4 (Z定位)

G74 R0.2 (每次钻深0.5,退刀0.20

G74 Z#3 Q500 F0.06 (钻孔循环)

G0 Z10.(当钻完一个深度退刀到Z10的地方)

G4 X1.(暂停1秒,让钻头冷却)

IF[#3 EQ #2] GOTO 20(防止死循环,如果#3等于#2那么跳转N20的地方)

IF[#3 GE #2] GOTO 10(条件判断,如果#3大于或等于#2跳转到N10地方继续循环)

N20 G0 X120. Z150.(退刀)

M30(程序结束)

看过上面程序,你有没有发现区别在哪里?好!现在我来讲解一下,他的区别在于FANUC系统它在X Z 后面可以直接加上[#3+#1+0.5]直接计算,而广数不行,广数必须先把中括号里面的计算带入一个#号,然后在执行G0#,这就是唯一的区别,很好理解。

总结:

1.利用宏程序钻削深孔

2.宏程序配合G74循环代码效果更佳

3.广数和FANUC系统格式的区别

看完本节内容,多思考,多动手!完全理解本节教学内容以后,在看下一节,祝各位喜爱宏编程的学者早日入门,完全理解以上内容以后。这里恭喜你已经对宏程序有了一个认识!

第四章

多个等距曹的宏

程序应用

今天我们来讲解一下外径多个等距曹的宏程序加工,一般如果我们不会宏程序的话只能依靠子程序来完成,不然程序会非常繁琐,如果用子程序来加工,

如果中途坏刀,停下来以后只能从程序开头在重新

执行,而我们如果使用宏程序加工的话可以避免这

种情况,如果从中途停下来我们便于修改就可直接

从我们停下来那里开始加工。我们来看下图:

从上图可以看出这是一个等距曹加工图,每个曹曹

宽都是3,曹与曹之间都是相距10,我们使用宏程

序来编制这个程序。

图纸要求:

1.曹两侧倒去毛刺圆角R0.5

2.采用G75和宏配合使用

3.采用3毫米宽切刀加工

装夹方式:

1.外径50以加工完毕,采用台阶爪夹持直径50,左端面定位,顶尖顶住加工

2.切刀以左侧面对平面为Z0.

程序和注释如下:

O0001

M3 S600 G99

T101 M08

G0 X50.5 Z10.

Z1.

#1=0 (平面Z值)

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

N10#1=#1-10(计算出每个曹的Z定位)

G0 Z#1(Z定位)

G75 R0.2

G75 X45. P500 F0.08(切曹循环)

G0 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(程序结束)

根据上面程序,我们可以实现给出一个曹的走刀路线,就可以切削多个曹的作用,如果中途在任意一个曹停下来了,我们只需要改一下#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(定位到大直径处)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代码一样一直向下执行!如果这一节课程你已经理解透测,恭喜你,你的宏程序又更上一个台阶了。

第五章

外径深曹的宏程

序分层法加工

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

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

工艺要求:

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(如过加工完一层跳转到N3 0的地方,如果条件不满足走下面的程序段)

#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(如果深度没有到达跳转N1 0的地方继续循环)

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 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的端面曹,如果轴向进刀到槽底,铁销卡住刀具难以承受,今天我们介绍分层法用宏程序来解决:

工艺安排:

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

2.选用3毫米宽端面切曹刀分层加工

3.刀具以刀具内侧对刀

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

程序注释如下:

O0001 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)

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值)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.学习完这以上课程完全理解以后可进入第三章学习

更多数控宏程序请访问https://www.360docs.net/doc/c817195715.html,

新代数控车床宏程序说明

一.用户宏程序的基本概念 用一组指令构成某功能,并且象子程序一样存储在存储器中,再把这些存储的功能由一个指令来代表,执行时只需写出这个代表指令,就可以执行其相应的功能。 在这里,所存储的一组指令叫做宏程序体(或用户宏程序),简称为用户宏。其代表指令称为用户宏命令,也称作宏程序调用指令。 用户宏有以下四个主要特征: 1)在用户用户宏程序中可以使用变量,即宏程序体中能含有复杂的表达式; 2)能够进行变量之间的各种运算; 3)可以用用户宏指令对变量进行赋值,就象许多高级语言中的带参函数或过程,实参能赋值给形参; 4)容易实现程序流程的控制。 使用用户宏时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时.只得将实际的值赋予变量既可,而不需要对每个不同的零件都编一个程序。 二.基本书写格式 数控程序文档中,一般以“%”字符作为第一行的起头,该行将被视为标题行。当标题行含有关键字“@MACRO”时整个文档就会以系统所定义的MACRO语法处理。如果该行无“@MACRO”关键词此档案就会被视为一般ISO程序文档格式处理,此时将不能编写用户宏和使用其MACRO语法。而当书写ISO程序文档时标题行一般可以省略,直接书写数控程序。“@MACRO”关键词必须是大写字母。 对于程序的注释可以采用“//……”的形式,这和高级语言C++一样。 例一:MACRO格式文档 % @MACRO //用户宏程序文档,必须包含“@MACRO”关键词 IF @1 = 1 THEN G00 X100.; ELSE G00 Z100.; END_IF; M99; 例二:ISO格式文档 % 这是标题行,可当作档案用途说明,此行可有可无 G00 X100.; G00 Z100.; G00 X0; G00 Z0; M99;

宏程序入门基础学习资料

宏程序入门基础学习资料 其实说起来宏就是用公式来加工零件的,比如说椭圆,如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加10um那么宏就会自动算出X坐标并且进行切削,实际上宏在程序中主要起到的是运算作用..宏一般分为A类宏和B类宏.A类宏是以G65 Hxx P#xx Q#xx R#xx的格式输入的,而B类宏程序则是 以直接的公式和语言输入的和C语言很相似在0i系统中应用比较广.由于现在B类宏程序的大量使 用很多书都进行了介绍这里我就不再重复了,但在一些老系统中,比如法兰克OTD系统中由于它的MDI键盘上没有公式符号,连最简单的等于号都没有,为此如果应用B类宏程序的话就只能在计算机上编好再通过RSN-32接口传输的数控系统中,可是如果我们没有PC机和RSN-32电缆的话怎么办呢,那么只有通过A类宏程序来进行宏程序编制了,下面我介绍一下A类宏的引用;

A类宏是用G65 Hxx P#xx Q#xx R#xx或G65 Hxx P#xx Qxx Rxx 格式输入的xx的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM~~~~~.#xx就是变量号,关于变量号是什么意思再不知道的的话我也就没治了,不过还是教一下吧,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量,一般OTD系统中有#0~~~#100~#149~~~#500~#531关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据.我们如果说#100=30那么现在#100地址内的数据就是30了,就是这么简单.好现在我来说一下H代码,大家可以看到A类宏的标准格式中#xx和xx都是数值,而G65表示使用A类宏,那么这个H 就是要表示各个数值和变量号内的数值或者各个变量号内的数值与其他变量号内的数值之间要进行一个什么运算,可以说你了解了H代码A类宏程序你基本就可以应用了,好,现在说一下H代码的各个含义: 以下都以#100和#101和#102,及数值10和20做为例子,应用的时候别把他们当格式就行, 基本指令: H01赋值;格式:G65H01P#101Q#102:把#102内的数值赋予到

数控车床由浅入深的宏程序实例

宏程序 裳华职业技术中专鲍新涛 宏程序概述 其实说起来宏就是用公式来加工零件的,比如说,如果没有宏的话,我们要逐点算出上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z坐标并且每次加10um那么宏就会自动算出X坐标并且进行切削,实际上宏在程序中主要起到的是运算作用。.宏一般分为A类宏和B类宏。 A类宏是以G65 Hxx P#xx Q#xx R#xx的格式输入的,而B类宏程序 则是以直接的公式和语言输入的和C语言很相似在0i系统中应用比较广。 宏程序的作用 数控系统为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值计算,以及精简程序量。 宏程序指令适合抛物线、椭圆、双曲线等没有插补指令的曲线编程;适合图形一样,只是尺寸不同的系列零件的编程;适合工艺路径一样,只是位置参数不同的系列零件的编程。较大地简化编程;扩展应用范围。 宏的分类 B类宏 由于现在B类宏程序的大量使用,很多书都进行了介绍这里我就不再重复了,但在一些老系统中,比如(FANUC)OTD系统中由于它的MDI键盘上没有公式符号,连最简单的等于号都没有,为此如果应用B类宏程序的话就只能在计算机上编好

再通过RSN-32接口传输的数控系统中,可是如果我们没有PC机和RSN-32电缆的话怎么办呢,那么只有通过A类宏程序来进行宏程序编制了,下面我介绍一下A 类宏的引用; A类宏 A类宏是用G65 Hxx P#xx Q#xx R#xx或G65 Hxx P#xx Qxx Rxx格式输入的,xx 的意思就是数值,是以um级的量输入的,比如你输入100那就是0.1MM.#xx就是号,变量号就是把数值代入到一个固定的地址中,固定的地址就是变量,一般OTD 系统中有#0~#100~#149~#500~#531.关闭电源时变量#100~#149被初始化成“空”,而变量#500~#531保持数据.我们如果说#100=30那么现在#100地址内的数据就是30了,就是这么简单.好现在我来说一下H代码,大家可以看到A类宏的标准格式中#xx和xx都是数值,而G65表示使用A类宏,那么这个H就是要表示各个数值和变量号内的数值或者各个变量号内的数值与其他变量号内的数值之间要进行一个什么运算,可以说你了解了H代码A类宏程序你基本就可以应用了,好,现在说一下H代码的各个含义: 应用 以下都以#100和#101和#102,及数值10和20做为例子,应用的时候别把他们当格式就行, 基本指令 H01赋值;格式:G65H01P#101Q#102:把#102内的数值赋予到#101中 G65H01P#101Q#10:把#10赋予到#101中 H02加指令;格式G65 H02 P#101 Q#102 R#103,把#102的数值加上#103的数值赋予#101

宏程序编程知识

工件偏置量:G10 L2 P X Y Z (加工中心)。 G41X Y D G90G54P1G00X Y S M03 G90G10L2P0X Y Z G10L1P R G10 P U V W C Q 可编程参数入口:G10 L50 ……… G11 G10数据设置模式入口、 L50可编程参数入口模式(固定的) N……P……R……指定参数入口(N=参数号,P=轴号,R=设置值) G11数据设置模式取消 宏程序的调用:G65 P L G65 P包含宏程序的程序号(存储为O ) L宏程序的循环次数 变量的类型:空变量#0 局部变量:#1—#33 全局变:#100—#149或#500—#531 系统变量:#1000—。。。。。。 局部变量的赋值:A-#1 B-#2 C-#3 D-#7 E-#8 F-#9 H-#11 I-#5 J-#6 K-#6 M-#13 Q-#17 R-#18 S-#19 T-#20 U-#21 V-#22 W-#23 X-#24 Y-#25 Z-#26 模态宏程序的调用G66仅用于某个轴运动命令调用宏程序 G67取消模态宏程序调用 宏程序函数:有SIN COS TAN ATAN ASIN ACOS 其他函数:ROUND FIX FUP ROUND表示四舍五入 FIX表示与之最小的整数 FUP表示与之最大的整数 辅助函数: SQRT表示开方 ABS表示绝对值 LN表示自然对数函数 EXP表示以E为底的指数函数、 ADP表示添加小数点的函数、 逻辑函数:EQ表示等于、NE表示不等于、GT表示大于、LT表示小于、GE表示大于等于、LE 表示小于等于。 系统变量: 从#1000开始 #1000through#1015数据输入DI 从PMC向宏程序发送16位信号(逐位读取) #1032用于一次读取所有16位信号 #1100through#1115数据输出DO从宏程序向PMC发送16位信号(逐位写入) #1132用于一次向PMC写入所有16位信号

由浅入深宏程序入门基础示例之欧阳光明创编

由浅入深宏程序1-宏程序入门基础之销轴加工 欧阳光明(2021.03.07) 对于没有接触过宏程序人,觉得它很神秘,其实很简单,只要掌握了各类系统宏程序的基本格式,应用指令代码,以及宏程序编程的基本思路即可。 对于初学者,尤其是要精读几个有代表性的宏程序,在此基础上进行模仿,从而能够以此类推,达到独立编制宏程序的目的。本教程将分步由浅入深的将宏程序讲解给大家,作者水平有限,也希望各位同仁提供更好的思路。 下面大家先看一个简单的车床的程序,图纸如下: 要求用外圆刀切削一个短轴,这里只列举程序的前几步: T0101 M3S800 G0X82Z5 G0X76 G1Z-40F0.2 X82 G0Z5 G0X72 G1Z-40F0.2

X82 G0Z5 G0X68 G1Z-40F0.2 X82 G0Z5 G0X68 G1Z-40F0.2 X82 G0Z5 ........ G0X40 G1Z-40F0.2 X82 G0Z5 G0X150Z150 M5 M30 从上面程序可以看出,每次切削所用程序都只是切削直径X有变化,其他程序代码未变。因此可以将一个变量赋给X,而在每次切削完之后,将其改变为下次切削所用直径即可。 T0101 M3S800

G0X82Z5 #1=76赋初始值,即第一次切削直径 N10 G0X[#1]将变量赋给X,则X方向进刀的直径则为#1变量中实际存储值。N10是程序 G1Z-40F0.2 段的编号,用来标识本段,为后面循环跳转所用。X82 G0Z5 #1=#1-4每行切深为2mm,直径方向递减4mm IF [#1GE40] GOGO 10如果#1 >= 40,即此表达式满足条件,则程序跳转到N10继续执行。 G0X150Z150 当不满足#1 >= 40,即#1<40,则跳过循环判断语句,由此句继续向后执行。 M5 M30 由浅入深宏程序2-宏程序之销轴粗精加工 本篇文章利用宏程序简单模仿数控系统的外圆车削循环功能。在此用前一篇的图纸与程序 原程序: T0101 M3S800 G0X82Z5 粗加工开始 #2=0.05 Z向的加工余量 #3=0.5 外圆方向的加工余量

宏程序基础

1.1概述 1.2 1.3 1.4一、宏程序的分类 1.5首先我们来讲一下宏程序的分类,A类和B类。 首先在数控车系统比较老的时候,我们系统里 面有A类宏,A类宏格式为G65格式,现在已 经基本淘汰。随着科技发达,系统的升级优化,现在的数控系统大多支持B类宏程序,总体而 言,现在B类宏是一个主流发展趋势,所以接 下来我们的实例讲解都以B类宏程序为例。1.6 1.7 1.8二、宏程序的概念 1.9 1.10简单来理解宏程序是什么可以这样理解,宏程 序就是利用数学公式,函数等计算方式,配合 数控系统中的G代码编制出的一种程序,主要 加工一些像椭圆,曲线,各类大螺距螺纹和刀 具路线相识的一些零件。随着科技发达,像椭 圆,抛物线,等线性零件,用软件或则系统自 代G代码可以完成加工,而大螺距异型螺纹这 类零件,软件还没达到成熟,所以我们学会宏 程序在加工中可以起到一个非常大的作用。可 以弥补多年来数控车对大螺距螺纹的编程难的 一个提高。 1.11 1.12 1.13三、宏程序的特征 1.14 1.151.赋值 1.16在宏程序中我们通常用法最多的就是变量,比 如: 1.17#1=1 它就是一个变量。我们把这一过程,称为 赋值。也就是说,我们把等号后面的数值1,赋 值给#1。而现在#1的值就等于1,也可以理解 为#1就是一个代号,用来代替数值1。 1.18 1.19 2.变量和应用 1.20比如:#1=2(把数值2赋值给#1) 1.21#2=1(把数值1赋值给#2)1.22#2=#1(程序从上往下执行,思考一下现在#2的 值等于多少) 1.23 1.24解:当程序执行第一步的时候#1的值等于2, 当执行第二步的时候#2的值等于1,当执行第 三步的时候这里要注意了,刚才讲过赋值过程,是等号后面的值赋值给等号前面,所以当#1在 第一步赋值以后,#1已经等于2了,所以在执 行第三步的时候#2的值应该等于2,不在是第 二步的1了。从这里我们可以看出,当程序中 有相同的变量#的时候,后面的#号代替前面的# 号。 1.25比如:#1=2 1.26#1=3 1.27 1.28最后结果#1的值因该是等于3的。所以说后面 的代替前面的。 1.29 1.30 1.31四、变量的取值范围 1.32 1.331.局部变量(#1-#33) 1.34什么叫局部变量,局部变量就是在局部或则可 以理解为在单个程序中有效。断电以后系统自 动清零。 1.35 1.36 2.公共变量(#100-#199,#500-#999) 1.37公共变量和局部变量的区别在于,局部变量是 在局部,或则单个程序中有效,而公共变量是 指如果一个程序同时拥有主程序和子程序的情 况下,在主程序中如果已经赋值,在子程序中 可以不用从新赋值,可以共用。而#100-#199和 #500-#999的区别在于,前者断电清零,而后者 不会清零会一直保存在系统内部。比如: 1.38#500=TAN[15] 1.39 1.40#500一旦赋值就将保存在系统内部,下次可以 直接调用#500使用。 1.41 1.423.系统变量(#1000-#17200) 1.43系统变量是用于我们机床系统储存一些刀补数 据参数等等的东西,我们可以不用管它,不会 用的,慎用) 1.44

宏程序基础知识

瑞鹄汽车模具有限公司内部教材 第一章宏程序基础知识 第一节常量与变量的含义 常量与变量的含义及编程案例 数控程序中含有变量的程序称为宏程序。虽然子程序对编制相同的加工程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制同样的加工程序更简便。 常量 普通加工程序直接用数值指定G代码和移动距离;例如,GO1和X100.0。 变量 使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用MDI面板上的操作改变。 #1=#2+100 G01 X#1 F300 变量用变量符号(#)和后面的变量号指定。例如:#1 表达式可以用于指定变量号。此时,表达式必须封闭在括号中。例如:#[#1+#2-12] 变量根据变量号可以分成四种类型:1.空变量2.局部变量3.公共变量4.系统变量 1.空变量: #0 该变量总是空,没有值能赋给该变量. 2.局部变量: #1-#33 局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空. 调用宏程序时,自变量对局部变量赋值. 3.公共变量 #100-#199 #500-#999 公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199初始化为空.变量#500-#999的数据保存,即使断电也不丢失. 4.系统变量:#1000以上的变量 系统变量用于读和写CNC的各种数据,例如刀具补偿,当前位置信息, 变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,要把表达式放在

括号中。例如:G01X[#1+#2]F#3; 被引用变量的值根据地址的最小设定单位自动地舍入。 例如:当G00X#1;以1/1000mm的单位执行时,CNC把123456赋值给变量#1,实际指令值为G00X12346. 改变引用变量的值的符号,要把负号(-)放在#的前面。例如:G00X-#1 当引用未定义的变量时,变量及地址都被忽略。例如:当变量#1的值是0,并且变量#2的值是空时,G00X#1 Y#2的执行结果为G00X0 未定义的变量当变量值未定义时,这样的变量成为空变量。变量#0总是空变量。它不能写,只能读。 当#1= (空)时 G90 X100 Y#1实际与 G90 X100运行结果一样 当#1=0 时 G90 X100 Y#1实际与 G90 X100 Y0 运行结果一样 运算 除了用<空>赋值以外,其余情况下<空>与0 相同。

数控铣宏程序实例

第四章数控铣宏程序实例 §4、1 椭圆加工(编程思路:以一小段直线代替曲线) 例1 整椭圆轨迹线加工(假定加工深度为2mm) 方法一:已知椭圆的参数方X=acosθ Y=bsinθ 变量数学表达式 设定θ= #1(0°~ 360° ) 那么 X= #2 = acos[#1] Y= #3= bsin[#1] 程序 O0001; S1000 M03; G90 G54 G00 Z100; G00 Xa Y0; G00 Z3; G01 Z-2 F100; #1=0; N99 #2=a*cos[#1]; #3=b*sin[#1]; G01 X#2 Y#3 F300; #1=#1+1; IF[#1LE360]GOTO99; GOO Z50; M30;

例2 斜椭圆且椭心不在原点的轨迹线加工(假设加工深度为2mm) 椭圆心不在原点的参数方程 X=a*COS[#1]+ M Y=b*SIN[#1]+ N 变量数学表达式 设定θ=#1; (0°~360°) 那么X=#2=a*COS[#1]+ M Y=#3=b*SIN[#1]+ N 因为此椭圆绕(M ,N)旋转角度为A 可运用坐标旋转指令G68 格式 G68 X - Y - R - X,Y:旋转中心坐标; R: 旋转角度 程序 O0002; S1000 M03; G90 G54 G00 Z100; GOO X0 Y0; GOO Z3; G68 XM YN R45; #1=0; N99 #2=a*COS[#1]+M; #3=b*SIN[#1]+N;

GO1 X#2 Y#3 F300; G01 Z-2 F100; #1=#1+1; IF[#1LE360]GOTO99; G69 GOO Z100; M30; 例3:椭圆轮廓加工(深度2mm) 采用椭圆的等距加工方法使椭圆的长半轴与短半轴同时减少一个行距的方法直到短半轴小于刀具的半径R 根据椭圆的参数方程可设 变量表达式θ=#1(0°~360°) a=#2 b=#3(b-R~R) X=#2*COS[#1]=#4 Y=#3*SIN[#1]=#5 程序 O0003; S1000 M03; G90 G54 G00 Z100;

宏程序基础知识资料

第一章宏程序基础知识 第一节常量与变量的含义 常量与变量的含义及编程案例 数控程序中含有变量的程序称为宏程序。虽然子程序对编制相同的加工程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制同样的加工程序更简便。 常量 普通加工程序直接用数值指定G代码和移动距离;例如,1和X100.0。变量 使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用面板上的操作改变。 #1=#2+100 G01 1 F300 变量用变量符号(#)和后面的变量号指定。例如:#1 表达式可以用于指定变量号。此时,表达式必须封闭在括号中。例如:#[#12-12] 变量根据变量号可以分成四种类型:1.空变量2.局部变量3.公共变量4.系统变量 1.空变量: #0 该变量总是空,没有值能赋给该变量. 2.局部变量:

#133 局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空. 调用宏程序时,自变量对局部变量赋值. 3.公共变量 #100199 #500999 公共变量在不同的宏程序中的意义相同.当断电时,变量#100199初始化为空.变量#500999的数据保存,即使断电也不丢失. 4.系统变量1000以上的变量 系统变量用于读和写的各种数据,例如刀具补偿,当前位置信息,变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,要把表达式放在括号中。例如:G01X[#12]3; 被引用变量的值根据地址的最小设定单位自动地舍入。 例如:当G001;以1/1000的单位执行时,把123456赋值给变量#1,实际指令值为G00X12346. 改变引用变量的值的符号,要把负号(-)放在#的前面。例如:G00X -#1 当引用未定义的变量时,变量及地址都被忽略。例如:当变量#1的值是0,并且变量#2的值是空时,G001 2的执行结果为G00X0 未定义的变量当变量值未定义时,这样的变量成为空变量。变量#0总是空变量。它不能写,只能读。 当#1= (空)时 G90 X100 1实际与G90 X100运行结果一样 当#1=0 时 G90 X100 1实际与G90 X100 Y0 运行结果一样 运算 除了用<空>赋值以外,其余情况下<空>与0 相同。

FANUC用户宏程序学习教程

用户宏程序 宏程序是指含有变量的子程序,在程序中调用用户宏程序的那条指令叫做用户宏指令(这里用G65) 1、变量 用一个可赋值的代号代替具体的坐标值,这个代号称为变量。变量分为系统变量、全局变量和局部变量三类,它们的性质和用途个不相同。(1)系统变量是固定用途的变量,它的值决定了系统的状态。FANUC 中的系统变量为#1000~#1005、#1032、#3000等。 (2)全局变量是指在主程序内和由主程序调用的各用户宏程序内公用的变量。FANUC中的全局变量有60个,它们分两组,一组是#100~#149;另一组是#500~#509。 (3)局部变量是仅局限于在用户宏程序内使用的变量。同一个局部变量在不同的宏程序内的值是不通用的。FANUC中的局部变量有33个,分别为#1~#33。 表1 FANUC系统中局部变量赋值(部分)对照表

2、变量的演算 (1)加减型运算加减型运算包括加、减、逻辑加和排它的逻辑加。分别用以下四个形式表达: #i = #j +#k #i = #j -#k #i = #j OR #k #i = #j XOR #k 式中,i、j、k为变量;+、-、OR、XOR称为为演算子。 (2)乘除型运算乘除型运算包括乘、除和逻辑乘。分别用以下形式表达: #i = #j * #k #i = #j / #k #i = #j AND #k 4.变量的赋值 由于系统变量的赋值情况比较复杂,这里只介绍公共变量和局部变量的赋值。变量的赋值方式可分为直接和间接两种。

(1)直接赋值 例:#1=115(表示将变量115赋值于#1变量) #100=#2(表示将变量#2的即时值赋于变量#100) (2)间接赋值间接赋值就是用演算式赋值,即把演算式内演算的结果赋给某个变量。在演算式中有自变量代号,自变量每得到一个即时值,相应就得到一个演算结果,该结果就赋值给变量,该变量也叫应变量。5.转向语句 转向语句分为无条件转向语句和条件转向语句两种。 (1)无条件转向语句 程序段格式:GOTO N ;其中N后面的数值为程序段号。 例如:GOTO 55;表示无条件转向执行N55程序段,而不论N55程序段在转向语句之前还是之后。 (2)条件转向语句条件转向语句一般由判断条件式和转向目标两部分构成。 程序段格式:IF [a GT b ] GOTO c;表示为“如果a>b,那么转向执行第Nc句程序段”。a和b可以是数值、变量或含有数值及变量的算式,c 是转向目标的程序段。 大于、等于、大于等于、小于等于分别用GT、EQ、GE、LE表示。

宏程序基础知识资料

瑞鹄汽车模具有限公司内部教材 第一章第一节宏程序基础知识常量与变量的含义 常量与变量的含义及编程案例 数控程序中含有变量的程序称为宏程序。虽然子程序对编制相同的加工程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制同样的加工程序更简便。 常量 普通加工程序直接用数值指定G代码和移动距离;例如,GO1和X100.0。 变量 使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用MDI面板上的操作改变。 #1=#2+100 G01 X#1 F300 变量用变量符号(#)和后面的变量号指定。例如:#1 表达式可以用于指定变量号。此时,表达式必须封闭在括号中。例如:#[#1+#2-12] 变量根据变量号可以分成四种类型:1.空变量2.局部变量3.公共变量4.系统变量 1.空变量: #0 该变量总是空,没有值能赋给该变量. 2.局部变量: #1-#33 局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空. 调用宏程序时,自变量对局部变量赋值. 3.公共变量 #100-#199 #500-#999 公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199初始化为空.变量#500-#999的数据保存,即使断电也不丢失. 4.系统变量:#1000以上的变量 系统变量用于读和写CNC的各种数据,例如刀具补偿,当前位置信息, 变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,要把表达式放

在括号中。例如:G01X[#1+#2]F#3; 被引用变量的值根据地址的最小设定单位自动地舍入。 例如:当G00X#1;以1/1000mm的单位执行时,CNC把123456赋值给变量#1,实际指令值为G00X12346. 改变引用变量的值的符号,要把负号(-)放在#的前面。例如:G00X-#1 当引用未定义的变量时,变量及地址都被忽略。例如:当变量#1的值是0,并且变量#2的值是空时,G00X#1Y#2的执行结果为G00X0 未定义的变量当变量值未定义时,这样的变量成为空变量。变量#0总是空变量。它不能写,只能读。 当#1= (空)时 G90 X100 Y#1实际与G90 X100运行结果一样 当#1=0 时 G90 X100 Y#1实际与G90 X100 Y0 运行结果一样 运算 除了用<空>赋值以外,其余情况下<空>与0 相同。

数控铣床宏程序编程 经典

变量 普通加工程序直接用数值指定G代码和移动距离;例如,GO1和X100.0。使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用MDI面板上的操作改变。 #1=#2+100 G01 X#1 F300 说明: 变量的表示 计算机允许使用变量名,用户宏程序不行。变量用变量符号(#)和后面的变量号指定。例如:#1 表达式可以用于指定变量号。此时,表达式必须封闭在括号中。 例如:#[#1+#2-12] 变量的类型 变量根据变量号可以分成四种类型 变量号变量类型功能 #0 空变量该变量总是空,没有值能赋给该变量. #1-#33 局部变量局部变量只能用在宏程序中存储数据,例如,运算结果.当断电时,局部变量被初始化为空.调用宏程序时,自变量对局部变量赋值, #100-#199 #500-#999 公共变量公共变量在不同的宏程序中的意义相同.当断电时,变量#100-#199初始化为空.变量#500-#999的数据保存,即使断电也不丢失. #1000 系统变量系统变量用于读和写CNC运行时各种数据的变化,例如,刀具的当前位置和补偿值. 变量值的范围 局部变量和公共变量可以有0值或下面范围中的值: -1047到-10-29或-10-2到-1047 如果计算结果超出有效范围,则发出P/S报警NO.111. 小数点的省略 当在程序中定义变量值时,小数点可以省略。 例:当定义#1=123;变量#1的实际值是123.000。 变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变量时,要把表达式放在括号中。 例如:G01X[#1+#2]F#3; 被引用变量的值根据地址的最小设定单位自动地舍入。 例如:

新代宏程序实例

新代宏程序实例文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

1、R E P E A T直到型循环REPEAT <循环体> UNTIL <条件表达式> END_REPEAT; 说明:REPEAT直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。 例如: % @MACRO ,为了;?倾向于;?关于;?当作; conj.因为,由于;? FOR <循环变量> := <表达式1> TO <表达式2> [ BY <表达式3>] DO <循环体> END_FOR; 说明:FOR循环控制,式中各参数意义如下 循环变量——控制循环次数的变量; 表达式1——循环计数的起始值,可为整数或表达式; 表达式2——循环计数的终止值,可为整数或表达式; 表达式3——循环计数每次的累加值,可为整数或表达式; 循环体——循环每次执行内容; FOR循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值, 4、无条件转移

GOTO转移语句 语法: GOTO n; 说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。GOTO常和IF语句搭配使用,那就是说当程序检查到某个条件满足时用GOTO语句去进一步处理,但应尽量少用该语句以提高程序可读性。 范例: % @MACRO Z10.; … N100 G01 X30. Z30.; … M02; EXIT循环中断语句 语法:EXIT; 说明:循环中断,跳离循环控制;用在循环控制中,通常EXIT都和IF 语句搭配使用,当某个条件满足后就跳离循环。请参考WHILE范例。

宏程序编程

用户宏程序 虽然子程序对编制相同加工操作的程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制相同加工操作的程序更方便,更容易。可将相同加工操作编为通用程序,如型腔加工宏程序和固定加工循环宏程序。使用时,加工程序可用一条简单指 令调出用户宏程序,和调用子程序完全一样。 一、变量 普通加工程序直接用数值指定G代码和移动距离;例如,G01和X100。 使用用户宏程序时,数值可以直接指定或用变量指定。当用变量时,变量值可用程序或用MDI面板上的操作改变。 #1=#2+100; G01 X#1 F300; 说明: 1、变量的表示 计算机允许使用变量名,用户宏程序不行。变量用变量符号(#)和后面的变量号指定。 例如:#1 表达式可以用于指定变量号。此时,表达式必须封闭在括号中。 例如:#[#1+#2-12] 2、变量的类型 变量根据变量号可以分成四种类型。 3、变量值的表示范围 局部变量和公共变量可以有0值或下面范围中的值: -1047至-10-29或10-29到1047 如果计算结果超出有效范围,则发出P/S报警No.111。 4、小数点的省略 当在程序中定义变量值时,小数点可以省略。 例:当定义#1=123;变量#1的实际值是123.000; 5、变量的引用 为在程序中使用变量值,指定后跟变量号的地址。当用表达式指定变 量时,要把表达式放在括号中。 例如:G01X[#1+#2]F#3; 被引用变量的值根据地址的最小设定单位自动地舍入。 例如:

当G00X#1;以1/1000mm的单位执行时,CNC把12.3456赋值给 变量#1,实际指令值为G00X12.346; 改变引用变量的值的符号,要把负号(一)放在#的前面。 例如:GOOX-#1; 当引用未定义的变量时,变量及地址字都被忽略。 例如: 当变量#1的值是0,并且变量#2的值是空时,G00X#1 Y#2的执行结果为G00X0;。 6、未定义的变量 当变量值未定义时,这样的变量成为“空”变量。变量#0总是空变量。 它不能写,只能读。 (a)引用

用户宏程序

用户宏程序 1.概念 反复进行同一切削动作时,使用子程序效果较好,但若使用用户宏程序的话,可以使用运算指令、条件转移等,适于编制更简单、通用性更强的程序。并且与子程序一样,在加工程序中用简单地命令就可以调用用户宏程序。在FANUC系统中,包含变量、转向、比较判别等功能的指令称为宏指令。包含有宏指令的子程序称为宏程序。这里以FANUC系统中B类用户宏程序来作简单介绍,也就是FANUC Power Mater O系统所用的方法。 宏程序的最大特征有以下几个方面: (1)可以在宏程序主体中使用变量。 (2)可以进行变量之间的演算。 (3)可以用宏程序命令对变量进行赋值。 使用宏程序时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时,只需将实际的值赋与变量既可,而不需要对每一个零件都编一个程序。 例:a=10,b=20,c=5,d=8时其精加工轨迹运行程序为: N10 G00 X0 Z0; N20 G03 X10. W-5. R5. F100; N30 G01 X20. W-8.; N40 G00 X100. Z100.; a,b,c,d值变化时则又需要编一个程序。 实际上我们可以将程序写为: N10 G00 X0. Z0.; N20 G03 Xa W-c Rc F100; N30 G01 Xb W-d; N40 G00 X100. Z100.; 此时可以将其中变量,用宏程序中的变量# i的对应为:a:#1;b:#2;c:#3;d:#7。则宏程序即可写成如表6-14所示形式: 表6-14 例6-10宏程序编写 用A,B,C,D分别代表变量#1,#2,#3和#7,用a,b,c和d赋值后,用宏命令G65 P9810 Aa Bb Cc Dd来调用。 如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变宏命令的数值即可,而没有必要针对每一个零件都编一个程序。 2.变量 在一般的加工程序中,G代码移动距离可直接用数值指令,如G00 X100.0。但在用宏程序中,数值可直接指定,也可用变量号指定。因此,变量是指可以在宏主体的地址上代替具体数值,在调用宏主体时再用引数进行赋值的符号:# i(i=1,2,3……)。使用变量可以

EXCEL宏编程实例.doc

Excel 宏编程举例说明 学习宏编程,需要VB基础,如果一点VB基础和面向对象的概念,建议先去补补VB,不然即使自认为学好了也只能拿着高射炮打蚊子! 一)、宏学习 首先需要明确的是,本文不可能教会您关于宏的所有内容。您需要学会利用"录制宏"的方法来学习宏:点击Excel"工具"下拉菜单中"宏"下?quot;录制新宏",此后可象平时一样进行有关操作,待完成后停止录制。然后再点击"工具"下拉菜单中"宏"下"宏"的"编辑"选项即可打开刚才所录制的宏的Visual Basic源程序,并且可以在此时的"帮助"下拉菜单中获得有关的编程帮助。对录制宏进行修改不仅可以学习宏的使用,还能大大简化宏的编写。 二)、基本概念 为了学习Excel中的宏,我们需要先了解以下一些基本概念。 1、工作簿:Workbooks、Workbook、ActiveWorkbook、ThisWorkbook Workbooks集合包含Excel中所有当前打开的Excel工作簿,亦即所有打开的Excel文件;Workbook对应Workbooks中的成员,即其中的Excel文件;ActiveWorkbook代表当前处于活动状态的工作簿,即当前显示的Excel文件;ThisWorkbook代表其中有Visual Basic代码正在运行的工作簿。 在具体使用中可用Workbooks(index)来引用Workbook对象,其中index为工作簿名称或编号;如Workbooks(1)、Workbooks("年度报表.xls")。而编号按照创建或打开工作簿的顺序来确定,第一个打开的工作簿编号为1,第二个打开的工作簿为2……。 2、工作表:Worksheets、Worksheet、ActiveSheet Worksheets集合包含工作簿中所有的工作表,即一个Excel文件中的所有数据表页;而Worksheet则代表其中的一个工作表;ActiveSheet代表当前处于的活动状态工作表,即当前显示的一个工作表。 可用Worksheets(index)来引用Worksheet对象,其中index为工作表名称或索引号;如Worksheets(1)、Worksheets("第一季度数据")。工作表索引号表明该工作表在工作表标签中的位置:第一个(最左边的)工作表的索引号为1,最后一个(最右边的)为Worksheets.Count。需要注意的是:在使用过程中Excel会自动重排工作表索引号,保持按照其在工作表标签中的从左至右排列,工作表的索引号递增。因此,由于可能进行的工作表添加或删除,工作表索引号不一定始终保持不变。3、图表:Chart 、Charts、ChartObject、ChartObjects、ActiveChart Chart代表工作簿中的图表。该图表既可为嵌入式图表(包含在ChartObject中),也可为一个分开的(单独的)图表工作表。 Charts代表指定工作簿或活动工作簿中所有图表工作表的集合,但不包括嵌入式在工作表或对话框编辑表中的图表。使用Charts(index) 可引用单个Chart图表,其中index是该图表工作表的索引号或名称;如Charts(1)、Charts("销售图表")。图表工作表的索引号表示图表工作表在工作簿的工作表标签栏上的位置。Charts(1)是工作簿中第一个(最左边的)图表工作表;Charts(Charts.Count)为最后一个(最右边的)图表工作表。 ChartObject代表工作表中的嵌入式图表,其作用是作为Chart对象的容器。利用ChartObject 可以控制工作表上嵌入式图表的外观和尺寸。 ChartObjects代表指定的图表工作表、对话框编辑表或工作表上所有嵌入式图表的集合。可由ChartObjects(index)引用单个ChartObject,其中index为嵌入式图表的编号或名称。如

新代宏程序实例

1、REPEAT直到型循环 REPEAT <循环体> UNTIL <条件表达式> END_REPEAT; 说明:REPEAT直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。 例如: % @MACRO // 启动MACRO语法% @MACRO (宏指令开始) #1=-0.2 REPEAT REPEAT(重复) G01Z#1F80; G1X-20.F700; #2=#1-0.2; G1Z#2F80; G1X-53.F700; #1=#1-0.4; UNTIL (#1<-2.6) END_REPEAT; UNTIL(到…为止,在…以前)END(结束,终止)M30; 2、WHILE当型循环 WHILE <条件表达式> DO→<循环体>→END_WHILE; 说明:WHILE当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。例如: % @MACRO; #1=-0.2; WHILE (#14>-2.6) DO WHILE(虽然; 在…期间; 与…同时) IF #1<-2.6THEN EXIT; EXIT(退出; 退场; 离开; 去世) END_IF; G01Z#1F80; G1X-20.F700; #2=#1-0.2; G1Z#2F80; G1X-53.F700; #1=#1-0.4; END_WHILE; M30 3、FOR循环 FOR 翻译:p rep.为,为了; 倾向于; 关于; 当作; conj.因为,由于; FOR <循环变量> := <表达式1> TO <表达式2> [ BY <表达式3>] DO <循环体> END_FOR;

宏程序加工举例

毛坯为150㎜×70㎜×20㎜块料,要求铣出如图2-25所示的椭球面,工件材料为蜡块。见图 程序: 1.根据图样要求、毛坯及前道工序加工情况,确定工艺方案及加工路线 1)以底面为主要定位基准,两侧用压板压紧,固定于铣床工作台上。 2)加工路线 Y方向以行距小于球头铣刀逐步行切形成椭球形成。 2.选择机床设备 根据零件图样要求,选用经济型数控铣床即可达到要求。故选用华中Ⅰ型(ZJK7532A型)数控钻铣床。3.选择刀具 球头铣刀大小f6mm。 4.确定切削用量 切削用量的具体数值应根据该机床性能、相关的手册并结合实际经验确定,详见加工程序。 5.确定工件坐标系和对刀点 在XOY平面内确定以工件中心为工件原点,Z方向以工件表面为工件原点,建立工件坐标系,如图2-25所示。 采用手动对刀方法把0点作为对刀点。 6.编写程序(用于华中I型铣床) 按该机床规定的指令代码和程序段格式,把加工零件的全部工艺过程编写成程序清单。该工件的加工程序如下: %8005(用行切法加工椭园台块,X,Y按行距增量进给) #10=100 ;毛坯X方向长度 #11=70 ;毛坯Y方向长度 #12=50 ;椭圆长轴 #13=20 ;椭圆短轴 #14=10 ;椭园台高度 #15=2 ;行距步长 G92 X0 Y0 Z[#13+20] G90G00 X[#10/2] Y[#11/2] M03 G01 Z0 X[-#10/2] Y[#11/2] G17G01 X[-#10/2] Y[-#11/2] X[#10/2] Y[#11/2] #0=#10/2 #1=-#0 #2=#13-#14 #5=#12*SQRT[1-#2*#2/#13/#13] G01 Z[#14] WHILE #0 GE #1 IF ABS[#0] LT #5 #3=#13*SQRT[1-#0*#0/[#12*#12]] IF #3 GT #2 #4=SQRT[#3*#3-#2*#2] G01 Y[#4] F400

数控宏程序实例

第7章宏程序 7.3 宏程序调用 7.3.1 宏程序调用指令(G65) 在主程序中可以用G65调用宏程序。指令格式如下: G65 P L 〈自变量赋值〉; 其中:P指定宏程序号:L为重复调用次数(1—9999);自变量赋值是由地址和数值构成的,用以对宏程序中的局部变量赋值。 例如: 主程序: O7002 ... G65 P7100 L2 A1.0 B2.0 ... M30 宏程序: #3=#1+#2; IF [#3 GT 360] GOTO 9; G00 G91 X#3 N9 M99 7.3.2 自变量赋值 自变量赋值有两种类型。自变量I使用除去G,L,N,O,P以外的其他字母作为地址,自变量II可以使用A,B,C每个字母一次,I,J,K每个字母可使用十次作为地址。表7—3和7—4分别为两种类型自变量赋值的地址和变量号码之间的对应关系: 表7—3 自变量赋值的地址和变量号码之间的对应关系

时使用表4—1及表4—2中的两组自变量赋予值。系统可以根据使用的字母自动判断自变量赋值的类型。 7.4 变量的控制和运算指令 7.4.1 算术运算和逻辑运算 在变量之间,变量和常量之间,可以进行各种运算,常用的见表7—5。

运算的优先顺序如下: 1)函数。 2)乘除,逻辑与。 3)加减,逻辑或,逻辑异或。 可以用[ ]来改变顺序 7.4.2 控制指令 1.无条件转移(GOTO语句) 语句格式为: GOTO n 其中n为顺序号(1—9999),可用变量表示。例如: GOTO 1; GOTO #10; 2. 条件转移(IF 语句) 语句格式为: IF [条件式] GOTO n 条件式成立时,从顺序号为n的程序段开始执行;条件式不成立时,执行下一个程序段。 条件式有以下几类: # j EQ # K # j NE # K # j GT # K # j LT # K # j GE # K # j LE # K 条件式中变量#J或#K可以是常量也可以是表达式,条件式必须用括弧括起来。下面的程序可以得到1到10的和: O7100 #1=0 #2=1 N1 IF [#2 GT 10] GOTO 2 #1=#1+#2 #2=#2+1 GOTO 1 N2 M30 3循环语句(WHILE 语句) 语句格式为: WHILE [条件式] DO m (m=1,2,3) … END m 当条件语句成立时,程序执行从DO m到END m之间的程序段;如果条件不成立,则执行

相关文档
最新文档