|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
5 C1 f% W) W w详解A类宏
9 L U; i8 t6 G分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。* S' D# y1 u/ t M) x% [) i \
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
) t0 f! ?2 }; H8 j* ~6 L/ X 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
; a$ h8 G. _5 a* y& C' ? 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
7 k- l. W9 C5 } 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。! E5 ^% x6 y8 R4 q6 ]- q z# V
1、变量
. A9 [7 v8 l/ ^" Q5 f4 W 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。* o; m! X. n! S
(1)变量的表示
) Z' @2 ?8 n+ K9 W5 u- k变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......), }1 P' s6 T% R# y% O8 _3 T
例:#5, #109, #501。9 V" K- l' X* M4 A
(2)变量的引用
5 ^. `8 I; F. Z) O0 w 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
, V& C* G* m9 ?; K X# ` Z: ?例:对于F#103,若#103=50时,则为F50;! ~# R. _* G( S, Q. z. ?: {
对于Z-#110,若#110=100时,则Z为-100;
' d- r( k; J% l: S+ B$ {; Y对于G#130,若#130=3时,则为G03。: ~1 V% `' U3 i2 a, ^/ R) a
(3)变量的类型 2 ]1 r+ |# b. X# _% {
0MC系统的变量分为公共变量和系统变量两类。7 }' O! z) H1 o, Z
1)公共变量 . Y9 x- T: K- }3 o. Y4 l& D! y2 t! [
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
& h2 F, f" C9 @! O) \公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
8 x2 I, A, K* s7 t' U
# Y$ G( ?8 s1 C6 C8 R, Z! u( u! T5 K1 z- Z
1 Y) z- ~; O8 R2)系统变量 0 b/ J% X# K; w6 u) a; c
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
/ P" z/ g, ^, \5 F$ v 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
/ D" i/ d( `) A" z 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
) F% C4 {0 O2 W9 R/ v& T2、宏指令G654 \& r# j9 c/ S( T! @+ Q5 D4 j
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
1 M4 p) |( E$ t: p5 n: V% A! N 一般形式: G65 Hm P#i Q#j R#k% z2 N8 O m! X4 A) b8 N, x
式中:--宏程序功能,数值范围01~99;: e; w$ W! Y! n
#i--运算结果存放处的变量名; t1 `( Y$ x6 }0 g0 I/ a+ i' r8 H: G
#j--被操作的第一个变量,也可以是一个常数;7 }; U$ I/ G& Q4 n1 P
#k--被操作的第二个变量,也可以是一个常数。
3 C, j. Q# `0 |2 z) V6 P例如,当程序功能为加法运算时:3 L: @! Y* }% \
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102$ n5 }. J+ R% Y& t5 w
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
8 K1 s: R! W# d% r6 M程序 P#100 Q#101 R15...... 含义为#100=#101+15 2 {& O/ O1 g Y$ e$ o
X5 `; W" P) s3、宏功能指令
* Q: P* {. M3 v3 L' e2 I7 c! v
! T k K; k. D, @ x! e(1)算术运算指令
% y2 k* F; P# \& \" H
8 ~( a9 x0 m) t$ s' }2 G6 h1)变量的定义和替换 #i=#j
' f2 d: I" t& ^5 {! g1 w3 l) ?# R+ ~8 [# W3 V
编程格式 G65 H01 P#i Q#j# o2 N6 f% r; ~# W1 D
例 G65 H01 P#101 Q1005; (#101=1005) . }1 p( ]/ y- s' m. A( ]9 V4 H
G65 H01 P#101 Q-#112;(#101=-#112) " C2 }' q! t, q5 f" O$ O7 `) c# d8 i
2)加法 #i=#j+#k: Z2 o) }' e5 y5 A6 g; l( I: X
编程格式 G65 H02 P#i Q#j R#k 1 s5 ^9 K7 R& B4 w) W$ P
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
p1 [* r' y; N9 o o C3)减法 #i=#j-#k
, _, H0 `2 _1 A `' H1 r编程格式 G65 H03 P#i Q#j R#k
) N! L7 q/ a* w6 |9 G( {# h例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
, ~% l8 ?2 n* M4 E& x1 }9 D3 h4)乘法 #i=#j×#k
5 X; ]7 Y. \4 {. ]! v编程格式 G65 H04 P#i Q#j R#k2 A- _( ]8 A2 O& s. z( f
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)! ]$ V& j* b6 [" h& T* t5 J
5)除法 #i=#j / #k; A1 Z+ L* A7 O
编程格式 G65 H05 P#i Q#j R#k9 `3 b- v; n8 W# ]: J
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
0 n: N3 C- k9 }0 W6)平方根 #i= 0 x! O! \- Q3 |( o! X
编程格式 G65 H21 P#i Q#j$ {+ @; g/ h/ A9 E; @. x1 Z5 x
例 G65 H21 P#101 Q#102;(#101= )$ s6 j& w9 I* m6 ?
7)绝对值 #i=│#j│
3 L0 n8 K5 p% _; C编程格式 G65 H22 P#i Q#j8 H* h& |# i2 i' s4 \ b+ e2 y. W
例 G65 H22 P#101 Q#102;(#101=│#102│)
- f# j9 O1 I$ M& }% K8)复合平方根1 #i= _# o- F' F; k5 w2 x9 [
编程格式 G65 H27 P#i Q#j R#k
/ G0 P; {0 l# H- n4 z* `例 G65 H27 P#101 Q#102 R#103;( #101=
/ H$ R0 d& u7 P( T5 r7 S9)复合平方根2 #i=
; i8 ~* v( v* v* j6 {1 B+ L% B, e编程格式 G65 H28 P#i Q#j R#k
0 N, v6 r, L M; _4 M例 G65 H28 P#101 Q#102 R#103
1 G0 v: B- `0 ] f# f! i" z2 @4 w; \
1)逻辑或 #i=#j OR #k
. l8 L" O0 H8 j4 E3 m6 }6 y编程格式 G65 H11 P#i Q#j R#k- J' I K7 b8 g* u. O" B B
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)+ ~) m- P$ b' l
8 |) N a* y* G0 s. C5 b
2)逻辑与 #i=#j AND #k# M$ H. t3 K' V4 X+ l
编程格式 G65 H12 P#i Q#j R#k2 K' S( j* c/ o( ^
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
$ J+ U9 d9 P; |' L+ Z" m; u5 r" o, N/ v* z5 {. [% L
0 M( k: i) _: @% ~
; \# w/ @& @$ m3 I' \
" y) \, a- y* i! o: Z% U9 D4 \(3)三角函数指令 ! w+ f( T" _, m) d
0 n1 p1 z6 V3 @2 U- E- j/ q$ i& F4 ? 4 `# v# J) p' r; X
; t" b9 x$ f3 c$ g7 ^7 F1)正弦函数 #i=#j×SIN(#k)
+ T2 p1 H" _7 F+ d. S, ^
s- o4 C8 q. I6 l# `编程格式 G65 H31 P#i Q#j R#k (单位:度) .' L. d2 ^3 C4 g
9 b/ r6 T8 o. y* Q) [例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))7 J5 h$ \6 m% A7 Q) p! _: N$ {2 h' }
2)余弦函数 #i=#j×COS(#k) |7 l) l; x! `9 E0 r' }0 T
编程格式 G65 H32 P#i Q#j R#k (单位:度)' H. T1 g, W1 U" j2 i4 C! X; H5 p$ c6 L
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))5 P1 H) Y& `7 P8 _% }5 H2 w+ r7 W
3)正切函数 #i=#j×TAN#k
$ S! V; v+ f) l/ ? Z5 o+ l# Q编程格式 G65 H33 P#i Q#j R#k (单位:度), s+ v+ R# x, g$ f& t9 F6 X" f
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
1 U- r+ ? A0 K3 w1 w \ F6 W/ ?+ E# U4)反正切 #i=ATAN(#j/#k)
' {% }9 K( @$ F2 q' g) c, |' Z4 Y q编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
2 b. i6 ^1 [9 x. u例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
" n9 V9 I; M# a3 f( c( Z# [/ M6 M4 i$ X) Q
# r; x6 M4 j! X# P1 b0 U
I" @7 t' s& y3 g, n: V! j$ _4 a3 J& `1 Y) F2 v p4 d* s4 r7 T
(4)控制类指令
* y9 q$ q3 ^2 n0 r4 R- h0 w
6 H' z( M6 U( C- Q& j 1 d% @ k7 W# N3 d) B( H+ c
* h F( ?/ T5 [! F
编程格式 G65 H80 Pn (n为程序段号)$ H7 x; k8 x1 ^- b
例 G65 H80 P120;(转移到N120)
7 D9 \9 a \# T+ g' B2 o2)条件转移1 #j EQ #k(=)
( j6 L3 [2 g! H9 \& o编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
7 \4 \# ~7 V6 J) @! [例 G65 H81 P1000 Q#101 R#102) A$ w! C; ~- W$ E K! w4 [/ s
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。# Y2 `; H* o. E2 H* c
3)条件转移2 #j NE #k(≠)3 O! e$ D$ _; _5 Y) o2 ^
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
6 g9 Z4 b# R% ?3 G; ~例 G65 H82 P1000 Q#101 R#102
2 G, v; a. S; y2 W" e* N1 U+ ?当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
/ \ L g. d3 F, P( b+ G# P4)条件转移3 #j GT #k (> )
# z) N/ n L7 C5 e, U7 D1 c编程格式 G65 H83 Pn Q#j R#k (n为程序段号)) E1 Y4 [" f1 W: Q( N# [, A
例 G65 H83 P1000 Q#101 R#102# z6 I# C- E3 W/ x; j
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。$ I7 K' [3 E1 U9 F
5)条件转移4 #j LT #k(<)7 J3 s2 I. {+ n# ? x
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
. S1 e2 i* P* u m y9 S例 G65 H84 P1000 Q#101 R#102
# S4 O5 T+ H. C6 Y5 c* k* S当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。- p& l$ Z/ o5 `: _6 j
6)条件转移5 #j GE #k(≥)
$ i3 b: t8 z9 a7 m) g编程格式 G65 H85 Pn Q#j R#k (n为程序段号)9 l' E5 ?% [+ I$ K: r
例 G65 H85 P1000 Q#101 R#102 f4 E# Q4 N1 ?1 G7 K* S: \8 G7 H
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
- A$ l1 |! z- l& U8 r7 Y4 g3 r7)条件转移6 #j LE #k(≤)
/ x% ]& e. @ o4 {# K" J编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
; V( m& p4 A4 u( I7 m4 O5 [例 G65 H86 P1000 Q#101 R#102
: M" x1 D; T9 Z+ k, ]/ X: i: W3 M! b当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
3 e3 J' z4 O, s6 _* ^+ E; _) }3 r8 h1 V k
4、使用注意
4 e# a4 w- Q) W7 @5 P: i 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;) W* A) u- L' x8 s) F# b2 Q
(1)由G65规定的H码不影响偏移量的任何选择;- o* E0 _7 a5 q* z- T- a2 m! a9 d
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
5 |4 V0 j) t6 f$ Q7 F! i" P* s6 j(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。- u- f( R/ U' u9 b" R1 _: q5 y7 r& Q9 K
(4)转移目标序号可以是变量。
/ K3 b* q6 D a/ T- R# k. w; q6 ^" ]
5、用户宏程序应用举例 :
, t# `; Z* A3 P) E0 Z h' c7 u
5 P+ {0 i6 Y, d1 [ e6 U用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
, \# G1 |7 o5 R
# u# s( n8 X- M% q& X/ x4 f使用以下保持型变量:
: R" G- S7 G: |4 G, e6 z( `& u#502:半径r;
3 b, Q! @9 D+ r% M$ O! l4 t! {- Z( c#503:起始角度α;
, t& j9 H; B5 _2 ~, p4 T! o5 T a) L* X#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
: K! j: e# R1 w, L5 E. ?4 D( R' e#505:孔底Z坐标值;/ s9 y1 ~% `: p! r$ U" b
#506:R平面Z坐标值;
8 [ F0 B3 p2 t#507:F进给量。 ) ` ]' W. C* q3 L; q7 O: [
使用以下变量进行操作运算:
2 ]: x# Z+ @% {: y#100:表示第i步钻第i孔的记数器;9 C1 O/ x; ^8 K% {) v
#101:记数器的最终值(为n 的绝对值);
$ V0 c* J+ b* z6 S; ]5 t#102:第i个孔的角度位置θi的值; ( _5 c$ ~7 ]! T+ e5 @
#103:第i个孔的X坐标值;* b1 ~9 W6 p' \2 \7 f+ ~
#104:第i个孔的Y坐标值;
# n% K/ a/ s( P; ]3 [: O4 o用用户宏程序编制的钻孔子程序如下:
# H# W4 C" V/ @$ Y2 M$ M" g% [O9010
2 @+ v. s% D. W& i) cN110 G65 H01 P#100 Q0 //#100 = 0
+ b6 h& i7 @* n6 ZN120 G65 H22 P#101 Q#504 //#101 = │#504│3 P2 n6 g' i! N( d. L% ]/ `$ k4 I
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
9 z" ^4 v% S& }4 `3 g3 j# sN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
' u) D( D* V: w7 c! t: }/ d( |N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n- H( b. j+ x/ t% P7 T+ @! ~
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标2 ]+ @6 L) x5 [) P' ]" G
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标9 i { x, D: Y& r( }6 R& H
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
7 I: C6 A8 [. J& k/ ~N190 G00 Z#506 //快速进到R平面
8 b- o. W4 m+ v) ^7 h- L& I. ON200 G01 Z#505 F#507 //加工当前孔) _6 A( T0 G; S$ u( J( ?) O
N210 G00 Z#506 //快速退到R平面5 u7 U$ n) ^: x4 o
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
* n# i+ G) p) E1 Q# ~/ P( }N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
( d& P( M( Z- h1 H4 dN240 M99 //子程序结束 2 q$ y% ^0 i/ [; k( v$ b* n* d. e
: \' M4 w: i; i- I8 E ( q3 y" c3 g/ b& m9 {
+ Z. s3 j( }5 B b) N
调用上述子程序的主程序如下: ' t& P% F3 {3 {' o, O. A0 a
O0010
' ~% y1 F+ ^1 qN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系2 j. ~( x. B/ }/ y# d I1 |
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
N0 s% D& h9 x/ d. {. C& C# q \+ iN30 Z20 //抬刀, E, a/ B7 k/ J. i
N40 G00 G90 X0 Y0 //返回加工坐标系零点
, Y5 @! m, b* ^/ DN50 M30 程序结束7 y: @4 D2 r/ R8 U
设置G54:X=-400,Y=-100,Z=-50。* f. x! J5 T5 M: H
变量#500~#507可在程序中赋值,也可由MDI方式设定。 + {3 I B1 b% c5 W0 f# u* B
, _6 ?$ s, I' |B类宏G65 H. ]8 u; M1 r/ S
/ A6 f! L; v5 z: ~% R# k简单调用(G65)
) j' |2 g8 p W6 X. y# e 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。5 f( _0 i" s+ H8 ]
格式 G65 Pp Ll <自变量表>;
N0 e" k' {2 H* o+ J5 Q6 Z 其中: p 要调用的程序号% u) |4 Q7 ]! e2 | s- ^! \( h- X
l 重复的次数(缺省值为1,取值范围1~9999)7 v6 s4 J4 O7 c% R" C5 L9 ?' v( u! L
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
- r5 z% M& j$ W) G# z 的局部变量。4 m) [2 \! |" A% _9 U. w
" |, d! n" j& i2 Q% V4 f9 Y# _# g
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
0 i3 |' G: L5 F9 i! \! u& B+ l; E9 `$ W* x8 ^8 S8 t& y) i
地址 变量号 地址 变量号 地址 变量号
$ ~; m5 v8 F8 y; }1 k) ^4 ~3 ~7 j9 TA #1 E #8 T #20
( \# J7 a4 ?' k: ~& i: @B #2 F #9 U #21
/ b: |2 k/ [! C8 d- T. F% LC #3 H #11 V #22
$ D7 D7 H3 q8 ]0 b" k( qI #4 M #13 W #23
9 E+ c4 Z; j3 [8 T2 b9 nJ #5 Q #17 X #24
" q; s* J! R2 \) v( K: yK #6 R #18 Y #25$ w; G1 V$ x3 }! y# T
D #7 S #19 Z #26$ g8 K! }0 m7 |$ i" P3 F$ V% T
☆ 地址G、L、N、O、P不能当作自变量使用。
6 h; ]# z" p/ x1 I☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
5 b4 E j4 o) x. i e* |8 y4 d) ^3 h; G8 j% G
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
6 O f+ O9 b, N/ @& v( C用的字母自动确定:, @) l) s% i: h# N6 e6 C8 H7 n7 g
地址 变量号 地址 变量号 地址 变量号0 |. b8 K) _( w' K; w- u1 |
A #1 K3 #12 J7 #23# ~5 y7 r4 `# H- z
B #2 I4 #13 K7 #24/ h3 P/ B2 l! t* O9 z/ E5 _( g
C #3 J4 #14 I8 #25& Y" Q7 v# u) u' T# |
I1 #4 K4 #15 J8 #268 I" o9 ?' N4 Z3 ~% H
J1 #5 I5 #16 K8 #279 O9 \9 I6 V S. M
K1 #6 J5 #17 I9 #283 Z0 ^& A. G, ^7 t
I2 #7 K5 #18 J9 #29
: ]; {# l$ w! k# vJ2 #8 I6 #19 K9 #30
6 ^, V2 `5 [# o, n1 OK2 #9 J6 #20 I10 #31
% {8 x$ v( b' i, xI3 #10 K6 #21 J10 #329 ^, w& z5 ]2 D# L9 w
J3 #11 I7 #22 K10 #33
! R' u+ I+ C$ E☆ 在实际的程序中,I、J、K的下标不用写出来。
+ u4 k! n5 C, h' a注意:
% I- n, B( p* D2 Z; c☆ 在自变量之前一定要指定G65。
- ], s3 s( T9 E% a: s* h☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
9 R- b8 R1 j. S" G4 ^5 @8 w☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
7 {, M" e& d# {% E3 A, s☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。2 v4 K+ ]* r8 \& }0 p
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环5 L# n4 i. I6 N( } ^
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|