|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 5 h- u. X: I# I' N
详解A类宏. t! w `* u2 S5 \7 g* b. ~. f
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
/ k+ ` ?5 \4 W, [3 t8 ? 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
! e" V* Z6 X# ?0 _: J, \ 宏指令是代表一系列指令的总指令,相当于子程序调用指令。# b! G8 e: x9 I
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。* r" j% E$ H4 z
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。) e- S9 q. f/ q5 F0 ]( }( Z
1、变量$ T7 r+ s0 N* v, L1 b, g
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
) T7 i. [+ t: j# A$ `/ H* ~(1)变量的表示7 I. \/ ^+ n1 S5 Z3 y1 D& Q
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
5 T/ R$ \& I) A9 r/ e M3 K例:#5, #109, #501。
1 y+ ^ Y1 L2 s, y. c3 Q* A(2)变量的引用4 c$ F" e8 g& f. n+ M6 H/ U8 b
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。) U. o, F4 Y* D6 j$ Q" s
例:对于F#103,若#103=50时,则为F50;
5 s; P) _9 h. P- x7 ^ E* Q对于Z-#110,若#110=100时,则Z为-100;
' C- n4 t, K( [0 w. X/ p. L对于G#130,若#130=3时,则为G03。0 w, o$ M( |8 O. O! n) P" w5 y
(3)变量的类型
% Q+ m( h5 }! N8 W4 L. Q* X 0MC系统的变量分为公共变量和系统变量两类。
' H' q& ]4 g ]. K1)公共变量
7 C( O( A K. P: C, _/ s 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
! j2 L+ @0 b% |) T' o/ x公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
5 }4 I0 v( t" T$ l( s) s k+ Z7 x* o1 D q
- u- {! q$ F1 V% e
9 c' F# z* J8 N! j) Q2)系统变量
- D5 h1 F) A* d' v 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。8 C( v+ j8 U% N7 Y$ [1 K' s
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
+ ^& A; T+ N5 k 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。. `9 c0 {: `$ M3 U: _9 X# ]
2、宏指令G65
2 l6 ^ L& y" B7 Q% U 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
' s0 H! m4 X+ a& L* c7 q 一般形式: G65 Hm P#i Q#j R#k$ a" b/ y# ~! L
式中:--宏程序功能,数值范围01~99; I- b9 s5 {" ~; T+ Q8 E; G
#i--运算结果存放处的变量名;/ t) w- ]$ i8 A7 K# b a# \
#j--被操作的第一个变量,也可以是一个常数;# {7 j! k: g& u- D" C& D
#k--被操作的第二个变量,也可以是一个常数。: S) {8 Y/ j0 q1 x7 I. |
例如,当程序功能为加法运算时:
( i" e! d% z7 U* z4 ]3 X" J% O程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
' O. o& \, S% [" f, Z2 f1 p程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102$ l/ h; O. E$ w& I
程序 P#100 Q#101 R15...... 含义为#100=#101+15 0 l$ b. L- ]' I6 j+ I) }, L$ N8 ?
J9 \6 D6 Y$ V3 p' c3 |8 u3、宏功能指令
0 [! u# ^- S u5 j
* \" K' P" v( [& p0 A(1)算术运算指令
# Y: G0 k: q$ E. C7 A$ R9 ]& d5 ?! a' R$ h0 ]% L+ i& Y
1)变量的定义和替换 #i=#j L' i$ D) ~) G# Y# a2 U
# e- R0 r8 J- r7 C7 `编程格式 G65 H01 P#i Q#j
q3 j8 Y% J6 {1 e* X例 G65 H01 P#101 Q1005; (#101=1005)
2 X7 U3 m1 I+ \& z4 W& @G65 H01 P#101 Q-#112;(#101=-#112) 5 z1 C2 w3 D1 V6 z% _4 ]8 ]( \
2)加法 #i=#j+#k. Z9 p, |2 ^& s! Y7 L
编程格式 G65 H02 P#i Q#j R#k
" R3 B7 G7 u& F1 `# e例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
8 ^' p+ ?& j8 c- G( [3)减法 #i=#j-#k+ ?0 ?: Y# j1 [; Y
编程格式 G65 H03 P#i Q#j R#k5 \2 r) `3 G e; J- Z0 {
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
1 B6 s) i V0 s# ]9 b' E3 I7 d4)乘法 #i=#j×#k
* u$ R' `$ M. y0 k, g: K1 T- }编程格式 G65 H04 P#i Q#j R#k
0 n `+ u5 ?0 c: b) t% L" c4 v例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)9 u6 N$ |7 y9 @& Q# D# l: I0 ?
5)除法 #i=#j / #k, u& M: n0 _) _8 |
编程格式 G65 H05 P#i Q#j R#k) @$ Q& T# y9 H; T! m% b0 W% i
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)7 \( n1 I* a0 w' Y$ v
6)平方根 #i= . h8 |& E: a! \* C
编程格式 G65 H21 P#i Q#j
, S5 D3 _$ ^+ I- N例 G65 H21 P#101 Q#102;(#101= )
3 ^4 B& y+ Y. V& R# O2 A7)绝对值 #i=│#j│
. l, M4 l) \1 Y* A% J编程格式 G65 H22 P#i Q#j
8 z4 K0 t$ P# r. s) J例 G65 H22 P#101 Q#102;(#101=│#102│)
+ ]3 f5 ?# s R* ]) \8)复合平方根1 #i=
% t) d- v. ^5 U. s编程格式 G65 H27 P#i Q#j R#k
! e* ]# W6 _) @1 s例 G65 H27 P#101 Q#102 R#103;( #101= 3 n6 O) ]% j' S/ K% p
9)复合平方根2 #i=
9 v1 ]: A' O3 X' a& l4 j8 Z% k编程格式 G65 H28 P#i Q#j R#k
% l8 Y) v* @; C例 G65 H28 P#101 Q#102 R#103
! A+ g( N# a3 w6 q% E+ m6 X+ a1 x$ P. {7 k5 k+ m, R
1)逻辑或 #i=#j OR #k
" R. b+ ~6 ]7 }* Z编程格式 G65 H11 P#i Q#j R#k
- o5 T( ?' J; h8 P例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)4 v5 h# B: m( S( Q
+ ~9 ]; o4 N7 I* ^! Y- T7 e2)逻辑与 #i=#j AND #k
1 J6 p: _+ G: w/ P/ q编程格式 G65 H12 P#i Q#j R#k
$ g+ `( b! R8 k; G4 f3 J3 w1 n9 f例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 $ s1 y. ]1 H) e, U+ R* \2 }; @
, k% F2 G- G O/ Y: l
4 D( b+ ^: L4 U, ]- m% h
5 U6 S& P4 l$ G4 `% g
* {! f* `, A; W7 g(3)三角函数指令
) v& z" o) K8 }) F& o+ ~& h& p/ q/ T. {
7 J8 X* D# F2 y: i8 r6 N+ R* v' [: t9 {9 S
# ? _; S0 I, V1)正弦函数 #i=#j×SIN(#k) ) t' R2 S) ?2 f! y# ~
* F9 a r- Q) \编程格式 G65 H31 P#i Q#j R#k (单位:度) .
; z1 ^! r2 Y5 s }
7 T' z3 f Y- G7 ?7 w# G2 F例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))! r% o4 a; |2 c4 i% u
2)余弦函数 #i=#j×COS(#k)9 M; |+ @% o+ b7 d5 |5 F0 y
编程格式 G65 H32 P#i Q#j R#k (单位:度)
# {* z5 _) }% x& W2 l例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))$ Q0 F2 q* A5 S2 m6 ]
3)正切函数 #i=#j×TAN#k
) A$ C! f. I7 F* z, g3 d( r9 ^编程格式 G65 H33 P#i Q#j R#k (单位:度)% f8 v. D7 K% h; E ~
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
( k& E2 r9 D* a/ n$ I, f4)反正切 #i=ATAN(#j/#k)
6 B) X: t$ E3 ?& I7 |编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
6 F% {- p* \& [$ o/ ~例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)% k8 N- i* N$ I
& ^) X1 }' N" E1 c2 r: g2 u# |1 r; M
8 M- D* U7 b7 g3 ]' x
: |- p2 s& \/ Z(4)控制类指令. N7 z$ k$ r/ ]; b* O4 L" K W1 Z' q
+ f1 f, c8 ^0 D
4 i! Q3 r- K9 r: i: v; i8 ^
+ V5 {' A( i" j/ {2 g编程格式 G65 H80 Pn (n为程序段号)
9 y4 _/ G! X/ a! j例 G65 H80 P120;(转移到N120)
, Y. ~8 T& |3 }0 n1 u9 ?( F3 H1 E1 ]2)条件转移1 #j EQ #k(=)
7 K" p: |& i4 s0 @& m编程格式 G65 H81 Pn Q#j R#k (n为程序段号)+ E1 u; O; m, n+ K1 ?9 A
例 G65 H81 P1000 Q#101 R#102
" p5 P+ K/ p5 }7 d" I" J6 K |当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
1 K* t+ l5 q, J. Y1 T/ P3)条件转移2 #j NE #k(≠)
( I# Z" m4 {6 x, H6 q: V/ [编程格式 G65 H82 Pn Q#j R#k (n为程序段号)( W0 c: p2 h8 M' E: a- I {
例 G65 H82 P1000 Q#101 R#1025 ]$ {; E# v" S# G- v
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
, g" m7 Q4 A v. T4)条件转移3 #j GT #k (> )2 F1 ]/ |3 ~9 u, |+ V3 E* K
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
8 i0 C7 j" \& E$ q. M0 H* n例 G65 H83 P1000 Q#101 R#102% F( r6 y8 V" [ p. N6 I5 g
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
# A9 E: m2 D# b( u, v' L5 }' t& d5)条件转移4 #j LT #k(<)
' ^2 \2 e* c: |5 B2 e编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
, A8 V5 Q& ^% Z. t例 G65 H84 P1000 Q#101 R#102 2 c( J% Z" w1 i# Q; M& x# ]
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
( U& |* Q# z4 @" m6)条件转移5 #j GE #k(≥)
" o. C W) z: a4 p- `编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
9 S) N# r0 a: x7 w3 ]& H9 A. l' R例 G65 H85 P1000 Q#101 R#102% w' t4 o' j3 D( l0 ^% r
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
, R j) x2 s: E, k2 y$ \2 v. g7)条件转移6 #j LE #k(≤)
7 ^' B, b# U, _编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
, C, |. t6 H! d& \6 J例 G65 H86 P1000 Q#101 R#102
. ]# r$ ~9 q* C, s9 S( h当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。% ~7 s1 Y9 m3 U6 t
3 t7 R% j) N2 z) S1 i. l: }, T* r
4、使用注意' X! V: _( c! T" X- j
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;, ^$ s) u0 q0 s2 Q* a6 z
(1)由G65规定的H码不影响偏移量的任何选择;3 D0 c+ z* K% I( y% x& l5 q5 @
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;: K% u3 \/ w6 y" x6 X# X
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
- Q1 v# P( z4 N8 {(4)转移目标序号可以是变量。
2 j2 [ Q( a3 X* d5 K3 Y; i8 q. ^3 N! k |! c6 ?3 k y
5、用户宏程序应用举例 :
/ ?. F* A2 e5 A$ h7 e! M% z
# }; [5 w8 z$ C W( x用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
8 T, V, r; s6 A9 m+ o1 u. b. @
) }+ |% U% j' o使用以下保持型变量:
6 ]. B2 v, ]- v#502:半径r;
3 e% D9 c- o P2 Y* C$ Y: y c#503:起始角度α;
# V7 L' N E8 d2 Y2 S- v#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
% w+ L/ @4 L8 B M$ ~; h#505:孔底Z坐标值;$ {' p c/ X* m5 l1 a) [/ b' ^
#506:R平面Z坐标值;/ Y8 A7 ?' t1 X) e4 f
#507:F进给量。 : x* ?! e1 s0 k( z0 {5 b( X
使用以下变量进行操作运算:# {7 U; U9 s; S4 e
#100:表示第i步钻第i孔的记数器;
5 Y4 m, ~8 n' g( m2 e#101:记数器的最终值(为n 的绝对值);$ x% V, h3 \7 ~( N% B. c! h' f. I
#102:第i个孔的角度位置θi的值;
. [7 C7 D- O! t' N) k( \$ I7 F2 T#103:第i个孔的X坐标值;& A+ O# O* S5 k: E5 R# R6 l/ f
#104:第i个孔的Y坐标值;
% M9 w F+ ~1 Y% B6 p! Y用用户宏程序编制的钻孔子程序如下:
9 C4 K! z0 {, S9 H: T4 HO90102 W* `) f- x6 h8 y2 }4 P
N110 G65 H01 P#100 Q0 //#100 = 0
" ^+ W' l3 Y" }/ Y& [' hN120 G65 H22 P#101 Q#504 //#101 = │#504│* m' S8 u9 A0 Z! h; ?- ~- j- }
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
: Q$ R f% n3 P/ QN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5049 F- t& D/ L8 j1 S4 k
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n# w0 ]+ q# v( f. G4 d5 y3 g9 t
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
$ T: c6 U/ \1 \/ ~9 _N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标9 j4 H2 r, ]- F
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)! G+ T. ?; O- u- f) Q
N190 G00 Z#506 //快速进到R平面
. G* _: z3 _/ `6 EN200 G01 Z#505 F#507 //加工当前孔. E' `; \% T" X+ _# w
N210 G00 Z#506 //快速退到R平面) j$ @: E6 T* i6 w
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数- {. B0 B2 c4 f0 m1 k
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段1 P. g4 m0 Z: J, y1 W
N240 M99 //子程序结束 / ?! J4 t# }* R" E! d3 w2 V0 n# P( t
J" _' b9 B1 d' H: I+ D
$ P/ i% a$ \+ I7 K+ Q
; R8 l5 R& @3 i' H( r6 o. E调用上述子程序的主程序如下: 2 K8 J$ Q# X8 g3 h
O0010
( n0 G/ F ?2 ~# z2 EN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
1 c/ y, y+ Q7 u6 JN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔' s$ a9 V: j% r( O4 J
N30 Z20 //抬刀) _/ {1 ~* _; ]% `
N40 G00 G90 X0 Y0 //返回加工坐标系零点
' w6 L1 q1 F, b( [; AN50 M30 程序结束
+ ]; c( b c; z0 y( `' |/ R& k6 Z设置G54:X=-400,Y=-100,Z=-50。3 R* O: V: r/ Z! _$ |$ n2 G( X& w# O
变量#500~#507可在程序中赋值,也可由MDI方式设定。
' F; {8 k$ B1 p" Q& d3 q& {2 {7 d8 X" {- ]/ f0 P
B类宏G656 c0 b" @5 k } U4 a# ?
! w m! M" P) t0 b/ A简单调用(G65)( t8 Y2 c+ }) d& ^- j3 n% e* |
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。! B8 Y4 G( |# R0 I* e9 C3 v
格式 G65 Pp Ll <自变量表>;
: r- _. T6 `0 M7 V- G/ P 其中: p 要调用的程序号; L7 B- N( T9 G
l 重复的次数(缺省值为1,取值范围1~9999)
6 W% m( w& I: J- g }4 c 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 , r3 g, t% `7 }: t
的局部变量。- P! j! Z1 c: V/ Q
3 K. d1 q0 O% j# Z3 I. F( H
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:' S: Q( M N& v6 Y
9 B- e. d7 l; Y; x" w
地址 变量号 地址 变量号 地址 变量号& w) f3 E3 z) O3 ]5 C3 \4 v
A #1 E #8 T #20) R) [! i/ s N) y/ ^$ _+ M% D
B #2 F #9 U #21* L: G, e" |$ ?9 b F s, Q+ a
C #3 H #11 V #22( ~- Y* C; n+ l8 F' m4 K! ]# b
I #4 M #13 W #23
# B+ f$ j) Q1 ~J #5 Q #17 X #240 F$ l9 f2 Q S' o: z8 r
K #6 R #18 Y #25& x, h4 O7 g' V
D #7 S #19 Z #26
( a. y2 L- D% p2 `. F☆ 地址G、L、N、O、P不能当作自变量使用。
* k! m. z+ ?& F$ U$ B☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。/ [: g: j' @: f- q9 u
! u9 P/ {- |) J 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使; i5 I# y; z) ?6 {( q5 E
用的字母自动确定:
; W# X: C* i. p. L. R1 N9 u$ \地址 变量号 地址 变量号 地址 变量号
0 F. d. X# ~# J7 J" w( OA #1 K3 #12 J7 #23
: [2 ]& C- f6 o9 E) j6 y5 eB #2 I4 #13 K7 #24$ a: R; A, I0 y/ j# f
C #3 J4 #14 I8 #25
; N7 l, ?2 g' {) VI1 #4 K4 #15 J8 #26
6 B2 y* O6 H1 r; F6 QJ1 #5 I5 #16 K8 #27* u" C% Z3 ~3 G! @7 W' |
K1 #6 J5 #17 I9 #28
" u1 r$ X, M( {7 a8 fI2 #7 K5 #18 J9 #29' O* a: S+ l6 O5 R- Y
J2 #8 I6 #19 K9 #30
; q3 @' M2 {0 i" kK2 #9 J6 #20 I10 #31! r0 o# L4 w6 \9 d8 p: }/ _1 ^
I3 #10 K6 #21 J10 #32
+ H5 I2 ]9 |. e; N& @& t2 `( GJ3 #11 I7 #22 K10 #33
; s8 U: k& x) o☆ 在实际的程序中,I、J、K的下标不用写出来。+ P7 _$ p: o$ A( p- h
注意:
`' v' {. ^: ~8 Z3 r; ?1 K☆ 在自变量之前一定要指定G65。
7 _% o- B( y8 S. }☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。) _6 {- f9 g: a# v J9 `& i0 R
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
& _& D3 G; X7 h" ]% f☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
) R/ {. d5 B/ P4 _$ Q/ U) s' O G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
1 O0 [9 h4 h( `$ G6 l之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|