|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 ( @ p8 o$ {" T3 f& R
详解A类宏9 ?* P/ { v+ V6 F- |9 n: M
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
( r( m. [+ n- S) t0 e9 g! o 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。2 ^/ v$ @- l4 `% P% k2 ]
宏指令是代表一系列指令的总指令,相当于子程序调用指令。 X3 L: n) W q/ n* ^- U/ N
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
% O! B+ f( `& y1 v2 y+ h 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。: E2 n0 r% v$ t+ A5 P/ J
1、变量# U3 ?5 q$ j4 R0 P
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
0 }' m6 h6 b( t! r(1)变量的表示3 r) N/ T8 x n& r
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
! d& l. t' @+ [& h" }" {6 ~例:#5, #109, #501。6 _ Y- r, U, x% w
(2)变量的引用% `# a6 r( a: o4 R9 ~2 u
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
/ U3 J1 Q- Z* }% [例:对于F#103,若#103=50时,则为F50;0 E2 v9 v6 t7 N r
对于Z-#110,若#110=100时,则Z为-100; d4 r$ N/ D0 {7 _$ k# |
对于G#130,若#130=3时,则为G03。) s: l0 w: Q% T; q: D
(3)变量的类型
5 B1 E0 |2 q) i) }0 \+ g 0MC系统的变量分为公共变量和系统变量两类。
9 `1 u+ c, z m D1)公共变量
; w; f; w- z K; _. s( H 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
' p2 n) D8 `! B$ |* v5 ]公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
4 c x& e+ I& z% E0 A, R# q0 M+ s h
$ E' x& G( l9 M! s2 a" c
' V( D4 K, }4 J7 J2)系统变量
. |0 Y- M r& k5 W) S 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
* o0 e+ r( i1 h) Q 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
- V/ V; I: W* L: d* E- ]4 g 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。8 g4 x$ A1 E4 K" ]. K4 I) Q
2、宏指令G65
W$ h. }$ e E2 M- D 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
4 D. n3 e( H( m7 f e5 y 一般形式: G65 Hm P#i Q#j R#k
& F1 u; F% S8 R式中:--宏程序功能,数值范围01~99;. X' N# K9 x2 w8 ?- x( Q$ {. i
#i--运算结果存放处的变量名;
7 H9 g) @/ l& E5 J, I#j--被操作的第一个变量,也可以是一个常数;8 A5 g- J2 Q2 l ?4 \( g5 z' S
#k--被操作的第二个变量,也可以是一个常数。
& m) O( B9 z5 } M' N0 L例如,当程序功能为加法运算时:
$ k9 @6 b4 `- ^/ B程序 P#100 Q#101 R#102...... 含义为#100=#101+#102) W) { j, Q1 k. z8 J3 P; K
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
$ n0 T5 Y) ^4 b" s& \ F- `程序 P#100 Q#101 R15...... 含义为#100=#101+15 ' _3 D! l" N- u! _. c2 O
4 v( w7 ^: o5 Z+ s( I
3、宏功能指令
& R$ a8 e4 A" a% m
' h- n& g6 |9 s S; f* @9 L+ k(1)算术运算指令
( ]9 |/ h7 c8 R" `" z, y" i7 t. h) j. A1 Y7 s
1)变量的定义和替换 #i=#j
5 z% E: S, L- J9 |, {( j2 o. Q
& ^. x T# {! }编程格式 G65 H01 P#i Q#j) W2 Y" A% T& J4 C+ ]8 p
例 G65 H01 P#101 Q1005; (#101=1005) # J% y2 G1 H R& L- ^( c- |
G65 H01 P#101 Q-#112;(#101=-#112) 3 _; E0 r: N% W1 Q
2)加法 #i=#j+#k
; w3 A P) a/ K3 \+ q编程格式 G65 H02 P#i Q#j R#k
. s$ m' F( A+ D) N! N例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
. q2 t2 d6 N. \4 o: z# X* B, B% ~& p3)减法 #i=#j-#k
$ |" m G0 L3 P& z6 \) X/ k编程格式 G65 H03 P#i Q#j R#k. @' m% y2 ~0 F2 d
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)6 \8 P `: m6 S6 ?
4)乘法 #i=#j×#k9 Y, T1 @5 O5 |/ \
编程格式 G65 H04 P#i Q#j R#k A8 o4 M7 y! N3 t, U; |% g
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)4 }; U. J, W, y# D( ?
5)除法 #i=#j / #k8 C9 K9 W6 _5 s$ Z) n7 J$ @
编程格式 G65 H05 P#i Q#j R#k
# C8 o8 m- d7 E' `, w例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
3 e) u7 ?( H* H; y7 Q9 U7 C6 }6)平方根 #i= 4 Y3 s+ s/ G: H" G% t: b. B
编程格式 G65 H21 P#i Q#j: w7 e, _2 d! C4 U( U" N. f3 m
例 G65 H21 P#101 Q#102;(#101= )- N& N9 _. I0 {, ^7 Q
7)绝对值 #i=│#j│
7 u$ T' {6 E; W( Z7 ], a) \& P$ Q& B编程格式 G65 H22 P#i Q#j
- d8 X( ?+ m& E) U2 {. \例 G65 H22 P#101 Q#102;(#101=│#102│) 2 Q+ ] M( l( r( }
8)复合平方根1 #i= ! F+ B0 o9 {/ _ r$ S
编程格式 G65 H27 P#i Q#j R#k7 p7 g( l. `7 E. N
例 G65 H27 P#101 Q#102 R#103;( #101=
% i6 h y: a c/ D5 s; A9)复合平方根2 #i=
$ M6 C# k# u8 s/ i/ g编程格式 G65 H28 P#i Q#j R#k
) p: e9 [/ z/ l6 z$ R, O, j例 G65 H28 P#101 Q#102 R#103 X8 o3 }. Y& }# w( g% h
" }/ b" e" c1 F9 q U: k1)逻辑或 #i=#j OR #k: [8 o; S* r% Y1 x; ?' X" m+ C, \: Z; [
编程格式 G65 H11 P#i Q#j R#k1 t P2 r& P- G; _. H0 ?& U" Z/ o& [
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)4 r. B. J8 e9 Z( I: g, A1 y
4 |8 \4 D0 C% C2)逻辑与 #i=#j AND #k
% ^. j4 j' @8 E. I% S3 n' z编程格式 G65 H12 P#i Q#j R#k
+ M9 [! m5 e- D2 s* b0 g, }3 K5 F例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 2 M" L$ X5 P, |, e
: x r. O4 c: x& U+ _
7 @3 S" @3 i8 i
* ^" |. l0 L D; U: v
- W$ x$ J$ J) Y+ \: H& _" ^+ q(3)三角函数指令 ) a! o' @% ?9 a0 {. N
# W. e# k* `, m2 s# c2 K9 B) j
5 D7 |- U4 a, D; F! ^/ @# h
9 A3 y, g! `5 x1)正弦函数 #i=#j×SIN(#k)
: f9 v5 j! l, G$ t1 o8 @9 L- t- i) B" @$ g Y% l
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
$ R& D+ u- k; O5 M0 h; l; y$ n+ A
$ Y( L( @/ x. X% s2 N# A. B例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))% U0 H3 _; R4 ]
2)余弦函数 #i=#j×COS(#k)$ G5 {, j. G. q% I! g) b
编程格式 G65 H32 P#i Q#j R#k (单位:度)
6 x9 i6 d* F9 h1 C7 e0 m! P例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
4 ~" ~. C* `) O7 Y# {3)正切函数 #i=#j×TAN#k
/ U! f8 M$ G+ ?9 b z9 e编程格式 G65 H33 P#i Q#j R#k (单位:度)( U+ w% w1 ^/ E
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
F' }8 _5 k% }% L' `$ b4)反正切 #i=ATAN(#j/#k)
/ f3 A$ i8 H1 Q' Q5 I; P( j! E- @: x编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o). m, u; ~5 P5 I1 H
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
4 {. N6 ^2 A, _/ n1 y$ m1 i, W- ^& I. g- g# b0 f6 H1 \% x
" I$ K$ {% D2 }# R
5 w+ k8 ?( y. `8 n3 S+ N! ^(4)控制类指令
" ]; U5 E. A/ d; M% L0 I' ]/ L9 }- M; Y* G. Y; u
7 T0 m! c; @1 {$ p1 r* B
+ R/ a) [6 r% v; I2 _) C" o* D! ]! ]编程格式 G65 H80 Pn (n为程序段号)
; i; y5 Y1 o4 H! `& B例 G65 H80 P120;(转移到N120)
2 v. n$ m9 ^2 x; x( r# m _2)条件转移1 #j EQ #k(=)
/ L: Z0 ~: t" G# ]7 d编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
' |' _+ s. _6 Q2 A6 d0 I C例 G65 H81 P1000 Q#101 R#102
( c0 O7 P% R( s$ U当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。1 k$ P4 L! G9 A* C" y0 M2 b5 z
3)条件转移2 #j NE #k(≠); t9 [% s2 U/ d
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
* g. R2 q% a/ C6 o1 \1 S例 G65 H82 P1000 Q#101 R#102
: A/ o' d5 ~' ?当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。$ _6 J' I/ X5 r" o* Y, {* r
4)条件转移3 #j GT #k (> )% H% Y! \- `/ K8 N4 ?' e6 `! z
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)* a4 [% K! f( G( _1 d3 W7 L g
例 G65 H83 P1000 Q#101 R#102
' l. s' X1 ~2 v4 i6 d; R0 h0 e当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
, K% p( Z0 ~7 w) r$ N8 p5)条件转移4 #j LT #k(<)
: m" G0 C; I. Z. V编程格式 G65 H84 Pn Q#j R#k (n为程序段号)& }6 W0 ]4 b( M9 M& G; C
例 G65 H84 P1000 Q#101 R#102
( H* {' N, I0 A$ a+ u$ T+ e' R6 F& m5 a当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。) [$ J, n, J$ |" T
6)条件转移5 #j GE #k(≥); {( ^8 w p- @# A) Q4 p/ c
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)) P" B* j0 H2 J( t" A9 ^
例 G65 H85 P1000 Q#101 R#102
9 d# [9 U; T; C H& b6 Y" {) n当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。$ o p- j2 e4 D8 a2 u, G
7)条件转移6 #j LE #k(≤) [, b. Z0 a$ A H9 D
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
, K; u F4 |- [# X2 q例 G65 H86 P1000 Q#101 R#102
3 q0 N) u @' Z/ t7 l当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。* `3 G& {& @5 R0 ]( h
5 `& Q$ v% q0 T4、使用注意
) `& X; R Q* ] 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
" ?- r7 V& M O% f4 Q0 a. S l(1)由G65规定的H码不影响偏移量的任何选择;& C4 L- ?, S5 u' j
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;4 p0 n, p5 O' `3 Y; Y2 q( |: u
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。: E$ W; s; D2 K: { A
(4)转移目标序号可以是变量。
" {0 W& z, [/ k; L) H
# n- v! I1 k8 v* U* g# J) x) g% J% `; W( X5、用户宏程序应用举例 : ) v2 [. q: `! `; Z
9 G9 M$ R$ X+ b用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 + B. j# j% G- t! Q% @/ @0 W
- R z: s/ ~* D# n& ^; o3 y使用以下保持型变量:$ S, u/ M5 k7 [5 T7 @ K9 R
#502:半径r;) H1 m, e/ K3 M4 @( r: `
#503:起始角度α;: o2 s+ \) Y( B3 ^# P
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;3 i* H* W, N4 Y) P( H1 d
#505:孔底Z坐标值;
1 n/ K1 T( M9 r3 \1 o! V* P' Z- p% e#506:R平面Z坐标值;
1 b% O' j& F' h1 n E. ?#507:F进给量。
3 B h, t' ]+ q使用以下变量进行操作运算:
7 c; e# x; k, \5 O- j% ~* ]9 m& `3 B/ L#100:表示第i步钻第i孔的记数器;. j& e. [6 W6 f6 L
#101:记数器的最终值(为n 的绝对值);
% S8 t5 J" d7 D# v8 Q#102:第i个孔的角度位置θi的值;
/ e! ]3 `* i2 ?, R1 ~" j1 Z#103:第i个孔的X坐标值;
5 O7 c4 [8 Z1 N, u! I) ^) ~- `#104:第i个孔的Y坐标值;# _2 c; J2 d! n
用用户宏程序编制的钻孔子程序如下: " `- L/ x% ^3 q2 x/ x, _1 V
O9010( n4 D" Y3 j1 E% i6 D! w3 V6 i# [
N110 G65 H01 P#100 Q0 //#100 = 0
6 ~$ k# R+ Y' c; c" n0 EN120 G65 H22 P#101 Q#504 //#101 = │#504│( B) q$ ^1 F- g1 [9 m6 o
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
# r' _% s6 y9 O4 \. C0 FN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504) i/ V: Q: O8 ^$ N2 R
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
. _+ f0 M9 K: f$ f GN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标% \' k0 a- A0 J Y3 _( }" a0 N0 l
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
$ u+ V% b3 j! Z( p& p& L) s' m5 [N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)) b" E y( O( z0 U _2 {
N190 G00 Z#506 //快速进到R平面2 ~$ a; }3 b o* k0 s& n' s% ~
N200 G01 Z#505 F#507 //加工当前孔" p: s6 C i# O$ _
N210 G00 Z#506 //快速退到R平面
* P5 ]. {+ X! I( s" J4 H3 aN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
9 [) T- r4 r- M. s2 E) ^: J( CN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段" ^0 n3 w5 \5 m+ z9 C
N240 M99 //子程序结束 ' y4 N# [* ]: r5 \# Y
- z8 C" O7 L. ?
% m$ x! V2 ~2 [% ]
3 C" ~; \ m' Z4 _% h调用上述子程序的主程序如下: 9 U! g r y! @7 T* u% x) t
O0010
0 Z6 ~: f, ]' HN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
) }; ?+ i# l6 V. O& |6 o% \N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔- P2 K- O% R% g" a3 R
N30 Z20 //抬刀# @9 l+ S" N; D: U& O, {
N40 G00 G90 X0 Y0 //返回加工坐标系零点
0 V8 x4 Z7 Q. }N50 M30 程序结束 J& {; t# U( m1 z8 h& F/ v
设置G54:X=-400,Y=-100,Z=-50。" T+ t% U4 E6 v* A, A3 W
变量#500~#507可在程序中赋值,也可由MDI方式设定。
: _) P7 `/ a G
: r4 E; d2 i6 HB类宏G657 j: V; O9 v' x
: j6 n! @+ Y, D2 ^" J
简单调用(G65)
+ ~9 H# I( Y; r3 J J% I- Z4 m 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
/ O6 p0 t4 x/ L- k' q1 Q 格式 G65 Pp Ll <自变量表>;
) s, J8 {' T* H5 H 其中: p 要调用的程序号
; k& X* T; [0 g l 重复的次数(缺省值为1,取值范围1~9999)
8 L D' `5 w+ u2 S: A, C 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
3 Y1 O% d4 f4 ?9 `8 t 的局部变量。
- g, }7 D7 M* k4 n- f) j! P0 |( v6 m( i+ i Z5 u$ O& V
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
( z9 k1 N; f8 N
) D7 q7 t' s% ]0 M( Q; t% `地址 变量号 地址 变量号 地址 变量号. G: v8 M5 m: S! d7 a& t
A #1 E #8 T #20: P) \" O% a. b$ y# @
B #2 F #9 U #21
! M, w7 o0 m. \2 x* q1 hC #3 H #11 V #22
$ Y- R B) \" O& J3 ~. m& hI #4 M #13 W #23: K" z4 `% z- T1 _+ Y, [% Y# Q# @
J #5 Q #17 X #24
% ~7 m8 ~+ @# k0 ~K #6 R #18 Y #256 F+ b) z7 K p
D #7 S #19 Z #26/ r0 M/ I) _# {2 A( w" u
☆ 地址G、L、N、O、P不能当作自变量使用。
5 v* S& y0 ^/ F☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
5 Z. t1 i P2 l" u# ~6 b
* }: u1 l9 G/ C) z& ` 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
5 I+ l) k0 B4 K2 z; q$ O. _用的字母自动确定:: |' o5 L% s: E+ V3 `# ?
地址 变量号 地址 变量号 地址 变量号; K7 R* [& o1 F; @
A #1 K3 #12 J7 #23/ G, L4 K5 F7 [* u5 x5 B' X
B #2 I4 #13 K7 #24
$ s; e# h5 n7 ^C #3 J4 #14 I8 #25% d6 I2 ]: R) U
I1 #4 K4 #15 J8 #26: M, t6 m- {5 J, p2 p
J1 #5 I5 #16 K8 #27, o/ Z; h4 T F; a6 V/ s
K1 #6 J5 #17 I9 #285 [$ U2 G* F% _7 P
I2 #7 K5 #18 J9 #29
7 N3 {- W* J# O4 S* sJ2 #8 I6 #19 K9 #30
1 w! s9 ^; t7 xK2 #9 J6 #20 I10 #31
1 R* A; g i L% mI3 #10 K6 #21 J10 #32- `; I- U/ n* `' d0 q/ D6 }% Z
J3 #11 I7 #22 K10 #33& @4 m% `4 P" I- t( m3 g; ]2 I
☆ 在实际的程序中,I、J、K的下标不用写出来。, P1 b# N; d( W5 b3 ^
注意:
& C: {- \2 y) j9 V6 d0 p) b☆ 在自变量之前一定要指定G65。
9 L2 Z) S) b6 K0 \5 j, @4 [4 y☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
7 }- `* |: h0 g2 q* g☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
, P- x. U( ?0 u3 S P1 _( P# i9 c☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。6 l R8 N* [ I% Y8 \
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环$ e( J- p& g2 O
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|