|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 1 l" u) _. {+ S. Y$ ?) j
详解A类宏% _ O% @- B3 u7 _# k; N
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。; h5 t5 w4 a" K% k
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。. H7 m1 [% U5 n# d' s3 v, ~
宏指令是代表一系列指令的总指令,相当于子程序调用指令。% e, L- T5 ?9 ^
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。- m9 F$ ?7 x R. w
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。' c: F/ D) @* d/ u
1、变量6 C; ~) X; e( f5 p8 Q! C
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
1 Z$ ]! u6 S) G* l* R: [* e* A# \(1)变量的表示
2 L1 H1 `( Z; }9 x" e3 J变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
0 M0 b% U7 x3 ?5 F. k( j例:#5, #109, #501。1 {+ i0 O$ s" B# O+ x% g" [: N
(2)变量的引用+ A2 x8 [6 l, H! R, a$ ` H! r/ e
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。8 g) j) ?2 b- F! b8 } k3 V) m
例:对于F#103,若#103=50时,则为F50;; V+ ^9 ~$ N7 n" S$ X
对于Z-#110,若#110=100时,则Z为-100;) O: \) G* z5 t' Z6 i9 Q0 n5 K
对于G#130,若#130=3时,则为G03。6 L3 @3 b( y3 D5 ~1 y( Y
(3)变量的类型
# J$ L8 ]( n$ p; B: { 0MC系统的变量分为公共变量和系统变量两类。0 l0 l/ [6 Z# Q
1)公共变量
3 q% o8 M1 S1 k+ s `' W 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。6 }/ L5 K6 f F2 [/ j
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 - `0 i8 T; \4 `) L1 }
0 v: M ^2 T$ [- K! z
8 Q2 f4 k+ _' @$ A+ a
# y# k. N/ Q) R) \ q2)系统变量 5 V/ d# h4 e7 o8 T9 q6 g
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
& v" f" W$ _2 p1 h 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
) f4 d/ w7 F. Y! H# b9 D6 f 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
, t* J# Z* t- T; m2、宏指令G654 W8 G& q; ]# I: J, N
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
- i5 y, }% E' e2 [5 q$ U/ |4 ]# L 一般形式: G65 Hm P#i Q#j R#k
9 n) H( J& {6 B$ D$ ?式中:--宏程序功能,数值范围01~99;! Z3 n. J! K! [" i7 M
#i--运算结果存放处的变量名;
' g( ^9 n8 ~( O) @# b! D1 k6 C6 k6 @#j--被操作的第一个变量,也可以是一个常数;. n9 t4 G: h0 o8 @
#k--被操作的第二个变量,也可以是一个常数。
# t" g7 Y. Y9 e# K例如,当程序功能为加法运算时:
( b \ o5 M, G% ?程序 P#100 Q#101 R#102...... 含义为#100=#101+#1023 T4 v# Z" T7 y; q6 @0 I) a
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
, V! c2 w! ? Q b程序 P#100 Q#101 R15...... 含义为#100=#101+15 # c& N; {( g: v* n
6 b; n/ v& ]# { h; d" v% k3、宏功能指令
" i) D; e% G5 t4 f- A
8 X9 O: e f7 W5 w- n- ^(1)算术运算指令 5 h/ v$ x: H; b6 ?7 u: r* y
2 O: _ V6 w4 e
1)变量的定义和替换 #i=#j
$ y7 y# U) o- f; V
. l6 n( A: [( @4 i# R7 F4 ~编程格式 G65 H01 P#i Q#j
5 X2 I) {, U5 ^ F- n例 G65 H01 P#101 Q1005; (#101=1005)
5 x" D( h9 Q+ s o% LG65 H01 P#101 Q-#112;(#101=-#112)
% \$ i) \. s" E) D7 S$ W2 M9 Z2)加法 #i=#j+#k
) N4 |; z5 z0 N* K" y) Z编程格式 G65 H02 P#i Q#j R#k
1 o7 L R' f2 ~; c8 p: b" m例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
* Q; }* R- h- \3 a3)减法 #i=#j-#k6 s! K9 E, G2 O+ \: ]* j
编程格式 G65 H03 P#i Q#j R#k
; Z; g; H" H5 X9 f7 t例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
9 O. N0 }! G2 U5 V' m" V4)乘法 #i=#j×#k
^+ S, v9 y+ E* @" ^* E编程格式 G65 H04 P#i Q#j R#k! I% @7 |9 b9 _. k) E! h
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)% E# a+ }, Q% m: k
5)除法 #i=#j / #k
- e3 }. T0 I) u& p编程格式 G65 H05 P#i Q#j R#k
. ?7 `" K! L) i1 \% D例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
* d# N- M+ `7 W6 X9 M9 G# [6)平方根 #i= $ Q6 a* V t4 }' C8 A4 l( X
编程格式 G65 H21 P#i Q#j
/ ^# e. j2 B0 I* S例 G65 H21 P#101 Q#102;(#101= ); P/ s0 t& q- g+ `: ?6 R: W* F+ K* k) ?
7)绝对值 #i=│#j│) h4 A8 W) u: [& q
编程格式 G65 H22 P#i Q#j' ^7 B2 u& A$ [+ a0 |5 M
例 G65 H22 P#101 Q#102;(#101=│#102│)
9 Q' Z. O/ a* ~( j) W8)复合平方根1 #i= ( H& N1 }% Z% V9 p* ?, W
编程格式 G65 H27 P#i Q#j R#k
* T7 o7 z, J* S$ Q! w4 R例 G65 H27 P#101 Q#102 R#103;( #101= 9 J8 ]) ^, i& V" ]4 J$ i4 o! x# S
9)复合平方根2 #i= : Z, k p3 q5 y2 E/ G9 B
编程格式 G65 H28 P#i Q#j R#k7 j1 v: n% U) M2 B4 b; k( {) ?
例 G65 H28 P#101 Q#102 R#103
4 u# R2 f& U9 s; B9 r+ r1 r( `1 M9 @' ?6 }" o
1)逻辑或 #i=#j OR #k ]' m/ L A4 M
编程格式 G65 H11 P#i Q#j R#k
' F( V$ O. w9 o例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)' F) k2 Z6 H0 t- c
- w0 _# v# q) J- O9 J$ g2)逻辑与 #i=#j AND #k j0 b, m; I0 o7 t% L2 E3 v
编程格式 G65 H12 P#i Q#j R#k
" e( E- c" o( s* p: [3 m例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
' A6 R. R% T! k2 u0 W) r$ I
6 l/ N0 {4 V! f P* ^
: s/ K$ n* J% n1 @3 O 3 l( e+ r2 m2 m# R! }" h3 U: v% y
$ {; G' A2 I1 k c& R
(3)三角函数指令 7 x) K ]5 b# h! P2 [+ J8 ~
% ~- r v% ]2 z0 b' L % t- ]/ i: P, s9 ^
( S8 k4 n3 k6 A( I5 K J9 z$ I1)正弦函数 #i=#j×SIN(#k) ( _: c( Z6 \& ]- V! j
) l; P* O& X6 r# w/ K编程格式 G65 H31 P#i Q#j R#k (单位:度) .. M' o" N3 G& V r0 {0 P* ^0 U
; v9 Q1 O4 W0 h, w
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))4 X% k3 F$ O D" `
2)余弦函数 #i=#j×COS(#k)
5 C; ?4 H8 w7 u编程格式 G65 H32 P#i Q#j R#k (单位:度)9 O B% U6 ^% C
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))! ^8 g! p4 a7 U3 x( g
3)正切函数 #i=#j×TAN#k; |7 B5 K. Z8 g& N
编程格式 G65 H33 P#i Q#j R#k (单位:度)0 C _* [% l# ?% ~2 T7 a
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)). c5 _! x H6 e* J
4)反正切 #i=ATAN(#j/#k)! o8 M$ M+ ?. z
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)# T% g+ G2 O* ^4 z0 K" E
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)! D1 s2 j2 I$ M0 F \# |
8 z: ]5 m% f+ q: T* U1 R0 g
" {6 M+ r* ~8 ]! D
6 Q2 q, r$ k) Z* z1 j# Y: o(4)控制类指令( m1 u; K. _" B
! D i2 h5 a: m- _
8 G& \: \! F3 d( m8 B3 ]+ q
' {: s- P0 l6 r# S' I编程格式 G65 H80 Pn (n为程序段号)
& r# z0 e; ~) T) \5 J/ [2 e例 G65 H80 P120;(转移到N120)
6 P* T3 H, L5 D, c2)条件转移1 #j EQ #k(=)* |8 ~2 |2 q9 ?$ f+ K. d) u2 H, p
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
6 R. p7 w/ }$ M+ C例 G65 H81 P1000 Q#101 R#102
0 D3 c) c1 E/ Q- m% u% N当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。% D$ V$ P1 [, p9 s1 j2 n
3)条件转移2 #j NE #k(≠)% _" F) E1 w* i7 ^9 _3 f" L; U
编程格式 G65 H82 Pn Q#j R#k (n为程序段号). N1 B* L# ~9 z3 A4 q+ `# z
例 G65 H82 P1000 Q#101 R#1021 M, U1 {3 e8 A5 y1 p: ^. n$ t2 j! u# s
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。; }8 `. b1 c2 O A$ h* M
4)条件转移3 #j GT #k (> )
/ H; ^2 M9 X3 I1 H3 P3 }) {: c0 _5 Q0 J编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
" k7 N$ G: c) W. a( |! b# e5 ?例 G65 H83 P1000 Q#101 R#102
0 r, L: T; t1 E7 U当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。0 h& r5 |! R$ Z2 e& J
5)条件转移4 #j LT #k(<), K1 ~' ^% M$ k1 `. R& X& t
编程格式 G65 H84 Pn Q#j R#k (n为程序段号), H5 Z. u" ?4 w. _- u' Z
例 G65 H84 P1000 Q#101 R#102 ; Y0 [% J; O0 B- a# }
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
1 z/ d0 v( U0 l6)条件转移5 #j GE #k(≥)
' d! V( W& R/ Y' @* u7 P+ u* d编程格式 G65 H85 Pn Q#j R#k (n为程序段号)* c! K+ W% U$ J+ _
例 G65 H85 P1000 Q#101 R#1029 t, d% n! l- q
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
! N' M# N( r4 t( v# {# J9 e7)条件转移6 #j LE #k(≤)
9 V* f- p& G8 U% \& w编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
9 r) j+ V) H `% L4 C例 G65 H86 P1000 Q#101 R#102
* A) b: }0 s( D, [7 H2 W! ]当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。 t) n" [! U+ U! U3 m
1 v8 `' @3 {0 V6 \* a% l h+ {: h
4、使用注意) v7 l/ d3 u* K. d/ E
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
& Q7 a1 `# g8 b$ k5 l(1)由G65规定的H码不影响偏移量的任何选择;
. n) M4 K [. n0 u1 z( w# c(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
+ _; r( X3 N* p* b(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
3 \7 Q8 h4 y! |9 C) `4 F. V(4)转移目标序号可以是变量。
4 A, q/ \1 P# |+ b1 `" I9 e
1 l9 g) W8 k( s# ~. D5、用户宏程序应用举例 :
: Q W9 y6 ~1 v1 K" \2 ^" q! H' L$ Q
6 b& k& }/ q8 P5 I7 O$ i4 U$ z用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ! H0 N5 T% b1 c: k' t
. @2 R, }% s- G. Q' O使用以下保持型变量:* @$ D8 n. b9 M) x5 ]3 e
#502:半径r;) I2 u( E& I* M/ s
#503:起始角度α;$ d! r7 J. q9 I e0 S1 w" @8 I
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;) x2 }. j% L# q) Z
#505:孔底Z坐标值;2 I. j0 V) X0 `) T
#506:R平面Z坐标值;7 ^$ A8 A3 c4 Z' @ A
#507:F进给量。 - N0 l* u" U1 x* M5 l
使用以下变量进行操作运算:9 t' b' J. Q1 d7 b8 t e1 p9 c
#100:表示第i步钻第i孔的记数器;
$ u0 F5 @5 g9 E#101:记数器的最终值(为n 的绝对值);1 `' D/ G; b( y" ]+ Q& m
#102:第i个孔的角度位置θi的值;
, o- j2 Q0 @' n; q# I9 _#103:第i个孔的X坐标值;
6 A/ e ]* z0 E( C! G U6 j#104:第i个孔的Y坐标值;9 t+ s+ b$ u3 r3 K2 n
用用户宏程序编制的钻孔子程序如下: ( X8 R1 g$ g: v9 r8 x
O9010
) Q# [7 C4 `4 t+ GN110 G65 H01 P#100 Q0 //#100 = 0/ ^6 C. A+ ~ w" L
N120 G65 H22 P#101 Q#504 //#101 = │#504│
. g# [6 z, A' Y6 c! v$ PN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
2 N% |2 Z3 \5 h9 M; f" u0 g$ bN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504! Y/ G$ }6 E: K& [( Y
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n5 j, {* K% Y y
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标8 W& e3 x& X: h3 t2 B5 u+ u, t
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
+ h5 T4 A) h' A$ w A( xN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)* }) u) G) X" G6 M, F' m E
N190 G00 Z#506 //快速进到R平面, {2 b8 ]; Y- d4 |) |8 S
N200 G01 Z#505 F#507 //加工当前孔
* Q) b/ V; Z8 P& M8 gN210 G00 Z#506 //快速退到R平面4 X" O! H% W+ T: |# c; B
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数) o; R+ C) M2 V H. g6 r
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段( P- N6 P) O1 s5 ]8 ^. n6 m
N240 M99 //子程序结束 . t7 t2 q) s6 H2 ]
\/ z2 M$ ]7 T1 U" v6 H
$ [4 T" p: r* _% ]
7 J; o8 j; K* \3 G
调用上述子程序的主程序如下: 6 c5 U1 h2 k0 W
O0010
% a5 ^, d1 S. C+ X2 v# Y1 N) D- sN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
- _* Q9 ^, n3 T% ?5 M. L) x) Q tN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
5 i$ Z1 }: a: D# m4 r* g# tN30 Z20 //抬刀
\) A5 F; a5 w3 fN40 G00 G90 X0 Y0 //返回加工坐标系零点
7 i9 R% U1 k: o/ m) _' vN50 M30 程序结束
4 v" P0 r# t/ i6 f+ y设置G54:X=-400,Y=-100,Z=-50。
8 Y% i0 Y1 r# F. t6 n8 h8 e变量#500~#507可在程序中赋值,也可由MDI方式设定。 6 w& l* y; _3 i V2 _0 B' O/ k
8 P; T, j$ a; y+ }B类宏G65
. B @# H( k* [" F% o/ L# s) T; P9 X) E) ]7 ?' v- y+ |/ R8 e8 W
简单调用(G65)8 N0 X& j" T4 ]
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
# p+ S7 ^. \" K: |8 ] 格式 G65 Pp Ll <自变量表>;
& D2 q( y7 I \- K% X" j4 \$ _ 其中: p 要调用的程序号
; a& g8 h4 _7 G/ h- p+ ~/ q l 重复的次数(缺省值为1,取值范围1~9999)
' b3 d* g% y5 X) ~6 V7 a* Z 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
3 Y3 R2 @4 x# }1 ~2 `" Q* s 的局部变量。
I/ [7 h0 J2 |% `6 A1 ]* Y4 q
7 S9 E4 Z3 I, c7 Q 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:* }7 K% I1 T1 g' \3 Q
1 u7 | R: C4 U0 v9 z
地址 变量号 地址 变量号 地址 变量号
9 n- H. n& w! X1 Y, o, Z A1 dA #1 E #8 T #20. w1 _$ n; H5 k! k; t' C2 y
B #2 F #9 U #215 d2 u6 g9 Y( A7 g9 z
C #3 H #11 V #228 F/ D/ ^( q/ z9 I( j* q
I #4 M #13 W #23
9 e) g3 N1 l, ]J #5 Q #17 X #24
, V6 D2 t3 V$ l! yK #6 R #18 Y #25
- j+ U1 ?' c Q/ c$ E- |( dD #7 S #19 Z #26
" b- Q! \: m8 h) x3 O+ C0 y☆ 地址G、L、N、O、P不能当作自变量使用。5 c/ _* X+ e1 \% S- `6 w+ Q
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
: ~( X; @5 ~# P% F7 m 9 t: w9 o( ]4 R
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
* X H& ]. r8 I用的字母自动确定:
3 Y1 N& l! J2 o" C X1 }0 B( ^. r地址 变量号 地址 变量号 地址 变量号
7 {; Y. v6 J. k8 [; J, vA #1 K3 #12 J7 #23
B+ T1 H- A8 B4 |' DB #2 I4 #13 K7 #24
0 G& V) ?7 ]7 w, |2 DC #3 J4 #14 I8 #25
8 u, e. \, m0 z/ L% TI1 #4 K4 #15 J8 #26
% o' _, E1 f4 b* CJ1 #5 I5 #16 K8 #27
t/ p" N6 L7 t! x! yK1 #6 J5 #17 I9 #28
! z$ p* {9 ~; [6 CI2 #7 K5 #18 J9 #297 j. k& W1 ?1 z( |
J2 #8 I6 #19 K9 #309 u1 Z7 L0 f0 U/ s
K2 #9 J6 #20 I10 #31
; p7 M+ H+ h& @9 R' u) bI3 #10 K6 #21 J10 #32
. o( O0 [9 a. b5 _& M% ]J3 #11 I7 #22 K10 #33
. V6 N" u9 W, J _- s' G- ^☆ 在实际的程序中,I、J、K的下标不用写出来。
% p* x0 J0 i- \( w3 P( @$ c# P* l) [注意:
3 E. l; d, T" P( `☆ 在自变量之前一定要指定G65。
! |7 P, b* J9 \9 D$ m! _7 r☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
8 ^2 `, o* @6 Z) R+ s☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
1 d( z: m4 Q+ c. C☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。. N) r5 m2 P7 \: n% U
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
0 X: n, I: ^3 P# q6 B之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|