|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
" F6 F0 R) j' a1 x详解A类宏7 ]4 J: }$ ^0 z1 s/ u" B5 q
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。, Y7 G0 T" B6 }, `4 {/ p0 x% I( K, I
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
/ V+ ~3 C/ [$ J2 ~ 宏指令是代表一系列指令的总指令,相当于子程序调用指令。* W- f9 @' r$ Z2 U- ~6 ^# N7 A
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
+ H6 j/ }$ y. o+ D7 x4 y7 { 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
7 ]& ]2 p# m8 D, E" I9 P* I1、变量
3 o# l2 q' m) l 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
2 a. a% @3 i6 M b6 e1 V4 r(1)变量的表示
6 b: B$ D O* y2 Q3 D变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)7 a: x6 [" [" d, ^8 K
例:#5, #109, #501。' b: G$ W' Z$ K: B
(2)变量的引用
0 Y( u& d* H3 \4 ^% \. i4 W. `. ^! P 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
9 I& H" j2 c1 C+ m/ I* b例:对于F#103,若#103=50时,则为F50;
4 T. x8 g- a3 q对于Z-#110,若#110=100时,则Z为-100;
7 z! E" \+ B. d& `对于G#130,若#130=3时,则为G03。3 ?/ ?% h: z2 k P- m' I* E
(3)变量的类型
5 L+ z( N. z8 C) s# M! ~ 0MC系统的变量分为公共变量和系统变量两类。: e0 h2 Y7 `. R( Z' X h* j
1)公共变量 " o! C9 f0 _9 P
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
1 ^" C/ o) Q+ L/ L公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 $ q$ |9 C! `% E% H+ o9 Y
+ E! q) i8 V, \5 G# W
% v. C0 r2 {3 A1 q+ p# \6 G0 G1 }. y {
2)系统变量
Q2 p" a1 G4 s9 w: } 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。6 N8 P% p* T. q, U8 A" T0 C
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。 E P$ O/ O( l: N( P3 [$ o
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。7 n5 l* n( ]3 _1 A
2、宏指令G65
# {, R, j% V( k5 [: p# C 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
, `: A2 Y0 z9 n4 A0 z! S! m7 M 一般形式: G65 Hm P#i Q#j R#k5 I; w% n/ Z" }/ n+ x8 G: u/ E7 v, O
式中:--宏程序功能,数值范围01~99;1 ^5 L' u& e/ p" N
#i--运算结果存放处的变量名;
$ p) N5 K: H) p#j--被操作的第一个变量,也可以是一个常数;) a* M* ?% ~3 e- ?* Z7 U3 u+ u
#k--被操作的第二个变量,也可以是一个常数。! E% V9 s+ k( Q* f( w5 ^
例如,当程序功能为加法运算时:( q+ B, j1 R, k) Q7 o8 A* U0 c2 O
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
1 e" e, b1 e1 @- Z% J2 [& s( Q程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1026 M/ s" q1 f% p6 G7 m% T
程序 P#100 Q#101 R15...... 含义为#100=#101+15 , F' a0 V: V) x9 n. E% r
# u) ^) I, S& L6 O
3、宏功能指令
9 k- V/ D9 }1 c2 p( S9 z- Q7 I3 ~4 O3 ]
(1)算术运算指令 $ x N& { w9 c% b- e* n
) `8 O/ _0 d l
1)变量的定义和替换 #i=#j
$ P' D1 T) J! t5 A" P& t; h& `
7 G) \4 d! b7 _2 W$ }: n编程格式 G65 H01 P#i Q#j' K0 a1 Q# t* }, O$ z8 x
例 G65 H01 P#101 Q1005; (#101=1005) 0 I, c8 d: x5 i( \+ m
G65 H01 P#101 Q-#112;(#101=-#112)
$ P e! c" C7 ^% `& `* Z9 X2)加法 #i=#j+#k
$ T) r1 j" Y4 N9 X" v1 Y" |编程格式 G65 H02 P#i Q#j R#k / `- j. O1 q! O+ j+ D& Q: n2 H
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
. e/ V( S0 |3 l( N$ H' P3)减法 #i=#j-#k, ]" Q8 L5 \/ v8 O* S
编程格式 G65 H03 P#i Q#j R#k
' ^3 U, K/ u; P! c2 v2 {1 [例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
_& \: m1 o' X2 M5 u/ ?$ g4)乘法 #i=#j×#k
# S: a$ |- C* b7 c+ ?编程格式 G65 H04 P#i Q#j R#k u" T+ p' q9 r2 z% q0 u, M
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
* L& \ D, g3 `! |. o5)除法 #i=#j / #k
c. s! K; ]/ l; J编程格式 G65 H05 P#i Q#j R#k
" h" i+ S7 O- L( O例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)- p( P) T1 } C8 r" f0 S2 C
6)平方根 #i=
" Q x4 ]; f& M4 c0 G( e# p9 H" k编程格式 G65 H21 P#i Q#j6 h4 T6 v: t0 N" M5 o6 E
例 G65 H21 P#101 Q#102;(#101= )
+ x8 w4 s) `) Q0 j7)绝对值 #i=│#j│9 ]; L# y* l% i2 e+ P
编程格式 G65 H22 P#i Q#j- ]" G4 k7 w" x k9 ~
例 G65 H22 P#101 Q#102;(#101=│#102│) 6 {; u2 y. f3 W) F$ C
8)复合平方根1 #i=
7 K ^4 _3 x7 t6 {* g6 B编程格式 G65 H27 P#i Q#j R#k
+ C. b" ]2 O* Q1 m, e$ _# c, r5 Z例 G65 H27 P#101 Q#102 R#103;( #101= & S% _# |% o+ C9 c8 V' w8 @) z- X
9)复合平方根2 #i= # z7 q3 E$ x3 p e
编程格式 G65 H28 P#i Q#j R#k: N5 e3 f) r& T& J3 b3 x
例 G65 H28 P#101 Q#102 R#103
4 x; b" O( z! T% v9 A4 [4 i" c$ e. d
: ]% z* d: F @& u1)逻辑或 #i=#j OR #k
' j: ~6 a6 o# V7 [- d1 T编程格式 G65 H11 P#i Q#j R#k
2 L$ w) i/ U, ~% Z ~! l9 }8 L例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
% M8 X* Q1 X2 M& j. |1 D2 s7 f4 n% k6 d/ g( c* w% w
2)逻辑与 #i=#j AND #k
8 }+ O y$ A) V! M# C' f4 h7 u+ c编程格式 G65 H12 P#i Q#j R#k/ T1 X0 F" A' k6 Z: i' O; K' C
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 H8 E7 n1 _9 i0 s4 G: Q ]3 ?
5 v k3 q' `# ^& ~9 }! `% d+ [
4 w3 i- s Q2 {: a$ o5 p
7 v. v0 }; C" a, h8 H2 `
9 ?% [9 V7 c. f# f3 s. [$ e T(3)三角函数指令
i+ I, @! t2 h- A, f7 J0 }( c' G
( r* @1 `* F- X$ L3 F" i. J0 l, t/ k8 y1 s( v4 r7 ~$ E3 @: z' k f+ A) }) P6 }
1)正弦函数 #i=#j×SIN(#k)
- P- d* D: B% `2 x0 y
& |# f/ k! s- w4 a; K: Y编程格式 G65 H31 P#i Q#j R#k (单位:度) .4 z& W5 E% d p3 K% E
2 F6 T3 P1 t- Q: ^" U( a+ h; A
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
) L2 J9 b; A5 X% Y) F) |2)余弦函数 #i=#j×COS(#k)8 @; n, x# ?* R* x
编程格式 G65 H32 P#i Q#j R#k (单位:度)" g& r }+ W1 `8 B7 h3 @
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)) u+ H; t3 m9 P+ |* }' K* I# i, K
3)正切函数 #i=#j×TAN#k
% Z/ U @! K. D/ R3 n# D& }8 L编程格式 G65 H33 P#i Q#j R#k (单位:度)0 X, ~- `: b0 _1 H* ?; o' Q
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
3 n: p. H8 Y' D4)反正切 #i=ATAN(#j/#k)# K3 I; O$ }8 o
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)( e8 R% R, W$ G! [: r8 E; x
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)/ H$ f9 k( W# U- [5 n
& r8 n2 w5 i+ H6 D
5 R7 i7 d7 j$ v
3 p# p, `3 f* ?& d% q) ~; j
(4)控制类指令
. Q+ F5 @1 _% {% Q. z( G: l! k% `7 I# s s
5 v( q8 i$ c M! c% }* ~ ! I; ?; H: M, W
" C( s9 F2 g% D% Z
编程格式 G65 H80 Pn (n为程序段号)
2 S) U9 F/ O' S% c& ^+ f例 G65 H80 P120;(转移到N120)
5 H( C) o1 d% C& M; E6 O8 i2)条件转移1 #j EQ #k(=)/ q. w7 C3 M# s% G9 @2 b+ L
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
8 b; e6 ^5 ?% g3 G! i例 G65 H81 P1000 Q#101 R#102
" A3 B" K6 o& s$ o% P当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。/ c3 G9 b8 [" X* o
3)条件转移2 #j NE #k(≠)9 ?! g1 F# u8 S w; @
编程格式 G65 H82 Pn Q#j R#k (n为程序段号) o0 k, Q* ~ @+ c2 p5 ~
例 G65 H82 P1000 Q#101 R#102
f' V( h3 n4 {0 P当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。1 T; i/ H0 @% i5 X' {/ Y" m- H r
4)条件转移3 #j GT #k (> )
0 l0 B% h+ g3 V( d编程格式 G65 H83 Pn Q#j R#k (n为程序段号)6 {4 H& ~$ e# v; E
例 G65 H83 P1000 Q#101 R#102/ m2 ~: o% N: a1 u
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。2 l2 @. g* ~. \9 K8 A
5)条件转移4 #j LT #k(<)
3 T: ~& g# @4 ~编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
3 y8 I# ~7 H T! }8 T: u/ D+ a, r例 G65 H84 P1000 Q#101 R#102
# w; z) K( ^% w, r/ F0 l& H0 A当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
4 N) U! N+ W) u* J6)条件转移5 #j GE #k(≥)
# K$ |% C: z1 H5 m$ F, g" @8 a/ z编程格式 G65 H85 Pn Q#j R#k (n为程序段号)4 x+ z" z0 U6 T6 T
例 G65 H85 P1000 Q#101 R#102
9 }8 L! d) Q, K1 A: c/ F当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。# _& c8 y& Y+ D. v( u; z9 t" S
7)条件转移6 #j LE #k(≤)2 Y: W8 S3 Y. h( w1 R
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
' n' U8 m; Y/ R8 j例 G65 H86 P1000 Q#101 R#102' }& Z) h4 p1 R. W1 [
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
9 k# v. s" F* U4 b- | T
% c) }; Z8 J5 N4 N( X% y6 Q4、使用注意
3 L* ?9 Y5 ]. E! H* z 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;) ^( i' e! m' I. j& ~
(1)由G65规定的H码不影响偏移量的任何选择;; }1 k+ \7 e+ M U+ S, m6 h- r
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;- K+ g) T5 ~* `, u J) l
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
* a7 z3 Y! L( U' ~1 C(4)转移目标序号可以是变量。
; X' W' L5 O) z& [8 O& L1 u% _2 b: k1 q+ J( X' C- J6 g8 a
5、用户宏程序应用举例 : 1 i5 w$ {8 X2 e3 f- Z
: c$ E9 [4 E" a! X; W }用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 * w0 U2 }) @1 r
5 k& W7 u [6 E% h" D$ C- Z使用以下保持型变量:* U: f3 e7 l {# i$ j+ I
#502:半径r;/ y! g9 F5 Q1 K# S" V( k
#503:起始角度α;
l0 M1 u8 F1 \# G& G, M/ E% s#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;, Q, O- Y7 `+ E+ M- `2 R: E
#505:孔底Z坐标值;3 R7 f, w$ A f1 g9 u) C7 K
#506:R平面Z坐标值; i, r. e$ H+ L& J) X5 J/ ^0 C6 v
#507:F进给量。 - z, w3 z* c* `: r, p$ N5 w
使用以下变量进行操作运算:
1 w6 C G# T% j" s#100:表示第i步钻第i孔的记数器;. `2 D: |6 W* g. _4 Z
#101:记数器的最终值(为n 的绝对值);
! _/ G: }, \1 N7 g7 ^#102:第i个孔的角度位置θi的值;
1 ~3 ?4 c* A, V5 u% I6 W#103:第i个孔的X坐标值;' o5 \2 U8 {' h- B2 ~
#104:第i个孔的Y坐标值;9 x' e' O& C9 V0 o
用用户宏程序编制的钻孔子程序如下:
+ _$ ~! x# s7 m0 GO90109 C: |. t) S" w- O9 Z* D. R
N110 G65 H01 P#100 Q0 //#100 = 0
3 g4 Z) b. ~0 G# hN120 G65 H22 P#101 Q#504 //#101 = │#504│
7 k- T9 ?# \, C5 u2 {! nN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o2 d& S4 D8 g4 K
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504( g* h- w2 \% _
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
; Z% V1 r6 K5 @3 D' m7 rN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
2 F5 N2 N+ p2 J- a9 YN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
9 W5 ~: w3 g" ]N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
8 a! a. r% n, m1 f$ SN190 G00 Z#506 //快速进到R平面9 T9 t1 v5 H. _. E! B
N200 G01 Z#505 F#507 //加工当前孔( R) N, C! \( g
N210 G00 Z#506 //快速退到R平面2 |$ M/ O$ A4 I, _3 R
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数. w+ b7 g- E5 k/ }; z6 v
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
& H, f% f& N( D) j( y9 R+ UN240 M99 //子程序结束 ! g& Q, F" @" ]
! Z" J4 y$ k0 i! E$ Q8 ~/ O M : @9 `& s: B8 ?; v
$ _3 f: k* L( E7 ^: _1 T" @2 T- _$ S调用上述子程序的主程序如下:
" ]* ]6 ^9 ^6 y0 z) p) rO0010
; W t) Z$ z! G5 [& R7 MN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系, k O8 \; Y0 g$ k1 X* M
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔; Y; x! ]" D5 F0 F# C6 f$ S
N30 Z20 //抬刀/ R( n: G) _* u( O
N40 G00 G90 X0 Y0 //返回加工坐标系零点
$ S8 R4 r# V5 e6 B6 `N50 M30 程序结束
( D3 Q+ t% I, d2 J& B设置G54:X=-400,Y=-100,Z=-50。
, @; i9 o6 U2 o# j* R/ a8 U变量#500~#507可在程序中赋值,也可由MDI方式设定。
7 _, O" j9 w5 P2 J: W
5 W7 n8 o/ u y# OB类宏G657 J- n3 B% T/ E/ U8 x! O" G
3 z% I) y4 X4 t" Q; c
简单调用(G65)7 J, n' V: g {. O' @$ P
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。2 S" l( a& L- o: |8 C _
格式 G65 Pp Ll <自变量表>;
6 D) @8 X7 p9 h$ k& ^" n/ ? 其中: p 要调用的程序号1 A) ~5 W- ~: o2 j1 v
l 重复的次数(缺省值为1,取值范围1~9999)
* L- K. @7 R* p, t; c( u; \: T4 _ 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 2 G4 B! D5 v! T0 T5 t9 g: o
的局部变量。7 I* V+ ^& x, m% D) @' G q
1 E0 z i+ r) q! ?# e0 W 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
% `4 h6 l' o( h9 G) P8 }, s& N( M; n7 v
4 a" l) v% B+ @地址 变量号 地址 变量号 地址 变量号( r. e. Y' P! @. }6 l ~- I" F
A #1 E #8 T #20
; _6 M, z5 _" |! A" zB #2 F #9 U #21, @" q J- Q: u
C #3 H #11 V #22& V2 Y8 p5 Z r
I #4 M #13 W #23' w* g. x: D" E9 ]
J #5 Q #17 X #24' C* D& S- r' K6 ]! C
K #6 R #18 Y #25
" y* n& J9 |' V# V3 t* }$ |D #7 S #19 Z #26
# S% q/ F9 ?. d8 t& W; _: u7 A0 ]☆ 地址G、L、N、O、P不能当作自变量使用。
6 { U' C. ^1 D) V3 S% H* a☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
m9 Z. o9 P# K# L% S/ D! u
! D, U7 C8 `; V* m j4 {. ] 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使) ^! v2 A2 G& m" ^" M
用的字母自动确定:5 |# a% z3 @* E
地址 变量号 地址 变量号 地址 变量号% L1 s4 K0 w, v8 e1 f
A #1 K3 #12 J7 #23 P5 X9 ]7 V8 n/ u' [% h9 l* c
B #2 I4 #13 K7 #24$ Q& s) W- ?3 D9 V7 H2 O: [ d
C #3 J4 #14 I8 #25
4 D" W4 q+ U% ^0 {4 t9 ~ YI1 #4 K4 #15 J8 #268 V8 Q7 d1 j5 ^6 i2 L: ^
J1 #5 I5 #16 K8 #27
/ V; P* h4 ~* }. r: Y7 w PK1 #6 J5 #17 I9 #28. D' O5 C" t3 M8 c
I2 #7 K5 #18 J9 #294 x* w9 a: U3 M% B8 l
J2 #8 I6 #19 K9 #30% P' t7 L( ^# f3 ?% D' w0 D
K2 #9 J6 #20 I10 #31
( A# w5 j/ N c' V. { M& aI3 #10 K6 #21 J10 #32
. ?. l' S: U) M; u) K4 n* ?J3 #11 I7 #22 K10 #33% d- T# G4 d: r7 ~- n2 s1 [
☆ 在实际的程序中,I、J、K的下标不用写出来。# T: D, D$ j+ y* `: Y' W
注意:
( ^# [ j9 N) p( J4 h U% b0 Q☆ 在自变量之前一定要指定G65。
2 C8 v) j- @# V0 k☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
# ~$ _" m; X( k2 k) {7 N☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
) L* Y7 U4 m6 C2 O d3 _☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。 q0 e* a# x5 z' x7 B; x9 W
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环- Y/ I/ t/ b a8 j
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|