1、1第一章 宏程序的基础1.1 概述 一、宏程序的分类首先我们来讲一下宏程序的分类,A 类和 B 类。首先在数控车系统比较老的时候,我们系统里面有 A 类宏,A 类宏格式为 G65 格式,现在已经基本淘汰。随着科技发达,系统的升级优化,现在的数控系统大多支持 B 类宏程序,总体而言,现在 B 类宏是一个主流发展趋势,所以接下来我们的实例讲解都以 B 类宏程序为例。二、宏程序的概念简单来理解宏程序是什么?可以这样理解,宏程序就是利用数学公式,函数等计算方式,配合数控系统中的 G 代码编制出的一种程序,主要加工一些像椭圆,曲线,各类大螺距螺纹和刀具路线相识的一些零件。随着科技发达,像椭圆,抛物线,等
2、线性零件,用软件或则系统自代 G 代码可以完成加工,而大螺距异型螺纹这类零件,软件还没达到成熟,所以我们学会宏程序在加工中可以起到一个非常大的作用。可以弥补多年来数控车对大螺距螺纹的编程难的一个提高。三、宏程序的特征1.赋值在宏程序中我们通常用法最多的就是变量,比如:#1=1 它就是一个变量。我们把这一过程,称为赋值。也就是说,我们把等号后面的数值 1,赋值给#1。而现在 #1 的值就等于 1,也可以理解为#1 就是一个代号,用来代替数值 1。2.变量和应用比如:#1=2(把数值 2 赋值给#1)#2=1(把数值 1 赋值给#2 )#2=#1(程序从上往下执行,思考一下现在#2的值等于多少?)
3、解: 当程序执行第一步的时候 #1 的值等于 2,当执行第二步的时候#2 的值等于 1,当执行第三步的时候这里要注意了,刚才讲过赋值过程,是等号后面的值赋值给等号前面,所以当#1 在第一步赋值以后,#1 已经等于 2 了,所以在执行第三步的时候#2 的值应该等于 2,不在是第二步的 1 了。从这里我们可以看出,当程序中有相同的变量# 的时候,后面的# 号代替前面的#号。比如:#1=2#1=3最后结果#1 的值因该是等于 3 的。所以说后面的代替前面的。四、变量的取值范围1.局部变量(#1-#33)什么叫局部变量,局部变量就是在局部或则可以理解为在单个程序中有效。断电以后系统自动清零。2.公共变
4、量(#100-#199 ,#500-#999)公共变量和局部变量的区别在于,局部变量是在局部,或则单个程序中有效,而公共变量是指如果一个程序同时拥有主程序和子程序的情况下,在主程序中如果已经赋值,在子程序中可以不用从新赋值,可以共用。而#100-#199和#500-#999 的区别在于,前者断电清零,而后者不会清零会一直保存在系统内部。比如:#500=TAN15 #500 一旦赋值就将保存在系统内部,下次可以直接调用#500 使用。3.系统变量(#1000-#17200)系统变量是用于我们机床系统储存一些刀补数据参数等等的东西,我们可以不用管它,不会2用的,慎用)总结:一般情况下我们写程序用#
5、1-#33,当有子程序的时候我们用#100-#199. 五、宏程序中常用的计算1.加法运算例如:#1=2#1=#1+3 那么#1 的值等于 2+3=52.减法运算例如:#1=3#1=#1-1 那么经过计算我们的#1 的值等于 3-1=23.乘法运算程序中用*号来代替乘法例如:#1=5#2=#1*2 那么计算出来 #2 的值等于 5*2=104.除法运算程序中用/ 号来代替除法运算例如:#1=10#1=#1/2 那么经过计算#1 的值等于 10/2=5六、常用三角函数运算1.TAN(正切)例如#1=2*TAN20 中括号里面是角度2.SIN(正玄)例如#1=3*SIN3 同上3.COS(余玄)例
6、如#1=COS15 4.ASIN、 ACOS、ATAN(反三角)5.SQRT(数学中的开平方的意思,和数学中根号一样)例如#1=SQRT9 那么计算出来#1 的值等于 3七、宏程序的常用符号和含义GT(大于)GE(大于或等于)LT(小于)LE(小于或等于)EQ(等于)NE(不等于)ABS(绝对值)AND(与)OR(或者)八、常用的语法和应用1.无条件转移 GOTO n(n 表示数值)例如:GOTO01 此程序段的意思是当程序中执行到这一程序段的时候无条件跳转到程序段中N1 的地方,执行 N1 后面的程序段。M3 S500 G99T101 M08GOTO 10 (当程序执行到这里的时候,直接跳转
7、到 N10 那个程序段执行 M30,跳过了 G0 那一步,所以这叫做无条件跳转,和我们一般程序中跳段功能一样)G0 X100. Z100. N10 M302.有条件跳转 IF条件表达式 GOTO n例如:IF#1 GT 15 GOTO 10 从这段程序当中,我们这样理解,如果中括号里面的条件满足,那么就执行后面的 GOTO 跳转语句,如果中括号里面条件不满足,那么不执行后面的 GOTO跳转,执行后面一个程序段。我们简单来写一个程序:M3 S500 G99T101 M08N10#1=30(把数值 30 赋值给 #1)3IF#1 LT 50 GOTO 10(首先判断中括号是不是满足条件,如果满足执
8、行跳转,不满足执行下一步)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 )#
9、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 50DO
10、1END 1下面写一个程序段:#1=60WHILE#1 GT 50 DO 1G0 X#1G1 Z-20. F0.2G0 U1. Z1. END 1M30这个程序当条件判断语句里面中括号里面条件满足的时候执行 DO 1 和 END 1 中间的程序段,如果条件不满足,执行 END 1 后面的程序段M30。以上介绍的语法格式用法,以 FANUC oi系列,广数,三菱系统为例。西门子,宝源,新代等系统以说明书为准!4第二章 宏的入门 实例 1.单外径粗车宏的应用本实例介绍一个简单的车削外径的宏程序,目的为了让读者熟悉宏语句用法和逻辑。上图为一个单一外圆车削图,材料为直径 50 的棒料,车削到直径 30
11、,长度 30. 图纸要求,平面见光就行,采用宏程序粗加工,每刀吃刀量为 3 毫米。2.0 工艺分析1.采用 3 爪自定心卡盘夹持直径 50,台阶爪定位左端面。2.选择加工刀具,选用 90 度外圆机架刀车刀。3.0 宏程序编程思路1.模仿 G71 路线。2.毛培直径 50 赋值给#1,通过毛培每次递减,实现车削到指定直径。3.图纸要求直径 30 赋值给#24.吃刀量赋值给#3,每层吃刀量为 3. 4.0 加工程序编程与注释O0010M3 S300 G99T101 M08G0 X51. Z10. Z0. G1 X-0.7 F0.12(平端面)G0W1.X50. #1=50(毛培赋值)#2=30(图
12、纸要求尺寸)#3=3(吃刀量赋值)N10#1=#1-#3(利用减法运算,计算出每一层的 X值)G0 X#1(X 进刀)G1 Z-30. F0.12G0 U1. Z1. IF#1 GT #2 GOTO 10(如果#1 大于#2,那么执行跳转到 N10 的地方执行后面程序,如果不满足,执行后面一步)G0 X120. Z130. M305程序编制完成,我们来检查一下这个程序对不对,首先我们来看#1=#1-#3 这一步,当 #1 等于50, #3=3 的时候,我们就因该是 50-3=47,然后把47 从新赋值给#1,当执行完一刀外径车削以后,我们条件判断,如果#1 大于#2 ,也可以理解为如果 47
13、大于 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. 通过这里我们就可以看出如果程序
14、这样编制,它会过切一个毫米,也就是说本来图纸要求直径为30,现在它车到了直径 29,所以报废!下面我们看一下下面的程序怎么改进。改进后程序如下:O0010M3 S300 G99T101 M08G0 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.
15、F0.12G0 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 大于或者等于只要满足其中一个条件他就执
16、行 GOTO 10 语句,继续循环,我们现在已经加了强制赋值语句,#1 已经等于#2 ,但是现在条件判断任然满足,所以他会继续跳转 N10,从而出现一个问题,他会一直在循环下去,停不下来了。 。 。 。 。 。 。 。这个我们把它称为死循环!下面我们来解决一下死循环的问题,程序继续优化,如下:O0010M3 S300 G99T101 M08G0 X51. Z10. 6Z0. 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
17、#1=#2(强制赋值语句,如果#1 每次递减 3,当它小于了我们图纸要求直径 30 的时候,强制让#1=30)G0 X#1(X 进刀)G1 -30. F0.12G0 U1. Z1. IF#1 EQ #2GOTO 20IF#1 GE #2 GOTO 10(如果#1 大于#2,那么执行跳转到 N10 的地方执行后面程序,如果不满足,执行后面一步)N20 G0 X120. Z130. M30从上面程序中我们可以看出,我们在执行完一个外圆车削路线后面加上了一步 IF#1EQ#2GOTO20 如果#等于#2 那么跳转到 N20 的地方执行G0X120.Z130. 如果#1 不等于 #2,继续执行下面一步
18、程序段,通过这一步我们可以达到一个防止死循环的作用。程序完美运行!总结:1.赋值的应用。2.减法运算的应用3.有条件转移的应用4.强制赋值语句的应用5.对宏程序循环体的认识今天我们讲的课程虽然简单,但是里面包含了学习宏程序必须的语法和逻辑思维,看完教程仔细思考,一定务必把这一个实例完全理解透彻在学习下一课内容,教程都是循循渐进的,如果这一课内容不能理解透测后面内容根本无法学习,多动手,多思考是学习宏程序的关键!文字教程配合视频讲解更通熟易懂,希望各位学者多多努力。7第三章 宏程序在深孔钻削的应用今天我们来讲解一个钻深孔的宏,我们都知道我们在钻深孔的时候由于钻头难以冷却,铁销难以排出,会造成钻头
19、寿命减短,卡削,严重会断钻头,今天我们利用宏程序可以让钻头得到冷却,铁销容易排出,合理保护刀具寿命,我们来看下图:从上图可以看出,我们需要钻孔直径为 12,长度100,我们一般 G 代码 G74 循环代码,难以达到理想,效果,所以我们采用宏程序,每次钻深 2 毫米,然后快速退刀到 Z10.地方,带出铁销,钻头冷却,然后在快速进刀到离上次钻削深度 0.5 的地方继续钻孔,重复同一动作,直到钻孔深度到达。图纸要求:1.每次钻深 2 毫米,退刀,排铁销,冷却钻头。2.平面见光3.防止钻孔偏,先用中心钻打引孔。刀具使用:1.90 度平面外径车2.中心钻3.直径 12 的钻头装夹:采用三爪自定心卡盘,夹
20、持毛培直径 30,以左端面定位。数控程序与注释如下:O0010M3 S1000 G99T101 M08(平面刀)G0 X31. Z10. Z1. G1 Z0. F0.3G1 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
21、赋值)N10#3=#3-#1(计算出每次钻深的 Z 值坐标)IF#3 LT #2 THEN#3=#2(强制赋值,防止深度过切)8G0 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(程序结束)从上程序可以
22、看出,我们实现了每次钻深 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#
23、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(程序结束)通过上面程序优化,我们可以达到一个最佳加工效果!下面我们来讲一下目前国内用的最多的
24、系统,前面的程序都是以 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 (强制赋值,防止深度过切)9#4=#3+#1+0.5 (计算 Z 每次定位,定位在离上次钻深 0.5 的地方)区别在这里,先
25、计算带入# 号,下面一步定位,把# 号带入进去G0 Z#4 (Z 定位)G74 R0.2 (每次钻深 0.5,退刀 0.20G74 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(程序结束)看过上面程序,你有没有发现区别在哪里?好!现在我来讲解一下,他的区别在于
26、 FANUC 系统它在 X Z 后面可以直接加上#3+#1+0.5直接计算,而广数不行,广数必须先把中括号里面的计算带入一个#号,然后在执行 G0#,这就是唯一的区别,很好理解。总结:1.利用宏程序钻削深孔2.宏程序配合 G74 循环代码效果更佳3.广数和 FANUC 系统格式的区别看完本节内容,多思考,多动手!完全理解本节教学内容以后,在看下一节,祝各位喜爱宏编程的学者早日入门,完全理解以上内容以后。这里恭喜你已经对宏程序有了一个认识!10第四章 多个等距曹的宏程序应用今天我们来讲解一下外径多个等距曹的宏程序加工,一般如果我们不会宏程序的话只能依靠子程序来完成,不然程序会非常繁琐,如果用子程
27、序来加工,如果中途坏刀,停下来以后只能从程序开头在重新执行,而我们如果使用宏程序加工的话可以避免这种情况,如果从中途停下来我们便于修改就可直接从我们停下来那里开始加工。我们来看下图:从上图可以看出这是一个等距曹加工图,每个曹曹宽都是 3,曹与曹之间都是相距 10,我们使用宏程序来编制这个程序。图纸要求:1.曹两侧倒去毛刺圆角 R0.52.采用 G75 和宏配合使用3.采用 3 毫米宽切刀加工装夹方式:1.外径 50 以加工完毕,采用台阶爪夹持直径 50,左端面定位,顶尖顶住加工2.切刀以左侧面对平面为 Z0. 程序和注释如下:O0001M3 S600 G99T101 M08G0 X50.5 Z10. Z1. #1=0 (平面 Z 值)#2=-80(最后一个曹的 Z 值)N10#1=#1-10(计算出每个曹的 Z 定位)G0 Z#1(Z 定位)G75 R0.2G75 X45. P500 F0.08(切曹循环)G0 W-0.5(进刀到左侧圆角倒角起点)G1 X50. F0.2G2 X49. W0.5 R0.5 F0.06(倒左侧圆角)G0 X50.5W0.5(进刀到右侧圆角起点)G1 X50. F0.2G3 X49. W-0.5 R0.5 F0.06(倒右侧圆角)