|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 3 ~% Y2 t( e0 l( }4 g5 B! f
详解A类宏9 X9 g0 D) f* o( ]% J" a: t+ k
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。8 Q3 {# v% M* o) w7 @8 Z! y6 S
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。+ P0 |& J; x7 W$ o: V; C
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
3 R3 u, l/ S. c' R1 M4 ^ 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
8 ?* E: a) k! v% |4 [$ C 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。3 \$ Y/ ], A: k8 ]" o4 ]: q
1、变量+ _$ j/ {' J% d
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。* y! y) n2 P1 K- w
(1)变量的表示
1 Y& W8 Y k7 t4 [# G, R E$ r变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)( u/ @) }. ^" `+ g5 V+ M
例:#5, #109, #501。
7 f& c4 f. r9 s% I(2)变量的引用
, M. `+ L1 z4 a4 u' u5 n' J! P% W% R 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。2 w# z2 n/ m: } s. p# k8 ^
例:对于F#103,若#103=50时,则为F50;5 u. {8 F P' z9 r" [" q& a9 O$ |
对于Z-#110,若#110=100时,则Z为-100;. |8 i4 ]; }( h5 C
对于G#130,若#130=3时,则为G03。
5 S' Q3 p* I6 I, y1 O7 c(3)变量的类型
$ x5 r/ }, k' ?+ \8 v% s- c 0MC系统的变量分为公共变量和系统变量两类。
. Q. x w$ s9 e" A/ {1)公共变量 6 ^) o$ i9 R2 p1 _$ y7 U0 y5 k1 S+ k
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
8 N* g' P- l' D; u* }公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 ; d1 C# e8 i9 |& ?- V
! T+ w# M+ `6 D: A) B4 o& g
7 \. P5 G3 A" x* W, \7 X
% R9 }* X3 F4 M( `) Z
2)系统变量 ' [4 t* ?6 O s$ ]' Q
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
5 P$ w [5 ?/ E 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
2 U' n# O0 A: C( y 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。9 R) {% N; i! k
2、宏指令G659 ^- ~/ n! s$ U! k& o% T( B, |
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
4 E& p* A0 W/ r: J3 m$ f/ s" e 一般形式: G65 Hm P#i Q#j R#k; D( C! i8 B* `/ z9 a: M. M* J
式中:--宏程序功能,数值范围01~99;# R) W. x* U ^+ {
#i--运算结果存放处的变量名;& w; ~& X! f6 V" N8 j! {
#j--被操作的第一个变量,也可以是一个常数;) r! a1 |5 @2 Z: p- \- [8 e
#k--被操作的第二个变量,也可以是一个常数。2 h; C2 U/ W. Q# {# N
例如,当程序功能为加法运算时:, L( T" R+ W% n4 I3 w- L
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
, C' h7 i- n+ T* x- P" \9 P程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1026 Q( a/ E8 I- }( S) G
程序 P#100 Q#101 R15...... 含义为#100=#101+15 / X$ t( F, L7 x4 q2 n' X4 c) `4 @
! [* g; G2 E. J4 Q; F. q$ u3、宏功能指令
5 H, _2 r9 z4 z
0 R9 j( c4 a$ q: w(1)算术运算指令
! t) E+ G b" O: J6 U, C
7 U- B1 s3 |8 [9 T- f R1)变量的定义和替换 #i=#j
6 }$ g$ R* w% r5 o! k) I3 a& ~7 E$ T" A* I# ^. x
编程格式 G65 H01 P#i Q#j% H" R5 k2 G6 o0 u1 }
例 G65 H01 P#101 Q1005; (#101=1005)
/ Z5 j6 [9 r7 m9 rG65 H01 P#101 Q-#112;(#101=-#112)
0 g3 M: P( {: |0 x n/ T9 H3 q7 C2)加法 #i=#j+#k
- n# Y/ O1 D' M% S+ j/ S编程格式 G65 H02 P#i Q#j R#k
# m, M( |0 ~( r# w/ {/ G例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)- P2 N- ~; P- m% S3 N/ }
3)减法 #i=#j-#k
. J h2 b( t; M6 ?) _; v$ c) }编程格式 G65 H03 P#i Q#j R#k
0 b( ?9 |9 C1 h例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)6 z3 R( W3 R; L3 Z5 I! g. S$ t
4)乘法 #i=#j×#k
3 U4 d# N6 h; q8 _编程格式 G65 H04 P#i Q#j R#k3 @9 T1 t9 `8 w0 [- ^6 ]' `
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)( P2 u* F o* Z% Y! g9 c& Y, A( D* A
5)除法 #i=#j / #k7 l: j+ b0 `% S% Y; F
编程格式 G65 H05 P#i Q#j R#k
" w* H$ m9 Q9 U# g; I例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
$ i8 i- `' E S# G0 g: a6)平方根 #i= 7 c# g& j8 I0 z( V1 H
编程格式 G65 H21 P#i Q#j
0 C# X* r6 ]* _1 U8 I8 O% F& ]6 f例 G65 H21 P#101 Q#102;(#101= )
~8 j$ o) k' u7 ^' M% q) o# Y7)绝对值 #i=│#j│
! a. Q2 r7 d% w编程格式 G65 H22 P#i Q#j
, f7 C0 x5 y0 s t/ @% A4 [例 G65 H22 P#101 Q#102;(#101=│#102│)
6 l+ b8 H0 p/ p* N4 R% `8)复合平方根1 #i= % X8 \$ f' J7 b4 F4 l+ U
编程格式 G65 H27 P#i Q#j R#k! v j' K8 ]; m
例 G65 H27 P#101 Q#102 R#103;( #101=
* f& X* Q. u7 k" e% E7 x' t9)复合平方根2 #i=
5 m) Z6 m/ f7 U, }编程格式 G65 H28 P#i Q#j R#k* R$ X _! N3 {
例 G65 H28 P#101 Q#102 R#103 2 U; F( r0 d# o, \2 }9 _# b' ~: m% H
5 `) w$ \3 `9 u9 h% p
1)逻辑或 #i=#j OR #k7 l( B! R! v/ r0 |; n" T5 g
编程格式 G65 H11 P#i Q#j R#k
X& d/ Q5 m |例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)0 W" F. Q7 v9 ^4 ?5 C9 a) s- O6 b
" c: w' y5 L% R) J6 e) @/ |1 q2)逻辑与 #i=#j AND #k
, o3 z! C( }9 S! k) y( }2 j编程格式 G65 H12 P#i Q#j R#k
9 s9 K/ h8 o# w+ G0 X% r例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 0 R8 D: h _5 { K% K4 r
/ R. Q8 M! a6 u- c4 i, o
1 c* M& F; q; D: k5 ? , K+ b- P6 q# E! L
$ c) C4 F& _& v7 f9 P" h
(3)三角函数指令
$ H: h5 L4 p3 F! t9 P( y+ |+ m" f; a! m+ d/ \& B- @, t' V N" F
3 @7 j) k: g) V, W
! w; R/ A# g7 {# L" H4 h/ k/ }1)正弦函数 #i=#j×SIN(#k) 0 z! y6 U9 E) ^4 y! w
( ~( f0 d; x/ W. d
编程格式 G65 H31 P#i Q#j R#k (单位:度) ." H E4 X5 w, Q) d% X5 ?. R' d
* a, K5 i+ }$ ^例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))- H' F5 ^6 V; c
2)余弦函数 #i=#j×COS(#k)* G9 y5 y9 W8 }" p3 c2 _/ \
编程格式 G65 H32 P#i Q#j R#k (单位:度) A% x0 }0 I' e+ I" {. {0 G# l# R. s! z
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
! T6 o8 d2 F7 v9 ]5 F+ Z3)正切函数 #i=#j×TAN#k
+ ^7 k& ?8 [/ }1 I1 n# V1 y编程格式 G65 H33 P#i Q#j R#k (单位:度)1 s8 x$ n/ f/ ~
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)), k, T9 `/ }# U, T& ?! ]
4)反正切 #i=ATAN(#j/#k)
/ k- Q$ C! I, d6 E3 j, h( x编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)* j. X1 O9 _8 H7 @' |% t
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
5 ^4 a+ N' i, j2 ^! V) G
8 u$ w( l3 l: T. ^1 ~3 f# M v7 ^7 {2 Y" B# P6 C- E; ?0 { O
& z( ?6 f" I% J$ r, y: a/ c2 S9 P3 u% n(4)控制类指令4 z/ s4 |- ~0 z( M: t2 H* h$ ~
# S4 C- S8 e/ |
& E5 z: j# h3 E5 Y. C
( M) p6 q8 q! r- h, `+ w8 M编程格式 G65 H80 Pn (n为程序段号)
( ? p; [8 Z* Z5 {5 q$ _2 Z( M例 G65 H80 P120;(转移到N120)
, L, g. F: N' l0 D/ l- F+ i x2)条件转移1 #j EQ #k(=)
0 g8 v% _0 q7 q$ a编程格式 G65 H81 Pn Q#j R#k (n为程序段号)7 Y8 ~ R* H, Z X) v' |/ v
例 G65 H81 P1000 Q#101 R#102
# m0 K! T% \ ~ }1 t- h% B p当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。7 y& R D0 C2 F: ^# n
3)条件转移2 #j NE #k(≠)2 v) m/ \6 z9 v3 w
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
; b F4 P8 E- n例 G65 H82 P1000 Q#101 R#102" E/ m& L1 u8 i
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
z/ [- o" H1 n3 n- U f4)条件转移3 #j GT #k (> )
9 \- S: V6 C( F5 h0 l& c( b/ i编程格式 G65 H83 Pn Q#j R#k (n为程序段号)" u$ j% w& y" g! ^* R
例 G65 H83 P1000 Q#101 R#102
/ `: ^/ A6 i1 P当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
+ t/ [' i! `3 y+ ~, j: u$ o, d: \5)条件转移4 #j LT #k(<)) E' Q2 R* `( k. D' @
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
4 e1 n9 {5 w3 e1 Z* o* Z例 G65 H84 P1000 Q#101 R#102 1 M) F, ]8 N- x
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。& n$ x* z) A% A0 i# H
6)条件转移5 #j GE #k(≥)2 \7 B% ?+ [) P7 `
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)3 U4 v3 r5 w' C$ q& ?. A$ _* `
例 G65 H85 P1000 Q#101 R#102
7 j# Y8 P, B8 |当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。! r8 b. q/ ~ g! [" |4 Q5 R& _
7)条件转移6 #j LE #k(≤)
0 Y7 G: Q" o2 K: o编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
' H0 n2 z% d# h; B$ c例 G65 H86 P1000 Q#101 R#102
! y" ]% u: c2 w1 T- g* t# i当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
0 v+ F$ b4 `" F- m6 i
1 O% Q1 Z& Y7 E4、使用注意
1 D E6 i) U8 x7 N* a 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
) u* Y" b9 K, s' ^( z(1)由G65规定的H码不影响偏移量的任何选择;& p; S+ A$ y/ ` a3 i; k6 n, g. T
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
5 ], V6 v6 P5 j9 y4 k# T; I; B(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
' C: W! H/ S4 ], H; Q9 i% w. o- R(4)转移目标序号可以是变量。 5 S- a) w; {+ s3 @( Q* s
5 M& W2 {- |3 Y9 s, |% o
5、用户宏程序应用举例 :
' w: O) T4 t3 F9 O- g) o! O( e! d" \. I3 \
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
1 M; l8 z( ^* z3 r) n, z! c% y% Z) H# C
使用以下保持型变量:
! K, z t/ J) P/ S/ N3 N) V' A#502:半径r;
/ o- Y$ q( u- }' g7 }4 B5 a1 L! S5 o#503:起始角度α;
4 ?) F& `# I4 D& w+ o% O#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
& E* F1 J! k6 k; k#505:孔底Z坐标值;
{! S" m0 f, S" v#506:R平面Z坐标值;
) x" r8 Q; J2 x; W, z$ v1 H#507:F进给量。 % T8 P6 Y d% D
使用以下变量进行操作运算:
# w9 K; b) e# y; d#100:表示第i步钻第i孔的记数器;
4 m2 y* m) ]. I- S0 x#101:记数器的最终值(为n 的绝对值);
; |( }+ i7 l1 H G2 g7 \#102:第i个孔的角度位置θi的值; 0 g9 [; w C- p; T6 b
#103:第i个孔的X坐标值;
; m" ^ I1 ?, m2 [: t# |6 V#104:第i个孔的Y坐标值;7 c/ K# ~; [% I1 ^( }$ X2 A
用用户宏程序编制的钻孔子程序如下: ! T5 d% ]/ Z$ Q& ?: N/ ^; O' D
O9010
4 z9 z7 g1 x, U* d2 SN110 G65 H01 P#100 Q0 //#100 = 0
! x8 S& C- m; UN120 G65 H22 P#101 Q#504 //#101 = │#504│0 w# `' Z. m* }; u
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o: A6 |# N2 ]$ i7 D+ e/ f, j# n+ l
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
, W' [- F7 _5 r# q/ Q$ j' A" [- AN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n$ K) ]& I. f- \0 X) R
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标% r: H' B" P( w5 [
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标' q, t& h" ^& \2 f7 e" G6 j! d
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)2 ?7 U8 m' o7 C8 z; g6 W. Z
N190 G00 Z#506 //快速进到R平面
2 P* j8 `- k: ~" Q. wN200 G01 Z#505 F#507 //加工当前孔
4 f) ?) s, @5 U; eN210 G00 Z#506 //快速退到R平面
' V# s# _- q; g7 r% a" wN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数9 a- [' h; G ^
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
' z9 G0 E! J! R. ]% d$ L9 ]N240 M99 //子程序结束 6 l( \- g# |( R, b2 u9 d
' N# W6 [. G0 w; c5 t
# R/ y% H. Y6 g, `4 d# G/ B2 v9 m) G1 x$ ] j( ^
调用上述子程序的主程序如下: " U/ I6 m# f3 }, {) i" j
O0010
5 [0 ~: b9 |! g3 V0 ]4 y. nN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系' f$ S2 z6 R* j% v/ R7 m
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔) B$ S# b3 G. u) b+ s: E
N30 Z20 //抬刀9 Q; R( w2 h% a3 p
N40 G00 G90 X0 Y0 //返回加工坐标系零点
7 K0 i% h; _) dN50 M30 程序结束. h+ m6 y: S5 ? C& [& |
设置G54:X=-400,Y=-100,Z=-50。
( H' T2 C( T6 S8 o变量#500~#507可在程序中赋值,也可由MDI方式设定。 " K F8 y$ Y0 p/ |
; u: ^! O/ ~$ y" D, [. V. R3 r0 Z
B类宏G65. o4 A; \# N3 M+ T2 O
' n- J$ p: V+ T5 M4 y简单调用(G65)! W, j& L% |: P' i
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。# D, U y* [$ d7 `9 ~# R% g, F
格式 G65 Pp Ll <自变量表>;
7 W2 e1 A6 P5 w7 {, a0 [ 其中: p 要调用的程序号
* x% B U1 D2 O: u. t l 重复的次数(缺省值为1,取值范围1~9999)( I3 u5 \; X% s3 {( H
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 / p, P# A$ T+ y( K" b
的局部变量。
& ~8 ~% O) z0 `' D8 E8 d
8 ?- G3 Q# ]. m, e; G 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
0 t% b @- c. y% f8 C& ~' P! c+ `
" u7 e. f1 H# A$ P地址 变量号 地址 变量号 地址 变量号
i$ I4 L' M4 v0 u/ ?A #1 E #8 T #20* F% I& N" |, x! r
B #2 F #9 U #21
4 p) L1 W% x2 CC #3 H #11 V #226 G+ q) N1 @4 X! J
I #4 M #13 W #23
. n* W! h% f5 `2 t: W& LJ #5 Q #17 X #24
" P8 ?7 o9 ]0 l3 f7 ?9 c. nK #6 R #18 Y #25& z9 U1 z- n# A$ L
D #7 S #19 Z #26
, d8 M; A1 i8 d. i% [! @☆ 地址G、L、N、O、P不能当作自变量使用。
* D7 U2 n( r2 O/ @* R7 q; J☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
* [! `0 [( y6 f7 T R' f; J 6 A3 M0 b q+ c
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使' x4 W% R, ^" B e' A
用的字母自动确定:
8 G) }7 J# `( e& h; X1 Y' N地址 变量号 地址 变量号 地址 变量号
; l' {1 S% H p" hA #1 K3 #12 J7 #23# ^ Q! l8 b, l1 k" ~
B #2 I4 #13 K7 #24
/ d# e; p# a" HC #3 J4 #14 I8 #25! e3 d0 _1 ~, k+ i2 \, q
I1 #4 K4 #15 J8 #26
3 F$ x" G; o" u7 b# r0 w8 fJ1 #5 I5 #16 K8 #27( [$ z. P1 }) G/ Z7 H: W2 }/ L
K1 #6 J5 #17 I9 #28
$ c) d* W" K/ X- Y& QI2 #7 K5 #18 J9 #29
; s' ^) ~: A! K% D/ r f. J8 RJ2 #8 I6 #19 K9 #30/ J) K0 l' \8 X; X$ C. w
K2 #9 J6 #20 I10 #31$ b, k3 \' Z+ {& g) h
I3 #10 K6 #21 J10 #32
/ X& a0 K$ [+ \1 ~J3 #11 I7 #22 K10 #33
; M2 M% r e; U% r' }☆ 在实际的程序中,I、J、K的下标不用写出来。- R8 ~/ R7 ?9 R/ _3 {
注意:8 t3 c! z, p/ J. Z
☆ 在自变量之前一定要指定G65。' C, i" s2 c% P( v7 J& o& z
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
0 c6 Z- A# J: c, _2 q☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
4 M& _5 Q* `' G/ O; r☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。7 q' Y( Q. R9 H( [
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环 O O; d) y6 m, J) E* L/ [4 v4 ?
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|