数控车床由浅入深的宏程序实例精讲.
宏程序精讲实例
裳华职业技术中专 鲍新涛 宏程序概述
其实说起来宏就是用公式来加工零件的,比如说椭圆, 如果没有宏的话,我们要逐点算出曲线上的点,然后慢慢来用直线逼近,如果是个光洁度要求很高的工件的话,那么需要计算很多的点,可是应用了宏后,我们把椭圆公式输入到系统中然后我们给出Z 坐标并且每次加10um 那么宏就会自动算出X 坐标并且进行切削, 实际上宏在程序中主要起到的是运算作用。. 宏一般分为A 类宏和B 类宏。A 类宏是以G65 Hxx P#xx Q#xx R#xx的格式输入的,而B 类宏程序 则是以直接的公式和语言输入的和C 语言很相似在0i 系统中应用比较广。 宏程序的作用
数控系统为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值计算,以及精简程序量。
宏程序指令适合抛物线、椭圆、双曲线等没有插补指令的曲线编程;适合图形一样,只是尺寸不同的系列零件的编程;适合工艺路径一样,只是位置参数不同的系列零件的编程。较大地简化编程;扩展应用范围。
宏的分类
B 类宏
由于现在B 类宏程序的大量使用, 很多书都进行了介绍这里我就不再重复了, 但在一些老系统中, 比如发那科(FANUC )OTD 系统中由于它的MDI 键盘上没有公式符号, 连最简单的等于号都没有, 为此如果应用B 类宏程序的话就只能在计算机 1
上编好再通过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
2
G65 H02 P#101 Q#102 R10
G65 H02 P#101 Q10 R#103
G65 H02 P#101 Q10 R20
上面4个都是加指令的格式都是把Q 后面的数值或变量号内的数值加上R 后面的数
值或变量号内的数值然后等于到P 后面的变量号中.
H03减指令; 格式G65 H03 P#101 Q#102 R#103,把#102的数值减去#103的数值赋予#101
G65 H03 P#101 Q#102 R10
G65 H03 P#101 Q10 R#103
G65 H03 P#101 Q20 R10
上面4个都是减指令的格式都是把Q 后面的数值或变量号内的数值减去R 后面的数
值或变量号内的数值然后等于到P 后面的变量号中.
H04乘指令; 格式G65 H04 P#101 Q#102 R#103,把#102的数值乘上#103的数值赋予#101
G65 H04 P#101 Q#102 R10
G65 H04 P#101 Q10 R#103
G65 H04 P#101 Q20 R10
上面4个都是乘指令的格式都是把Q 后面的数值或变量号内的数值乘上R 后面的数
值或变量号内的数值然后等于到P 后面的变量号中.
H05除指令; 格式G65 H05P#101 Q#102 R#103,把#102的数值除以#103的数值赋 3
予#101
G65 H05 P#101 Q#102 R10
G65 H05 P#101 Q10 R#103
G65 H05 P#101 Q20 R10
上面4个都是除指令格式都是把Q 后面的数值或变量号内的数值除以R 后面的数
值或变量号内的数值然后等于到P 后面的变量号中.(余数不存, 除数如果为0的话会出现112报警)
三角函数指令
H31 SIN正玄函数指令:格式G65 H31 P#101 Q#102 R#103;含义Q 后面的#102是三角形的斜边R 后面的#103内存的是角度. 结果是#101=#102*SIN#103,也就是说可以直接用这个求出三角形的另
一条边长. 和以前的指令一样Q 和R 后面也可以直接写数值.
H32 COS 余玄函数指令:格式G65 H32 P#101 Q#102 R#103;含义Q 后面的#102是三角形的斜边
R 后面的#103内存的是角度. 结果是#101=#102*COS#103,也就是说可以直接用这个求出三角形的
另一条边长. 和以前的指令一样Q 和R 后面也可以直接写数值.
H33和H34本来应该是TAN 和ATAN 的可是经过我使用得数并不准确, 希望有知道的人能够告诉我是为什么?
开平方根指令
H21; 格式G65 H21 P#101 Q#102 ; 意思是把#102内的数值开了平方根然后存到#101中(这个指令是非常重要的如果在车椭圆的时候没有开平方根的指令是没 4
可能用宏做到的.
无条件转移指令
H80; 格式:G65 H80 P10 ;直接跳到第10程序段
有条件转移指令
H81 H82 H83 H84 H85 H86 ,分别是等于就转的H81; 不等于就转的H82; 小于就转的H83; 大于就转的H84; 小于等于就转的H85; 大于等于就转的H86;
格式:G65 H8x P10 Q#101 R#102;将#101内的数值和#102内的数值相比较, 按上面的H8x 的码带入H8x 中去, 如果条件符合就跳到第10程序段, 如果不符合就继续执行下面的程序段.
4B 类宏程序
定义
能完成某一功能的一系列指令像子程序那样存入存储器,用户可以设定M 、S 、T 、G 代码调用它们,使用时只需给出这个指令代码就能执行其功能,也可以像调用子程序一样使用。这样的程序也称作用户宏程序
l 调用宏程序的指令————宏指令
l 特点:使用变量
变量的表示和使用
(一) 变量表示
#I(I=1,2,3,…)或#[]
例:#5,#109,#501,#[#1+#2-12]
(二) 变量的使用
1. 地址字后面指定变量号或公式
格式: #I
5
这里的―I‖代表变量号
例:F#103,设#103=15 则为F15
Z -#110,设#110=250 则为Z -250
X[#24+#18*COS[#1]]
2. 变量号可用变量代替
例:#[#30],设#30=3 则为#3
3. 变量不能使用地址O ,N ,I
例:下述方法下允许
O#1;
I#2 6.00×100.0;
N#3 Z200.0;
4. 变量号所对应的变量,对每个地址来说,都有具体数值范围
例:#30=1100时,则M#30是不允许的
5. #0为空变量,没有定义变量值的变量也是空变量
6. 变量值定义:
程序定义时可省略小数点,例:#123=149
MDI 键盘输一. 变量的种类
1. 局部变量#1~#33
一个在宏程序中局部使用的变量,其运算结果其他程序不可使用。
例: A 宏程序 B 宏程序
… …
#10=20 X#10 不表示X20
… …
6
断电后清空,调用宏程序时代入变量值
2. 公共变量。早期(#100~#149,#500~#531 )、新系统(#100~#199,#500~#999) 各用户宏程序内公用的变量 ,其运算结果任何程序调用都相同。
例:上例中#10改用#100时,B 宏程序中的
X#100表示X20
#100~#149 断电后清空
#500~#531保持型变量(断电后不丢失)
3. 系统变量
固定用途的变量,其值取决于系统的状态
例:#2001值为1号刀补X 轴补偿值
#5221值为X 轴G54工件原点偏置值
入时必须输入小数点,小数点省略时单位为μm
运算指令
运算式的右边可以是常数、变量、函数、式子
式中#j,#k也可为常量
式子右边为变量号、运算式
1. 定义
#I=#j
2. 算术运算
#I=#j+#k
#I=#j-#k
#I=#j*#k
#I=#j/#k
7
3. 逻辑运算
#I=#JOK#k
#I=#JXOK#k
#I=#JAND#k
4. 函数
#I=SIN[#j] 正弦
#I=COS[#j] 余弦
#I=TAN[#j] 正切
#I=ATAN[#j] 反正切
#I=SQRT[#j] 平方根
#I=ABS[#j] 绝对值
#I=ROUND[#j] 四舍五入化整
#I=FIX[#j] 上取整
#I=FUP[#j] 下取整
#I=BIN[#j] BCD→BIN(二进制)
#I=BCN[#j] BIN→BCD
1. 说明
1) 角度单位为度
例:90度30分为90.5度
2) ATAN函数后的两个边长要用―/ ‖隔开
例:#1=ATAN[1]/[-1]时,#1为了35.0
3) ROUND用于语句中的地址,按各地址的最小设定单位进行四舍五入 例:设#1=1.2345,#2=2.3456,设定单位1μm
8
G91 X -#1;X -1.235
X -#2 F300;X -2.346
X[#1+#2];X3.580
未返回原处,应改为
X[ROUND[#1]+ROUND[#2]];
4) 取整后的绝对值比原值大为上取整,反之为下取整 例:设#1=1.2,#2=-1.2时
若#3=FUP[#1]时,则#3=2.0
若#3=FIX[#1]时,则#3=1.0
若#3=FUP[#2]时,则#3=-2.0
若#3=FIX[#2]时,则#3=-1.0
5) 指令函数时,可只写开头2个字母
例:ROUND→RO
FIX→FI
6) 优先级
函数→乘除(*,1,AND )→加减(+,-,OR ,XOR ) 例:#1=#2+#3*SIN[#4];
7) 括号为中括号,最多5重,园括号用于注释语句 例:#1=SIN[[[#2+#3]*#4+#5]*#6];(3重)
转移与循环指令
1.无条件的转移
格式: GOTO 1;
GOTO #10;
9
2.条件转移
格式: IF[] GOTO n 条件式:
#j EQ#k 表示=
#j NE#k 表示≠
#j GT#k 表示>
#j LT#k 表示
#j GE#k 表示≥
#j LE#k 表示≤
例: IF[#1 GT 10] GOTO 100; …
N100 G00 G91 X10;
例:求1到10之和
O9500;
#1=0
#2=1
N1 IF [#2 GT10] GOTO 2
#1=#1+#2;
#2=#2+1;
GOTO 1
N2 M30
1.循环
格式:WHILE[]DO m ;(m=1,2, 10 3)
…
…
…
ENDm
说明:1.条件满足时,执行DOm 到ENDm ,则从DOm 的程序段
不满足时,执行DOm 到ENDm 的程序段
2.省略WHILE 语句只有DOm…ENDm,则从DOm 到ENDm 之间形成死循环
3.嵌套
4.EQ NE 时,空和―0‖不同
其他条件下,空和―0‖相同
例:求1到10之和
O0001;
#1=0;
#2=1;
WHILE [#2LE10] DO1;
#1=#1+#2;
#2=#2+#1;
END1;
M30
由浅入深宏程序1-宏程序入门基础之销轴加工 对于没有接触过宏程序人,觉得它很神秘,其实很简单,只要掌握了各类系统宏程序的基本格式,应用指令代码,以及宏程序编程的基本思路即可。
对于初学者,尤其是要精读几个有代表性的宏程序,在此基础上进行模仿,从而能够以此类推,达到独立编制宏程序的目的。本教程将分步由浅入深的将宏程序讲解给大家,作者水平有限,也希望各位同仁提供更好的思路。
下面大家先看一个简单的车床的程序,图纸如下:
11
要求用外圆刀切削一个短轴,这里只列举程序的前几步:
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 ,而在每次切削完之后,将其改变为下次切削所用直径即可。
O5679
T0101
M3S800
G0X82Z5
#1=76 赋初始值,即第一次切削直径
N10 G0X[#1] 将变量赋给X ,则X 方向进刀的直径则为#1变量中实际存储值。N10是程序
G1Z-40F0.2 段的编号,用来标识本段,为后面循环跳转所用。
X82
G0Z5
#1=#1-4 每行切深为2mm ,直径方向递减4mm
IF [#1GE40] GOTO 10 如果#1 >= 40,即此表达式满足条件,则程序跳转到N10继续执行。
G0X150Z150 当不满足#1 >= 40,即#1
M5
M30
由浅入深宏程序2-宏程序之销轴粗精加工
本篇文章利用宏程序简单模仿数控系统的外圆车削循环功能。在此用前一篇的图纸与程序
12