|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
; _5 }% E0 \7 A) _详解A类宏
, V! z* g6 ^( j. T, I分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
1 m: D4 B0 c6 h: g( ~ 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
4 x$ t' w5 O$ D( s* Z+ A 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
5 G# a1 w! A; H& v/ {0 { b. a 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
, X+ r N+ p7 A0 z" |/ {( y 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
, P& a+ i/ H9 A! X1、变量
1 b( E* M, z' T# x 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
- ?: p* _; m, B" b" M9 x(1)变量的表示& G$ _& x5 @1 k1 \5 P$ X
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
& F# X" G- p" K% N; u例:#5, #109, #501。" e4 Q% s$ Z6 |+ C
(2)变量的引用+ {4 o/ K j( u/ r
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。0 @! n7 }* ?: H3 n) t) s
例:对于F#103,若#103=50时,则为F50;% M0 k. b* K+ s+ ^) p+ C
对于Z-#110,若#110=100时,则Z为-100;
# h1 Q; P" I/ a对于G#130,若#130=3时,则为G03。) a5 m3 F% l! Z' N9 j I1 K& K$ p
(3)变量的类型 # u9 D3 N3 t& |; `5 s
0MC系统的变量分为公共变量和系统变量两类。
+ Y. a/ G1 \% h/ {7 ` ]9 ^1)公共变量
/ E8 l% [. X' P( o5 x- k& Y 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。+ Q3 Y2 z4 r* P' ?/ c
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
$ q, a4 M$ @7 ?/ a% x
0 {, ]$ w+ v+ t& u
. T/ m0 B) V& F$ q" v% S0 [
. R5 T. M- ~! ]3 {2)系统变量
: A0 T1 Z3 Z# K: c* y2 S 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。 O, J4 x8 _% [
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。 |" r. \6 O( g" X+ h+ B! N9 K
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
) z/ i' ~" p ]2、宏指令G65- x4 s9 }- ?! ^! Z. f
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。3 b9 m' R Q( s% @9 }
一般形式: G65 Hm P#i Q#j R#k
0 P/ |/ _) t) E l: S式中:--宏程序功能,数值范围01~99;
7 n! b! L: w; S- l' _#i--运算结果存放处的变量名;
9 l6 o8 X m `. M# G' E" e#j--被操作的第一个变量,也可以是一个常数;
+ |$ v7 H! l, v+ L#k--被操作的第二个变量,也可以是一个常数。' v" P$ i/ ~% |8 X3 v6 O
例如,当程序功能为加法运算时: [ O" ^$ S6 Q% C) A
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102( b4 E4 F8 F( L/ m
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102. M5 e( ` Y$ Z9 N" m* g
程序 P#100 Q#101 R15...... 含义为#100=#101+15 7 `: A; k0 j s4 C. T3 e
5 S* x: S, i- K3 ~ |
3、宏功能指令
6 y+ j* Z8 p2 `5 P- |, H/ K$ p$ j z" w2 I7 Y w4 P6 Z" e
(1)算术运算指令
, j9 {6 ?: I! j: D& e* z
]1 k% q& d/ Z( \' @0 x1)变量的定义和替换 #i=#j
0 N1 W9 N8 c# ]( K# H
6 u& A! D0 F/ T" `8 S- N$ t编程格式 G65 H01 P#i Q#j
% }- ~* F& y. P2 ^+ t例 G65 H01 P#101 Q1005; (#101=1005) 8 \: ~' L( W$ \1 B! c9 `) K
G65 H01 P#101 Q-#112;(#101=-#112)
+ u$ y5 S1 a6 C( T7 ~3 O( d2 A2)加法 #i=#j+#k0 b8 p" @& f/ a R' q! j7 K
编程格式 G65 H02 P#i Q#j R#k
* ~! l! G z/ j x6 M9 ]. _例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)9 [. E. d! `7 w
3)减法 #i=#j-#k+ R; O' ?. a1 K6 _# y& d
编程格式 G65 H03 P#i Q#j R#k
" b& d% O t* e( I+ X8 D" N例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)0 _$ U) n8 R0 }7 m- R$ @8 k3 f- e
4)乘法 #i=#j×#k
# p0 W2 v9 b) p9 W编程格式 G65 H04 P#i Q#j R#k
8 e" K" m0 v7 t0 T. E3 V例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
' u( k, H: n3 v3 Y2 s- z" q" k5)除法 #i=#j / #k* O0 s) w) {: m) X
编程格式 G65 H05 P#i Q#j R#k& Q6 F! B5 ^4 Z2 e# z+ N
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
3 I0 Y" K3 t6 d1 U& s6)平方根 #i=
T, m6 K6 V7 i2 L( T编程格式 G65 H21 P#i Q#j
4 X3 {, C; N& X: l; D( Y例 G65 H21 P#101 Q#102;(#101= )
( ^4 g, ?; n+ @& N& K7)绝对值 #i=│#j│+ ]# A, i I2 b3 ~
编程格式 G65 H22 P#i Q#j1 P8 g+ x0 |# C
例 G65 H22 P#101 Q#102;(#101=│#102│) % w& h1 i/ x$ ^6 \, \; _
8)复合平方根1 #i=
# r, a9 ^! o- i, F编程格式 G65 H27 P#i Q#j R#k
2 c! D/ d! a6 l# ]例 G65 H27 P#101 Q#102 R#103;( #101=
$ a* ?( A0 W% N) L- Q9)复合平方根2 #i= : P% q* s4 T, R9 j' _+ M' L8 N% \
编程格式 G65 H28 P#i Q#j R#k
5 o g$ z. m. P% E# ^例 G65 H28 P#101 Q#102 R#103 7 L7 m; F' Y4 C4 d
+ I; E9 N' a1 h4 q
1)逻辑或 #i=#j OR #k
% u. A* s9 H- d4 c1 O" I编程格式 G65 H11 P#i Q#j R#k
: N0 Q6 }$ V7 I; o/ b: n例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
7 y- |' P; y9 u0 V! d6 V
7 N" |1 [( d8 h. n" a B! f2)逻辑与 #i=#j AND #k* X( x1 C8 v% [, Q* ^! |! a
编程格式 G65 H12 P#i Q#j R#k
, D+ b% }) I3 h' t* P例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
) z- }9 j0 R0 w d) f4 i6 b' `6 g: V c
, i9 x6 C. F3 v6 n
6 N1 t3 I7 L, q0 x0 t) h: o% N
% q* V" m" p7 f- A(3)三角函数指令 1 P9 ~: v/ b: f' Y1 g5 A
( Q3 {2 X: m( H; u 7 T$ U1 T! s/ n2 F8 L
I0 p0 B" o" N6 }1)正弦函数 #i=#j×SIN(#k)
: ?) z2 V: @9 w) Z) p9 R0 c. R7 O S1 d( V% t7 {" g, |" x% N0 j
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
! ^' C" r2 M* j" M( y& J1 y5 e
/ q' l' y) r# E" W2 }5 _! l例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103)) I* v4 @6 d/ C
2)余弦函数 #i=#j×COS(#k)) h6 ^# J( }1 u; ? O& L% N
编程格式 G65 H32 P#i Q#j R#k (单位:度)0 _/ X8 T- h6 v! G
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
" P, a4 N3 R: f( B; n* M3)正切函数 #i=#j×TAN#k5 _4 r# [3 A- k( B/ n" m6 T
编程格式 G65 H33 P#i Q#j R#k (单位:度)
% ]1 G4 g8 y& A1 ^例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)): ]4 {5 D) [5 x1 p
4)反正切 #i=ATAN(#j/#k). b5 i/ ~6 l# }4 O
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)$ ]/ W4 O/ p" `; B: C
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)' m# q, `: o- w
) }5 O8 b# ?# s0 A' X8 O- E5 `( }8 M
, _7 r( J5 o$ T6 Q
: g9 @7 M, p+ t. [2 q
(4)控制类指令! D9 k! r$ D$ ]1 z4 E
. e- z1 g! T# \- n6 Z
: p' a5 u! j& o: G) x
. ?6 W( ^: j0 J ?8 z编程格式 G65 H80 Pn (n为程序段号)
: m- }. i, |0 b5 g例 G65 H80 P120;(转移到N120)
2 S7 ~1 ^0 [1 l: L C2)条件转移1 #j EQ #k(=)" S `7 @/ G n- V6 d0 F3 ?
编程格式 G65 H81 Pn Q#j R#k (n为程序段号) @) ]$ w: ^6 S4 I
例 G65 H81 P1000 Q#101 R#102* E0 J2 E; c, r
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。$ O3 I) _( r: W u8 Q* z$ Y7 f$ p
3)条件转移2 #j NE #k(≠)8 E- V5 O) K3 L5 x
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)- } b0 Y' ^# m
例 G65 H82 P1000 Q#101 R#1023 b8 u- q: w; _8 a0 Z% N6 ]
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
$ }& [: _* s" q, D4)条件转移3 #j GT #k (> )
7 b* l/ t9 j. _% N# Q编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
+ M& u4 H! g1 u6 {例 G65 H83 P1000 Q#101 R#102# C- O* }; q) H( j7 N& @9 ~# C$ E4 a
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
% o- [% z1 m# G5 d5)条件转移4 #j LT #k(<)3 J" n- D: Y0 o* y& p
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
' r3 D/ G6 c' s" p, Z: p; W+ s例 G65 H84 P1000 Q#101 R#102
: z T0 V% y* r9 |. ~* r$ }3 S0 p当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
' r; o; L; ^% }( i6 m) }) {# c4 O" r6)条件转移5 #j GE #k(≥); G* {) f/ h1 x1 t3 A
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)9 A7 r' [& _0 q; n
例 G65 H85 P1000 Q#101 R#1020 W v3 p( u, E" G- Y
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
/ S& K# e, }) a+ F M- K4 y; ?+ ?7)条件转移6 #j LE #k(≤)
4 F( P. }6 h/ N( E4 ]2 ^+ |编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)% f& K6 ?5 [! `) @' ?3 M
例 G65 H86 P1000 Q#101 R#102% Y0 `9 U2 _7 }* x
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。& }# W4 Z9 n# T
" K$ X, A' h4 n6 R" _7 v" F
4、使用注意7 G. O5 J( S3 P8 R C& c% A
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
$ G/ I# I8 _+ t' E! u(1)由G65规定的H码不影响偏移量的任何选择;
8 ?: ? m7 A7 A* M(2)如果用于各算术运算的Q或R未被指定,则作为0处理;" D" n& d% d: `. n4 m! S
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。- O) q$ c+ _$ n
(4)转移目标序号可以是变量。
}% J( L3 G9 m+ n
! w( Z4 v# l- u2 s8 S" ]" C5、用户宏程序应用举例 : # ^5 |" `) ]* ]$ h
# o1 v7 v4 | i) c/ z9 h7 |0 l用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 1 [. Q: X9 p3 Y% ~6 S C, S+ k
2 d2 J* w" c3 `9 M
使用以下保持型变量:
" [* s6 W8 Y! s3 ^+ n1 K#502:半径r;
* Z( h# f2 S' `, P0 k% A$ m#503:起始角度α;: d* ]! u4 I: `1 f" W; c
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
+ X+ R, ^. n. \# G' e, ^# o4 S#505:孔底Z坐标值;" v; o! ^+ w6 w. b I9 h
#506:R平面Z坐标值;$ J; l5 r3 v# ]! Q7 `# j( I% v5 }
#507:F进给量。
: F4 u9 e1 i; K$ S6 o使用以下变量进行操作运算:" \4 H2 x$ a6 C5 e/ E3 S
#100:表示第i步钻第i孔的记数器;
1 O3 g7 ~* }* H( O#101:记数器的最终值(为n 的绝对值);. x; X2 @2 A2 ^! {" o; P
#102:第i个孔的角度位置θi的值; 4 U; C( R/ v" e5 V1 z
#103:第i个孔的X坐标值;
3 c w _ e2 y) h; d! B3 A#104:第i个孔的Y坐标值;0 m/ G* Z) c0 q% M& k, a0 K
用用户宏程序编制的钻孔子程序如下: & h4 M/ ~: p4 M
O9010
& J. w7 N9 d0 d4 o5 d8 L3 zN110 G65 H01 P#100 Q0 //#100 = 0
" b1 s7 g ^, z5 MN120 G65 H22 P#101 Q#504 //#101 = │#504│$ O, B/ E0 C0 e& n' w
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o. ]5 N* P) `* A7 b# i+ P, }4 @
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
Z$ b9 R6 J% e$ j" s7 q2 FN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
: \; a! a8 A. O( FN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
. T+ w/ ?' \8 f q6 S; ^/ BN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
7 q! A7 d9 n6 ?) h5 n" vN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
9 v5 W' M7 @. VN190 G00 Z#506 //快速进到R平面1 Y3 `6 C4 `4 u' w8 r( Y
N200 G01 Z#505 F#507 //加工当前孔
' }* o" m( M7 I% dN210 G00 Z#506 //快速退到R平面% l8 l t& b0 o" O+ G$ j
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数$ [1 c" |+ o( [- I5 Q
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
. H: q, U7 k% |N240 M99 //子程序结束
! x2 A1 L) v& \* g
9 s5 ]: {: e0 z" Y7 S" O7 k" r* t
7 v$ S2 Q/ v' T2 ^
, p- Y3 K( Y, @调用上述子程序的主程序如下:
( w; w( e+ ]; o0 VO0010
4 l2 \, z; o% k$ O' k$ U( aN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系2 r. p z4 [( Y
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
3 d/ L' _% s$ k; q0 }) h+ s* M+ VN30 Z20 //抬刀0 @3 F+ l7 E% W8 C; d9 H; c
N40 G00 G90 X0 Y0 //返回加工坐标系零点 ) M, L# P9 `8 R; b K# O
N50 M30 程序结束! ]% Q" a2 y, u1 j X2 ~* b* d
设置G54:X=-400,Y=-100,Z=-50。/ n. H; n2 _+ M8 ]' \4 O6 }. r
变量#500~#507可在程序中赋值,也可由MDI方式设定。 " J- f0 b7 N: V
" o4 [) u6 m% n O6 J! mB类宏G65$ ^8 d2 @2 b9 I6 M
& `/ H7 g5 s/ O% e9 ~4 T
简单调用(G65); o) I, D* v6 F$ K
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
1 |( A: Y4 O& ~6 H. ]! j9 l* a* W 格式 G65 Pp Ll <自变量表>;
$ S3 r) p/ H/ I9 j9 K 其中: p 要调用的程序号
) ~# u7 }- \0 _2 C* M! r: P l 重复的次数(缺省值为1,取值范围1~9999)
) _/ P$ M3 p/ L: A; f$ v 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 : ^' C* k* s/ e4 r3 n" C9 X
的局部变量。( @: S9 v. {8 v& {/ P
) Z5 o9 \; D9 W# V
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:0 K% {; Y$ T1 B4 m) u" S: n
% H" V0 ]1 Z; Z/ H% l0 z8 r: T/ Y# M地址 变量号 地址 变量号 地址 变量号 B1 I1 W9 m3 l0 @% ~6 `+ [- W
A #1 E #8 T #200 Y+ n# S1 z/ \& v$ W9 g/ P; Z
B #2 F #9 U #217 s! R. T, `: o" y; C$ O" I% E3 B8 A
C #3 H #11 V #22$ E; c5 J: P6 v% \4 l" A
I #4 M #13 W #232 r7 T1 P. g/ f P" r1 K
J #5 Q #17 X #244 I$ l) T C. J5 A$ R* d
K #6 R #18 Y #25; N0 F( V" i" u/ u8 G. A8 t$ k/ y F
D #7 S #19 Z #26* k7 I* _9 F3 m7 R5 k- |
☆ 地址G、L、N、O、P不能当作自变量使用。
) j4 W$ Q7 O, S7 f# R7 |, d☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
' [* h j+ w2 H6 y6 U/ Y. g; o3 c 3 h( O% ?$ L% j' u* ?2 P4 c& {
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使. x7 X( G o1 C9 W7 P
用的字母自动确定:
" l& U& Z% i R# ]7 N1 a地址 变量号 地址 变量号 地址 变量号
! y- n8 s0 `8 y& ~0 U: S3 l2 MA #1 K3 #12 J7 #23
6 O$ Y0 L+ U. ^9 eB #2 I4 #13 K7 #241 M' T: b6 N7 C2 F; f
C #3 J4 #14 I8 #25. u. [2 J: `9 F, c* `$ j: m
I1 #4 K4 #15 J8 #26
- u. ~9 F% O9 Q3 iJ1 #5 I5 #16 K8 #27
+ j0 s( p% a5 \K1 #6 J5 #17 I9 #28: H6 M8 q9 z+ h: S% O+ E
I2 #7 K5 #18 J9 #29
/ c8 F; F3 z4 Q: b* l# r/ JJ2 #8 I6 #19 K9 #30
% q! ~0 L! d8 s% D# {1 x6 uK2 #9 J6 #20 I10 #31
9 M+ a8 f# B1 l o4 O& w; V( dI3 #10 K6 #21 J10 #323 c' F6 l1 y7 ]
J3 #11 I7 #22 K10 #336 q7 o: v# ]; N3 a9 d# p9 O
☆ 在实际的程序中,I、J、K的下标不用写出来。 O/ L: t6 }( K1 P) k
注意:# _- `, O g& X
☆ 在自变量之前一定要指定G65。
3 {5 @! o4 Z; s& w7 M' h: x* T T8 F☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。0 k* H; k% X( x
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
8 s" h7 U* [# N/ ^1 X5 J☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
. z: N, L! N u4 F G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环+ L9 b/ U! ^* I5 G7 j
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|