|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 9 A7 c9 ?9 L; R
详解A类宏
. `7 |0 G0 I+ p* V/ ]7 M/ `分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
6 L, U9 `1 {+ p' A 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。& L1 b( ]* w5 S: Z
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
' E2 t+ E8 L' L- I- U' l8 r p 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。5 c' I+ u, o: K, U4 r l. |4 K
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
. f% N: O2 t; P( T1、变量. Z, R8 E4 c, Z; h U+ R* f, o% k
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
: I, z, o5 S# B$ B' ~(1)变量的表示
' y! r% s& Z, X5 R) l. m" [变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
Q' I1 a: \0 V' u+ v例:#5, #109, #501。/ j* T. H* H" u- Y
(2)变量的引用, b ^6 d% @' D0 O) D t
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
( |" S {0 C$ Y* V例:对于F#103,若#103=50时,则为F50;2 K0 R1 [* _2 k8 o. x, ?0 F
对于Z-#110,若#110=100时,则Z为-100;
0 i5 J8 [- X8 T4 v: w对于G#130,若#130=3时,则为G03。
( t; b3 d7 U* \- F+ r) z(3)变量的类型 . Y9 j0 y+ G T7 }$ y+ w$ L
0MC系统的变量分为公共变量和系统变量两类。
+ N& ~7 q& S Y4 A2 ?, q6 d1)公共变量
, a$ F; W6 z- z* ? 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
3 C/ B; j) I( m- @公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 : v, J9 x6 c+ X5 s# D/ W' L
, T8 q, F3 T. h; f+ G% s. r9 t
* w# V8 m" w6 C8 k
' j( O6 u* v, N0 U/ F2)系统变量 + K3 F) A0 v7 H0 i( o) W$ d; Z! e
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。! s# d- r( e6 I% d5 \+ M& [' F: l
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。1 W* ]/ m4 o1 ^) X7 W
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。4 ~0 N0 u" d. n8 [
2、宏指令G65' h* W. R V P9 m+ `/ t5 [
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。( {( A9 `! \( p; E7 Z: `. ~* B
一般形式: G65 Hm P#i Q#j R#k
+ t0 ]) j3 a1 d7 `* _7 S/ q式中:--宏程序功能,数值范围01~99;
& L2 @8 k, T+ w7 s6 o5 ~% A#i--运算结果存放处的变量名;
: ^) {. R0 V, K' S! @$ ~#j--被操作的第一个变量,也可以是一个常数;. u) a6 S# d2 z
#k--被操作的第二个变量,也可以是一个常数。6 H7 t' l( q4 Z+ v; B& z6 u7 U& d, I
例如,当程序功能为加法运算时:
) w" F- ^1 L1 S: }, ~! T$ n程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
* g) R6 _, B( O' U& C& m3 D; F程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
3 L& X# B3 {) G* y程序 P#100 Q#101 R15...... 含义为#100=#101+15
9 \3 C3 x# ]+ g; H$ `7 b4 W# L: e- j- Y6 ~0 S s K. w
3、宏功能指令
$ T2 x9 G6 `7 v. q( ~2 u
1 _9 [* \5 e4 R8 r- c0 I0 ^2 y# e(1)算术运算指令 8 n; E" F1 @! q0 l, s* ?* q
1 k: l4 H( R0 E) M
1)变量的定义和替换 #i=#j 3 w5 t3 {$ h E8 l* r7 q
: ]7 z/ Z9 \$ x) R1 }. q7 X编程格式 G65 H01 P#i Q#j7 x" `9 K, g6 K8 t- b6 r
例 G65 H01 P#101 Q1005; (#101=1005)
( K7 r, Q u6 ]: ~G65 H01 P#101 Q-#112;(#101=-#112)
3 C) u! {3 X B! |9 l2)加法 #i=#j+#k: P/ M) Z0 N1 f
编程格式 G65 H02 P#i Q#j R#k
1 D, V% E) @# d! E例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
- \- b [5 G: n5 Y- K3)减法 #i=#j-#k' j l% T9 h+ `. H7 i9 E# }
编程格式 G65 H03 P#i Q#j R#k
! s2 m! t2 ~, K. s8 ~2 K' b例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
* W2 l" k8 @ F* Y4)乘法 #i=#j×#k
! ] m* |' w3 V" y( L9 I/ M编程格式 G65 H04 P#i Q#j R#k3 S6 I( a9 W" h @% g7 [* h
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
+ z( c' I7 s# M) G5 X/ u5)除法 #i=#j / #k1 W" M1 `4 |, Q1 B
编程格式 G65 H05 P#i Q#j R#k
: b# A# n' Q8 f0 G% }例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
/ e0 g9 t/ ?9 j' Q t/ u6)平方根 #i=
( s& M8 H" f" ]6 K- M; b: I0 ^! r编程格式 G65 H21 P#i Q#j
* r- }+ x+ N/ |7 V& [3 W" |/ M* l; p5 }例 G65 H21 P#101 Q#102;(#101= )- g4 s, y( Q3 W5 J' E
7)绝对值 #i=│#j│
1 P4 i- m# g, q8 P6 P编程格式 G65 H22 P#i Q#j
% w4 d& L1 C3 n& B) [- E8 m; Z+ d例 G65 H22 P#101 Q#102;(#101=│#102│) 4 w: T6 l" L( e; u
8)复合平方根1 #i= 6 H4 A1 F( f' b3 \5 r) T
编程格式 G65 H27 P#i Q#j R#k0 d( O8 F- A0 `" c2 O4 z
例 G65 H27 P#101 Q#102 R#103;( #101=
( p; R& ]6 e' S n9)复合平方根2 #i= ' i8 V+ x& Z( C6 f n, F! I: r
编程格式 G65 H28 P#i Q#j R#k
. B( m6 N: v# p& L; \, M: [例 G65 H28 P#101 Q#102 R#103
0 O0 k0 j8 e4 h c- q' Q& t; a2 A/ j0 ?3 j6 Q% b, `
1)逻辑或 #i=#j OR #k W& }5 V% c" y- w% _
编程格式 G65 H11 P#i Q#j R#k
& `/ p8 }# ~! q. Y$ t例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
1 a) q! n; d# m3 G4 T/ x, n, I
" v R7 x: Y% E( T0 P% o; S2)逻辑与 #i=#j AND #k) u+ Q2 t: g8 K' K
编程格式 G65 H12 P#i Q#j R#k
. @( [0 T* v+ G7 j% N. ?) q例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
/ l& D% T5 L( Z. o
1 d( P2 D) ?) x2 q/ f
( ~' J% E: V" f" y Z$ v
f4 i6 z0 J1 a+ \' c$ ^+ l
0 H' Y$ J: c$ g! }0 S* U(3)三角函数指令
# R% y, q4 |, p/ ~2 f8 X- K- v
4 [2 S* L. g4 ?1 n ' O; Y; n$ n# \8 ~
b) ^4 I8 h! u: ]# L& H1)正弦函数 #i=#j×SIN(#k)
. x! V& p/ d, U% u7 d% O
1 C- [( H+ y. z) W) W8 i编程格式 G65 H31 P#i Q#j R#k (单位:度) .) v7 o! H8 t) \2 i& ^+ g: v
7 S& X9 v( }9 \0 ~1 ~例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
# X {! X& V2 k0 a' E' s$ P2)余弦函数 #i=#j×COS(#k)
+ g C% ~" ~4 W编程格式 G65 H32 P#i Q#j R#k (单位:度)
" [% K, N) d5 I* s5 _) F例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))) X+ N7 f" ]3 e, A
3)正切函数 #i=#j×TAN#k/ I: Z/ l- L5 `% h; Y
编程格式 G65 H33 P#i Q#j R#k (单位:度)
7 t4 e0 Y: m( q, J3 m- O例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)); x3 U e/ K' O: B* x7 ?
4)反正切 #i=ATAN(#j/#k)
) ~* F7 D' |( j. F编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)) a. q: D2 j2 Q9 m3 M
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
: r- D% q1 K- e5 k7 _ ^; j: I; _" u$ r6 ~6 O/ @
5 @4 |4 c6 }( v( O+ q
: m6 X$ M- Z. G* V1 N% F(4)控制类指令
2 C# {$ O) x3 M& D+ [" ?' l9 F2 u
+ T9 f. @" C$ M+ _+ ?% ?. E3 M
" M) f7 I( {$ Q
# ~( O8 E# |; r编程格式 G65 H80 Pn (n为程序段号)3 D, ~: i: l* e. e* C e8 C
例 G65 H80 P120;(转移到N120)
# l* N3 V9 G d4 x9 a2)条件转移1 #j EQ #k(=)8 x$ G: L, Z1 D
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)! N( Y3 n3 o1 h! l0 w) z
例 G65 H81 P1000 Q#101 R#102
% ^2 S7 b6 C% }, _& E; r" b! ~1 q当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
. R. u! G3 d6 o$ \' X9 T3)条件转移2 #j NE #k(≠)
5 R* z+ G1 {4 I编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
$ p! m& G3 o1 _$ {2 T例 G65 H82 P1000 Q#101 R#102- p4 A' B0 ?' D. H
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
4 T, q x5 f' h) r, k% r% p5 ^4)条件转移3 #j GT #k (> )
5 m* G' D2 {; _' i) {$ H/ ^编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
3 k5 F5 U0 a7 P: ^7 H( W: r& O- Y例 G65 H83 P1000 Q#101 R#102) Q: z# {2 }8 V' ?: B1 L
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
( j. i: U8 k5 C3 x' d) r$ y+ M5)条件转移4 #j LT #k(<)$ x K! w9 p4 k
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
+ _: d, _9 L- [5 k例 G65 H84 P1000 Q#101 R#102 ! ^& R, F) f# a% t" }& f
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
1 i `& U1 z" e6)条件转移5 #j GE #k(≥)* \! k$ p$ z; ]" |2 x
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
: h: B! o1 ~/ D例 G65 H85 P1000 Q#101 R#102# {- D: r6 I& N' m- X
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。2 w/ G, Z1 M- ~8 T# u1 E, B3 W# w
7)条件转移6 #j LE #k(≤)
) \ ]. w2 x3 ~; b编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): p" E3 Y# [( {# L8 H8 a
例 G65 H86 P1000 Q#101 R#102
( _$ f4 ^! l& `8 _: x3 L当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。( R1 ~% Y+ \5 K% R0 A& i. _
% V4 A7 u3 l' r# Q, F: L4、使用注意" h% v) R* G& [' Y
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
' a7 L+ H8 E' p8 i. ](1)由G65规定的H码不影响偏移量的任何选择;% X5 ^! n Z2 S7 s9 _% O
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;" M$ m& B- s, V; l1 a6 M
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。, g; C8 j8 G. O. L/ J) h: a
(4)转移目标序号可以是变量。 ( T4 e/ B8 r0 u8 q
" L" @; @# o$ O7 ]
5、用户宏程序应用举例 : * a8 }" _* S! A/ }
, s% C7 T% o% D, g% L! x
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
R# Q- @2 [& { _; \( q' i( X* F. {/ l6 @* t9 N% s% U+ `7 e2 I
使用以下保持型变量: x- R& |7 b0 q6 i5 B7 W0 C
#502:半径r;
8 o/ m w- J5 \8 x+ o: f7 |0 d7 ?#503:起始角度α;
" W' E/ U% d0 ^#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
( s) H* f1 H, O) @7 d. a#505:孔底Z坐标值;
# S* {7 [5 Y: y* m* H#506:R平面Z坐标值;# @5 c! U8 c" E
#507:F进给量。
5 z! W" J* }3 {0 Q* ?) z使用以下变量进行操作运算:
' q8 Y9 ~) z& S; E! h ?#100:表示第i步钻第i孔的记数器;
) M% k: D$ K. Q& O#101:记数器的最终值(为n 的绝对值);
/ _( I3 \. o- N# H6 e, u3 M#102:第i个孔的角度位置θi的值; 9 q+ U4 A: u' N) N: h a0 t; E
#103:第i个孔的X坐标值;
* h j6 S% t1 E% w/ Q- A#104:第i个孔的Y坐标值;
* f5 j7 T/ q9 N用用户宏程序编制的钻孔子程序如下:
# o& n9 M1 y. `. T7 y4 DO9010: S, D% H. C- P- k3 G. [
N110 G65 H01 P#100 Q0 //#100 = 0
0 @! s1 W1 F6 o/ O; A; oN120 G65 H22 P#101 Q#504 //#101 = │#504│( L, z E0 j/ U6 J8 n( B9 p- o
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
3 v$ K5 ~$ n- }- F& K* gN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5048 H- V" _0 ^7 w. Z* }; X
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
% s; I7 D! N) y0 V8 N% ?N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
1 F* h+ @7 x/ h0 {! R6 dN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
9 M7 H' Y% Z6 {9 BN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面), W* N/ i/ A) g$ @$ ?$ w' Z3 _, z
N190 G00 Z#506 //快速进到R平面
' v" t! q: T, [! B/ M0 ]7 AN200 G01 Z#505 F#507 //加工当前孔, ]- {+ s W/ ]; V$ i
N210 G00 Z#506 //快速退到R平面+ {! y" W2 {, b! E# t2 C
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数3 p; l. x9 A- G( R- a" E# s
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
o3 ]2 q' G+ E! O2 E& |/ o0 CN240 M99 //子程序结束 * E2 ~' u4 X3 x! Y: f" o
# ? K7 P! O$ y; Y, X' B5 T& r& e ( D- f; D7 q0 C$ P0 ?
9 Q; x5 U# n, @1 O; _ }
调用上述子程序的主程序如下:
/ L1 m% N( k0 X8 j' q1 Q3 Q# q/ ^O0010' S- v9 |! Y9 R" b+ L3 D4 K; w+ e
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
. G; g7 d# _9 I9 H& I3 _ }. HN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔6 I2 t s1 k* F" l2 W
N30 Z20 //抬刀
5 s: `( H/ [8 {6 T- H. K( l+ BN40 G00 G90 X0 Y0 //返回加工坐标系零点 , Z+ U) H7 M" n( A' w
N50 M30 程序结束
" U+ B3 a R. S \" B" U: b: a设置G54:X=-400,Y=-100,Z=-50。
5 i* V( x" H. F变量#500~#507可在程序中赋值,也可由MDI方式设定。 5 x, W# P9 X5 u6 ?% u
! B5 X) s; v+ ~8 Y8 ^8 v+ JB类宏G65
o6 |5 u$ [8 O- m- t8 m+ d
, u4 p+ `& k. i简单调用(G65)
# P# D" W; P+ P& j( s% | 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。6 s1 ^0 l3 u, G
格式 G65 Pp Ll <自变量表>;, \" r, D' |7 l: d$ P" m4 _# Y, @2 ^
其中: p 要调用的程序号5 i7 X K( r3 C; W# Y
l 重复的次数(缺省值为1,取值范围1~9999)* M C( @- w+ t. Q% Q0 h1 L$ D
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
& v8 x8 `& j0 }4 r5 W 的局部变量。- W8 j. }. |5 t: ?7 x) ?
' @% j9 X* ^3 H* c# Z: | 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
- I0 I, |( o4 B- _$ z+ ~' [! Y0 Z" a- X
地址 变量号 地址 变量号 地址 变量号
! I4 a) o% G) C( q- W* RA #1 E #8 T #20) V; j% b, g4 _1 x/ X
B #2 F #9 U #211 F& J1 |/ {/ K# r3 }
C #3 H #11 V #22
7 W: `( M/ o5 O2 j2 p8 J: V; J- yI #4 M #13 W #230 j7 x/ [3 W/ L/ |$ k% G# D
J #5 Q #17 X #247 o: ^/ Z; t% H+ b3 ~! ~" Z7 G
K #6 R #18 Y #25
& W) `& B T" O4 xD #7 S #19 Z #264 Z# G- y) N* b+ A: v
☆ 地址G、L、N、O、P不能当作自变量使用。
( Y8 z9 ~9 u; b7 ?" f☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
3 ~/ n! S2 g3 x3 {: t # ?- [! m1 q5 f e9 a; H- `- F
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使7 k. x1 O* R! W" U8 }
用的字母自动确定:- s( v4 `3 k8 V$ l r
地址 变量号 地址 变量号 地址 变量号, `: f/ b, k! D' N2 x+ v0 g
A #1 K3 #12 J7 #23+ @6 b7 P" L A; S) }7 T/ K( P
B #2 I4 #13 K7 #24! x* V7 a3 J; W
C #3 J4 #14 I8 #25% c6 L! I3 ]* c0 y2 i. ~6 n
I1 #4 K4 #15 J8 #26( l: A9 g1 H/ a8 @) Q
J1 #5 I5 #16 K8 #27' c5 p) i+ B+ M- N$ h. j9 d
K1 #6 J5 #17 I9 #28
! h7 t4 B0 Y( Y- L/ d: q# WI2 #7 K5 #18 J9 #295 O4 R9 }8 E! C/ {
J2 #8 I6 #19 K9 #30
3 I" U2 L" m g. j, UK2 #9 J6 #20 I10 #31
4 H2 f1 [7 h% C HI3 #10 K6 #21 J10 #32% |: i1 J% }, [
J3 #11 I7 #22 K10 #33. g0 d2 z0 l+ i# j1 ]
☆ 在实际的程序中,I、J、K的下标不用写出来。1 ~$ x8 }7 w; p s
注意:
% P" ^9 U6 ?* P' \0 i7 k☆ 在自变量之前一定要指定G65。
U, l M) {/ C/ ?5 e☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
4 P. e; t( F5 B u☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
8 b2 P: b6 q% b5 R1 g9 R☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
/ S8 [" F* Q _4 w( q ^% P G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环. |- a7 S; C0 W. V7 e
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|