|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 0 F5 i# @& M2 B& u& B# @; ]3 d8 i$ T9 x
详解A类宏
: Y! u3 {- i$ c4 C分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
$ }, f {( Z3 o' H2 L/ a h 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。; Q2 L& J0 ~# z, U z; r
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
0 A! W# t7 n5 U% z 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
* C; @2 E7 J9 ]0 m 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
2 D! P. \- G/ P/ w! D1、变量
$ z& p5 ~' W2 j& _ 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。# t! @# A+ \( a. u4 b$ E8 o2 o) F
(1)变量的表示
1 x7 }+ \. Z6 B2 N变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......), _* P" c% K' \/ Y
例:#5, #109, #501。
* l. H8 @. w7 J(2)变量的引用1 A8 j! \/ p, K0 V: B+ S1 L/ k
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
3 Y+ |. s0 B" T; m- F# o( h& T例:对于F#103,若#103=50时,则为F50; a! v/ [& W# p+ H3 a7 ]. l# B3 S
对于Z-#110,若#110=100时,则Z为-100;, o* v- `/ O; n1 ] w" _0 c4 m" o
对于G#130,若#130=3时,则为G03。
, i" `, @1 ?; |/ A ](3)变量的类型
- H6 k. f: i6 A. m 0MC系统的变量分为公共变量和系统变量两类。5 v! T$ a+ ?3 b$ k% N: X3 R
1)公共变量 " [) y5 `; N0 E. H V) b3 ?
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。+ S( t# \) [" R4 Y- q8 n/ G" o, E
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
4 X& p* `4 I! M6 Y G X( ^& I
8 {2 ]3 Q; \' T7 r/ @. K( O0 g5 R7 k% P: W8 O
- t2 R0 f& S r8 d2)系统变量
& s8 {! R4 I3 p/ x2 S- Z v 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。5 b/ f+ k6 ]5 j1 Z
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。2 g1 y! u$ `+ }9 z( |. ^5 l' ]
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
5 [# g( M; W& j u" F# p2、宏指令G65) O; z* M9 E* R$ j2 j) W7 |
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。0 a: p3 {) i- F( h6 }" u/ ^
一般形式: G65 Hm P#i Q#j R#k& K$ T( a3 q6 ~5 B% X
式中:--宏程序功能,数值范围01~99; x& o! r& A6 a- e3 k5 D1 w
#i--运算结果存放处的变量名;8 j$ G3 ] P8 p; k4 L/ N
#j--被操作的第一个变量,也可以是一个常数;
+ o- U3 c6 g, E4 K; w% z! h$ {#k--被操作的第二个变量,也可以是一个常数。; T0 p+ e/ M* y* l0 I
例如,当程序功能为加法运算时:& \# @9 a1 g( u* W/ d& F+ t# C
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
$ s5 ]5 e* m5 @1 [# I& S l程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102( N0 x3 l; ?2 j- b
程序 P#100 Q#101 R15...... 含义为#100=#101+15 & p: k9 Q9 c& q
; J7 f" h; u, ~+ y; Z2 B* x) E
3、宏功能指令
) M/ m9 q* N/ f: L3 d7 E
; w- A1 S y" E0 R S(1)算术运算指令
* I" { d. n9 E# K
0 @5 D6 @+ b9 }) W* `+ o5 F8 U9 s1)变量的定义和替换 #i=#j
* T/ n: k' a& `
- R h. Z( t. S" }5 R" B8 \4 c# b, d/ G编程格式 G65 H01 P#i Q#j
# i" s7 \6 y0 I8 x. z, K例 G65 H01 P#101 Q1005; (#101=1005)
; d3 c* D& T6 m L* z* g' X8 R+ x; GG65 H01 P#101 Q-#112;(#101=-#112)
. ~. q5 ]% O9 `4 }- n: w, R$ T2)加法 #i=#j+#k- @* ^: p4 J- M& X5 E" _
编程格式 G65 H02 P#i Q#j R#k
/ k% W" l2 O* \1 d. V. A例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)- i% `! r2 f8 N; u
3)减法 #i=#j-#k
2 i, G1 h, r2 X) Z: [编程格式 G65 H03 P#i Q#j R#k
! I5 n1 S( s6 R& S例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
j. Z5 |7 b1 h# V1 }& i) d# B4)乘法 #i=#j×#k
! t; o( o- [1 l0 K' o4 e9 F编程格式 G65 H04 P#i Q#j R#k+ l$ ]" M, w6 K7 B
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
& B* R; ?( v7 h& v3 n5)除法 #i=#j / #k
; o0 W! o. k% j- k1 d编程格式 G65 H05 P#i Q#j R#k
4 e9 b- g- ?$ U0 E' z! w2 ]例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)( K' u7 ]% H8 u- Q) h
6)平方根 #i= & ~$ A) r! I( K* Z( l6 ^4 f
编程格式 G65 H21 P#i Q#j2 ]: g$ `( ^; ~$ a
例 G65 H21 P#101 Q#102;(#101= )& c* r( |" L [; c! L# P
7)绝对值 #i=│#j│+ {% K: s3 ?8 n
编程格式 G65 H22 P#i Q#j
3 R' G5 K4 U* Q+ Y例 G65 H22 P#101 Q#102;(#101=│#102│) # _: k4 p) d, j. W [
8)复合平方根1 #i= : H" P( ` d* x! Q* G
编程格式 G65 H27 P#i Q#j R#k i8 f0 V! T5 ^# z
例 G65 H27 P#101 Q#102 R#103;( #101= 5 C- h& `* {$ I" T* C% E2 e8 f
9)复合平方根2 #i= % @& u- @' V# {6 x
编程格式 G65 H28 P#i Q#j R#k2 a) j! R8 ^' N8 p( u1 W, ~
例 G65 H28 P#101 Q#102 R#103 " _; n& m- Z7 a5 Y: K/ P
! u( Y# v& q4 M2 S! C
1)逻辑或 #i=#j OR #k
6 d1 v" R3 v% M编程格式 G65 H11 P#i Q#j R#k+ t6 y. Z4 P" F
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103), t0 p# J6 p& V$ P0 G4 l" R
- C3 h6 e4 E+ V8 w+ W# }! K2)逻辑与 #i=#j AND #k3 s7 j4 @0 O( z, z( Z5 U
编程格式 G65 H12 P#i Q#j R#k3 `3 ?2 \# x: y8 Z6 T$ ?" e6 S
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 / J7 i$ T+ @7 C4 m2 {
0 c( w+ N/ H6 G/ z( \: h9 z
5 M* F* C4 J, A7 y; N8 ^9 k
, y3 c; g8 n! X4 k9 T( Y9 k4 c6 i$ M" z3 U* z. q( j
(3)三角函数指令 $ a7 P% w7 r+ m' ^7 u3 ?/ q
' j" y& }! b f& f* F
1 E2 T# V, O+ m$ L8 L3 z' |0 C" j! H9 H$ M1 W
1)正弦函数 #i=#j×SIN(#k) ; Q" z4 Y# u6 R) a3 Z
( N [0 ?" \# g
编程格式 G65 H31 P#i Q#j R#k (单位:度) .; ~# ?6 d) f" L2 T
1 B- |6 L8 ]* h+ _2 a: ^例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
* D4 a+ m( F2 s4 x2)余弦函数 #i=#j×COS(#k)7 G2 Y0 L2 \7 K5 A
编程格式 G65 H32 P#i Q#j R#k (单位:度)
! j! j' r1 I" m例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
# z+ z, R% Y; G ~# C, y$ k4 s3)正切函数 #i=#j×TAN#k
3 W0 Y, M, Z0 f编程格式 G65 H33 P#i Q#j R#k (单位:度), H1 I( p" c4 G4 `6 M
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))& I* m" T; z/ M; Y; ?
4)反正切 #i=ATAN(#j/#k)
' Z8 k5 o$ B) ^" v" O' M编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
5 j. d2 d: U0 o; Z9 Q' Z例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
) D7 v- R% E+ }- G2 |9 o& q: o; q* _ w( o9 Z8 A( X
7 K2 c! E' r/ v( c/ l4 t9 ]
$ V: r& \/ r2 B(4)控制类指令; b: P' N6 b3 J/ }8 Z
|4 ]# {$ L( B6 Z! h' X, o0 N
; G. c, q3 c/ a( h Z; l5 `
0 ~. P0 A5 g3 T1 f9 C编程格式 G65 H80 Pn (n为程序段号)
9 R0 `2 x: S; [例 G65 H80 P120;(转移到N120)
- f$ N( k# S( P$ t2)条件转移1 #j EQ #k(=)) ~: z" \# K0 ~. d. L
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)' T2 j4 H3 F3 d5 \3 r2 F( C8 E
例 G65 H81 P1000 Q#101 R#102
) c# S$ M& ~* F9 s- c7 X当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
: ^' \4 }: h( l+ P$ F$ ?3)条件转移2 #j NE #k(≠)
. w0 j2 Y. n2 ? b* ? I5 l; m) Y9 z编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
& J" M4 r6 @0 {( A( J, N3 I例 G65 H82 P1000 Q#101 R#102
$ A# B8 j) z4 K2 @+ w9 D2 |当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
" E3 o) o, Q" G! B0 D! N6 U9 k4)条件转移3 #j GT #k (> )
: p& j: m3 Z8 x1 h$ x6 G) H编程格式 G65 H83 Pn Q#j R#k (n为程序段号)% q' h! w1 w* J" d
例 G65 H83 P1000 Q#101 R#102& P* k* Q! N5 ^" f1 F* E
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
: h0 H/ l7 t$ D4 [0 K5)条件转移4 #j LT #k(<)
, y Y" b1 V5 j# `# U编程格式 G65 H84 Pn Q#j R#k (n为程序段号)& P9 N4 D3 y1 y+ x! `" \
例 G65 H84 P1000 Q#101 R#102 ! D4 o) d. D8 j2 E
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
( j( F5 ~' I [$ {; j6)条件转移5 #j GE #k(≥)6 I' U; z! D. r7 H
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
3 q1 g; u* w$ p# o+ E, s6 o例 G65 H85 P1000 Q#101 R#1029 h' X2 T# z5 d
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。7 Q7 d; t7 @; M7 S% G
7)条件转移6 #j LE #k(≤)
0 s" e- m7 _8 l; Z* @' B( E编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
: I; Z6 X( t0 N- k7 z8 z# _) u9 k例 G65 H86 P1000 Q#101 R#1022 F! U6 r3 ]2 e+ \. x d6 O2 o
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
' q$ R; }+ ] Z) V% j" }. m! }& i8 c. U- ?! _
4、使用注意& s3 u- N* N8 u0 d Q/ B' \; s
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
& E: J, L& W% P, a(1)由G65规定的H码不影响偏移量的任何选择;
$ `$ h0 d* k0 l( j- k(2)如果用于各算术运算的Q或R未被指定,则作为0处理;# B. [% M+ N" u4 x3 W
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
6 Y; I; w# p- }6 N(4)转移目标序号可以是变量。 ! K5 _9 B* t4 G6 [
5 Y( \0 o; y4 M( r+ ]. p9 Q' v' b
5、用户宏程序应用举例 : v' U2 `/ l# e0 a# R: K* d: \! `
- O/ L) _: v4 ^/ I3 U用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
$ H1 y% {2 z/ b7 t6 W
& T+ ]9 u: v- P6 }使用以下保持型变量:5 n& A+ W1 I3 E' T: h: u! p
#502:半径r;
/ {. Y1 g. ?) b' f#503:起始角度α;
0 F: v& U n$ @8 ~8 _7 D8 ^#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;( x5 \6 T" g' V% f; O
#505:孔底Z坐标值;
4 ~3 F( ^ |4 R2 L; s7 U8 V1 s#506:R平面Z坐标值;
( O" q1 C0 N" w) ?#507:F进给量。 * ?/ ]5 G8 K: f$ D6 R( ^+ ]6 Q8 y b
使用以下变量进行操作运算:
& e) f1 T0 Q5 K5 q#100:表示第i步钻第i孔的记数器;- V6 u+ k0 d! S1 I' y1 r1 o& ^1 h
#101:记数器的最终值(为n 的绝对值);
" m, S* V* B. Q! C4 E: i#102:第i个孔的角度位置θi的值;
, |( b4 W1 C! s! x#103:第i个孔的X坐标值;
; W! @) o% o4 J. l#104:第i个孔的Y坐标值;
' Z$ e) }) m3 f. h/ S用用户宏程序编制的钻孔子程序如下:
+ D' B+ i6 H, E" u' b eO9010+ H. ~8 l: {3 m! F
N110 G65 H01 P#100 Q0 //#100 = 0
V3 ], T$ S+ q0 |: DN120 G65 H22 P#101 Q#504 //#101 = │#504│
) U% A2 `8 y% {+ LN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
/ ]. k0 l) v# }# V* l5 H" cN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
7 r* P g7 }' |( D+ PN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
) w# \- d0 D$ C9 Y( X- Q5 A2 lN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
+ q9 r# w- l& ^; q. J7 U# {N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
$ a% E: j0 `6 S& B1 R. mN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)8 a* T; Z# t: T- W3 X7 N% f* e1 n8 \/ P/ I
N190 G00 Z#506 //快速进到R平面
4 y" I1 I9 A3 r! [/ g2 o$ h+ H! K, TN200 G01 Z#505 F#507 //加工当前孔5 w1 O" C7 l7 C) e% d
N210 G00 Z#506 //快速退到R平面
* U$ z$ k0 n9 yN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数8 p8 z! F. V9 Q; u) h0 ^/ b
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
) i6 k. S9 p# t1 T! U. a2 ]N240 M99 //子程序结束 3 P2 ~3 {/ _) w1 I
( n- a2 V( L; e, k
8 w" k5 x. \9 W, w: o4 ~2 j
5 y# e& c8 z# x, T, Q$ T4 m4 T
调用上述子程序的主程序如下: 2 j. |' _- b/ }) c' O
O0010( r4 g1 I- r( Z9 s+ X
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系/ ^1 z, M% z: L8 U4 ?
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔8 q* N0 ^+ P* d( J% j; f
N30 Z20 //抬刀0 B; d/ f/ {+ |7 K
N40 G00 G90 X0 Y0 //返回加工坐标系零点 $ b! Z" |# \# z. Q2 Y! D+ q
N50 M30 程序结束- v, `6 q! b+ A' x3 Z8 o0 n
设置G54:X=-400,Y=-100,Z=-50。6 w/ q0 B5 `- ]2 [/ Y/ s( {3 F
变量#500~#507可在程序中赋值,也可由MDI方式设定。 ; ]" N; f5 C4 W' ?
( q8 D4 @1 y; J3 fB类宏G65
$ c! [& B9 K& t2 t6 l* D5 e G, h9 m( S7 M
简单调用(G65)
$ {$ r l/ P: k 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
& t" m9 c" ^2 v' n4 M 格式 G65 Pp Ll <自变量表>;
, @5 Y) E/ g, ?2 O9 H 其中: p 要调用的程序号; D8 E) M6 W7 s; D0 g0 v! q; P
l 重复的次数(缺省值为1,取值范围1~9999)
# G- E$ y6 ~9 @6 I* ^/ ~" d 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 ! ~6 }$ x; y6 w& x6 ` ]- ^, m1 I2 X
的局部变量。
6 F: O' }) z5 B+ `% \
" M9 C/ q! h2 ?, f; b$ `( r+ | 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
7 ~7 ^2 O( k9 x- W& r$ F& o
' @" j, ]( v4 f- d* s# ~地址 变量号 地址 变量号 地址 变量号& ]/ C7 H7 m8 j3 z# I
A #1 E #8 T #20+ z& p# j7 v' x$ @( M5 A; \, d+ q
B #2 F #9 U #21- i# ^) S2 {+ l& s
C #3 H #11 V #22
( X- V5 K9 z, F+ [8 [8 B6 k. i- xI #4 M #13 W #23
- Q6 L3 m0 }* ?! M3 }4 D6 a, RJ #5 Q #17 X #242 p2 e% B4 v C, J
K #6 R #18 Y #259 J2 t3 e2 P! U# Y" ]9 ?
D #7 S #19 Z #26
% }/ e( ]3 _. m: Y* k+ ?) a5 K☆ 地址G、L、N、O、P不能当作自变量使用。, ~& `2 T- m, h& ~
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。. f& i5 o8 _7 k% m7 M
$ l& E+ K% o/ \
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
; l5 v$ c+ a" S/ E* x. s, p用的字母自动确定:# K6 f- r8 w7 ~/ s; i, [
地址 变量号 地址 变量号 地址 变量号 ~2 q, F0 N1 I
A #1 K3 #12 J7 #23* H( b+ l+ ]6 ~2 I
B #2 I4 #13 K7 #24
: i+ q- ? i. N& T* M( l* f9 [C #3 J4 #14 I8 #25
# j% ~3 A, d" b1 vI1 #4 K4 #15 J8 #26
) D) U7 M9 I5 I7 j& @J1 #5 I5 #16 K8 #276 N: ~3 e; a3 f, P% y9 m8 F
K1 #6 J5 #17 I9 #28
/ i4 |3 y7 ?6 V( [# y cI2 #7 K5 #18 J9 #295 F7 E* @/ m5 W
J2 #8 I6 #19 K9 #301 u p( _; a6 ]8 I) _& f8 f
K2 #9 J6 #20 I10 #31
: N m# L1 W! W5 u% NI3 #10 K6 #21 J10 #32
8 {+ ?2 r( a& z6 h, z+ l" KJ3 #11 I7 #22 K10 #33
( M7 M* d, Q. L3 R8 R☆ 在实际的程序中,I、J、K的下标不用写出来。
9 _ u. Z/ r/ z注意:: p$ Y \+ `" x' j% i; M" c
☆ 在自变量之前一定要指定G65。
+ ^3 m2 A4 C/ ]$ L) _1 f☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。4 r/ q% a8 n2 Q8 T# f' [
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
" Z6 R% g# K! k2 ` H☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
9 ^0 R" r8 N. Y, L; C G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环0 P& m" b, h, b# u2 }' ?/ m p$ `4 o
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|