|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
( C3 A2 O& z& ?$ G详解A类宏
$ L k9 L3 f0 V7 l# k2 k分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。$ u {0 E. X G* t) p1 t% T
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
5 m! J# q! S, ?+ _ 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
5 [. O$ W3 B& P1 K/ Y 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。* ]' ^0 L" g1 o( p+ L4 g! `7 v7 r E
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
! V9 ~! v2 s$ q4 E' M1、变量
' p! G& g8 O3 R5 `0 g' d) c. C 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
' h% d/ |4 r2 u5 e(1)变量的表示
2 R9 B) B/ _, C变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)' \2 r# T6 L5 H7 K+ R! |2 N, F
例:#5, #109, #501。8 K) }; g7 U( J3 Y5 N0 p
(2)变量的引用
# G3 N7 W! ]8 ~* m) f0 l 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
8 Z, o8 K2 F) Z7 v3 |例:对于F#103,若#103=50时,则为F50;6 k) A0 _% T7 ^# v2 H0 Y
对于Z-#110,若#110=100时,则Z为-100;0 X3 s) Z7 f; k9 @
对于G#130,若#130=3时,则为G03。* O5 ~' r( F9 Y
(3)变量的类型
0 k, ~: i4 k" X& e' s3 V# k" U+ A 0MC系统的变量分为公共变量和系统变量两类。
- t# t" ?$ n# e t1)公共变量
0 R6 Z1 `" h# K3 j0 d4 A1 D) t 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。- F+ v: `+ @& m, G- s( S
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
$ F! P/ d$ Y- F" s, W G, v8 Y2 O* x% `6 P6 T8 y4 E. r
# M" \9 { T* I$ q( ~0 Y G: u5 Z) k
2)系统变量
0 b0 h$ ]# S3 `/ Q+ c 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
8 u; A+ @% f, _0 y8 i7 B% l: e 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
6 ^- ?3 r( B: S" h2 M& [: W 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。: D7 U; W |. [
2、宏指令G654 t- E- k9 u# ]; B
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。7 {' R: W% d5 J; a
一般形式: G65 Hm P#i Q#j R#k
; T5 o0 V$ ]' K式中:--宏程序功能,数值范围01~99;' J4 x7 a7 q% j
#i--运算结果存放处的变量名;
) A' V- H+ J6 C% m e/ R/ F3 N#j--被操作的第一个变量,也可以是一个常数;7 i+ H2 M$ i. L3 }, ^
#k--被操作的第二个变量,也可以是一个常数。+ F5 B" d& Q0 y3 v& n- A. G
例如,当程序功能为加法运算时:
& W! x% E& b: v* p3 ^程序 P#100 Q#101 R#102...... 含义为#100=#101+#102+ q& M0 H6 f w6 m+ v' h
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102. k2 [5 J* {) A. Q& n. Q* ~& m
程序 P#100 Q#101 R15...... 含义为#100=#101+15 ( y7 G/ I! d9 g+ q' S
0 E( \' A0 z$ F4 A. I+ o9 C
3、宏功能指令 # S( n6 w1 a% w* o1 L1 Y
' d! l- K* I' U' _; p7 j/ s(1)算术运算指令
- A& l9 m w+ {: q! v! K1 u2 ~
( t4 `; A. O$ `6 P6 y8 ]6 {( G1)变量的定义和替换 #i=#j / r V8 S4 q) Z3 F7 ]/ z" v l
: V$ n, K! O6 K0 F
编程格式 G65 H01 P#i Q#j" t \' F: x# l# Y1 S4 E- G
例 G65 H01 P#101 Q1005; (#101=1005)
! v7 ^4 G9 N$ G( L8 qG65 H01 P#101 Q-#112;(#101=-#112) 9 m8 \" S" F/ }. B6 ^
2)加法 #i=#j+#k" s8 K. @2 c6 Q& D; i
编程格式 G65 H02 P#i Q#j R#k ; g" H1 B% I7 `
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
* t& l8 |' \% I Z, W: _7 B8 C3)减法 #i=#j-#k
2 d' U/ j6 a: k5 R编程格式 G65 H03 P#i Q#j R#k
8 S7 e+ U* ~) W7 u例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)6 W& ^% h; d/ U
4)乘法 #i=#j×#k) d* N5 j7 ]/ \8 o" W/ m3 p
编程格式 G65 H04 P#i Q#j R#k
( c! u4 o0 ]) J0 i( l( p% N$ g7 l# u例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
/ y3 s7 q0 q' \5)除法 #i=#j / #k$ \7 N5 I) B. J+ \5 A* ?9 A( H
编程格式 G65 H05 P#i Q#j R#k8 M4 v0 T" O6 l5 I
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
% F' s( E5 T0 p2 c w' a! O6)平方根 #i=
! `# W8 v$ }) \+ f2 j3 G7 s# |编程格式 G65 H21 P#i Q#j
( |1 C: J* h1 m f5 J例 G65 H21 P#101 Q#102;(#101= )5 e6 _$ ?& L1 s( w; B
7)绝对值 #i=│#j│6 t4 r/ [2 b6 I3 k+ k
编程格式 G65 H22 P#i Q#j& e8 k2 K1 n1 x/ W! U
例 G65 H22 P#101 Q#102;(#101=│#102│) % @* _& t% y6 d7 B9 L4 X
8)复合平方根1 #i=
7 V4 N7 o- q4 E7 R: D" ?6 W3 a编程格式 G65 H27 P#i Q#j R#k. }% D& c; Z- g$ [
例 G65 H27 P#101 Q#102 R#103;( #101= / |; D. X6 i9 t9 N/ n
9)复合平方根2 #i= 5 l# k$ p& h2 ^* H! m
编程格式 G65 H28 P#i Q#j R#k
: e4 g, }% H% a+ w0 W( g+ M2 @例 G65 H28 P#101 Q#102 R#103 ' X8 ]6 Z9 n5 L7 N& i, C4 L
2 V2 j' F3 y$ S! F S
1)逻辑或 #i=#j OR #k! U/ o9 }! I. q' T6 H
编程格式 G65 H11 P#i Q#j R#k
& M* c+ Q2 i8 y# a例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)8 G: ~9 d& M- A6 Z) w7 Q! C
) l2 k! V, ]4 h, \2)逻辑与 #i=#j AND #k
2 k( z3 h; F# S* }2 v( R+ M编程格式 G65 H12 P#i Q#j R#k
% l0 v% D- M1 a' L+ z- h例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 ! T+ \* y8 R; z! y
4 k* {8 ?) ]( A, I4 n3 U) v: j* ]- R/ p0 d2 y# d1 F* e
( F* N! ]8 v. b1 i; m+ V) T# m
- r7 Q; e: B( ]5 H3 @(3)三角函数指令
; ^$ g/ Q6 E+ T' Q6 t; x, N v2 Q
7 g6 D7 ~. c! B5 M. v
3 k# } @ [+ A i5 R1)正弦函数 #i=#j×SIN(#k)
% b4 [! @3 |1 D. R* ~5 v" \; I" s8 S! E0 c& m" |
编程格式 G65 H31 P#i Q#j R#k (单位:度) .; A2 h4 |: p0 ?; {. W8 h3 w5 \
' F9 a) X+ x. w' i( m. O
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
( B3 X- l: g& Y# I1 h2)余弦函数 #i=#j×COS(#k)
( I5 u/ X+ U. I编程格式 G65 H32 P#i Q#j R#k (单位:度)
: V5 l I$ c3 j* ^ H6 j例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))* Q& j' n7 `4 v8 C7 }0 c; l" h
3)正切函数 #i=#j×TAN#k
! u$ ^$ S7 q3 D$ R1 }( W* i$ I5 M编程格式 G65 H33 P#i Q#j R#k (单位:度)6 c9 Q5 B/ x0 W" u ^$ f" V% ~
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
( `, F1 A( Q9 K. D4 J, b4)反正切 #i=ATAN(#j/#k)
- V6 W2 A7 j( {/ ?3 o, }编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)6 y4 c; j T, i1 q9 c
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)# B6 e; L8 X; [) s* y
6 C% \8 F+ d" ?+ P 4 Y u8 W5 Q" B. W% ~. s6 N
( [2 G& M' h9 m8 g
(4)控制类指令) N/ ?- L0 [ q' O8 Z8 `& ?1 T
* h. C& B; ?. a: [ G0 f: ? ( t | F+ p; ~( X" [
9 _$ c' ]# y/ W: N7 J( x: Z
编程格式 G65 H80 Pn (n为程序段号)
( N M! Y* g- K5 d, _例 G65 H80 P120;(转移到N120)
3 _8 d1 l. ~9 l4 \/ [9 X2)条件转移1 #j EQ #k(=)
! A, s9 e Z( X, ?, g' U+ P& @7 Z+ h编程格式 G65 H81 Pn Q#j R#k (n为程序段号)' S4 ?' l! w* L0 j/ \+ K+ E3 j
例 G65 H81 P1000 Q#101 R#1025 J4 M; j% P9 P j% }7 M6 j" F) t
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。7 e, v# f x6 H2 l* M. K' O
3)条件转移2 #j NE #k(≠)
/ m8 H! U. ]" H- g; x, X编程格式 G65 H82 Pn Q#j R#k (n为程序段号)& Q0 A; a5 ~( F/ U5 q& o
例 G65 H82 P1000 Q#101 R#102/ {, P( h1 i; i8 V% Y! f+ Y ?
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
# X' I+ L) `* a4)条件转移3 #j GT #k (> )
$ ?" X- H5 C1 A% p* d" U编程格式 G65 H83 Pn Q#j R#k (n为程序段号)8 o" s3 Y. b. a& W
例 G65 H83 P1000 Q#101 R#102# S) V& `9 S! t6 ]& o. Q: w8 w
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
) Y. ^" }* z) I5 E2 l& |6 [6 p5)条件转移4 #j LT #k(<)
X9 g: u% h, P: d. h7 `7 m( e! \. j编程格式 G65 H84 Pn Q#j R#k (n为程序段号)8 N( \. g9 U: u- w
例 G65 H84 P1000 Q#101 R#102
% R" [- H9 D. g# w y- Q9 U. a当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。( o7 u$ l, m# L2 A" M) E4 }* N
6)条件转移5 #j GE #k(≥)" f( h4 M* g( h2 M+ k$ n* I9 p3 u
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
2 `. I h! z7 w+ Z. C例 G65 H85 P1000 Q#101 R#102
7 G4 |3 R) G E当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
. ~9 C2 V+ C% l% f& T$ `* K7)条件转移6 #j LE #k(≤)( |% [" I' X9 p- I( @
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)6 M# q6 Q8 n7 z- s- k7 @8 @& d& q
例 G65 H86 P1000 Q#101 R#102
. M; w5 U0 }1 H( ~9 U当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。! H+ u& m/ q$ x! S" `8 k b* l
9 c" |; i2 B, |, L+ l
4、使用注意
: w8 A6 `, K1 }% f; q% J0 n 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
4 Q7 | V K+ @' @4 g$ y(1)由G65规定的H码不影响偏移量的任何选择;
% W- g( |$ C, f. @) p1 Y \9 q# N(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
' `& u ]" |9 ]+ v7 v(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
8 g* A1 b+ L0 y! U0 A+ P" |+ \9 r* J3 q(4)转移目标序号可以是变量。
3 w" r% N1 k0 H6 r# @- a$ O% m
4 B# ]' K0 ~- T- T, T5、用户宏程序应用举例 : 2 k, p7 Z0 ^( z% G6 J X8 z
7 ^) r% R/ r4 m/ x, z用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
# W! p9 G4 _, Q* Y {' a- k: m1 V
使用以下保持型变量:, f" X8 A; o2 ]- _9 T) O
#502:半径r;
* o8 Y( X8 A$ f#503:起始角度α;/ N* d% k! w2 R
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;7 a) |* J% ^, a B: L" m0 H
#505:孔底Z坐标值;
" S9 W1 M: [. V#506:R平面Z坐标值;
4 p0 }3 U9 @ f# @#507:F进给量。 2 _3 Q# r0 Z) U1 l) N
使用以下变量进行操作运算:9 B9 h' f2 u( F" \; x( ]3 L
#100:表示第i步钻第i孔的记数器;
$ z. v$ }3 C( Q1 F; F4 p ?+ c, ~#101:记数器的最终值(为n 的绝对值);
/ [) Y* I$ b9 w) U#102:第i个孔的角度位置θi的值;
7 l9 `" C9 D* l#103:第i个孔的X坐标值;- e$ q% l& @5 Y" r/ V
#104:第i个孔的Y坐标值;; k/ S' M2 N: W# U$ \ v4 I
用用户宏程序编制的钻孔子程序如下:
1 [6 h B) Q8 `5 V3 ?O9010
* |! G3 m: M V0 E" [! MN110 G65 H01 P#100 Q0 //#100 = 0
; R3 t, ]4 M8 R+ {N120 G65 H22 P#101 Q#504 //#101 = │#504│
( U# ^2 t. X# e( u5 b$ H8 m9 GN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
' h. E8 }6 p) Z' X6 @8 a. `& {N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504& v% w0 X3 O8 N2 O, G) G
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
' M# ?) ?; M- j5 G: M/ lN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标* ]1 A6 a: h) H- m
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标: y+ N' q# p/ h6 F
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
* z- p, k: z' ^# X: _( lN190 G00 Z#506 //快速进到R平面$ X" l5 ~; a' E \
N200 G01 Z#505 F#507 //加工当前孔& W: E5 k0 u/ z
N210 G00 Z#506 //快速退到R平面% r( E) `% a9 x# P4 ~4 O9 j- P
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数4 P- x8 B. \, |# e2 x& e+ c
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段! g: p$ S8 [' Y- }
N240 M99 //子程序结束 8 a, b7 O+ y8 y2 m- a
: Z5 a+ p* t0 ]
: T0 C( e# A4 {$ d
8 ]8 ]+ U) P8 k# G% Y; L% {调用上述子程序的主程序如下:
4 n6 O( D" r6 ^" ^0 WO0010
( e7 X. w. a; @) Y6 A2 HN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
2 U* M1 Y' d! HN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔2 o- @% C, K- S( p: K
N30 Z20 //抬刀' v- I( d: x; T5 W% a- ?8 x, j
N40 G00 G90 X0 Y0 //返回加工坐标系零点 % `/ \1 d! f; E+ I
N50 M30 程序结束0 z; X: |# ?! I7 }
设置G54:X=-400,Y=-100,Z=-50。 }! m8 C, {, M6 _( F
变量#500~#507可在程序中赋值,也可由MDI方式设定。
& q+ R, ^. U% w) k J: |$ ?6 a0 K
B类宏G65
0 l* J, ^% E. |
& o) w8 K {. t( d+ \简单调用(G65)
' h b; ^( {: o7 I2 q1 O 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
5 l- y* ]- v" H! h0 q# m) K' v/ U( O 格式 G65 Pp Ll <自变量表>;. }7 j2 H. r% O F
其中: p 要调用的程序号
. E# I- A6 {. c# K$ ] l 重复的次数(缺省值为1,取值范围1~9999)/ ]* z5 s. F5 B) |* ^# {" r
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
6 z6 g2 F6 N- I. @1 ] 的局部变量。
* B/ Z0 I8 K, R" l& l) Q6 F3 L0 \. g! \0 B
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:( N" D2 e8 U- p
3 U! d0 x5 A4 U" G地址 变量号 地址 变量号 地址 变量号
4 b1 M B- M0 F& PA #1 E #8 T #208 v6 }1 _; C6 D7 A- Y+ ^" }8 ^4 g
B #2 F #9 U #21- n: d! I7 J4 W# T9 z- h
C #3 H #11 V #22+ q' n0 }7 r3 f( Z/ {! v! b
I #4 M #13 W #234 X+ C8 k2 g! B$ ?, x; a2 P
J #5 Q #17 X #24
) N+ z! t8 M8 y/ x9 T% qK #6 R #18 Y #25
4 F. D* @; x* I/ l7 t0 D( GD #7 S #19 Z #26
: H) d- d6 f' Y# {( H* M8 E% u☆ 地址G、L、N、O、P不能当作自变量使用。
7 V1 }. k/ L$ ~/ b☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。* b' C& E( W& N: n% G
$ R% S2 J6 u. W. h8 x 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使) @7 Y* U" D) j7 P( Z$ d# w: o
用的字母自动确定:
5 K/ ~5 S, k0 {+ C3 S, d: o地址 变量号 地址 变量号 地址 变量号
4 D5 r. s2 b2 ^ PA #1 K3 #12 J7 #23: A8 X* Y7 y6 r' U" t" g
B #2 I4 #13 K7 #24& f" \5 Y e% R2 ?5 ~
C #3 J4 #14 I8 #25" k- q W. X/ H4 ~: L* K# {
I1 #4 K4 #15 J8 #26
3 G) Q. ?# h1 R- t* ?2 AJ1 #5 I5 #16 K8 #270 V+ O8 o& W9 S
K1 #6 J5 #17 I9 #28
; r# ~$ A/ Q; a+ B( K. JI2 #7 K5 #18 J9 #29
4 Y1 @, o9 _5 L% d4 M$ NJ2 #8 I6 #19 K9 #304 Y$ ^) x: p% L# y) n% a
K2 #9 J6 #20 I10 #310 C: h/ |8 O0 Z. t$ M* B+ R
I3 #10 K6 #21 J10 #32
* \8 F; A: U6 q( xJ3 #11 I7 #22 K10 #33
6 z' g% e }" N$ }! Q. m1 L☆ 在实际的程序中,I、J、K的下标不用写出来。% z9 X `$ v7 i! V7 z! r
注意:6 e/ X' [2 g0 N' U4 q" L3 V p
☆ 在自变量之前一定要指定G65。
6 W& D6 i, Z% y4 w5 e" J☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
0 }4 t Q) q, v, R; q☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。# J" O* f; L& m' J5 \
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。 g& ?2 {/ B8 ^1 f4 {+ q
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
0 R+ R: L: y2 A, z之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|