|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 # j; q+ a0 G# y0 V' a5 o, C
详解A类宏
0 V/ m" Y q1 ~- J* ?2 K" ?( ] H6 B分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。6 D/ @* |6 J+ ?% D# g/ Q9 _
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。, w+ u& P: N6 J
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
+ w0 p, z# \2 ^+ U7 W! Y 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。2 w; k+ i/ z3 Z7 `
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。9 c, r7 z0 ~+ ^
1、变量
/ D; y# b0 _* R4 d$ e6 d, U+ q' o 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
9 a" M/ ]7 O+ x" t# w2 L. a(1)变量的表示7 M3 i3 s6 W. k/ s- ]
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)" P x; Y3 ?- x3 C8 z9 E
例:#5, #109, #501。4 N$ Z: h6 @& ?
(2)变量的引用
9 n! v0 f$ v4 Q1 O; }1 u0 n8 @ 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。0 T6 p3 _# @& r3 o6 F
例:对于F#103,若#103=50时,则为F50;
+ C6 l* y7 D* n对于Z-#110,若#110=100时,则Z为-100;; r" l, t3 d9 @- V$ m) a# z( @8 e0 r0 s
对于G#130,若#130=3时,则为G03。
/ `1 C9 q! Z4 V* R% \( r(3)变量的类型 5 E0 G( u+ Q5 z$ @
0MC系统的变量分为公共变量和系统变量两类。' e( @3 D4 G# C+ s/ _
1)公共变量
7 l: m _7 u* _! E7 {9 C/ x3 _ 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。. d9 u( F q! V$ M5 ?* z! n
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
+ k/ `3 R0 X3 T8 ]4 f3 n" w/ r& A, e5 C( n3 x- z% U
7 m' t! J3 ~! Z1 a, q, B7 R0 B1 Z& Y, t& ?& P
2)系统变量 % i; U( a. E: }$ y% V) G
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。5 p2 `8 W1 U& z2 l% r; T
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
7 r! s3 ]5 y) _- q7 G9 C% q# b 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
* Z, r4 ~$ P8 i) J7 N5 u4 A2、宏指令G65
1 r* y" E9 E* w# s- ]$ a' Y) Q 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。4 [' i: y! m0 O0 {
一般形式: G65 Hm P#i Q#j R#k
! q' t/ f( @0 b( B; U6 B: |# M式中:--宏程序功能,数值范围01~99;7 l) k5 d" B% ~8 z
#i--运算结果存放处的变量名;
( ^: @5 _7 U' a3 i0 V, Y#j--被操作的第一个变量,也可以是一个常数;, G. W: x+ v+ I
#k--被操作的第二个变量,也可以是一个常数。
+ f8 w k7 k( T0 T3 K6 U5 J/ @. w例如,当程序功能为加法运算时:# J/ v8 ~; T' v' i6 c O
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
, y. p7 ?; |4 R# V, d7 R程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
) q& u- d9 ?0 \2 ]% @程序 P#100 Q#101 R15...... 含义为#100=#101+15
h8 Z3 l; |+ ]. Y7 `1 Q9 ~6 S0 W! G& o; y
3、宏功能指令 6 f7 T" x! W n+ `
: P7 ^' `. q, i# ~- x' H' ^
(1)算术运算指令 , I) U% Z' N4 }% M3 o
. F' n) j. [5 b( a# B9 W% p6 ]0 `. U1)变量的定义和替换 #i=#j , y( k7 `" S" ?8 t/ F' K! D$ {
) B, l4 F2 v8 m; V2 @
编程格式 G65 H01 P#i Q#j& D k. r4 H+ v/ f7 G6 r
例 G65 H01 P#101 Q1005; (#101=1005)
: P t2 d4 h: W- S0 {" YG65 H01 P#101 Q-#112;(#101=-#112)
7 h6 Y5 y* K& Z! P2)加法 #i=#j+#k
4 J: i$ n) ]% e: c3 j4 d* G编程格式 G65 H02 P#i Q#j R#k ' d5 ?5 T+ p9 w% x' J5 w
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103) l$ H$ f! d& N: ~% v
3)减法 #i=#j-#k$ M5 Z& Q% I2 J. v
编程格式 G65 H03 P#i Q#j R#k k& a7 G" f: o1 ?+ b; |
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
+ B: J1 C8 C0 ^/ o, j/ n, C4)乘法 #i=#j×#k1 H/ z8 n" ~8 T% `; r6 \
编程格式 G65 H04 P#i Q#j R#k
9 ` h0 O( m0 ^, ~& h2 T例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)/ g6 B3 d' [2 I2 J! ^
5)除法 #i=#j / #k
3 g5 m/ T# D- H# U' i0 T% U1 q; U2 m9 W编程格式 G65 H05 P#i Q#j R#k
" j# g; e# e, u8 T0 }例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)* J) F: J+ \! m' F! j! z* g# G: L
6)平方根 #i=
% L, L' z2 m: p3 y& O6 o! K: Q) m2 }( }编程格式 G65 H21 P#i Q#j
) [ p, s! H$ s5 @例 G65 H21 P#101 Q#102;(#101= )2 Q; C0 X. P J
7)绝对值 #i=│#j│$ p" |! g6 b' m/ a7 _7 n! w: Q' X
编程格式 G65 H22 P#i Q#j
6 ?7 }0 X& s( Y例 G65 H22 P#101 Q#102;(#101=│#102│)
% R# c7 q [& q- [. x% R8)复合平方根1 #i= ) B# z: V9 D" \2 ?! C6 L& g
编程格式 G65 H27 P#i Q#j R#k
" U$ B, T" }, g; |8 @- ~例 G65 H27 P#101 Q#102 R#103;( #101=
9 Y' e& ?# v4 H8 T6 ]. X' `; Z9)复合平方根2 #i= - X. a& P' I, y, d0 x3 d! h/ \
编程格式 G65 H28 P#i Q#j R#k
+ N. R5 X" F. T/ z7 I3 G h7 J例 G65 H28 P#101 Q#102 R#103
4 K& w: c( d: f& N/ x! c6 X8 Q* k. n2 C1 y* `
1)逻辑或 #i=#j OR #k1 s% D T y8 K7 A( q
编程格式 G65 H11 P#i Q#j R#k) a( }7 w( \' a7 e# i" W8 X; u) A
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)$ m3 v, D: ?$ m9 `
7 P/ M% {% n" }0 D# p( O8 {/ `
2)逻辑与 #i=#j AND #k
+ K2 |- p5 \$ I+ u" W+ E编程格式 G65 H12 P#i Q#j R#k; q! T, E8 I' C) a3 P9 z7 M* [
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 4 ~' } [, p2 O( U: H: p+ B0 L
" ^" E. A+ g% h3 B- @
2 `! |6 q) Q1 v( @ , Q u% e; l. z1 w2 u; j; L
" D2 N( S. |: d(3)三角函数指令
# f- G% _6 d) z) ^9 p! s) y( \* X8 C% u
4 P4 j7 Y" j/ Q8 A% c& q9 ?$ m: {2 V; L" P) {% k
1)正弦函数 #i=#j×SIN(#k)
6 F8 d. M$ p) ~; j( u/ ?5 v [, m
`. \ g/ N" U7 W2 J编程格式 G65 H31 P#i Q#j R#k (单位:度) .) Z2 Y( f& |7 ]* r. e- @
h1 B' H; l! X" F+ b0 e例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
3 P# h, z4 A# I5 f. L2)余弦函数 #i=#j×COS(#k); \- I5 u: c5 z. n
编程格式 G65 H32 P#i Q#j R#k (单位:度)
) a+ u& I3 a1 o, c1 D8 ]& I4 E4 Q例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))# I- y7 K3 d) j$ ~ }9 S3 a
3)正切函数 #i=#j×TAN#k
6 L! e% c) g$ [8 h2 C0 H编程格式 G65 H33 P#i Q#j R#k (单位:度). h( [+ o) I# D/ s+ o; {3 p1 A
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
9 n: y, [3 G S2 ]4)反正切 #i=ATAN(#j/#k)
) z! _0 `6 q! @编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)% z/ n/ k3 E9 D
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
" R6 z3 {) E, V7 U' t/ |/ x9 p9 \* n6 H4 F% ~$ w
P8 ^' _, r3 t4 B9 `* P |- P7 L/ L4 Z; H+ h) ?; E
(4)控制类指令7 y; R" Q: o5 q
9 }" c! U: o/ [. \
* g! N. p: }$ [9 S8 [' `9 N
. r' F4 \. K; F: f4 M) u编程格式 G65 H80 Pn (n为程序段号)
1 m/ r# I. J4 W6 @" n+ Q; N: ^1 p例 G65 H80 P120;(转移到N120)' g' k7 ~0 S, O! H: s8 n
2)条件转移1 #j EQ #k(=)
9 m' l7 A! u$ A8 K编程格式 G65 H81 Pn Q#j R#k (n为程序段号); W# j3 ^, L5 D% n C
例 G65 H81 P1000 Q#101 R#102
) {2 u& {+ `" R" J5 t" y当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。% Y+ ^ G1 d7 v! m4 p# m `
3)条件转移2 #j NE #k(≠)) K. l/ F& Y/ U, U/ S2 x# m
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)2 N% G0 i6 `# b* `
例 G65 H82 P1000 Q#101 R#102/ s" R1 e" H5 [+ a3 t
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。 q4 } i7 W ?# I
4)条件转移3 #j GT #k (> )
I0 A2 [$ b# ?9 z) u, J6 G5 Z$ d编程格式 G65 H83 Pn Q#j R#k (n为程序段号)$ F+ J4 W" s% v$ |: A$ C/ K; ?
例 G65 H83 P1000 Q#101 R#1027 l- k8 \, L: K4 n/ z
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。; ^8 j: H- M5 n
5)条件转移4 #j LT #k(<)/ Z- w/ T2 Z/ ~+ I3 j
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
7 ]( h: }* B' u: m5 ?3 i. N7 q例 G65 H84 P1000 Q#101 R#102 , ^9 X, |' a- ?/ `+ x Y
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。3 O: N& S) x' `6 I8 J- v
6)条件转移5 #j GE #k(≥)
+ }$ V9 [9 s! P7 [+ }编程格式 G65 H85 Pn Q#j R#k (n为程序段号), ^6 C- B4 L% ]
例 G65 H85 P1000 Q#101 R#102
* S8 ~" w- V2 l' b7 b当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
. o) g# F# E: i0 M5 c: N7)条件转移6 #j LE #k(≤)
& Y7 j- V; B3 M% g+ ~编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
0 q2 @5 N; E. `! e例 G65 H86 P1000 Q#101 R#102& z A9 X) Z! c. ]3 d `+ Z
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。7 N! A) L. X1 k0 T$ q
$ O0 k% G% u$ t) x5 F. r! i4 _4、使用注意' F" `1 R' s: F& ?
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
% P; B% C% k( P- {" z( m(1)由G65规定的H码不影响偏移量的任何选择;
2 ~ B% g. I8 ]% V3 D3 @(2)如果用于各算术运算的Q或R未被指定,则作为0处理;0 }' {" M( F1 j' M; L, u
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。, d6 r3 Z9 B3 u5 ~* W4 l
(4)转移目标序号可以是变量。 0 o! _1 ~3 l! c6 ]) [
7 w" Z' C2 Q a0 W$ _$ f5、用户宏程序应用举例 : , t" O, I- U6 j
) b6 Q. [, I F; V用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 $ f- L; c+ ~0 Z& e- o/ I
1 K0 n, n6 \* n1 _
使用以下保持型变量:
# k1 }4 Y8 I1 \# `#502:半径r;
9 P. U& H/ v# R! G( Q#503:起始角度α;" g$ S8 m1 G9 T& F8 b
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;; S- L! ~5 ^+ A5 M
#505:孔底Z坐标值;4 x( \6 w. |# j# y5 w
#506:R平面Z坐标值;
& N% l" v7 F, i2 R#507:F进给量。 2 A" f& U4 V! Z/ r! R" Q/ O1 @+ L
使用以下变量进行操作运算:
" y7 u) N! ], E# N* T- d#100:表示第i步钻第i孔的记数器;3 M, z& k/ F9 m* c
#101:记数器的最终值(为n 的绝对值);
6 ?; d" U8 P) Y: ]0 y* e#102:第i个孔的角度位置θi的值; 4 e, G5 u; j+ \( @5 u
#103:第i个孔的X坐标值;
3 b. z+ o% J5 k) C& g: I#104:第i个孔的Y坐标值;" b, j, r: t4 q8 [1 f2 b" {7 Q
用用户宏程序编制的钻孔子程序如下:
1 J5 @6 P$ P' FO9010( m9 i, w1 d/ n. N
N110 G65 H01 P#100 Q0 //#100 = 0
; g0 `9 l! I9 Z! Y" KN120 G65 H22 P#101 Q#504 //#101 = │#504│
! |5 q, [/ `% l7 Y |N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o4 I! v" ?# O5 e% `" v% P" E
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
7 @% N7 ? Y0 D: XN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n3 r) B7 A. D0 D. k
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
/ J- c" Q( R# C2 \. K" ^N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标, d" n# t9 f) l! r+ e, v- Z) x! i
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面) F! p0 `& g9 }* F
N190 G00 Z#506 //快速进到R平面
" l9 L- S/ Z$ k8 }& ?* W/ |N200 G01 Z#505 F#507 //加工当前孔
( g, z) { q, ?0 IN210 G00 Z#506 //快速退到R平面
: y$ |& g3 ]7 ]+ pN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
- _$ N, [! m5 O/ N! yN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段! C j) V5 \8 I R% P5 |
N240 M99 //子程序结束 4 ~- K' R- Q9 V9 J0 e
: K" W m/ y7 A. {7 `
9 I8 W* h- o/ m& n! a5 p" N6 f* k: Q9 X8 a- U9 h* y
调用上述子程序的主程序如下:
& `! b; ]! V1 _ t) I1 E( [O0010
: c3 g2 m% @/ P" L. jN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系4 Z1 J T6 G2 b* H7 e0 m3 `
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
. o1 r* o: N# z# q5 h1 ?8 JN30 Z20 //抬刀4 b' i4 e( x" }- ?8 N
N40 G00 G90 X0 Y0 //返回加工坐标系零点
$ u% q S1 @" v2 n7 S$ BN50 M30 程序结束! y" ]" a/ W8 o: ?# G
设置G54:X=-400,Y=-100,Z=-50。
' l4 c) ^9 D* G, E* f1 M变量#500~#507可在程序中赋值,也可由MDI方式设定。 $ Q4 ?1 x) w1 N# ~4 s) _2 Q l! p3 O
6 Y2 T) t! x; H Q+ \/ e; ] I' KB类宏G65& h0 c0 |* c/ _
% _0 U' _; ~' P( J0 @) B/ T
简单调用(G65)- e% S, e$ u1 J: i8 Y& N
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。7 V) t5 c- }0 F
格式 G65 Pp Ll <自变量表>;5 _( \4 V) e. E
其中: p 要调用的程序号
( X# l b& {3 m; L k* c) a0 ^ l 重复的次数(缺省值为1,取值范围1~9999)9 i; E6 V8 O4 C5 X ` I9 G
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 - t% j9 o- ^% g x
的局部变量。7 D6 } c; I4 h, e, q
C7 {/ g5 x) n, \ 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
6 D6 z# N$ A. I7 y" I2 C& Q" {+ B, q+ q- z5 G$ w
地址 变量号 地址 变量号 地址 变量号
. s5 P m% m9 Q% n$ w/ QA #1 E #8 T #20, m- W/ E( i) _1 ?: \. M: I
B #2 F #9 U #211 ~, y" w3 E1 ]5 e3 j9 M
C #3 H #11 V #22 N( K0 ^: a, T
I #4 M #13 W #23) O* c8 m3 M6 \2 }9 W8 B
J #5 Q #17 X #24
3 V( [4 t8 f+ H6 a3 A; XK #6 R #18 Y #25
0 S1 k: X0 a7 W9 eD #7 S #19 Z #262 @" H; b7 t) \8 g) N$ E5 Q
☆ 地址G、L、N、O、P不能当作自变量使用。3 J8 C/ D, W: E# I m4 s0 a {
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。& @4 B+ C, L1 j9 a5 h8 k
' R/ H+ y C1 k- v$ a( l( p 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使( Y: @" N% [2 ], l: y5 V8 O
用的字母自动确定:1 u- \3 ~' I. ~$ q! q% I
地址 变量号 地址 变量号 地址 变量号
1 H! H. p* ]6 d% L9 eA #1 K3 #12 J7 #23, l$ @) X( f* E! b5 z
B #2 I4 #13 K7 #24( s2 s( }% Y) \: Q% A2 }: C, K
C #3 J4 #14 I8 #25
' {( ? B, S8 D; @I1 #4 K4 #15 J8 #26
9 G i# j: X3 }8 C- vJ1 #5 I5 #16 K8 #273 w# d; [6 G0 y, d/ }
K1 #6 J5 #17 I9 #28
& U/ F3 ]2 y+ N9 DI2 #7 K5 #18 J9 #29, u$ N! o Y1 K% C# y! c% a. r P
J2 #8 I6 #19 K9 #30
+ [. j) w; E" w- C2 y/ [; u( NK2 #9 J6 #20 I10 #31; v% [5 Q' {. i# d4 l
I3 #10 K6 #21 J10 #32
1 Z# C8 l3 W6 WJ3 #11 I7 #22 K10 #33
- u2 D `. n' g) L- I☆ 在实际的程序中,I、J、K的下标不用写出来。
- g4 ^1 F1 M8 v) F" A9 j注意:8 |8 G# K% S# _& B$ o
☆ 在自变量之前一定要指定G65。
8 r" v2 p& u+ G" O+ |☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。; r& u7 N/ @' w
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
9 f0 C& Q P% A8 A2 Q# k; J☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
7 P. o0 ^) P! d) R. N' }" I) J G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
t/ y& P! g8 [- Q. x之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|