|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 7 y; Z( N Z: `# I
详解A类宏) O4 w* c, r0 ~8 ~$ _% a# n
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
- }7 Z( X/ {6 {' D ] 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
! W$ g) O9 H+ q; \ g9 ?3 d 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
' o$ R4 }$ ~5 C* b. m3 I4 {* D$ t 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
+ z9 z! @0 w P' m0 a4 i { 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。( Z9 j) f% y0 S. i! f9 P
1、变量
# u, m) x: ?! C$ p 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
1 J# l$ l( W4 Y; `(1)变量的表示' f5 {8 ? X: x5 a
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)# G$ o* k/ P. {7 u6 M; u
例:#5, #109, #501。% Q# O# N7 n3 X/ ~- k( j8 s
(2)变量的引用
8 V: M. t, Z- P1 b3 Z. B4 y 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
* E2 ~& ?+ ^& S) k; n例:对于F#103,若#103=50时,则为F50;
" X( ?9 D! R. U. F# `2 {/ I8 E对于Z-#110,若#110=100时,则Z为-100;
9 Y$ |9 G$ x4 J2 C: q: u" B对于G#130,若#130=3时,则为G03。
m% g" m( O' V8 c: Q4 v(3)变量的类型
- ~4 n; Y( Q% o$ [! D. w 0MC系统的变量分为公共变量和系统变量两类。
$ I+ U7 q/ _* f# ?& w9 A6 W4 P6 P' `8 M1)公共变量
9 G/ \3 |9 {1 V Q7 _ ]9 M. `% Z9 v 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
* a, w! q2 D3 |& {# E公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 ) f9 Z& W0 X! E1 [# A
$ } m1 ~. B3 F+ Q$ Z2 W( o3 g
( a6 |* d% R7 Y9 t' L# U1 S6 A) [
4 Q: T6 x4 W6 B0 [9 t( B2)系统变量 / @) p9 H% K3 h$ N
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。% R H- i9 e- N
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
p5 x# S( W+ z! M* I 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。8 e% |: u3 @* J0 }4 b
2、宏指令G65# y- V& @% l2 [9 g+ [! U# ?
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
( C5 R; {3 X+ W& ? 一般形式: G65 Hm P#i Q#j R#k1 w+ ?9 y" C1 q1 U% p" m
式中:--宏程序功能,数值范围01~99;% `. Y/ n" {/ Q6 ]
#i--运算结果存放处的变量名;
+ w( _, c" ], I) O#j--被操作的第一个变量,也可以是一个常数;8 [# s7 v9 s( S9 x5 S& t
#k--被操作的第二个变量,也可以是一个常数。
* n* h* X6 d, `* i2 I例如,当程序功能为加法运算时:6 l& a" O% s$ F
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
6 A7 b6 M( n) r+ b# Q# `! j程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
o8 q8 U' z: d; s程序 P#100 Q#101 R15...... 含义为#100=#101+15
/ H& X" m1 Y: m' w* ^! l0 y/ V
. r3 z: e2 I+ D+ [" q& Q3、宏功能指令
4 u1 C( n& `) z% l# \ s9 c% m) z; J/ d* P' e( ~% F3 z
(1)算术运算指令 ; m. h* i y% y% S: i1 b
; b/ A/ S9 k7 Y! F6 ]/ |0 O
1)变量的定义和替换 #i=#j
- b% |/ F i( t. }9 E2 T2 x3 }
+ @) O$ {$ d. ?8 K编程格式 G65 H01 P#i Q#j
0 j3 m! i/ R9 I! s2 N: m& t$ f例 G65 H01 P#101 Q1005; (#101=1005)
9 P/ H2 s# x" F7 a: S5 h+ ]0 @9 iG65 H01 P#101 Q-#112;(#101=-#112)
$ F8 z7 k5 |( m5 l9 v2)加法 #i=#j+#k
( g9 y- Y) O2 \% m8 F0 K编程格式 G65 H02 P#i Q#j R#k
6 n% @: A3 E* U1 S* c2 }例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)% l# c! d" N1 ]. v, A6 G; n
3)减法 #i=#j-#k
5 {" e; ^0 ^6 |: T/ h编程格式 G65 H03 P#i Q#j R#k! i/ f+ h) A. b' y
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)- m3 X; F. p# p
4)乘法 #i=#j×#k' C# ~" n/ b9 a7 r; ^9 O! s2 {8 S5 C
编程格式 G65 H04 P#i Q#j R#k/ r6 B. ?& F- P8 g' J
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
8 K {. @7 P6 ]0 u9 H5)除法 #i=#j / #k$ W6 j0 S# `$ ?
编程格式 G65 H05 P#i Q#j R#k
* P; U, V _; d* s/ X例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)" t0 N" `; Q/ J
6)平方根 #i=
7 ]' O" y0 L' U% `6 C5 m; N) Z编程格式 G65 H21 P#i Q#j
; h4 x! s* i1 `8 c. f# P+ a例 G65 H21 P#101 Q#102;(#101= )
# R& }- e+ X& W7)绝对值 #i=│#j│$ @ W2 x# H5 k* ?0 D
编程格式 G65 H22 P#i Q#j' A. n) w# q: S, `2 u1 C
例 G65 H22 P#101 Q#102;(#101=│#102│)
/ L- i; [' b- z: i8)复合平方根1 #i= 4 m+ p5 J. L) a5 d* G
编程格式 G65 H27 P#i Q#j R#k
% S; w/ l& t, z/ m' P! T/ `6 i) f2 P例 G65 H27 P#101 Q#102 R#103;( #101=
$ B' T, A2 f9 k4 L; d2 U9)复合平方根2 #i=
8 |7 s1 ^9 G$ Z$ R W, z编程格式 G65 H28 P#i Q#j R#k- b7 ]' w( a) E
例 G65 H28 P#101 Q#102 R#103 6 K$ h& P. w5 o E- r* M I
* a0 z1 x. y% o. \! T
1)逻辑或 #i=#j OR #k
! a/ {* ?: Y& N8 [( U$ w. g, m编程格式 G65 H11 P#i Q#j R#k
: p; ^% i+ @9 I* a例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
# W0 u1 Y8 R( Z9 @, R `: z$ E; u& ~7 j. m% [2 ?9 r
2)逻辑与 #i=#j AND #k$ l) c" m( \3 B: y
编程格式 G65 H12 P#i Q#j R#k
3 U% f& c, R& |( G例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
) k5 i9 ]* B1 G& l
9 z( q6 W; ~; W( F. b/ j2 e! q: T" L* Y( o+ d. G4 }
4 p0 K& G9 k1 D4 l+ K( W! H( c# L5 f5 z
(3)三角函数指令
( I! a* [/ B# _9 I) [2 y, C' ^8 G5 s/ v# S0 B0 I5 `$ q
; G% o$ ^4 F ^2 e6 {! k( n& d* J1 o2 M
1)正弦函数 #i=#j×SIN(#k) 7 R; L* s% V; i8 x
Z& U: ]9 e. v( G) j! h; v编程格式 G65 H31 P#i Q#j R#k (单位:度) .
3 t9 s: L7 L1 B# d; P
, Y& D! Q* t. @" T( }例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
# n( o7 [' b; Y2)余弦函数 #i=#j×COS(#k)) H+ z8 p# d; a b9 R/ R) Y
编程格式 G65 H32 P#i Q#j R#k (单位:度)3 U6 a# t. E. b' Q* ?* Z
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
5 l1 S2 B: O$ n& Q0 |% a: V3)正切函数 #i=#j×TAN#k
, Z) c# W3 @6 x: n) m7 ^编程格式 G65 H33 P#i Q#j R#k (单位:度)% R0 _/ O$ t/ |7 U( d$ ~
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
2 ?( t- C* ?6 e1 V% v& s7 N4)反正切 #i=ATAN(#j/#k); H* L) l. p3 K1 k
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
, P3 f3 a- P0 R3 P+ ]6 _/ n1 e6 ]+ v例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)$ e, N; b5 v& b- b- o' w1 U3 X# t
/ W0 \" b$ G; ~' [# V
0 u) L, [6 L& B) t- S% N9 W
7 M8 U5 p) s$ N& r& o. D(4)控制类指令
/ N' A+ X+ Y6 \1 `! I) i. l" z5 \) ~; a g- p
2 d5 v U6 p# {
$ M( r4 I! Y o编程格式 G65 H80 Pn (n为程序段号)+ y# k% E: K3 [1 t' w# y: B* |: n% @
例 G65 H80 P120;(转移到N120)
1 k# ~3 K. |# J! k2)条件转移1 #j EQ #k(=)
! [4 ?, H! O9 o. I编程格式 G65 H81 Pn Q#j R#k (n为程序段号). v, x$ ?2 ~( n9 V4 E) O* U P8 [
例 G65 H81 P1000 Q#101 R#102; E7 A3 O/ L, I. u6 h8 H( p/ T- I
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。$ l" h# E% l8 D0 |/ M& j6 }7 V
3)条件转移2 #j NE #k(≠)
3 M6 `- h4 j, b! w9 a6 ^+ L8 v编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
+ X0 v0 ~% X6 |( R c6 \+ L4 O例 G65 H82 P1000 Q#101 R#1021 ~5 _ P& [- h, k
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。6 L. I1 {" g- K! u- e( t
4)条件转移3 #j GT #k (> )8 U9 I+ a: Z6 J% v* [7 K( C
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
, k# H9 E0 a. W5 g* A0 C7 H; s例 G65 H83 P1000 Q#101 R#102% X9 e) C1 |4 ?
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
1 I5 R; X8 [; T7 I3 V5)条件转移4 #j LT #k(<)$ x% l4 @# Y/ P8 n' D% O o
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)/ p* R. n+ S0 P: R& e
例 G65 H84 P1000 Q#101 R#102 0 N8 }# P: D% y; w M
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。4 X8 F! ?" j- o1 X7 `' E$ `: v
6)条件转移5 #j GE #k(≥)+ v2 ^) W0 ]7 `4 a: s
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)! F0 G4 c/ V6 Y
例 G65 H85 P1000 Q#101 R#1024 {+ O0 i4 _7 Z
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
1 o! Q) Z! T9 a4 }' X: L8 v }1 Z7)条件转移6 #j LE #k(≤)2 f2 v; n9 c$ x$ W, i
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
- p( _- \* b5 \$ }' P( D例 G65 H86 P1000 Q#101 R#102
9 a0 n; z" w9 Q I当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。, ?) c" Q% q. f9 N
* q; i4 n0 `5 ~1 I! g* s n
4、使用注意! k! G) k0 K: T7 m
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
" W2 N3 U! K* [. X8 R' d(1)由G65规定的H码不影响偏移量的任何选择;) r, m1 P6 O, |2 R
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
2 p6 |6 q" |/ [# V* w6 a5 X(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
' ^. J: @; U: n6 K(4)转移目标序号可以是变量。
0 A- m$ v7 m% L$ c' y' R/ Z' Z' k+ `4 @" F! c
5、用户宏程序应用举例 :
+ b( r6 v# J- a* F2 ?& O9 V" I9 F' t1 M* i: G8 K
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
& P- v7 Z- F. @) Q3 @. j, `/ ]/ d8 k3 f7 L* Q) W& V
使用以下保持型变量:
6 F6 z- Y9 u" [- K/ m0 R: ~2 p#502:半径r;, _ M1 ^/ F/ z0 P* u6 t
#503:起始角度α;
, e; s9 C1 i1 F [% d4 h# u/ f#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;& ]1 ], q( ^2 J p$ p- S
#505:孔底Z坐标值;" i1 ?2 v4 r8 C- A
#506:R平面Z坐标值;4 [% L3 `4 c1 J2 U& M
#507:F进给量。 " i9 g9 H: u8 ]2 n1 G" b( {( a
使用以下变量进行操作运算:, a& [, v; t( c: r# _
#100:表示第i步钻第i孔的记数器;
3 K- c6 r2 a0 h( m#101:记数器的最终值(为n 的绝对值);7 U- ]$ ^- h& e
#102:第i个孔的角度位置θi的值;
% w. \" [+ F$ c5 q! X4 e8 r+ ~. H#103:第i个孔的X坐标值;6 D. ^$ [9 Q2 w/ C5 k8 ^
#104:第i个孔的Y坐标值;
3 T7 x, ~5 q" _( P+ X用用户宏程序编制的钻孔子程序如下: % d, I; p$ [$ p' L3 i
O9010 @3 T* e3 u+ I! H5 E8 A
N110 G65 H01 P#100 Q0 //#100 = 0
* F' ~% v/ [$ W( j7 b/ dN120 G65 H22 P#101 Q#504 //#101 = │#504│0 |* ~6 X- _, j4 o' @# r. B
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
1 Q6 b" b6 J3 ? p! f" @N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504( x. G2 [" k/ Q/ k9 o: l
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n$ P3 a4 ^* ^ a8 K
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
m6 X9 B" u( {& O+ R. tN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标2 N: W5 x' y) w
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
8 p4 w6 c4 ?7 q0 {N190 G00 Z#506 //快速进到R平面 ]5 B3 R+ X0 {- _0 ]9 F6 X# ~! V
N200 G01 Z#505 F#507 //加工当前孔+ j2 V: o/ ~# [1 x8 m9 i
N210 G00 Z#506 //快速退到R平面
3 s0 Y' [: V* K+ W. L3 o, [N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
' O2 `' t$ q: _# r/ n( ]: r% { RN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段8 l; W8 ^& O! ]* r
N240 M99 //子程序结束 ' R+ d& [4 j! T5 u
: @, T" s: v+ X4 F4 P/ R( d
4 n: G9 T1 o& H8 I& @
, h3 _0 \ c E: K& {4 I4 l& m调用上述子程序的主程序如下:
" E; Y& R l7 X! X. Z- D4 G# XO0010* s# F! l: P) N
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系- e" z7 i, z- l" `. E6 z4 A$ i
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
9 T4 e4 P3 S9 C( \7 U" oN30 Z20 //抬刀
+ q1 K) O: J) m% lN40 G00 G90 X0 Y0 //返回加工坐标系零点 4 g7 C/ Z9 U! V6 O3 d/ }
N50 M30 程序结束3 [ A8 e. J$ x
设置G54:X=-400,Y=-100,Z=-50。0 g7 T* ]6 g7 n9 N) V/ |- I
变量#500~#507可在程序中赋值,也可由MDI方式设定。 ! N p& j7 b$ s# Y
1 Y5 x7 `3 s/ H/ X8 ]9 PB类宏G65& p5 ~- t, |" G, Z" d
$ F8 \8 n' P; {) R+ h
简单调用(G65)! s) K( g' q" a* W: p3 w0 r4 X
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
: m7 k9 E& q/ n* ?1 O# b; z$ G 格式 G65 Pp Ll <自变量表>;
/ }" [# |8 G! Z. o: I$ H/ c 其中: p 要调用的程序号
( Y. |, N/ d/ B; ~ l 重复的次数(缺省值为1,取值范围1~9999). n" p; ~8 X6 L% I
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 . z4 f* g3 E# e( n1 b, h, V8 O
的局部变量。, ?; H* R! w# }' w& e" @; ~9 t7 ^
, n1 u, q# |4 L1 j
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
& h% g( b, P$ n# Z' Z# e! e$ P
+ H" E) ~8 n7 A8 ^地址 变量号 地址 变量号 地址 变量号
0 F% @5 A7 M) E" }A #1 E #8 T #204 Y* L1 d) a5 t" F/ ^ _# K
B #2 F #9 U #21
* u5 [; f) y' s7 rC #3 H #11 V #22' T- Z% p+ l! E! K4 y1 o6 F9 n
I #4 M #13 W #23
& k2 m7 ]) O9 r* e# Z; ]3 NJ #5 Q #17 X #24
8 r2 k# ?- I" lK #6 R #18 Y #25
0 r% j6 W& ^; s8 a% j% E- JD #7 S #19 Z #261 o% \& o& J" U1 c6 y/ `4 p
☆ 地址G、L、N、O、P不能当作自变量使用。
# a& v0 x' t4 ?# _☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
( Y l/ i1 o/ w6 X
& w2 f e. ~) a& |% q 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
# ]3 y7 p( s) b# p7 G用的字母自动确定:: W' }/ O% D) i/ T( g7 _6 V( x9 K
地址 变量号 地址 变量号 地址 变量号! b8 o7 a8 ]9 H- a: l. L# P
A #1 K3 #12 J7 #23
4 a3 o z! |# ~; T& Z" T1 X- C2 WB #2 I4 #13 K7 #24. ^- U$ U" B5 l. D, u
C #3 J4 #14 I8 #25$ A4 g6 i& @4 U1 P& ^
I1 #4 K4 #15 J8 #26
4 I7 `, d) K J4 YJ1 #5 I5 #16 K8 #27; G) @$ K s3 h- q( y4 ^' U
K1 #6 J5 #17 I9 #28
- E" c b7 X. zI2 #7 K5 #18 J9 #29 j# `* h3 Q' g
J2 #8 I6 #19 K9 #30
; v* \0 K. N( D8 c8 C, Y! uK2 #9 J6 #20 I10 #31( ?7 e7 P8 u9 ~
I3 #10 K6 #21 J10 #32- f1 \$ B! l$ o' c2 G8 P3 G
J3 #11 I7 #22 K10 #33) S, O* y( d( v; r) A
☆ 在实际的程序中,I、J、K的下标不用写出来。
: V( t2 Z+ a7 F. A& V注意:+ @" L! i* M9 B5 E* l3 b
☆ 在自变量之前一定要指定G65。2 `" |9 G. k5 g; r; q7 r
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。& Y! W. R2 g- [0 P8 B- b9 g3 a
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。1 v2 M1 d9 h) }( E
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。/ f% P6 U4 Q9 m. N5 D1 F
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
) a+ X1 O& y: D, a之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|