|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
# Y* ~4 m- r# o5 J6 O' U6 K详解A类宏5 L& ~' k) ]# _4 P6 ^! v# @& O1 V3 a
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。' l, T1 Y1 T. z% }% M
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。 |' a8 S5 W7 g& b$ Q1 Y
宏指令是代表一系列指令的总指令,相当于子程序调用指令。+ I: l: b6 g: j- m
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
. t) Q6 s4 m1 S" K% _5 z 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。; }2 {5 ?. N2 t7 w6 \" @
1、变量
' q& w" X5 i' G/ j3 H% ~ 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
& m0 I9 ~8 Q! v(1)变量的表示9 E7 N% H# Q0 `4 } G
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)9 j: q- c5 [& u. s8 z
例:#5, #109, #501。
& |2 N9 _" S1 m3 }' y4 w8 d(2)变量的引用
% o* c* K U$ E6 c5 g3 {# @ 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。5 @( J% O7 w8 z0 V3 V1 m2 ?+ y0 E
例:对于F#103,若#103=50时,则为F50;9 |* P+ k) }4 S/ p; ], l* R7 n
对于Z-#110,若#110=100时,则Z为-100;7 y. u. p& d- [7 }0 x0 ^. V
对于G#130,若#130=3时,则为G03。; R( O _+ h3 f6 R% W# b
(3)变量的类型 7 _, V# ~- |( h1 H" y8 r9 W8 D
0MC系统的变量分为公共变量和系统变量两类。0 F5 s) ?& s k
1)公共变量 , b- @/ O% b! {6 c7 _: y/ Y
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。$ X% M" @& V3 X) m' u/ w: V* V
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
+ p, z! y# n. O/ V0 [* {4 O
4 w. d" u% M5 v0 H3 }6 D2 S7 ^8 E) | b, f/ K' W1 @ s* u C9 K4 K
4 B) T6 _! b$ k2)系统变量 1 A1 C; k6 Z3 c& E/ B2 W2 x/ A
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。/ {3 U( T& c% B, L8 `1 H
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
6 P+ `; }; E+ W. a; I/ o& E+ z5 }) b 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
% a0 X s0 X/ { Y5 o! F" o( U2、宏指令G652 H- x" X; J# O) L
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
2 L; ]. V2 f1 h# b1 K# | 一般形式: G65 Hm P#i Q#j R#k1 i3 T" l2 u4 N+ S5 Y$ \0 S) r) X
式中:--宏程序功能,数值范围01~99;
3 s1 W& j0 S6 i$ O l$ M% x( ^#i--运算结果存放处的变量名;$ n1 P+ \+ J$ |% Q9 m4 _
#j--被操作的第一个变量,也可以是一个常数;4 k; G- L% W) f. h; z" I6 q
#k--被操作的第二个变量,也可以是一个常数。. V1 r5 n* `1 T# o% H! {* [" Q$ K
例如,当程序功能为加法运算时:
$ A7 S8 B4 x1 d& b程序 P#100 Q#101 R#102...... 含义为#100=#101+#102' e. X3 h5 e3 N* j6 Z
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1027 s! p7 l3 k5 m1 ]
程序 P#100 Q#101 R15...... 含义为#100=#101+15
( ]& E% b N }4 T1 n% `* I4 v% O1 d D9 S) |0 Y) I' ~
3、宏功能指令
7 J/ a# Q7 |8 c9 p% k
. k1 h* I) W! |' }3 \(1)算术运算指令
1 J9 g1 Q. ?! A' x, |+ A6 \1 J) r5 j+ z+ S' _/ m
1)变量的定义和替换 #i=#j
- o% z1 u& Q j% ^" z1 i6 Y# F8 c: G; b' c; z
编程格式 G65 H01 P#i Q#j8 o' D7 E3 K4 z% b8 l' H
例 G65 H01 P#101 Q1005; (#101=1005)
1 w+ D2 Q0 k( b# @G65 H01 P#101 Q-#112;(#101=-#112) 8 z5 G% J2 A# U1 ?. g, g3 U; B1 m
2)加法 #i=#j+#k
2 y7 V& B6 d: q" j编程格式 G65 H02 P#i Q#j R#k
2 t. @: S* j; l x例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)3 s& m/ Q. \# A" K) {# A* X" @3 Q
3)减法 #i=#j-#k! w' t$ T" s$ B" J4 M0 k( S! p5 c
编程格式 G65 H03 P#i Q#j R#k. |) g q! f1 O* X o; b; a
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)7 r- C$ W' t3 \ M/ K
4)乘法 #i=#j×#k& r2 V. A& ?3 a8 G H# v
编程格式 G65 H04 P#i Q#j R#k
: D6 S5 k6 l( p2 M3 h* h4 N0 g例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103), r; \& O7 t8 }; D+ T. i
5)除法 #i=#j / #k
% |3 ?. k3 S8 b" |% I; b4 H编程格式 G65 H05 P#i Q#j R#k2 ?& L) N! m8 t1 g! H9 A/ [
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
! Z( C) ^3 r3 W' Y- j( u6)平方根 #i= 5 E4 C+ j9 s. z. h* [* v
编程格式 G65 H21 P#i Q#j
# s7 A s. u o; y6 `3 S例 G65 H21 P#101 Q#102;(#101= )
# w5 e- _8 q$ ~2 \7)绝对值 #i=│#j│
4 |/ d3 `- v" @; D n3 r% O$ V编程格式 G65 H22 P#i Q#j( {5 @: U7 H/ h) n
例 G65 H22 P#101 Q#102;(#101=│#102│)
- Q( W' E) D8 t& V. J) R. G8)复合平方根1 #i= 6 P' b. S+ t9 n0 D) N$ w; v
编程格式 G65 H27 P#i Q#j R#k
# |, F! l g9 V3 C2 h例 G65 H27 P#101 Q#102 R#103;( #101=
% m+ ^( M6 j4 E9)复合平方根2 #i=
0 F2 ^* b+ X# i编程格式 G65 H28 P#i Q#j R#k
; V1 Z5 \5 f3 b! j) Z6 b例 G65 H28 P#101 Q#102 R#103 9 w9 k1 f* ^( z, U
2 ^1 C, |3 W( s# w
1)逻辑或 #i=#j OR #k) A- H: y$ D+ @2 e1 h8 A* D8 l( x7 B
编程格式 G65 H11 P#i Q#j R#k$ |* F: a$ v$ C7 P W' t& C
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)) s2 U9 |0 s; ^) t/ S
& k z$ e3 k$ O: E2)逻辑与 #i=#j AND #k' `3 b' I5 p+ C2 U' E# B! L* }
编程格式 G65 H12 P#i Q#j R#k
6 r4 B/ C. l& V2 }' D. h0 a* y例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
# }& @ V6 i5 X0 n. u! J4 p4 ^
7 S1 w1 x; X/ E1 J) m0 T: L; t# E/ O/ T' Q1 ]: ^; J
! q6 j5 f! N6 T- d3 }2 S
; M) `* L6 w/ h X/ v0 m* m(3)三角函数指令
# l5 i8 Z: a+ Y6 z4 |! S- k6 S' H7 u- B, V
]. L' K: ^0 b3 F8 i
; X( F( C4 ?' J \1)正弦函数 #i=#j×SIN(#k)
% A/ r! E- m5 l P5 V
- ?/ L1 L: I( |$ O4 E) \编程格式 G65 H31 P#i Q#j R#k (单位:度) .. m# m# ~0 P; e5 j( \' [0 c0 N
0 [% H: [# D( ]6 r- s5 s
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
7 ^0 Q* Q5 v. l2)余弦函数 #i=#j×COS(#k)
* \3 b, }& r' Z& O' w$ u编程格式 G65 H32 P#i Q#j R#k (单位:度)8 k+ R+ S' M$ l' C" ~
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
* F# w; M- [3 G& R3)正切函数 #i=#j×TAN#k- m7 [9 y h" k- ]
编程格式 G65 H33 P#i Q#j R#k (单位:度); L! G- X7 P) E N& d e
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
" ]& @6 {- M) T5 e4)反正切 #i=ATAN(#j/#k)
* J9 G3 C! `) ]6 z; {编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)5 T* b/ O: |/ O; Z' @7 K
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
# B+ |% w: z8 c1 u4 \! b! e; a! F% Q; j! b) c
. r# U" @. U8 k2 Z
$ C, R* o/ x3 |/ M) k(4)控制类指令% G1 X0 z K8 V' T
# o" T s* y2 ^. u
( h7 a/ T8 R* l3 Y6 p8 i% h. y
8 s' Q/ C( y6 W5 P' b编程格式 G65 H80 Pn (n为程序段号)
" j: g( h; s. }) m4 I例 G65 H80 P120;(转移到N120)
- R8 k4 v. Y# M( T2)条件转移1 #j EQ #k(=)" V1 r% z5 j( j
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)6 q, u+ b. q4 v( A$ b6 w. }
例 G65 H81 P1000 Q#101 R#102
, f6 j5 j) J* j& t当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
# F1 g6 H7 o' k& [# }3)条件转移2 #j NE #k(≠)5 ^+ S) z- s$ H: B0 P4 J
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
2 P$ h* E% S. C7 x; P+ V例 G65 H82 P1000 Q#101 R#102
g+ y, t4 P* \% u, y$ C) R# {当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
0 N5 j" b0 {. l2 W$ t4 H: g4)条件转移3 #j GT #k (> )
) ]' |5 s) c, y, M7 B5 U编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
2 ^. g P2 u% Y# U" `5 j0 L例 G65 H83 P1000 Q#101 R#1027 ]% R+ E& P" g% b
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
9 f: `- n& h3 g: B- ^4 t4 E5)条件转移4 #j LT #k(<)3 G( z. a p# @9 W d7 n
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
/ K0 q5 D/ I+ _1 x7 p5 S例 G65 H84 P1000 Q#101 R#102 ! Y6 J8 J7 i1 b$ R: }# O& _
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。+ {7 N& z P1 u4 R7 V) }3 I. }
6)条件转移5 #j GE #k(≥)$ ^* o9 m$ F! H8 }' p
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
8 k# Q6 ?/ l! Z, K* t( K例 G65 H85 P1000 Q#101 R#102
, P5 o' M2 U/ m8 J9 O当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。 \' O- Y" \/ I4 A0 T
7)条件转移6 #j LE #k(≤)
9 p% Z; }6 w+ _0 l! M( |编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
0 @! h3 n/ d/ K例 G65 H86 P1000 Q#101 R#102
g9 K0 m( M) {; b* f$ k- J1 t8 Q5 F当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
. Y& ]- Q; c J: J ]
# D# {$ _( Q4 h! X4、使用注意, T' ]( t& W1 |8 ~8 d1 {; c2 [& `
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;! I0 y- |6 A3 m+ b. j' b! x
(1)由G65规定的H码不影响偏移量的任何选择;
5 o& Q) Q& L- N& d! ^: a3 E) j% o(2)如果用于各算术运算的Q或R未被指定,则作为0处理;8 Y5 i/ a6 ^4 L" r8 t
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
1 H; x0 L) B9 i7 Y& A7 A(4)转移目标序号可以是变量。
7 z8 ^8 j5 a2 ]; W1 |
+ U; A4 F1 k; N5、用户宏程序应用举例 : 6 d4 e7 @& t" S/ ?0 ?; \8 N3 G
( m( s+ V* ^9 N用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
$ f! T6 v1 K4 {4 q i2 {7 t3 H( e: w- U' ^
使用以下保持型变量:
8 x; ^8 o2 H4 T' v* L#502:半径r;
8 ~2 \# g( u! h+ W- @#503:起始角度α;* H) F; d' h! r* V' g2 h6 M& n
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
) ]& B$ D/ L, l* X) w7 K3 r#505:孔底Z坐标值;/ ]0 j* [( U8 L2 \5 C* ]
#506:R平面Z坐标值; ~+ v1 }$ q) C7 W' K3 g
#507:F进给量。
* w8 d! e. s" u; [+ P \+ I使用以下变量进行操作运算:$ @+ F8 D& p0 w$ I! v! W
#100:表示第i步钻第i孔的记数器;
( p2 i- E/ [! h1 p# V+ K#101:记数器的最终值(为n 的绝对值);
) {$ D/ x R+ m3 C- A9 _1 ?( C#102:第i个孔的角度位置θi的值;
6 c( v- N6 C2 J8 K+ Y- L( \' u#103:第i个孔的X坐标值;
+ J+ a9 @3 e. i4 b) ^$ D#104:第i个孔的Y坐标值;) {- M2 k% Z+ o* P& \0 \1 \
用用户宏程序编制的钻孔子程序如下: 2 w2 c% O# a5 ?! O6 S# ]3 U
O9010/ I7 o/ r( J" `8 U# P7 _
N110 G65 H01 P#100 Q0 //#100 = 0' e$ J# V2 Y! o. F! K" n- ?; u7 |9 ?
N120 G65 H22 P#101 Q#504 //#101 = │#504│
5 Z) p1 ]# ?7 W$ ZN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
. G7 e# u0 I) Q' G+ j3 l8 E4 }; ~1 oN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
$ W; _# r/ V/ f+ I N* }N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
6 c3 u. s& R6 {5 v- L& ?7 F( d$ tN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标3 ]# A9 A! |1 g
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
. F1 f3 L l8 _0 K4 tN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)5 m- S6 ?. T9 T5 ?2 U
N190 G00 Z#506 //快速进到R平面
% w) N8 z! x3 S+ C# N% a J" o- RN200 G01 Z#505 F#507 //加工当前孔
$ b( Q x# w6 k0 d! y! TN210 G00 Z#506 //快速退到R平面
$ J" a# B. P% p! S7 C4 F$ A! I1 ^& hN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
5 B7 D0 Y6 h# }. G& lN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段* K) u! Y w& P' D( `) s) H" [ T
N240 M99 //子程序结束 + G# h! r" D+ b: Z1 P
6 n: r" \/ }+ r. l9 J- u* P; v6 i
3 W6 x0 `) o' m9 ]1 V2 e6 y0 x& V; m9 r
, a* d7 b& N1 d5 d4 [/ B% @* r调用上述子程序的主程序如下:
5 M, h, k4 u* S9 X i" \' R6 i# FO0010
; l4 G# t" F6 P0 eN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系7 ^8 Z. [2 C8 Q) V& \4 `" t
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔( ~# j, e/ r9 N# X# D" k4 U1 r p
N30 Z20 //抬刀
- d y# W* m) R2 q9 ^7 Y2 w' UN40 G00 G90 X0 Y0 //返回加工坐标系零点
! X6 ]9 W. g2 Z' \ }N50 M30 程序结束
7 @" T6 q. I% P7 C# x4 p! X I/ \设置G54:X=-400,Y=-100,Z=-50。
# R3 T) Y+ m" e% g$ F变量#500~#507可在程序中赋值,也可由MDI方式设定。
4 w! T- q, l$ d
6 \0 o; l. Z. O( ~$ AB类宏G65
; S6 @3 \6 w) ?1 ~4 r, ^) }( ], y% H0 f& Z8 x
简单调用(G65)8 \3 M- h) \+ O, f( Z6 r) z
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
2 X7 l: {! H4 \8 C1 _) T 格式 G65 Pp Ll <自变量表>;0 A( C+ i! Q2 k% L
其中: p 要调用的程序号
9 w" J2 M% G7 }5 k0 [3 z l 重复的次数(缺省值为1,取值范围1~9999)' y- R' C8 P6 t; N, h) Q
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 & p* x* v1 e1 R, x
的局部变量。' ?! b+ B, v2 B# K
7 F' s+ O# W- T4 e) Z 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
( ~9 I9 O' i& b
! k7 m B. z0 s地址 变量号 地址 变量号 地址 变量号
3 c5 a r+ G* hA #1 E #8 T #204 V. O. B6 p4 X
B #2 F #9 U #21
2 \: O% s& N4 @" e/ W% c; y4 FC #3 H #11 V #229 {/ Y; g6 G, [4 N( r$ |+ p/ `
I #4 M #13 W #23" ?3 ^* E: B5 `/ `* _) |7 X
J #5 Q #17 X #24( j1 Q* T) d5 ^$ B1 a; [! h1 [
K #6 R #18 Y #25 V( `/ z2 L$ w( V6 Q8 o
D #7 S #19 Z #26
: n( i! K( |1 D% I☆ 地址G、L、N、O、P不能当作自变量使用。
' b6 D7 ^, s* w5 N6 c, }4 k☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。$ M# _+ _: `1 J+ c* Y5 C
$ \* v$ A! O( y4 _* s# R8 t
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
+ [* [6 H1 d* n q( i' h用的字母自动确定:
5 C1 _! u! B- w9 S% L: L地址 变量号 地址 变量号 地址 变量号
3 i7 M0 T. D- y0 W& ]+ V# x: ^; V6 wA #1 K3 #12 J7 #23
r/ K1 V4 T n( }0 DB #2 I4 #13 K7 #24
. ~6 b- i0 Z9 b/ V6 G5 PC #3 J4 #14 I8 #25/ s/ a# Q: b: P2 k
I1 #4 K4 #15 J8 #26* f" W+ M& l+ Y, t) u
J1 #5 I5 #16 K8 #27
8 s5 Z4 ]: x4 `3 C% \( wK1 #6 J5 #17 I9 #284 v) M+ A: U% [) `; f f" y
I2 #7 K5 #18 J9 #29
; S) W1 J( V! P% Y; J+ XJ2 #8 I6 #19 K9 #30
6 y8 g7 ? c! v5 m; |K2 #9 J6 #20 I10 #31
# V B& f& B$ J' x$ W( JI3 #10 K6 #21 J10 #320 C7 i" g( g9 \- x. t3 @
J3 #11 I7 #22 K10 #33/ L" ?+ c% C5 s9 o3 T
☆ 在实际的程序中,I、J、K的下标不用写出来。
% ]" T) e5 G) z' i注意:
4 @$ F5 T+ R$ N, y7 e☆ 在自变量之前一定要指定G65。
" J' a! \, t: e- c3 W6 [☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。5 x. \* h! c5 s+ `- A
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。+ d; ^. y, m8 J" y$ X8 d, w1 V
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。$ |& f" N. _, z; M! b+ a* W) K
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
% }- W" V3 {1 v5 U之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|