|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 9 i' W! m; N- K
详解A类宏) M: @) }( M( L; s
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。2 m F+ w& l8 z' r, w
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
& I0 y( N. }0 s$ A+ b9 I 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
, |4 U2 F. q% t8 q 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
0 l* `) |' {) h- |4 a 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。* x$ H% Y7 Z- g8 P. C
1、变量) O+ c0 j8 Z7 u$ i5 }& y% Y
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。! e8 {" H& g; @! A: k% f$ P
(1)变量的表示
6 T B( P( R9 g, f变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
! T" [ C# x! G9 p7 a* G: `例:#5, #109, #501。# [% R* p- V. N9 A S2 N9 K
(2)变量的引用, e9 \1 b8 C' a1 w, S/ o$ z
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。' }. G, ]* ]8 A5 y
例:对于F#103,若#103=50时,则为F50;
, A- {5 E* r+ {% |对于Z-#110,若#110=100时,则Z为-100;
6 r, E# ?$ C+ N2 ]对于G#130,若#130=3时,则为G03。+ l6 N: c6 T: n
(3)变量的类型 ' g2 q! `1 N2 ~* b- p& w4 _# p
0MC系统的变量分为公共变量和系统变量两类。3 {" b& i: j$ S3 q3 o! t2 V
1)公共变量 $ A% H0 z, o4 w/ n( b/ d5 h \+ J
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。8 M; `$ I% [5 i- h- I$ K# {
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 - b/ u4 J' U, m! y) z
8 G5 N9 E- F1 M% D# ^4 N' n6 t
, r1 U+ ^% o* I/ N. M
2 p& h1 s; a0 e0 C8 x; D$ f0 S
2)系统变量
9 F. F% R: r' S! h 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。; ~7 v$ J( b4 k6 D' P+ o8 D
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
9 x8 e S3 u, n0 k5 b* m 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
5 W2 D# _; Z& {" ^9 Y \. C( @" d2、宏指令G658 I! {" u9 R4 _8 u; D5 E
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
H/ N$ @& h+ M( J6 x 一般形式: G65 Hm P#i Q#j R#k
5 S; p" X1 K; a. x: {3 b式中:--宏程序功能,数值范围01~99;
" y- ?) v3 h L( U#i--运算结果存放处的变量名;, o# d# D$ r1 W2 u
#j--被操作的第一个变量,也可以是一个常数;8 f) I+ B6 W- n% I
#k--被操作的第二个变量,也可以是一个常数。3 ] h+ ~; d6 ^% a
例如,当程序功能为加法运算时:
3 A( r! ~' Z" v3 `- D- M3 X程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
5 t2 p$ [2 c p# P) s* ]程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1029 V$ X3 P0 Q8 Y9 \) ^: S, u$ w
程序 P#100 Q#101 R15...... 含义为#100=#101+15 7 h! V# e4 V# q# ?9 H
( v( g5 o- ~; d- o
3、宏功能指令
! q# V7 J; ]2 X+ K3 q8 `+ e, w0 Q# o7 [& K& U
(1)算术运算指令
2 S' p& L1 @' U ]9 m4 G6 ^4 X! V4 ?' A" e! P* c
1)变量的定义和替换 #i=#j
+ x0 h& P. w' q# M" q- h% r9 C+ _$ F2 Z1 P/ d" Y
编程格式 G65 H01 P#i Q#j: E0 k4 @/ C, ^$ L$ d* ^
例 G65 H01 P#101 Q1005; (#101=1005)
, n& o8 u/ l) c* \G65 H01 P#101 Q-#112;(#101=-#112)
4 J' h9 }& @8 U2)加法 #i=#j+#k
0 P% A8 [ w1 w6 q+ ?- l7 L编程格式 G65 H02 P#i Q#j R#k
5 ?9 X/ z9 Z! d% d6 y3 g/ k例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)8 }+ Z, b1 I0 d H6 ^% X2 j6 ]
3)减法 #i=#j-#k
. Y% a* R5 ^; [0 z: G编程格式 G65 H03 P#i Q#j R#k
; {6 b& V3 L8 l* L( W8 B例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
* j: M' \/ S! x. g* W( `4)乘法 #i=#j×#k
9 ]4 m4 M7 N$ d$ n编程格式 G65 H04 P#i Q#j R#k$ f& ?$ _5 T9 c$ a% l( v
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)1 F6 D4 f" S5 w' {1 t: a* T
5)除法 #i=#j / #k/ D! K" @6 y) U* O( q
编程格式 G65 H05 P#i Q#j R#k ]9 j+ p+ y% D; Y& O$ D. ?
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
$ H* a. c, L+ r, S* K6)平方根 #i= $ ?3 W; A3 ~* N' F& | f: n' ^
编程格式 G65 H21 P#i Q#j
+ F& D' v# b- D' B9 r例 G65 H21 P#101 Q#102;(#101= )
# X+ j: e* Q g7)绝对值 #i=│#j│
5 {' Z& d# Z. W7 c7 O编程格式 G65 H22 P#i Q#j3 D% g! M1 S$ B
例 G65 H22 P#101 Q#102;(#101=│#102│)
; O1 X7 w& t) u/ \' `8)复合平方根1 #i= $ K6 J" S* R0 ^+ H- e8 i: F
编程格式 G65 H27 P#i Q#j R#k5 n; g: M) l. M1 D! b) r; s' ^
例 G65 H27 P#101 Q#102 R#103;( #101= u& J/ Q0 w0 p K( S
9)复合平方根2 #i= % |% `. o( m2 A0 b4 }& B
编程格式 G65 H28 P#i Q#j R#k
3 w6 @: U9 }3 r4 i4 r例 G65 H28 P#101 Q#102 R#103
4 i4 o0 q# i- X4 P1 |6 N- U' E& ^% y
3 z7 ?7 ~7 z: m* H/ Q4 G1)逻辑或 #i=#j OR #k/ P. d k Z: X8 y5 [, ]9 {
编程格式 G65 H11 P#i Q#j R#k
& F; l) m% z9 v( K7 `例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103): h, e6 J: i% V E1 v2 D
6 Y+ L* j) X( V" L4 T7 Q J7 d7 T4 l
2)逻辑与 #i=#j AND #k, G/ E' _/ h& u. V. d
编程格式 G65 H12 P#i Q#j R#k
' T/ S3 |; k" G5 _* T例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
2 _/ F1 n' d3 L4 t% v/ F$ N* L
1 q$ X/ f8 H7 W& Y. K5 B) d
4 H' s$ X: W/ s/ W2 ]/ c
; V$ @9 a( i; I/ q& D" |/ D4 I6 m7 w
(3)三角函数指令
7 @' ]' _" W" j& K
/ q" _3 X {7 [" r4 L' M
: V- F' M: r) x! I' y' n& o) L( Q! D' M3 [
1)正弦函数 #i=#j×SIN(#k) T: _4 H' K( ]
; y! t5 E$ t, \8 _" U, k1 X编程格式 G65 H31 P#i Q#j R#k (单位:度) .
, T, Q/ @) U ]8 L9 T2 w/ \
8 ~7 B2 n* G+ p; \5 g0 [例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))" B6 S9 b e) _
2)余弦函数 #i=#j×COS(#k)8 [' l' h2 Z/ e; [* u: K2 m
编程格式 G65 H32 P#i Q#j R#k (单位:度)# t" w" W" O. ^' y8 x0 W! J2 p1 @
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))/ T: M# m3 a" I* m q2 U
3)正切函数 #i=#j×TAN#k: }8 `. q' z( R" |$ _
编程格式 G65 H33 P#i Q#j R#k (单位:度)
- [& K7 A4 X' h7 j5 w" s例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
+ p5 D) o7 r& V* p8 M4)反正切 #i=ATAN(#j/#k)
) b! L& b5 ~/ D1 r, ^7 I编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
{% a$ u, P$ f0 a例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103) H2 ^2 m9 @+ C |3 D$ P; c- {
* @; y6 F! u, X7 j K) V+ w
1 |. y9 {" ~$ W% g: \0 f/ B. ~5 x# i9 s1 r
(4)控制类指令
! [. |# W% y& Y0 q
. V0 g1 l+ `( `" n5 z* ?' w
( c4 x. W0 c7 ?! r$ ]! U
4 G: F$ \+ `1 z6 B. l6 }编程格式 G65 H80 Pn (n为程序段号)
( a) z+ V- P5 x: R例 G65 H80 P120;(转移到N120)
) t0 a- j: x7 y3 c/ u2)条件转移1 #j EQ #k(=)
4 t) N1 M7 t0 I4 i- D0 t( d C# x编程格式 G65 H81 Pn Q#j R#k (n为程序段号)5 X Q' H3 Q1 E( `2 {5 c) B
例 G65 H81 P1000 Q#101 R#102
4 c, X" E# X' [) s" S! U8 l当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
* Q; r+ ^. Y" A3)条件转移2 #j NE #k(≠)
2 G, f$ X0 B5 R$ p" T7 g% a9 F编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
- F( E; u* ^1 o- S例 G65 H82 P1000 Q#101 R#102
+ i- }. ?7 l/ Q7 M: m3 ~5 l当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
# K' h$ g$ P+ p4)条件转移3 #j GT #k (> )
; ^6 [* F$ x; d9 Y* a编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
* J9 y$ z% w7 K例 G65 H83 P1000 Q#101 R#102
1 v: y; v% J- r当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
% V& c$ L- i- K3 v, Z2 j* {& |5)条件转移4 #j LT #k(<)" |8 `! s! O2 E: H( m8 [2 ~; w0 |8 u
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
/ }4 ]9 o% }; [) B( k6 \$ D' C例 G65 H84 P1000 Q#101 R#102
6 D. D. C- ^- L- Y当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
$ C2 a1 J7 P% d4 g" X6)条件转移5 #j GE #k(≥)" x) x; s+ K) w
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)9 u% W G4 ^/ l3 y# x! t- E
例 G65 H85 P1000 Q#101 R#102
# b, |% |' X9 x; }当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。 \4 u1 p. p* `- v! Z8 v
7)条件转移6 #j LE #k(≤)8 l+ R* |# O5 a0 L4 i: @) \- z% N6 R: z
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): ]! F! h2 U. d* t
例 G65 H86 P1000 Q#101 R#102- Q4 Y, K: v- F7 ~8 h- G$ W1 N+ }- j' M
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
/ L' Y, Z% V% \. W0 t% G4 ?
$ _ U) C9 H" d8 M4、使用注意
4 q# A2 g+ q# |+ Q: m/ F# E$ w( F0 N% G5 X 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;" Z d; O- K/ D/ f$ s8 e2 w2 p
(1)由G65规定的H码不影响偏移量的任何选择;
$ Y7 c' N+ ~# Y4 Q. S(2)如果用于各算术运算的Q或R未被指定,则作为0处理;, ~3 _: w) R# T9 E1 b0 u
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
# s4 Z- I- F) @1 y; W0 m(4)转移目标序号可以是变量。
3 h2 i J" d; i1 m$ m# A9 n2 @7 V w
2 X. y0 q$ e8 R' I7 }! e$ d$ G3 p! p5、用户宏程序应用举例 :
7 v D9 o. W5 x$ h
3 O5 `4 \3 N! C& X$ n8 [用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
4 {$ Z- r- r" t5 J" k; p) b0 B0 L3 H5 t+ t2 S
使用以下保持型变量:
$ u$ X' Q( `' c#502:半径r;! u- d- A; p; g3 p5 r5 [
#503:起始角度α;
. b+ m7 H/ u% K- j& P& u$ H3 B' z#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;$ T% l+ j; e* R8 C0 M
#505:孔底Z坐标值;4 Q; ~/ e4 L' u" G- R3 K& l' ?
#506:R平面Z坐标值;
5 k! E( F' l/ W5 e& _9 q#507:F进给量。 ( z- Z4 M7 Z! X- _+ ]0 _
使用以下变量进行操作运算:. V7 ?2 ~6 `, B) i
#100:表示第i步钻第i孔的记数器; p. g& I9 C2 K! W) U0 ~' V6 W# P: Y
#101:记数器的最终值(为n 的绝对值);0 z# j9 r) a c0 ?" U7 Q8 f! ]
#102:第i个孔的角度位置θi的值; " H& d# U( x+ D" w
#103:第i个孔的X坐标值;. e( s0 G: a0 g1 t% H& x! o
#104:第i个孔的Y坐标值;
/ j+ j' _7 V4 r用用户宏程序编制的钻孔子程序如下: * g9 ?7 q U# [( G; T+ U4 R- t
O9010
. @+ x4 t' E7 C3 FN110 G65 H01 P#100 Q0 //#100 = 0
" A1 y4 z4 d; p5 t* MN120 G65 H22 P#101 Q#504 //#101 = │#504│
: l1 a7 ^6 [! a7 _/ [! nN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o# R. D1 b& ]* x6 r1 n5 V
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
7 l& \7 t, \; a; |" P* HN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n( j0 p/ I$ A q9 k" C) M
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
# \3 v& W4 c, h' L' DN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
3 T( z3 ]3 J- |) V0 F4 N2 T2 iN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)& R4 f4 M) }! w c* Q0 ?3 {
N190 G00 Z#506 //快速进到R平面4 ]6 i6 n0 L1 C, Z l* ]& L
N200 G01 Z#505 F#507 //加工当前孔 W# r2 t7 ] H' J" h7 W
N210 G00 Z#506 //快速退到R平面( _( o. }% ?) J* X4 _
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数4 G0 P5 \' u- k. I% [: P8 k# \1 |4 [
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
* V( X1 j; J+ w# z7 e Q3 }N240 M99 //子程序结束 & M, w2 G* L' B, z, T' Q+ Z
% }( u* D8 G, p( T; S- U4 B
8 Z0 F- T7 q1 x. X* X
$ g" o2 X6 _$ Q0 _调用上述子程序的主程序如下:
5 @/ [! p+ ?" i$ H8 \9 x4 HO0010
: f! s2 m* V* J4 NN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
" f0 Q8 p w( uN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔0 F3 o! Y w' ]9 W3 \
N30 Z20 //抬刀$ {+ A6 o8 m. _
N40 G00 G90 X0 Y0 //返回加工坐标系零点 " ?' c. S& g. Z% p
N50 M30 程序结束& _) X7 I @; p! I3 m/ J3 d: j
设置G54:X=-400,Y=-100,Z=-50。
3 j9 U6 c J0 T! { w变量#500~#507可在程序中赋值,也可由MDI方式设定。
* f6 s1 h+ E- `" Z/ u$ W; _- d: q* P- D. T& y. m% W
B类宏G650 F* A" S0 c8 `* O) ?6 \% a- y9 g
- |& `( V* J* S1 c/ b
简单调用(G65)' T6 W$ ]( h7 g, {; U2 T
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。) s* K" O8 ]0 H* Q3 F, l4 ^2 S: h1 _
格式 G65 Pp Ll <自变量表>;
# k* t S0 r+ D" j 其中: p 要调用的程序号
: P9 W9 K% S( v3 G l 重复的次数(缺省值为1,取值范围1~9999)9 F0 O! k5 [* N! h8 \& \
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
9 P& S" s5 H$ Z1 G2 W1 b) h- e* t: u 的局部变量。
" B" t' D: d; l3 F$ Z5 c0 L% `
6 N3 \0 m2 q8 ] 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
. a, }5 y' Q. N# q* y" M7 b0 t5 t
! a, h2 Q' v9 Z, w$ Y/ T地址 变量号 地址 变量号 地址 变量号
) i, {6 q, j5 E& J. m2 i. ~A #1 E #8 T #20
6 d- \4 ~& h6 D, R9 k" [. z4 SB #2 F #9 U #21
. j( b; F7 n+ W5 FC #3 H #11 V #22
3 V$ t( h/ s$ a8 S, EI #4 M #13 W #235 P8 I+ F, A* K" l& _) E' h
J #5 Q #17 X #24
( O {0 ], m% d. NK #6 R #18 Y #25
$ A) r; T. I* \+ w yD #7 S #19 Z #26" n$ n5 x! T K5 y0 e7 a+ l
☆ 地址G、L、N、O、P不能当作自变量使用。* u% p% d9 R8 K. V6 d8 P7 {
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
* Y5 {2 \: H- o: L) p! ? $ b" Q3 L+ c% ?7 ^' |! F
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使5 K( C7 a4 A0 D( F! H
用的字母自动确定:
5 a7 g" \" X1 g; |0 W地址 变量号 地址 变量号 地址 变量号* `2 u2 A* H+ M8 F
A #1 K3 #12 J7 #235 `0 A3 j7 F: s
B #2 I4 #13 K7 #24% P% H* C& K% z" B
C #3 J4 #14 I8 #25. }- ?4 O+ p( G- o5 w
I1 #4 K4 #15 J8 #26
4 s3 q$ W1 M1 [5 j6 j* fJ1 #5 I5 #16 K8 #27
- G! R* o' u, x9 J8 s OK1 #6 J5 #17 I9 #283 H! D9 s& {/ @2 T8 u# W$ v
I2 #7 K5 #18 J9 #29+ F0 X* g& Q1 L; e I# l
J2 #8 I6 #19 K9 #30
, m3 E5 t9 W9 l2 U) n" L. {8 SK2 #9 J6 #20 I10 #31
$ e% V! i9 P* s5 o2 x+ q% UI3 #10 K6 #21 J10 #32) p; u. V2 d/ x2 j9 T- ? M& ]
J3 #11 I7 #22 K10 #33; C. _0 r- |& ?4 i
☆ 在实际的程序中,I、J、K的下标不用写出来。. [8 \5 G$ G; J
注意:
( ^- T% w1 @/ D1 v4 \" ?* q☆ 在自变量之前一定要指定G65。
( a9 c9 O6 M* b8 L: `- D- ~☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
9 D) K5 S4 l3 ^. g( @☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
. r" _ k7 d+ `* [" W' B/ c0 ~☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。0 k4 ?4 y9 E5 A
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
! F4 H" C; z$ @6 U0 p之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|