|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 @/ l3 e6 v/ Z! O+ B% ]
详解A类宏, s4 u6 b5 R; N, d6 k2 _0 f& K
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
! y& r O- q1 D. N, f 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。% ~/ h |% |7 f) D! E
宏指令是代表一系列指令的总指令,相当于子程序调用指令。, S4 J$ X B- r
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。7 \ g) H/ q: M/ u
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
2 F3 v' M4 U- f: a3 l5 I1、变量, ~" f! o8 ?* l5 h' E4 ^/ g" F
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
! h: ~6 J# `" a4 \$ {5 }$ D: t(1)变量的表示* N1 ]4 y. Y( Y( ?% H6 ~( }
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)5 C# e* ~$ i! @& S( S+ M( i U
例:#5, #109, #501。
1 e9 x. Y7 y* n* G F5 U# D* ^8 x, p/ }(2)变量的引用1 p$ D+ i6 m6 u3 C
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
/ D+ f& O) T, v4 w2 K4 m* b例:对于F#103,若#103=50时,则为F50;
3 d5 y1 a& Y; N) `, V对于Z-#110,若#110=100时,则Z为-100;* o Y) h a U8 k
对于G#130,若#130=3时,则为G03。' b9 B1 n7 J# r2 q2 ]5 J& N9 ^# o
(3)变量的类型
; [& n( p7 [4 s: m/ M 0MC系统的变量分为公共变量和系统变量两类。
$ k4 p2 y3 z% G. I1 k8 K4 k r1)公共变量 3 o3 G9 s1 x8 |0 {7 {
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。% I3 o9 ]( G4 ^5 E. S& m
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 : `2 @3 ^ h' T1 w( i
& S% W* V9 S; Q! I. D
+ n* g0 t6 g+ S* \) f6 j; r3 A. h
+ l- M$ a- t6 W! N$ c. |+ G2)系统变量
, B8 Y/ h( M, l! g7 A3 ~7 ~ 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
9 f2 \% w3 t: n6 p6 f0 v 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
5 C$ M) Q9 A6 H) G 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
. w0 i8 _: ^3 q. h" b2、宏指令G65* L* a6 A2 z1 s, w' @% O: N- J8 R
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。- L: G% t# D. Q, b! G
一般形式: G65 Hm P#i Q#j R#k; ?. s/ O2 w! c
式中:--宏程序功能,数值范围01~99;
, _7 M ~' F# p, k#i--运算结果存放处的变量名;! _' @/ T# j8 }& n: Z
#j--被操作的第一个变量,也可以是一个常数;3 j8 n, S, p- @. g+ s) ?7 o
#k--被操作的第二个变量,也可以是一个常数。
) F0 }% N5 R# Q( j, b8 ]. N例如,当程序功能为加法运算时:
6 ^# l, Q1 U9 U5 U* d7 z程序 P#100 Q#101 R#102...... 含义为#100=#101+#1029 j9 R9 A. { t, M% M) r g+ j
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1021 ]) O' l0 |' A6 I+ P. E
程序 P#100 Q#101 R15...... 含义为#100=#101+15
: \& L" d$ x e- z0 T/ p
7 X t6 P$ j, t/ @5 r3、宏功能指令
' f( K$ S, x1 q8 z" ?# u' Z* h3 V( a8 W7 u3 T) X8 j9 a8 h4 i4 t
(1)算术运算指令 @' N5 P0 z) x9 r2 S
/ v4 _9 v9 R7 a& c6 L0 A1)变量的定义和替换 #i=#j
0 \% L( Q9 U* }; |; _
0 w1 `+ m- J! a; K2 f; Q编程格式 G65 H01 P#i Q#j& a2 A8 H' P+ e x: m
例 G65 H01 P#101 Q1005; (#101=1005) ' N0 B0 h9 p w# b$ b" S
G65 H01 P#101 Q-#112;(#101=-#112)
* N* w" [% B; L6 Z- D* v, t2)加法 #i=#j+#k
: U, b+ ]2 y7 q' R编程格式 G65 H02 P#i Q#j R#k % z) x7 F# ?6 c4 E, |
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
' L* ~6 f3 M0 {/ n0 s" C9 S5 Q2 u3)减法 #i=#j-#k
3 b. \6 m6 W+ ]+ F6 L9 e编程格式 G65 H03 P#i Q#j R#k
: Y q) s( \, c+ I例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
2 D% S8 R3 v( H6 A4)乘法 #i=#j×#k
s; W! x- `# s- ~( o0 j编程格式 G65 H04 P#i Q#j R#k
* }! }. i0 G% A- I例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)6 o, Z( n4 Z1 i% L' o$ X" k3 w M
5)除法 #i=#j / #k$ h4 z9 s H5 x, X6 Y
编程格式 G65 H05 P#i Q#j R#k2 p3 ?, s# h' \
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
" b. E0 \0 U, s6 i6)平方根 #i=
$ D. n' \8 [3 x编程格式 G65 H21 P#i Q#j- ]* u5 |6 q: _6 n" j8 T, u7 b
例 G65 H21 P#101 Q#102;(#101= )
( n) W; F/ k; Y4 m! S0 T7)绝对值 #i=│#j│" |/ h2 o1 {1 W: j
编程格式 G65 H22 P#i Q#j
+ I7 Y" }! H+ i: ~+ |例 G65 H22 P#101 Q#102;(#101=│#102│) ) o- W9 m5 V6 l" U
8)复合平方根1 #i= 2 _* [7 S- ?0 W0 |
编程格式 G65 H27 P#i Q#j R#k: v) J7 P1 S/ w' u
例 G65 H27 P#101 Q#102 R#103;( #101= 3 g6 r2 Q# k6 v: v7 D+ r
9)复合平方根2 #i= 5 J' W8 \; S6 N8 S' k" R
编程格式 G65 H28 P#i Q#j R#k
+ z" w% ^8 x2 F- r- W; i例 G65 H28 P#101 Q#102 R#103
$ E3 F- { Z0 h1 s( i8 ]
3 H+ i" ]8 _9 N6 z$ S* f* Z+ K6 X1)逻辑或 #i=#j OR #k6 J# W9 C7 P* Q; O7 ]; D. ]2 R5 d
编程格式 G65 H11 P#i Q#j R#k' i( E! c* H! {8 M
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
) C" p1 x- ~5 i& D$ T: F
6 s4 {! }% w8 k+ E. _2 r) V& ~2)逻辑与 #i=#j AND #k
. E+ |. e9 }" h编程格式 G65 H12 P#i Q#j R#k# ^# e! v+ u" F2 q# j# L
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 2 G* x# j/ L5 \/ a& P& N" R- M1 B
+ w! K$ w8 }# `/ F& t; [8 z
4 u3 |/ D: }# G- W0 Z 7 Q. Q8 D, S8 v$ h% a K6 t* _9 z
7 C$ h+ n" T" W2 n$ ]
(3)三角函数指令 , ]2 V, d$ _2 T" W9 R I& o* ] B
6 e; S8 M; C! j' [( V9 m
# T% o" Z" ?8 z. Q' _- d, _ m" d; z& r
, o' `4 W" j" ] z; t0 C
1)正弦函数 #i=#j×SIN(#k)
/ @ b! `% }5 j) f ~3 @7 m( k1 m8 V8 `
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
4 u8 C6 m' \/ |, H, ^# I+ O/ s
2 \7 ]' _& P! @) r8 {( |例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
4 O" Z5 |" V: d/ f2)余弦函数 #i=#j×COS(#k)
: C1 ?0 R% Z Z% V& }编程格式 G65 H32 P#i Q#j R#k (单位:度)/ G. t8 B* r8 V$ ]* i
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))0 t7 u" w) a% v ^6 }/ _
3)正切函数 #i=#j×TAN#k2 @! w% @, ?* n* w7 g: p
编程格式 G65 H33 P#i Q#j R#k (单位:度)
& Z" Q' y7 {6 l$ s& M: Y1 R9 Y例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))( l% A) R9 \5 v- S/ `0 W
4)反正切 #i=ATAN(#j/#k): u2 X" _ q" V
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)1 t3 h; w3 s3 ~4 k" V9 ?
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)& f/ | w$ ]* H2 c* r" M* i( T
. K( E4 M% Q: J f ' q$ o3 j' J. `; W* H( L
6 W1 t' O$ y( d# u; U" K5 { R(4)控制类指令5 a# Q, z4 v7 _0 A, z0 N
8 W8 E% x/ x* n. ?7 S7 J
# \" b* x4 w0 {
8 G; @& y, t P; Z4 B
编程格式 G65 H80 Pn (n为程序段号)
% K. ]3 m- n" e- G例 G65 H80 P120;(转移到N120)( t/ d4 T# T0 i
2)条件转移1 #j EQ #k(=)
! F( A( q) s6 Y5 `, U编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
5 z- j7 k6 a3 I1 |' N: A6 o; e例 G65 H81 P1000 Q#101 R#102' Y1 v" N9 t% M7 c7 W4 y" H9 Z
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。( S; |1 Q$ [2 p) T s9 T( D
3)条件转移2 #j NE #k(≠)2 @7 L6 {4 l6 e% G5 Q5 V
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)8 R2 L; ]5 H9 ?+ m* s2 u; ] b
例 G65 H82 P1000 Q#101 R#1021 N8 t. R0 F% F0 V- A; ~5 d& C. j
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
5 v( ]3 S) Q/ n j' m) \& y4)条件转移3 #j GT #k (> )
; @, ^. h1 h+ J( ]' W' ]编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
$ _4 k) h; N6 }, u! `* {例 G65 H83 P1000 Q#101 R#102
* n8 ~& D6 y6 O/ I! i当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
; V }5 D8 V0 N; I; o5 }% ]5)条件转移4 #j LT #k(<)! S7 t7 q2 K6 M- {$ q
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)6 F, q6 w* X/ a# a9 U2 H( U) j
例 G65 H84 P1000 Q#101 R#102
& a- S0 z" Y% |8 U当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
8 z* z3 s) e' B6)条件转移5 #j GE #k(≥)
8 y6 {( f: m: V6 [2 y, @编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
2 H: U4 k) `6 P8 v& t4 I例 G65 H85 P1000 Q#101 R#102, Z! X. m" ?" \+ m4 R
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
+ B' _! _6 k# L: k! |, |% D$ F T7)条件转移6 #j LE #k(≤). W$ H0 X$ D- M* f, V; Q3 q8 F
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): d% ~& Y9 r0 C
例 G65 H86 P1000 Q#101 R#102) N7 B0 n0 E. |9 B4 _/ M
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。/ Y, k! K" M8 j/ J1 P/ [
) w1 a# [7 u, ^6 B( Q3 ]; f4、使用注意" `( R# u+ N- N$ h! n) C
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
" h2 }% i" `( y5 H* C(1)由G65规定的H码不影响偏移量的任何选择;
+ _& K0 t/ k: z+ i+ A# {(2)如果用于各算术运算的Q或R未被指定,则作为0处理;; @# Q$ l' ~7 A( W4 G- O2 K
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
* D j: ^# x+ ^: \(4)转移目标序号可以是变量。 4 ?" `6 n* |2 x7 ^8 o, A
$ e5 G3 n* ~ R( c5 Z+ V5、用户宏程序应用举例 : + Q$ Y( a' Q2 @% J0 Z5 U; L
~* p8 S% J" |用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
% l9 @9 V. ~0 D0 O- W' z# p+ s5 o. C2 }4 Z
使用以下保持型变量:6 r6 l2 P" Z* t: N0 w: u
#502:半径r;- |) g6 a& ]) p# h8 H6 ^
#503:起始角度α;+ Q/ c" G$ C; a/ o, e$ A
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;0 B6 ]8 S& L& d0 @* {2 T
#505:孔底Z坐标值;
' E3 P8 W& I7 X# k3 e. C#506:R平面Z坐标值;% ^+ _* L# F8 C8 j
#507:F进给量。 1 W& ^7 ?8 D8 F1 `1 @
使用以下变量进行操作运算:* k; L: O( ^/ g, h& y4 ^. m
#100:表示第i步钻第i孔的记数器;
9 n! b: P" @# ^; {" V' G+ `#101:记数器的最终值(为n 的绝对值);
: I1 |9 M5 w. q4 I' c( N, J#102:第i个孔的角度位置θi的值; % L, B* h" M9 A5 I# V
#103:第i个孔的X坐标值;5 g( X& z' u8 [' r5 p
#104:第i个孔的Y坐标值;, H, o- r* d! c
用用户宏程序编制的钻孔子程序如下:
Q5 h$ b1 p( Z/ VO9010
, L! q5 d7 |: g7 y+ d! v- n, |N110 G65 H01 P#100 Q0 //#100 = 0
$ I& x6 Y, F( |$ V- P6 o BN120 G65 H22 P#101 Q#504 //#101 = │#504│; c( |7 w- L+ g6 a* Y
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o/ g& R5 w" K: y# n7 e4 R% t) t; g
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504: {0 {- I4 u- s2 R
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n5 X2 p' ~6 \: u+ P3 }2 Z0 Y! a8 S
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
8 B: {' F1 ~. T+ b$ aN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
! y' A6 h- C& z- A: B5 K8 p! ^/ g$ {N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)# `: |- R9 Z: | o: q
N190 G00 Z#506 //快速进到R平面
+ Q8 c; {/ X: D9 P' d/ nN200 G01 Z#505 F#507 //加工当前孔+ e- I# u# e+ b4 D* f" }: y) o* ~7 e
N210 G00 Z#506 //快速退到R平面
! `8 `* \# M- s) ~N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数. s1 t. q3 @( X" T# U6 I8 p
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
/ u, l$ E( d4 s; |( p+ l3 qN240 M99 //子程序结束 1 B4 X# V# Y) X( Z5 A: W4 x
) c6 ~4 z) s) L1 h( g8 R) o " i" F6 I9 O) ~* A1 I. z
( [2 X! G5 c$ v+ h4 G/ O. h1 ~调用上述子程序的主程序如下: 5 v8 v* d0 n' y5 Z( |
O00102 `; C" z2 S5 ]6 }$ X# {, u# ^6 u
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系) j2 b' z K) J: p$ F4 L1 j, M4 J, f0 B
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔) C" {3 F4 U# |: H! |
N30 Z20 //抬刀' Q: _; p1 {/ {; s1 M
N40 G00 G90 X0 Y0 //返回加工坐标系零点 j2 X. L4 x( p3 m
N50 M30 程序结束
x9 Z/ K4 T) P7 ? b设置G54:X=-400,Y=-100,Z=-50。
2 [% V7 q/ g# g, M% ]9 X变量#500~#507可在程序中赋值,也可由MDI方式设定。 5 m( D; t1 J% T0 M5 y
9 h1 L7 q0 \' J
B类宏G65
0 I1 K, I6 c/ y9 `3 x' U$ ?
8 i8 e O+ P( a) b- K- W' R7 R简单调用(G65)
1 V% G1 |. ^; D/ E 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
$ E i b$ }3 O& J6 h 格式 G65 Pp Ll <自变量表>;7 X) ?! ]: i4 V' I3 x
其中: p 要调用的程序号
?' y4 s$ e% w3 r# g6 w l 重复的次数(缺省值为1,取值范围1~9999), N/ P) R# D! ?
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 6 c+ w) H0 g5 v
的局部变量。/ o: t- L% `. X0 o; \
$ C+ t* W4 v. W; d
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:/ I4 M" z' s- L+ t( b- ]9 C$ z% `9 m2 l
" X; p" k% \) z. e
地址 变量号 地址 变量号 地址 变量号
: m% k; c! d2 {: l5 R5 O: H" M7 @A #1 E #8 T #20
7 G) w; z$ c, M( DB #2 F #9 U #21# |$ D/ P F" J" i5 N$ g8 ~- Z
C #3 H #11 V #22
' b2 Q! l& c$ YI #4 M #13 W #23
; Z! j r1 ~. Z3 g5 x, WJ #5 Q #17 X #24
; ], H6 e- F: Y8 y5 ]* L7 EK #6 R #18 Y #25+ f" Y% N% M/ _) y. r8 w/ H
D #7 S #19 Z #26" Z4 @/ d' w @1 K& R* \5 b
☆ 地址G、L、N、O、P不能当作自变量使用。
H" _; {0 o0 U3 J☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
; t, ^: j5 b! D! |. W
$ v1 E+ ~0 ]) L$ B 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使3 k; J/ p& P X& P0 [* s6 a
用的字母自动确定:# d+ w# M: m. X: `
地址 变量号 地址 变量号 地址 变量号
! R- u" H, z7 k$ oA #1 K3 #12 J7 #23
, o d% q( [" ^/ ?4 qB #2 I4 #13 K7 #245 a P+ E" W% ?0 e* V) m& V
C #3 J4 #14 I8 #25
6 l- v: F o0 V. o3 qI1 #4 K4 #15 J8 #26
! f7 v: y/ _" Y/ a6 h) r" v8 B. sJ1 #5 I5 #16 K8 #27. A$ H" S- `: M$ ^) {4 G
K1 #6 J5 #17 I9 #28
% e$ A0 W0 e2 d8 |1 h' |I2 #7 K5 #18 J9 #29
; N* `; b2 }3 z* p( }J2 #8 I6 #19 K9 #30
5 F5 K) z' \3 T# e3 J" w* eK2 #9 J6 #20 I10 #319 ~3 n$ [: l Y: k9 \* O
I3 #10 K6 #21 J10 #32
% C5 i- H6 ?& R& U0 |) p$ tJ3 #11 I7 #22 K10 #33' f; c/ v+ E1 T6 J
☆ 在实际的程序中,I、J、K的下标不用写出来。
' N7 }; b& B: g( o注意:
' j4 K3 N) _0 |$ T3 i& {☆ 在自变量之前一定要指定G65。
/ c, L% F8 C1 y1 x4 G3 V☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
5 K( O# }& M y2 I☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
0 @' @8 y& Z/ k4 r7 _1 n☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。2 g: P3 }( E" h* Z$ G* S9 ~
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环5 F+ O3 u; B) h! u- w8 p9 ^ D4 }
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|