前言:
现在我们对“99999999减法的算法”大致比较珍视,兄弟们都需要学习一些“99999999减法的算法”的相关知识。那么小编在网摘上汇集了一些对于“99999999减法的算法””的相关资讯,希望我们能喜欢,我们一起来学习一下吧!大家好,我是UG编程叶子老师,今天给大家分享的是宏程序讲义(实用),希望对正在自学编程的你有帮助!
领取途径:私信“UG”或者 “UG教程”,免费发送!
4.2用户宏程序及其基本编程方法
在生产过程中存在大量的零件是系列化的。它们的形状相似,但是尺寸不同。为了满足对这类零件的编程需要,数控系统提供了一些固定循环。如FANUC中的钻孔循环,车加工中的粗加工循环等,SIEMENS系统中的孔加工循环和腔、槽加工循环等等。除此以外,还为用户提供了根据自己的需要编写固定循环的功能,以满足不同用户的特殊需要。这种功能在不同的系统中有不同的提法,例如,在FANUC系统中称作用户宏程序,在SIEMENS系统中称作用户循环。无论其名称如何不同,但其实质都是利用变量和程序控制功能,编制具有一定通用性的程序,如果这个程序作为子程序,可以通过变量和简单指令被其他程序调用。
变量用一个名称表示一个数,通过程序或操作面板对其赋值,也可以参与运算。
程序控制语句使得程序运行可以不再单一按自然排列顺序执行,而可以由控制语句控制其执行顺序。
4.2.1 FANUC系统
4.2.1.1变量
变量用变量符号“#”和后面跟随变量号表示。变量号可以是整数,例如:#10,#20等。变量号也可以是一个表达式,例如:
#[#1+#2+#3],如果,#1=1,#2=4,#3=7,那么 #[#1+#2+#3] 等价于 #12。
变量的类型:
FANUC系统规定变量的类型由变量号区分,共分为四类:
表4-1:
变量号
变量类型
功能
#0
空变量
该变量总是空,不能给它赋值
#1~#33
局部变量
仅在宏程序内有效。当断电后,所有的局部变量被初始化为空。
#100~#199
#500~#999
公共变量
在整个程序中有效。当断电后,#100~#199初始化为空。#500~#999的数据被保存。
#1000~
系统变量
用于读、写数控系统运行中各种数据的变化,例如刀具的当前位置和补偿值。
初始化为空的变量,被称为空变量,空变量不等于0。
变量的范围:
局部变量和公共变量的值可以是0或者
~
或者
~
在程序中定义变量时,小数点可以省略。例如定义#1=123;#1的实际值是123.000。
空变量处理:
1. 空变量被引用:
当引用一个空变量时,这个引用无效。
例如 #1 = 〈空〉,
G90 X100 Y#1 等同 G90 X100
2. 赋值与运算:
一个空变量被赋予另一个变量时,被赋值的变量也成为空变量。
例如 #1=〈空〉,#2=100, 执行 #2=#1 以后,#2 = 〈空〉。
在运算中空变量等于0.
例如 #1=〈空〉,#2=100,#3=50 执行 #3=#1+#2 以后,#3 = 100;
3. 比较:
在等于和不等于的比较中,空变量与0是不相同的。
变量使用中的限制:
程序号、顺序号和任选程序段跳转号不能使用变量。
例如:O#1;
/#1G00X100.0;
N#3Y200;
系统变量:
#1000以上的变量是系统变量,可以读、写某些数控系统的内部数据。例如刀具偏置和当前位置数据;但是某些系统数据只能读而不能写。具体规定需查阅数控系统的操作手册。
表4-2 刀具补偿值的系统变量:
补偿号
刀具长度补偿(H)
刀具长度补偿(H)
几何补偿
磨损补偿
几何补偿
磨损补偿
1
…
…
200
…
…
400
#11001
…
…
#11200
…
…
#11400
#10001
…
…
#10200
…
…
#10400
#13001
…
…
#13200
…
…
#13400
#12001
…
…
#12200
…
…
#12400
以下例子利用系统变量实现程序运行中自动改变刀具半径补偿:
#1=1;刀补号赋初值
#11001 = 14;设置刀补半径值
#11002 = 12;设置刀补半径值
#11003 = 10;设置刀补半径值
N30 G41 D#1;建立刀具半径补偿,当#1=1时,补偿值=14;#1=2,补偿值等于12,#1=3,
补偿值等于10。
G40 …;撤销刀补
#1=#1+1;改变刀补号。
IF [ #1 LT 4 ] GOTO 30 ;# 1小于 4,循环次数未到,转到N30继续执行。
表4-3 模态信息的系统变量:
变量号
功能
组别
#4001
G00,G01,G02,G03
01
#4002
G17,G18,G19
02
#4003
G91,G90
03
#4004
04
#4005
G94,G95
05
#4006
G20,G21
06
#4007
G41,G42,G40
07
#4008
G43,G44,G49
08
#4009
G73,G74,G76,G80-G89
09
#4010
G98,G99
10
#4011
G50,G51
11
#4012
G65,G66,G67
12
#4013
G96,G97
13
#4014
G54-G59
14
#4015
G61-G64
15
#4016
G68,G69
16
…
…
#4022
22
#4102
B代码
#4107
D代码
#4109
F代码
#4111
H代码
#4113
M代码
#4114
顺序号
#4115
程序号
#4119
S代码
#4120
T代码
#4130
P代码(当前选择的附加工件坐标系)
在宏程序中要改变某些模态信息,可以先保存进入时的模态信息,在结束再恢复原状。这样可以使数控系统保持该宏程序运行前后模态信息一致。这样的宏程序具有很好的安全性,即使不是该宏程序的编写者也可以放心地使用。
其它系统变量的介绍查阅数控系统的操作手册。
4.2.1.2变量的常用算术和逻辑运算
功能
格式
备注
赋值
# i = # j
加法
减法
乘法
除法
# i =# j + # k
# i =# j - # k
# i =# j *# k
# i =# j /# k
正弦
反正弦
余弦
反余弦
正切
反正切
# i =SIN[# j]
# i =ASIN[# j]
# i =COS[# j]
# i =ACOS[# j]
# i =TAN[# j]
# i =ATAN[# j] /[# k]
角度以度指定,9030表示为90.5度。
反正切中[# j]、[# k]表示两条边长。
平方根
绝对值
舍入
上取整
下取整
自然对数
指数函数
# i =SQRT[# j]
# i =ABS[# j ]
# i =ROUND[# j]
# i =FIX[# j]
# i =FUP[# j]
# i =LN[# j]
# i =EXP[# j]
函数名可以用该函数的前两位字母指定,例如:
ROUND → RO
FIX → FI
算术和逻辑运算的其他使用规则和限制查阅数控系统的使用手册。
运算次序:
1. 括号
2. 函数
3. 乘和除运算
4. 加和减运算
括号可以使用5级,包括函数使用的括号。
4.2.1.3程序流向控制语句
无条件转移:
GOTO n;n 顺序号
条件转移:
IF [条件表达式] GOTO n
如果指定的表达式满足,转移到有顺序号n的程序段。如果指定的条件表达式不满足,执行下一个程序段。
条件执行:
IF [条件表达式] THEN 宏程序语句
如果指定的条件表达式满足,执行后面跟随的宏程序语句,否则直接执行下一个程序段。
条件表达式:
条件表达式必须包括运算符,运算符插在两个变量或者一个变量和一个常数之间。整个条件表达用一对方括号“[ ]”封闭。变量也可以用一个表达式替代。
运算符
含义
EQ
等于
NE
不等于
GT
大于
GE
大于等于
LT
小于
LE
小于等于
循环语句:
WHILE [条件表达式] DO m;(m=1,2,3)
…
…
END m;
在WHILE后面指定一个条件表达式,当指定条件得到满足,执行从DO到END之间的程序。否则,转而执行END后面的程序。m是循环标号,只能使用1,2,3。
循环标号可以反复使用:
WHILE […]DO 1
…
END 1
…
WHILE […]DO1
…
END 1
循环可以嵌套3级:
WHILE […] DO 1
…
WHILE […] DO 2
…
WHILE […] DO 3
…
…
END 3
…
END 2
…
END 1
但是,不可以存在交叉循环:
转向语句可以从循环体内(DO-END)转到循环体外:
不允许从从循环体外转到循环体内。
如果仅写了DO – END,而没有WHILE,将造成无限循环。
运算误差:
运算误差来自变量值的有效精度。变量的有效精度约为8位十进制数。
数值太大形成的误差:
当 #1=9876543210123.456
#2=9876543277777.777
实际#1=9876543200000.000
#2=9876543300000.000
当计算#3 = #2 - #1时,结果#3=100000.000
计算误差的影响:
使用条件表达式时,误差可能会影响判断结果;
例如:IF [#1 EQ #2],可能会受到精度的影响,造成错误的判断,而用
IF [ABS [ #1 - #2 ] LT 0.0001 ] 替代EQ,可以避免精度造成错误的判断。
4.2.1.4宏程序调用
在FANUC系统中,包含变量、转向、比较判别等功能的指令称为宏指令,包含有宏指令的子程序称为宏程序。
宏程序调用和子程序调用之间的差别:
主要差别在于宏程序调用可以在调用语句中传递数据到宏程序内部,而子程序调用(M98)则没有这个功能。其次,M98程序段可以与另一个数控指令共处同一条指令。例如,G01X100M98 P1000;在执行时,先执行G01X100;然后,在运行子程序O100。而宏程序调用语句是独立自成一行。
宏程序调用的有以下方法:
非模态调用 G65;
G65 P p L l 〈自变量〉
模态调用 G66,G67;
G66 P p L l 〈自变量〉
G67 取消模态调用
用自定义G代码调用;
Gnn 〈自变量〉L l
该语句等同于G65 P p L l〈自变量〉 ;nn为数字(1~9999),存放在参数No.6050到No.6059 中。宏程序号p 与参数的对应关系见表:
表4-4:
程序号
参数号
O9010
6050
O9011
6051
O9012
6052
O9013
6053
O9014
6054
O9015
6055
O9016
6056
O9017
6057
O9018
6058
O9019
6059
例如:No.6050 = 801;
执行程序段:G801〈自变量〉;将调用宏程序O9010,并把自变量传入O9010。
用自定义M代码调用,M代码(1~99999999)。使用方法与使用自定义G代码调用相同。
宏程序号p 与参数的对应关系见表:
表4-5
程序号
参数号
O9020
6080
O9021
6081
O9022
6082
O9023
6083
O9024
6084
O9025
6085
O9026
6086
O9027
6087
O9028
6088
O9029
6089
用自定义T代码调用。T代码调用宏程序O9000,需要设置参数No.6001的第5位=1,并在公共变量#149输入代码。例如,用T256调用宏程序O9000,需要输入4.2.1.5 主程序向宏程序传递数据
主程序通过自变量向宏程序传递数据。
自变量说明形式:地址字 数值。例如A23.1。每个地址字对应一个固定的局部变量。
自变量的地址字有两套:
第一套自变量地址字:
自变量
地址字
对应的局部变量
自变量
地址字
对应的局部变量
自变量
地址字
对应的局部变量
A
# 1
I
# 4
T
#20
B
# 2
J
# 5
U
#21
C
# 3
K
# 6
V
#22
D
# 7
M
#13
W
#23
E
# 8
Q
#17
X
#24
F
# 9
R
#18
Y
#25
H
# 11
S
#19
Z
#26
地址字G,L,N,Q和不能作为自变量地址。
地址字不需要按字母顺序排列,但是I,J,需要按字母顺序排列。不需要的地址字可以省略。
在调用时,每个地址字使用一次。
例:
B_ A_ D_ I_ K_ ;排列正确
B_ A_ D_ K_ J_ ;排列错误
G65 P8001 L2 A12.32 D-100. K0.;非模态调用宏程序O8001两次,通过调用语句,数值12.32,-100.0和0分别被传递给宏程序内部的局部变量#1,#7,#6。
第二套自变量地址字:
自变量
地址字
对应的局部变量
自变量
地址字
对应的局部变量
自变量
地址字
对应的局变量
A
#1
K(3)
#12
J(7)
#23
B
#2
I(4)
#13
K(7)
#24
C
#3
J(4)
#14
I(8)
#25
I(1)
#4
K(4)
#15
J(8)
#26
J(1)
#5
I(5)
#16
K(8)
#27
K(1)
#6
J(5)
#17
I(9)
#28
I(2)
#7
K(5)
#18
J(9)
#29
J(2)
#8
I(6)
#19
K(9)
#30
K(2)
#9
J(6)
#20
I(10)
#31
I(3)
#10
K(6)
#21
J(10)
#32
J(3)
#11
I(7)
#22
K(10)
#33
第二套自变量地址字使用A,B,C各1次,I,J,K各10次。
I,J,K的下标不必输入,用于表示使用次序。
第二套自变量地址字适合于传递三维坐标值。
两套自变量地址字可以混合使用,当出现两个自变量指向同一个局部变量时,后指定的自变量有效。
例如:
O1000
N10 …
…
M99
G65 A1.0 B2.0 I-3.0 I4.0 I5.0 D6.0 P1000;
执行以上宏程序调用,程序准备执行O1000中的N10这一条指令时,局部变量中的值如下:
#1=1.0;#2=2.0,#4=-3.0,#7=6.0,#10=5.0;
在传递过程中,首先传给#7的是第四个自变量I 的数值4.0,而后被自变量D的数值6.0所替代。
自变量中小数点使用:
自变量数值不是用小数点,其的单位为各地址字的最小设定单位。因此传递没有小数点的自变量的将会因机床的系统设置不同发生变化。在宏程序调用中使用小数点可以提高程序的兼容性。例如有以下程序:
G65 A10 B20 P1000
O1000
N10 G01 X [#1] Y [#2]
O1000中N10 行相当于 X10 Y20;根据系统对小数点处理不同,刀具移动终点坐标在(10,20)或者(0.01,0.02)。
4.2.2 SIEMENS 系统
4.2.2.1变量
变量名由R和数字变量号组成。不同型号的数控系统对数字编号的范围有不同的规定。一般为0~249,其中0~99供操作者直接使用,而100~249主要供各种加工循环使用。根据这个规定,在用户循环中应该使用变量的范围是100~249。而在主程序中使用变量应该仅可能选择使用0~99,以避免与系统提供的固定循环、自编的用户循环中使用的变量冲突。
例如,R10 , R100 都是合法的变量名。
变量的取值范围:±(0.0000001—99999999)以及0。
对于整数,小数点可以省略。
变量可以被分配给除了N,G,L以外的所有地址字。分配时在地址字和变量之间需要一个“=”
例如:
R1=1;
D=R1;
等同于:
D1
变量分配给轴地址时需要在一个独立的程序段中进行。分配也可以是一个表达式。
例如:
R1=30 R2=50 R3 =55 R5=100 R6=40;
G01 X=R1 Y=-R3 ;
G00 X=R2*COS(R1)+R5 Y=R2*SIN(R1)+R6
4.2.2.2 变量运算
功能
格式
备注
赋值
R i = R j
加法
减法
乘法
除法
R i =R j + R k
R i =R j - R k
R i =R j *R k
R i =R j /R k
正弦
反正弦
余弦
反余弦
正切
反正切
R i =SIN(R j)
R i =ASIN(R j)
R i =COS(R j)
R i =ACOS(R j)
R i =TAN(R j)
R i =ATAN(R j,R k)
角度以度指定,9030表示为90.5度。
平方根
绝对值
四舍五入小数位
舍去小数位
平方
自然对数
幂函数
R i =SQRT(R j)
R i =ABS(R j )
R i =ROUND(R j)
R i =TRUNC(R j)
R i =POT(R j)
R i =LN(R j)
R i =EXP(R j)
运算规则按照以下顺序:
括号;
乘除;
加减。
角度的值为度。
4.2.2.3程序流向控制语句
无条件转移:
GOTOB 标号;向程序开头方向转而执行带有“标号”的程序段
GOTOF 标号;向程序结束方向转而执行带有“标号”的程序段
无条件转移语句必须是一个独立的程序段。
例如:
N10 …
N20 GOTOF MARKE_0;转到N50执行
N30 …
N40 …
N50 MARKE_0:G00 X100;
N60 …
N70 MARK_1:G01 Y20.;
N80 …
N200 GOTOB MARKE_1;
N210 …
条件转移:
IF <条件表达式> GOTOB 标号;条件满足,向程序开头方向转而执行带有“标号”的程序段
IF <条件表达式> GOTOF 标号;条件满足,向程序结束方向转而执行带有“标号”的程序段
条件比较运算符:
运算符
含义
= =
等于
<>
不等于
>
大于
>=
大于等于
<
小于
<=
小于等于
比较运算符的两边可以是表达式。
4.2.4 宏程序编写中的要点
1.确定使用条件和调用格式;
2.确定变量及其意义;
3. 分析各种可能出现的情况,设计出判别和处理的方法。
4.3数控车床程序编制4.3.1变量,宏程序和循环语句的应用
例:编一个宏程序(FANUC系统),实现形状如图4-3,规格不同的轴的加工。毛坯为段件。
图4-3
1.调用格式、参数和使用条件:
G65 P8000 L n A a Bb Cc Dd Ee Ff Ii Jj Kk Mm Qq Rr Ss Tt Uu Vv Ww
变量和参数表:
自变量
参数
对应的局部变量
A
螺纹外径
#1
B
直径D1
#2
C
直径D2
#3
D
直径D3
#7
E
直径D4
#8
F
直径D5
#9
I
长度L1
#4
J
长度L2
#5
K
长度L3
#6
M
毛坯径向余量(直径表示)
#13
Q
毛坯轴向余量
#17
R
吃刀深度(半径表示)
#18
S
精加工余量(直径表示)
#19
T
粗加工转速(rpm)
#20
U
精加工转速(rpm)
#21
V
粗加工进刀速度(mm/rov)
#22
W
精加工进刀速度(mm/rov)
#23
2.使用条件:
使用粗加工、精加工外圆刀,3mm宽割槽刀,螺纹刀。刀具位置分别是01,02,03,04。刀具偏移长度和刀尖圆角补偿参数分别设置在对应的参数中。换刀位置在刀具参考点。
3.分析:
在这个宏程序中,根据毛坯余量和精加工余量计算出粗加工的循环次数。总循环次数等于粗加工循环次数加1,存放在局部变量#30中。根据#30的变化判断粗加工是否结束。
4.程序:
O8001
N10 #25=#1+#13
N30 #30 = FUP[[#13 - #19] / #18/2];扣除精加工余量,根据吃刀深度计算粗加工刀数;
N40 #31=[#13 - #19] / #30;计算径向粗加工每次切削深度(直径值);
N50 #32=#17 / #30;Z方向粗加工每次切削深度;
N50 #30=#30+2;计算总的循环次数;
N70 T0101;取外圆粗加工刀具;
N75 G00X#25 Z#17
N80 WHILE [#30 GT –0.1] DO 1;#30<=0 结束加工;
N90 IF [#30 GE 1.5 ] GOTO 155;判别粗加工和精加工,#30>1为粗加工,否则为精加工。
N100 T0100;
N110 G28 U0W0;粗加工结束,换精加工刀具。
N120 T0202
N125 F#22
N130 #25=#1
N140 #17=0
N145 #20=#21
N150 G42
N153 G01 X[#1-6] Z-1.5
N154 S#20 M03
N155 G01 X#25 Z#17 F#23
N160 W-16.5
N170 U[#2-#1]
N180 W-[#4+1.5]
N190 U[#7-#3]W[#5-#4-18]
N200 U[#8-#7]
N210 W-37.0
N220 U[#9-#8]
N230 W[#6-#5-37]
N240 G02U20.0W-10.0R10.0
N250 G01U30.0
N260 G00Z#17
N270 #30=#30-1
N280 #25=#25-#31
N290 #17=#17- #32
N300 END 1
N310 G40
N320 T0200
N330 G28 U0W0
N340 T0303;换割槽刀
N350 G00 X[#1+3.0] Z-18 F0.15
N360 G01 X[[#2-4]
N370 G04 P1000
N380 G00 X[#3+4]
N390 Z-[L1+18]
N400 G01 X[#2-4]
N410 G04 P1000
N420 G00 X[#9+4]
N430 Z-[L2+37]
N440 G01 X[#8-2]
N450 G04 P1000
N460 G00 X[#9+4]
N470 T0300
N480 G28U0W0
N490 T0401;换螺纹刀
N500 G00 X[#1+2] Z2.0
N510 G92 X[#1-0.5] Z-16.F1.5
N520 X[#1-1]
N530 X[#1-1.5]
N540 G28 U0W0
N545 T0400
N550 M05
N560 M99
4.3.2车床刀尖圆弧半径补偿
车床刀尖圆弧半径补偿的方法与刀位点选择相关。
4.3.2.1车刀的假想刀尖作为刀位点
把刀位点放在车刀的假想刀尖,则认为刀尖不存在圆弧。但是,客观上圆弧是存在的。这样,根据假想刀尖作为刀位点编制的程序所加工的零件必定存在误差。通过分析车刀的对刀方法可以知道在加工圆弧和斜度时将出现误差。
在X方向对刀时,对刀基准是回转体上与 图 4-4
图4-5
X轴平行的一条母线,刀具与对刀基准的接触点和假想刀尖正处于同一水平线上。当车刀保持X位置不变沿Z轴水平切削,假想刀尖点和刀具上影响X方向尺寸的切削点同处于一个水平位置上。因此在水平切削时,X方向不会由于刀尖圆弧出现尺寸误差。在Z方向对刀时,对刀基准是与主轴轴线垂直的端面,与Z轴平行,刀具与对刀基准的接触点和假想刀尖正处于同一垂直线上。当车刀保持Z位置不变沿X轴移动切削,假想刀尖点和刀具上影响Z方向尺寸的切削点同处于一条垂直线上。因此,在Z方向不会出现误差。然而,从图4-5中看出,当刀尖沿斜线和圆弧移动时,假想刀尖与刀具上实际的切削位置并不重合,加工误差由此产生。
补偿方法:车床数控系统中为了消除这个误差,在程序中需要用G代码(G41/G42)指定半径偏移方向以及用T和D代码通过刀具参数号取得圆弧半径和用户设置的刀具方位号。方位号是数控系统开发者为了帮助数控系统计算半径补偿而要求操作者设置的参数。操作者必须记住这个规定。方位号设置错误将导致加工错误。
这个方法与数控铣床的刀具半径补偿方法形成了两种不同的补偿方法,增加了操作者在理解和掌握上的困难。
方位号的规定见图4-6
图4-6
图4-7~ 4-10,4-15,4-16外圆加工的方位角:
图4-7 方位号3 图4-8 方位号4 图4-9 方位号1 图4-10 方位号2
图4-11~4-14 内孔加工的方位角。
图4-11 方位号3 图4-12 方位号2 图4-13 方位号4 图4-14 方位号1
图4- 17端面加工的方位角
图4-15 方位号6 图4-16 方位号8 图4-17 方位号7
4.3.2.2车刀刀尖圆弧的圆心点作为刀位点
图4-18 图4-19
从图4-19中可以看到,当刀位点在车刀刀尖圆弧的圆心,在没有刀具半径补偿的情况下,加工后零件的轮廓线正好是车刀刀尖圆弧移动的包络线。如果刀位点沿零件的理论轮廓的等距外推线(Offset)移动,而且外推距离等于刀尖圆弧半径,那么,刀具的切削点将始终紧贴零件的理论轮廓。
实现刀尖圆弧半径补偿,在编程中用G41/G42指定外推方向,通过T 或D代码取得补偿参数,刀位点按等距外推线移动。
使用这种补偿功能与对刀方法有关。由于无法直接测量刀尖圆心的位置,对刀时还是将刀尖分别在X方向和Z方向与基准接触,通过接触点的位置换算出圆心的位置。对工件坐标系或长度补偿值进行修正。
使用G54~G59工件坐标系,修正方法如下:
原工件坐标系的X原点坐标±刀尖半径;加工外圆取“-”,加工内孔取“+”。
原工件坐标系的Z原点坐标±刀尖半径;圆心在接触点正方向使用“+”,否则使用“-”。
使用刀具长度偏移值:
使用长度偏移方式对刀时,把刀具参考位置到圆弧中心的距离作为刀具偏移值(图4-20)。修正方法:在原数据上减去刀尖半径。
图4-20
参数设置:相关参数有两个,一个是刀尖半径,另一个是刀尖方位号。
车刀刀尖圆弧半径补偿编程:
实现刀尖圆弧半径补偿,除了指定刀具号和参数号外,还要在程序中按偏移方向指令G41/G42。
例如:
T0101 ;换刀
G0 X100. Z20. ;长度补偿生效
G42 G1 X80. ;刀尖半径补偿生效
….
在PA8000系统中,代码T表示刀具,用M6实现换刀。刀尖半径放在用D取得的刀具半径补偿数据表中。刀尖圆弧半径补偿用指定G41/G42以及D代码实现。
自动换刀编程:
车床自动换刀时,没有必要一定先返回刀具参考点,但是必须考虑换刀时刀塔转动过程中刀具是否会碰到工件或机床的其它部位。
4.4 数控铣床程序编制4.4.1 编写用户宏程序
实例1:图4-21
编写一个宏程序(FANUC系统)。加工分布在圆周上的孔。圆周半径为I,起始角为A,两孔之间间隔角度为B,钻孔数为H,圆心坐标X,Y,角度值顺时针为负值。保持本宏程序执行前后模态信息一致。
调用格式:
G65 P9100 Xx Yy Zz Rr Ii Aa Bb Hh Ff;
变量和参数表:
自变量
参数
对应的局部变量
X
圆心的X坐标;
#24
Y
圆心的Y坐标;
#25
Z
孔深;
#26
R
快速趋近的Z坐标;
#18
F
切削进给速度;
#9
I
圆半径;
#4
A
第一孔的起始角度;
#1
B
间隔角度;
#2
H
孔数;
#11
宏程序:
O9100
N10 #3=#4003;在程序中将要设置增量方式,保存03组的原始状态
N20 #5=#4001;在程序中将要改编插补功能,保存01组的原始状态
N30 G81 Z#26 R#18 F#9 K0;K:执行次数,省略K相当于K=1。K=0仅设置钻孔循环的参数,不执行钻孔动作。
N40 IF [#3 EQ 90]GOTO 70 ;如果圆心位置采用绝对方式,转到N70
N50 #24 = #5001+#24;如果圆心位置采用增量方式,取得当前位置坐标,计算出圆心置
N60 #25 = #5002+#25;的绝对坐标。#5001,#5002分别是当前工件坐标系中当前位置的坐标位置(X,,Y)
N70 WHILE [#11 GT 0] DO 1; 未加工孔数大于等于0,执行循环体内的程序,否则转去执行END 1后面的程序。
N80 #6 = #24 + #4 * COS[#1];计算孔位的X坐标
N90 #7 = #25 + #4 * SIN [#1];计算孔位的Y坐标
N100 G90 X#6 Y#7;按绝对方式移动到孔位,执行G81循环。在这行程序中模态指令G81有效。
N110 #1 = #1 + #2;计算下一个孔位的角度。
N120 #11 = #11 - 1;计算未加工孔数
N130 END 1
N140 G#3 G80 G#5;恢复03组和01组的原始状态
N150 M99
实例2:编写用户循环(SIEMENS系统)。用于加工带圆角的方形型腔,采用由里向外环切的方法加工,每次切削宽度为刀具直径的1/3。操作者设置的参数见图4-22 和变量与参数表。
图4-22
调用方法:N10 R101= R102= … R108= ;
N20 RECPOCKET;
变量和参数表:
调用循环的参数
内部使用参数
变量
参数
变量
参数
R101
长度;
R111
粗加工范围(X方向)
R102
宽度;
R112
粗加工范围(Y方向)
R103
圆角半径;
R153
环切步长=1/3*R105
R104
深度(增量)
R150
粗加工循环次数
R105
刀具直径
R154
每次循环起点的X坐标(增量)
R106
中点X坐标;绝对方式编程
R155
每次循环起点的Y坐标(增量)
R107
中点Y坐标;绝对方式编程
R161
圆心X坐标(增量)
R108
侧面精加工余量;
R163
中间圆角半径
图4-23
程序中需要判别和处理以下内容:
1.用户输入参数合法性检查。刀具半径大于圆角半径,长度或宽度尺寸减去精加工余量后小于刀具直径,都属于参数不合法,处理方法是直接结束子程序运行。
2. 加工结束。粗加工是否结束根据粗加工的循环次数判断。
粗加工次数等于(加工范围)长度和宽度中取较小者除以环切步长(R153)再加上1;
3. 在循环环切过程中,每次循环的轨迹形状从4条直线变化到4条直线和4个圆弧。所以需要判别是否加工圆弧。如果需要加工圆角,还要计算圆角半径。
图4-24
判断是否需要插入圆弧加工:把下一次循环起点X坐标(R154)与圆角圆心的X坐标(R161/2)比较,如果R154>(R161/2)则需要加工圆角。
计算圆角半径:如果判别出下一次循环需要加工圆角,圆角半径:R163=R154+R153-R161。图4-24
程序如下:
RECPOCKET
N10 R161=R101-R103*2 R162=R102-R103*2;圆角圆弧的中心坐标(相对于矩形中心点)
N20 R111=R101-R108*2 R112=R102-R108*2;计算粗加工的最大外形
N30 R113=R103-R108*2;计算粗加工的圆角的最大半径
N40 G90 G00 X=R106 Y=R107
N50 G91 G01 Z=-R104
N70 IF R113 < (R105/2) GOTOF MARKE_END;N70-N90 检查用户输入的参数是否合理
N80 IF R111 < R105 GOTOF MARKE_END
N90 IF R112 < R105 GOTOF MARKE_END
N100 R153=TRUNC(R105/3);计算环切的间距
N110 IF R111>R112 GOTOF MARKE_N10;N110 – N140 在长和宽之间取较小者计算环切循环次数
N120 R150=TRUNC((R111-2*R105) / R153 /2) ;
N130 GOTOF MARKE_N20
N140 MARKE_N10:R150=TRUNC((R112-2*R105)/R153 / 2)
N150 MARKE_N20: R154=R111/2-R105-R153*R150 ;N150 – N160 计算最小矩形的长度和宽度
N160 R155=R112/2-R105-R153*R150
N170 R150=R150+1 R220=R150;计算实际循环次数
N180 MARK_N15:IF R154 > (R161/2) GOTOF MARKE_N40;检查是否有圆弧
N190 IF R150<>R220 GOTOF MARKE_N42;N190 – N200 第一次循环的起点需要特别处理
N200 G91 X=R154 Y=R155
N210 GOTOF MARKE_N43
N220 MARKE_N42: G91 X=R153 Y=R153;
N230 MARKE_N43: X=-2*R154;N230 – N260 不带圆角的矩形轨迹
N240 Y=-2*R155
N250 X=2*R154
N260 Y=2*R155
N270 GOTOF MARKE_N50;不带圆角的矩形轨迹处理结束,进入后处理
N280 MARKE_N40:R163=R154-R161/2;计算圆角半径
N290 R164=0;N290 – N310 处理出现第一个圆角是的特殊情况
N300 IF R163>R153 GOTOF MARK_N60
N310 R164=R153-R163
N320 MARK_N60:G91 G01X=R153 Y=R164;N320 – N400 带圆角的矩形轨迹
N330 G03 X=-R163 Y=R163 CR=R163
N340 G01 X=-(R154-R163)*2
N350 G03 X=-R163 Y=-R163 CR=R163
N360 G01 Y= - (R155-R163)*2
N370 G03 X=R163 Y=-R163 CR=R163
N380 G01 X=(R154-R163)*2
N390 G03 X=R163 Y=R163 CR=R163
N400 G01 Y=(R155-R163)*2
N410 MARKE_N50:R154=R154+R153 R155=R155+R153;计算下一个循环的矩形尺寸
N420 R150=R150-1;循环次数计数器减一
N430 IF R150>0 GOTOB MARK_N15;检查粗加工循环是否结束
N440 R111=R101/2-R105 R112=R102/2-R105 R113=R103-R105;计算精加工循环的尺寸
N450 R163=R103-R105
N460 G90 X=R106 Y=R107;刀具定位到矩形中间点
N470 G91 G1 X=R111 Y=R112-R163;N470 – N560 精加工轨迹
N480 G3 X=-R163 Y=R163 CR=R163
N490 G1 X=-(R111-R163)*2
N500 G3 X=-R163 Y=-R163 CR=R163
N510 G1 Y=-(R112-R163)*2
N520 G3 X=R163 Y=-R163 CR=R163
N530 G1 X=(R111-R163)*2
N540 G3 X=R163 Y=R163 CR=R163
N550 G1 Y=(R112-R163)*2
N560 G90 G0 X=R106 Y=R107;
N570 MARKE_Z:G00 G91 Z=R104 + 5 ;Z方向抬刀
N580 MARKE_END: 程序结束
N590 M17