|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
6 E) N+ |9 U) r3 d- x详解A类宏
/ ?5 B4 `/ D0 X7 V) c6 O& R/ N分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。2 _ ~& h; Q& Q8 I1 Z5 w- r6 }
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
2 ]5 E4 r9 i+ o& l3 ^% u& Z+ F1 T6 [. n9 V 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
* S( c* C8 t( Q% X0 L6 A% P9 A4 U" U 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
" H/ O5 a, d1 f& p5 N 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
, v e6 o: _, \1、变量
2 K9 y9 h& R6 H7 D4 |! R 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。' |- s+ q8 ]6 U0 i5 h
(1)变量的表示
" X; Q3 `, p! ]! ^; P7 t$ _- t) a变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
" S2 R% f" Q1 |( F+ }例:#5, #109, #501。
0 f* w1 @* J, n7 W6 j' Q3 }(2)变量的引用: J: S& N! }& U0 J" X
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
6 U: Y. H, n8 m3 B例:对于F#103,若#103=50时,则为F50;1 r: ~0 @" p3 z8 t6 a ]7 l
对于Z-#110,若#110=100时,则Z为-100;
q. t& ^: y( @' F" w4 H对于G#130,若#130=3时,则为G03。% f i5 F, S% }+ T# _: \
(3)变量的类型 1 G+ A7 P4 x c2 e. G* v0 Z) Z
0MC系统的变量分为公共变量和系统变量两类。! t0 c- e$ L8 u" c6 ~
1)公共变量 ( Q3 b4 E' I' {: d4 P, S ~8 G
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。4 S! ?+ p: d; t; k0 ]7 N
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 $ A7 i3 k1 | Q# K: S6 G/ Q
& ^; @5 {* r! A
2 G6 p0 I, \8 A2 r
( x: R, O+ M0 q% x9 K2)系统变量 & ^3 ?3 @7 o: w$ @; L0 O" }
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
; ~8 A6 _- _/ N& C- T" | 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
+ P6 L2 j& H! H W5 R 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。9 E! f1 u4 y" u; C b- t
2、宏指令G65* d- s# q- g7 ^1 p
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。+ U5 q$ X# g" e/ l8 i5 l
一般形式: G65 Hm P#i Q#j R#k( n( x7 Q0 Y3 o+ ^" ]3 M7 b9 X# I$ j
式中:--宏程序功能,数值范围01~99;; l& r$ F; L. U
#i--运算结果存放处的变量名;0 t3 Q1 ^7 j+ T( D* y# s
#j--被操作的第一个变量,也可以是一个常数;
" z X3 d5 G: n4 V) ]3 `, r( {#k--被操作的第二个变量,也可以是一个常数。
. ?+ G/ Q& L4 c; v6 s3 O例如,当程序功能为加法运算时:
3 f4 b8 }0 p! b, u, G( l) u程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
8 \3 c; p$ c; R0 t程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
4 t9 H6 R# S' j8 Q& e7 P- M, t程序 P#100 Q#101 R15...... 含义为#100=#101+15 2 \ P' s- N% [
" M- {( k! C6 X4 b7 r; b% a6 r
3、宏功能指令
# M. w, k' z* t/ b' k: o' B( [3 S% ^. C: E( b! C f) I
(1)算术运算指令 / P @# z3 F0 g( x8 U$ T4 G3 R
3 b8 C) L4 u) Z5 r7 b# p1)变量的定义和替换 #i=#j
3 \/ }$ D1 `0 O$ Q( r. x' \3 `
0 S$ z/ J' _3 T7 G编程格式 G65 H01 P#i Q#j
3 R: b/ \# Q( x& T0 d6 W例 G65 H01 P#101 Q1005; (#101=1005) 0 ?& K2 I+ s! |3 g, t
G65 H01 P#101 Q-#112;(#101=-#112)
. v2 l. E: M6 _) K) D2)加法 #i=#j+#k
- j: n2 G p) l( _! N编程格式 G65 H02 P#i Q#j R#k
* n( ^6 m6 E; E9 f" j9 W/ g7 n例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
. m/ b9 v7 Y1 V5 m' u, W3)减法 #i=#j-#k9 G! P% R6 S& V
编程格式 G65 H03 P#i Q#j R#k
- Q; t: d# |) Y) t8 w& `8 w6 I例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
6 d/ \5 B# Y8 n6 z4 e- c* O6 k l4)乘法 #i=#j×#k2 l/ s7 u2 L# ]/ x2 l! a
编程格式 G65 H04 P#i Q#j R#k- V* X9 q- a; L w) e2 m
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
( M8 _: C! u( c+ b U+ c5)除法 #i=#j / #k. _$ d. n0 y& v- i6 ~1 S/ B p+ i
编程格式 G65 H05 P#i Q#j R#k
# s) w& L! @' _6 t3 @" F8 _/ e例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)7 @; ~3 L5 r, E8 j
6)平方根 #i= / ]4 Y1 N1 j* G- h
编程格式 G65 H21 P#i Q#j
* \& u5 O8 |# u% I& p! e# U例 G65 H21 P#101 Q#102;(#101= )
: R9 F6 u/ L8 d, E7)绝对值 #i=│#j│ l4 m: L `* t+ @
编程格式 G65 H22 P#i Q#j- k* I4 r/ l4 v- k
例 G65 H22 P#101 Q#102;(#101=│#102│)
. ?% j* f& m; W6 L4 a! w d+ f8)复合平方根1 #i= * n- ?- o) b. {- N
编程格式 G65 H27 P#i Q#j R#k+ P1 D0 B3 q4 f5 [
例 G65 H27 P#101 Q#102 R#103;( #101= ) r9 J. x7 N. |# h8 s
9)复合平方根2 #i=
5 m) l* F& Y# M$ X6 i: s编程格式 G65 H28 P#i Q#j R#k
6 [6 g0 c0 M7 u1 R* M& v例 G65 H28 P#101 Q#102 R#103 : J/ }/ f( Z( P- x9 F% a' G
' C; U1 Y- @! n% ~# L. W
1)逻辑或 #i=#j OR #k. b8 |) {8 {! f! p/ E
编程格式 G65 H11 P#i Q#j R#k
& U" j6 _4 v% @, E: j例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
' R6 N9 D' G; T# ]
( W: ~) [; `5 ?2)逻辑与 #i=#j AND #k; L' [" }% ^/ T) L
编程格式 G65 H12 P#i Q#j R#k5 y' c \/ d! Q/ u6 A6 i
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
0 Q! c* q+ y6 s: V1 ?2 p4 a7 P0 O% }1 J5 u6 h# r9 Y
$ Y) i ]' B* Z" f
. J2 U- }4 K" w- e+ [( p8 y: P5 d! Z7 H2 w
(3)三角函数指令
* U) V/ U- _: H& s
4 H& K5 d% M/ M4 t0 C& d* K 8 `# @, z$ l8 L
5 l3 t) N* R. r$ g$ V4 o/ T( ^# q
1)正弦函数 #i=#j×SIN(#k)
. y$ ~; y1 n. C0 m4 r
" E/ S' y9 m2 O/ f! p编程格式 G65 H31 P#i Q#j R#k (单位:度) .
8 W" {. _. ~' u! a9 D% J& N
2 j* F( m4 R/ B8 \, r- H例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))8 C f- K: L0 C+ ]- e! |% @
2)余弦函数 #i=#j×COS(#k)5 e8 {. B5 r. Q- k% B( G9 k5 I- U
编程格式 G65 H32 P#i Q#j R#k (单位:度)! i W* R5 g Q, S( v9 K4 o
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))0 C( e; X1 p* y$ P& ?
3)正切函数 #i=#j×TAN#k
. X" p- d& e, |编程格式 G65 H33 P#i Q#j R#k (单位:度), a1 S$ m( R5 {; n
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))' f8 Z- w4 o+ F3 k" B7 e* V& Q
4)反正切 #i=ATAN(#j/#k)
9 |; ?$ {' `5 |" T3 @' F编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
) X9 @& w- y* R% \0 h1 }- @ }例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)2 t: J1 A5 q* Z, B* Y4 d
2 T# l# ]1 O! n# v8 B# h
- O* {/ s' @6 f- J6 L
) r" l9 q; \* {
(4)控制类指令$ U2 Y8 ^( l2 Q, e9 B8 G
/ B9 S( }, P+ I- y1 S, O# s
( e8 o5 L. r% Y2 V# r3 n
7 O" r$ m) m) U
编程格式 G65 H80 Pn (n为程序段号)
: F; c- l, t2 W# z1 l$ G$ C( v例 G65 H80 P120;(转移到N120)
; c# ^! M# F/ ~2)条件转移1 #j EQ #k(=)
3 B6 B( D |5 _编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
; C: p3 v7 R/ H% r例 G65 H81 P1000 Q#101 R#102
' K0 O: }1 h ^7 [8 M当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
0 y0 n- T, |, L* ^; `3)条件转移2 #j NE #k(≠)1 i5 I/ R3 e2 x7 \' q
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)0 {7 M/ ~- p% }# A2 F
例 G65 H82 P1000 Q#101 R#102# ?4 T6 P$ Q' Z4 o( l4 ^
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
8 G% C F: n2 _% N. T5 Y( X4)条件转移3 #j GT #k (> )
& c' _, ~4 G+ T编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
0 X& C# `2 _( p9 }例 G65 H83 P1000 Q#101 R#102( Q. ?1 ]! @/ {$ ]: K
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。/ _! }- u# y! S2 X" H
5)条件转移4 #j LT #k(<)
9 x: O. D* y1 ^0 d/ k编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
% o) c4 |% d& c* h/ Y, ~- e1 I例 G65 H84 P1000 Q#101 R#102
6 L, @+ i3 F: i o, I; G当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
7 J" w# {3 E) `1 ?) Y6)条件转移5 #j GE #k(≥)9 b) E; }8 l0 e0 N2 ^
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
' D& G5 k7 b; C例 G65 H85 P1000 Q#101 R#102
) o- Z0 U' y1 I0 n2 R" Z当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
( B' U/ }# s k5 Q0 t2 G/ O8 q+ M7)条件转移6 #j LE #k(≤)4 G- O! ~% |1 O! k& a
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
+ Z" F* w" |6 j( I例 G65 H86 P1000 Q#101 R#102
3 w# r5 N6 w2 r7 o/ N& m当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
( ~; G2 y1 v0 w& r5 d( [# Q, L0 [, t/ w N
- Q4 \% r4 o* G1 J4、使用注意" U2 b, }7 h1 \+ Q: Y1 Q5 ^0 @
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
: \( x9 f& ?8 g: H. |(1)由G65规定的H码不影响偏移量的任何选择;- k6 O3 G4 ]1 w" ?8 n9 F9 G# S) s
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;8 H' i9 ]2 f* I" O! V; K/ u
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
8 h8 z, H; @' C" @; u+ X(4)转移目标序号可以是变量。 ; Q# Y5 r# s- p- ?
. E: K0 m: a9 p; b! x' A" k' o5、用户宏程序应用举例 : 9 X2 W( J9 z/ e% W* k4 S
( {" s7 w2 g L
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 % E2 p. ?" ~% T% {7 X d6 m# K
" A1 q( _! b* U5 n# x
使用以下保持型变量:7 {! [, t5 O( |. L* B3 ?0 T
#502:半径r;
p9 T Z' t3 Q( l#503:起始角度α;0 r. @! I: N% ~/ t* H" I' s
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
9 k& h( M- t, ?7 a* A#505:孔底Z坐标值;
/ I; n8 {" E9 ]) d# v& X" A9 E; O#506:R平面Z坐标值;" y2 c9 H4 F3 |; V
#507:F进给量。 % J! m# U6 @$ G: c$ r4 P9 G
使用以下变量进行操作运算:
0 z5 X9 M$ T7 T4 { n, U#100:表示第i步钻第i孔的记数器;1 J3 E$ t; |1 Q* \' P
#101:记数器的最终值(为n 的绝对值);4 U, R8 A' O2 a: ^9 L/ D
#102:第i个孔的角度位置θi的值; % j6 | X9 Y4 }# q' y
#103:第i个孔的X坐标值;/ G) C) ^& x; x0 I1 p% Z
#104:第i个孔的Y坐标值;' z% i# |7 H# K" @& M& r
用用户宏程序编制的钻孔子程序如下: " @8 ^( d7 ~; _7 z
O9010, F& j! t% [. W# }1 G# A8 _
N110 G65 H01 P#100 Q0 //#100 = 0
% o3 A/ V: Q1 O( yN120 G65 H22 P#101 Q#504 //#101 = │#504│( J# k/ F8 K4 z2 z+ C3 H
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
* t" ?! i6 X4 j5 YN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504& |% b8 r. q. r; e, D
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
0 \# p; u8 V. O# g- T# l: u: {2 wN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
9 p* D" C" s1 _* LN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
1 K0 w! z7 I4 _2 qN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
1 S7 Z. ?/ j, a6 m+ W) FN190 G00 Z#506 //快速进到R平面2 D" i: o( R7 |" Q' i* v' ]
N200 G01 Z#505 F#507 //加工当前孔
+ P4 a7 Q7 P4 D5 aN210 G00 Z#506 //快速退到R平面4 r5 z" d; a V: T, W
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数: x- }0 _4 l6 I1 u; }# y3 j7 _
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段9 X$ `' m1 @1 M; ^# o; i4 Y
N240 M99 //子程序结束
4 f/ N. I8 {6 Z: Q. A) ?+ n- g# \; ^) t E; t8 w+ V
1 ^4 w) |' ^2 P8 W; B! i2 T
# s' D) x5 W! J- q1 t3 j4 a调用上述子程序的主程序如下: 7 K3 n8 M2 Y1 g# K3 D- V
O00101 }, b C& R+ O, r: v \- w$ U
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系* m# G# ?4 u+ s5 x
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
! \* I, I8 f6 x: k! m9 iN30 Z20 //抬刀1 |( @1 |5 I! p; ~
N40 G00 G90 X0 Y0 //返回加工坐标系零点
d: G1 o2 l! E e" m) N8 {8 ON50 M30 程序结束7 `* L) @8 C( s: i0 f
设置G54:X=-400,Y=-100,Z=-50。
2 y, H/ U3 ~# g4 _. G$ l5 E9 `变量#500~#507可在程序中赋值,也可由MDI方式设定。
$ p/ k) q3 i/ Z z: o. m, P0 A4 @$ {5 U9 m" \! K; |1 l
B类宏G654 \( \; \. R5 C: z/ b5 z }3 e7 ^
! U/ t4 l H2 f$ y2 f简单调用(G65)2 j, G. s" e7 l T) h
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。! ^% m8 f( l1 U. Q0 I5 U
格式 G65 Pp Ll <自变量表>;
* V4 \8 Y3 T9 l# W4 [& M 其中: p 要调用的程序号1 t; F8 g, J$ e. ]& }% f: a( X
l 重复的次数(缺省值为1,取值范围1~9999)! ^6 z. X' S0 Z6 O4 R* f% _
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
8 h' D& Z% R6 l9 h 的局部变量。* Q5 H6 s2 t& Z& L N
+ J* F- o* T3 ~9 ?: D* m8 W
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:$ o9 ?- ]! k, J, P
9 w# H0 w/ m( K1 z0 L
地址 变量号 地址 变量号 地址 变量号
* j7 ~0 v B2 b1 f$ U: lA #1 E #8 T #20
! |9 P8 r5 J {1 BB #2 F #9 U #21
. b# m& T/ P6 R5 S' e# J, k* ]C #3 H #11 V #22, t) h: S) ~6 Y1 T
I #4 M #13 W #235 |& A5 f/ [: c& c
J #5 Q #17 X #24, d& S& i: W) ~7 E( i# Z( D; h m7 F
K #6 R #18 Y #25* L U, I8 R8 U8 R2 {
D #7 S #19 Z #26
% i4 B+ j/ z1 ^: P☆ 地址G、L、N、O、P不能当作自变量使用。
1 @, ~, G t3 V( U! K8 N7 W☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。- v4 X' Z. t6 ?& X" g1 K
7 ^0 H- y7 x9 ^3 h0 U4 w! ]! h s4 @, \7 L
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
( A* W5 n% b: B( B用的字母自动确定:
) x# f- X( F! S) ?! z& k8 S5 d地址 变量号 地址 变量号 地址 变量号# Q8 Z9 r0 ^5 \" N3 c" u+ C H
A #1 K3 #12 J7 #23" U2 ?4 C& m& v K* v+ M
B #2 I4 #13 K7 #24% L$ X S# p$ S* ]/ x
C #3 J4 #14 I8 #25
* I9 I: o% V- x" {0 t6 L) a4 {I1 #4 K4 #15 J8 #269 p0 g& V% l E' K
J1 #5 I5 #16 K8 #27) H/ @$ r% x# B, \2 N
K1 #6 J5 #17 I9 #28
3 E& Y0 ]5 d* n$ m5 G$ \! R: U' II2 #7 K5 #18 J9 #29
. ~+ F8 V4 d5 R8 u" C7 U8 S6 bJ2 #8 I6 #19 K9 #30* v$ j$ H3 O1 Q3 _
K2 #9 J6 #20 I10 #31
# N6 ~( D$ e5 M1 A g6 z9 YI3 #10 K6 #21 J10 #32, V9 o7 v) g( j' e* b0 r1 U+ r
J3 #11 I7 #22 K10 #33, o. y- }* i, i% o) n7 U/ H/ l
☆ 在实际的程序中,I、J、K的下标不用写出来。
! Z2 T* r6 O& ]9 v注意:
4 v8 _# s1 e. @- W6 d7 w6 k☆ 在自变量之前一定要指定G65。6 C0 C& w- E% \; h' G3 T6 N8 U
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
# _" ]+ E5 j' a2 O8 t+ P5 u☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。 z2 I/ V. C: d2 g- h
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
1 |) | |& k+ \' D* W( U. Z E G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
4 w5 k/ v4 n: ~7 x' ]之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|