|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
% f; F" _! T! t6 {详解A类宏5 N3 m: T3 l( e, c* B1 O% H7 z
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。) S+ y# U6 r8 e) N, V# @! K
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。6 p6 ^- h3 B& [- T: T
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
) J8 T+ K( b" l; B3 E0 D 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。* d; ~; c9 j+ I9 o
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。+ h+ v7 N) c; F; P( ~: |2 A0 t
1、变量
1 z! q7 G. ]. W$ _& V2 r, T) W. L 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。+ v1 ~6 O7 q4 u8 E0 [ c
(1)变量的表示
% d- s' U T0 X0 `8 [/ `! E变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
/ \2 M" A% r4 P3 r; d% {- a$ w" C例:#5, #109, #501。( [5 L9 l- \" d+ G
(2)变量的引用
5 C% f8 @+ o( y3 ^5 W0 }, l 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
: K! {7 ]% d1 S8 `. q+ d例:对于F#103,若#103=50时,则为F50;! d1 l& e8 e: V9 N: h4 c
对于Z-#110,若#110=100时,则Z为-100;
; F9 \4 i8 R I( Y2 j/ f I0 M) o对于G#130,若#130=3时,则为G03。
. _1 _7 c( T' h d$ m(3)变量的类型
4 h0 _9 V5 m9 `; e- ]; k* d 0MC系统的变量分为公共变量和系统变量两类。" F4 c; O7 |, k7 a9 }5 D
1)公共变量
' B/ x% M% V3 I( N: [# { 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。% |# ?$ f- ]4 c5 L
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 5 N* }' I4 N$ w. R. \, l
- q$ g9 D2 [. _3 a2 H; x
}2 H! v6 ^: S6 D; c& n! S6 j1 ]
( ^: F/ u9 Y4 x& G' Q2 v& P2)系统变量
9 X# a9 H3 G: g# A# R3 I 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
% H* f& [4 Q( I0 [1 o 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
* w# i1 _( |7 d3 ?. ~& A2 l; G, ? 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
8 W( [6 L. R4 K/ g9 m! j2、宏指令G65. E* ~9 Y/ A6 L! x
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
: I3 S6 F, m5 H" Y. C" c+ i 一般形式: G65 Hm P#i Q#j R#k
( ], }5 ~: x# {5 Z$ b; @式中:--宏程序功能,数值范围01~99;
! h b: I4 a/ q5 p; h#i--运算结果存放处的变量名;
$ A/ T4 g# J: z6 }: k) L0 Q: F#j--被操作的第一个变量,也可以是一个常数;( l( C2 ~; _2 U4 ~. F. U A3 C4 C
#k--被操作的第二个变量,也可以是一个常数。
+ F# w6 N" b: A" q例如,当程序功能为加法运算时:) \, x! d5 C, p+ s# O Z% S; W
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
# O/ T k5 t0 Z5 m; _- U9 K* t程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1021 Q4 p4 R2 C9 [8 `
程序 P#100 Q#101 R15...... 含义为#100=#101+15 : ]+ E i6 |( A; o7 ]- R
2 F; L0 p* b2 \+ y, R- ^
3、宏功能指令 3 k- L7 ? F% V; v
0 v F- k1 h- o) b$ x# B# X(1)算术运算指令
9 B9 _3 M4 f+ O1 X0 s& t- O8 G
1)变量的定义和替换 #i=#j 4 c+ J2 |) b& {0 l3 |
3 j; P0 y4 U8 @5 G4 N; a
编程格式 G65 H01 P#i Q#j0 x1 g5 N; s4 M0 A6 \: B- }
例 G65 H01 P#101 Q1005; (#101=1005)
" V% w" n5 G$ O1 ~" O- u+ l KG65 H01 P#101 Q-#112;(#101=-#112) 8 S0 v. c6 L; j' D0 `1 h7 J4 M
2)加法 #i=#j+#k u- s% d- X; Y6 }! _
编程格式 G65 H02 P#i Q#j R#k
- V; N( \$ p) F b- n例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)8 X6 \, D0 J; z Q9 }+ y
3)减法 #i=#j-#k4 w. b* X: T. c$ X `9 u
编程格式 G65 H03 P#i Q#j R#k
8 J; M e0 p2 v% n例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
3 B" c. P0 {; C, ?$ ]4)乘法 #i=#j×#k
. L0 z! l% _7 V0 B( P0 p/ P编程格式 G65 H04 P#i Q#j R#k
I$ f5 D7 ] R, ^4 t& M4 e7 T例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103) `$ T$ n3 y4 T! E: r* F
5)除法 #i=#j / #k$ L# z9 k& K1 y' t3 [: `
编程格式 G65 H05 P#i Q#j R#k, n) E1 p' g4 U+ k7 L; x
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103). @1 m7 T$ F- F9 L9 g2 K: N
6)平方根 #i=
. u* ^4 C" m% X# C+ a) ^编程格式 G65 H21 P#i Q#j
- d x9 C$ {5 g5 s3 R+ ~4 |例 G65 H21 P#101 Q#102;(#101= )8 ^5 E- Q4 i& J3 u/ U9 |
7)绝对值 #i=│#j│% n3 w9 a$ h4 r4 R5 k: A
编程格式 G65 H22 P#i Q#j
* q ], r# D+ R% w* f5 T3 ~3 o% }例 G65 H22 P#101 Q#102;(#101=│#102│) 0 K2 c1 }8 o1 W. o5 [9 m
8)复合平方根1 #i= 9 f5 L8 A7 o' R
编程格式 G65 H27 P#i Q#j R#k
# |( C3 |1 `2 l p5 j例 G65 H27 P#101 Q#102 R#103;( #101=
$ i1 l1 U+ X, O4 `6 @9)复合平方根2 #i= : Q4 e' a* A* Y: N
编程格式 G65 H28 P#i Q#j R#k
; C: a9 E/ \) Z: L! I& t$ ~例 G65 H28 P#101 Q#102 R#103 3 `# U: Y' I- t) d$ B6 }9 Q
1 U* [% J' G9 F, y# x0 J! }1)逻辑或 #i=#j OR #k7 E4 F* o1 b7 Q& x1 t. c
编程格式 G65 H11 P#i Q#j R#k& Z+ J/ l) ]6 I+ \* {+ |
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)8 J) u9 n5 A% k/ M9 s) I
4 p) G# z v3 O1 A
2)逻辑与 #i=#j AND #k- Y% Q1 F1 p' k) @$ N# S6 u! b
编程格式 G65 H12 P#i Q#j R#k
! W& J8 g7 D' H1 H! S例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 ; v8 a8 ?' O6 j6 I; m. u
1 _# o6 i6 U* N6 @
# J( u- a W0 x6 X" a! F1 Y ) w6 K) E: y% n/ L. d( [2 s+ t
! J. o( [1 p6 v0 b5 F' g(3)三角函数指令
o. j) v# u9 y( A: `2 E& M* d4 _% P9 m1 O3 a+ p+ f K
* }& }' q* Z9 y- s; L. K
- G: @+ X" c( a2 U8 u7 Y1)正弦函数 #i=#j×SIN(#k)
! i4 } E5 s4 }# f+ ^/ P0 s0 r$ @# M( s( \5 W" G
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
9 y+ J, G7 _8 y$ @, s* Q6 H T7 R) w2 {
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))0 Q7 N: q2 v m7 n
2)余弦函数 #i=#j×COS(#k)
P1 P5 `7 ^4 _1 S' B t编程格式 G65 H32 P#i Q#j R#k (单位:度)8 p( }$ r% Y+ N* S
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))+ r/ [8 A# O: C1 H. }8 d Y& r
3)正切函数 #i=#j×TAN#k
1 G- d, q( x8 t. x编程格式 G65 H33 P#i Q#j R#k (单位:度). {. |# o4 ~2 F. P, ` X
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))7 H$ R* @* g0 N0 j7 S! B
4)反正切 #i=ATAN(#j/#k)5 i1 K/ ?1 j0 |# i; A# f( Y# E3 E* U- q* F
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o), |$ ?- X4 i: d
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)$ g- R4 |3 \8 a
% \; l5 X l3 M3 X
- h" m" m0 k) Y( e3 T) k$ |6 W4 P1 s1 Y6 I
(4)控制类指令0 I$ m0 Y8 o) H* e, u3 u
& X% e+ {! O0 Q, l0 K3 h6 V + x3 r2 P4 U% v8 n
8 Q; p: ?8 @5 i7 a! B% W. {% I编程格式 G65 H80 Pn (n为程序段号)7 k2 L8 \' M; m, B7 x4 O
例 G65 H80 P120;(转移到N120)
' ?4 ~ l+ G0 F- F7 g+ j& N" I2)条件转移1 #j EQ #k(=)
* `6 y1 T5 l$ t6 K编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
. k' G: K8 I; p! l例 G65 H81 P1000 Q#101 R#102
' l& x5 l1 {3 ?7 O6 d3 w( ?, t当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。+ w l* `* }* \+ q9 |
3)条件转移2 #j NE #k(≠) I3 ]2 d1 N3 _* d4 p6 O( S
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
: e! P9 e v% I; o例 G65 H82 P1000 Q#101 R#102
4 R8 V: h% r0 v) V0 N0 K当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。4 R' Q+ [7 y1 H5 D# o" S
4)条件转移3 #j GT #k (> )
* ?: o2 }) r2 [0 h# p/ O1 v编程格式 G65 H83 Pn Q#j R#k (n为程序段号)! _ d& ] M5 s" L6 u4 F# ^
例 G65 H83 P1000 Q#101 R#102) w* r6 h. k4 ^1 R. G
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
0 @3 H0 W l; r2 t0 A5)条件转移4 #j LT #k(<); L Q" ~, V4 }7 n; {! Z# f( ]; M
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
X3 P) W" n1 E1 ?# p0 ]# a& D2 N例 G65 H84 P1000 Q#101 R#102
! y; ?: g O. {8 t当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
7 s2 q2 \* Q& h. u( V6)条件转移5 #j GE #k(≥)
7 f1 U; h: g. O& E- I编程格式 G65 H85 Pn Q#j R#k (n为程序段号)/ V# J3 ^; m& ^. D" P3 s. T$ R
例 G65 H85 P1000 Q#101 R#102/ i, ~" Q2 D, g9 b
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。! s# B& e/ q3 I, S; _7 K0 s
7)条件转移6 #j LE #k(≤)
. c( v# V9 H* k1 O编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
$ I" l/ Y8 t! g% O' S% g例 G65 H86 P1000 Q#101 R#102+ c- |2 c1 D) X, @& B* ~/ F7 D
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。' m1 F+ _) C+ K8 v
$ F/ B7 J+ @( _# ]% T
4、使用注意 O2 S$ m( {4 _4 i0 p2 Y: D
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
1 K* `7 `; x. |/ c7 D(1)由G65规定的H码不影响偏移量的任何选择;3 w3 t9 D/ |) I" t
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;% [" p1 Y& a- T0 w; x( J0 N3 i6 D
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
# ]$ T( A7 T8 @0 U% N& |3 ?8 S/ O(4)转移目标序号可以是变量。 0 ~# l9 M; o8 c( a/ A( L
; U+ o$ [1 D- y
5、用户宏程序应用举例 : : i9 D; E/ R# q8 p' T# O/ `# w# |! V
+ |1 ?+ D% D2 V用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ( o: f$ J7 {. @- [5 M0 E' t
, Y5 }+ P5 I6 H! x使用以下保持型变量:; T5 z+ y" o, B/ Q/ Z0 j, a
#502:半径r;
( r6 z( }6 Z* I#503:起始角度α;5 U0 G3 U. U* B
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
: {; m# Q2 }/ x, d" l#505:孔底Z坐标值;3 p3 X* C! Q8 d9 e
#506:R平面Z坐标值;
) Y. x1 M& f9 S6 c5 t4 F#507:F进给量。
, Z% N/ x9 R1 [# V4 B& M使用以下变量进行操作运算:6 s- }$ `# U2 s) V. T, |7 R9 [2 B
#100:表示第i步钻第i孔的记数器;
2 m/ ^& ?) S( {" t#101:记数器的最终值(为n 的绝对值);
& a$ p5 p2 K% k5 v" H& V0 F6 b#102:第i个孔的角度位置θi的值; : B* v0 R1 N1 P5 s& G- r* R4 R
#103:第i个孔的X坐标值;) {( i" z8 q- r I" u6 C0 d% P
#104:第i个孔的Y坐标值;
, X3 F! ~$ q I用用户宏程序编制的钻孔子程序如下: " E0 F% }) W7 ~3 ^7 T! H8 Q
O90109 P1 R) {4 J M8 \/ p
N110 G65 H01 P#100 Q0 //#100 = 01 K8 R( S: q" m$ z7 J. J8 F/ K \' a
N120 G65 H22 P#101 Q#504 //#101 = │#504│
& ], _7 x& m8 p1 ]N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
4 K* m C) D2 d3 b# D! _N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504* M1 u1 h) r2 x4 f4 {8 u
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
# _5 c5 ^! s) M4 iN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标1 ]" `4 v9 t+ f0 ?* q
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
L, l9 n J6 p5 EN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面); p" \- I5 B3 c) U
N190 G00 Z#506 //快速进到R平面5 L: J3 a$ h+ [7 D
N200 G01 Z#505 F#507 //加工当前孔) ]) e3 ~% C' s. R& G4 }6 V
N210 G00 Z#506 //快速退到R平面
# \* U7 e- r" {4 m/ E' v" Y: `, o$ jN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
+ p. K- x5 x' dN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
" R% ?. W6 v0 GN240 M99 //子程序结束 ! T/ N3 F- u' E$ r
# c) Q- k$ R: I6 ? 4 @8 g5 K* R$ f, x
3 s5 Y- t2 p1 `2 Q1 e
调用上述子程序的主程序如下: ( Z; x* j4 B- @: K
O0010* |, s0 m! f: X c5 e* ^9 @
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
$ Z8 B1 O- V8 u; i7 u1 r5 Q. oN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
% Z' h9 b2 }. f) f9 _( ?N30 Z20 //抬刀; b; z! N- ~0 m4 |0 u) g9 U
N40 G00 G90 X0 Y0 //返回加工坐标系零点 ' X. Q% | I2 _1 e- @- q$ ^$ M
N50 M30 程序结束6 _5 V2 @0 @& G, [. ]
设置G54:X=-400,Y=-100,Z=-50。
4 t) S- S' G6 ^9 N! Z Y变量#500~#507可在程序中赋值,也可由MDI方式设定。
' k1 I4 C7 t8 I# P
0 g# D2 h) G" O9 qB类宏G65* s$ y# ]9 C d, m7 @2 o) b
p4 K4 U5 J. D8 s8 `简单调用(G65)) O) p6 f9 z, O
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
. c% d1 o* \! y" R 格式 G65 Pp Ll <自变量表>;/ f1 y8 a6 Z8 F) P
其中: p 要调用的程序号
3 e1 K ~2 g3 }* h8 O l 重复的次数(缺省值为1,取值范围1~9999)
. O8 a0 v; `) j3 ] 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 # V- p* {" E' G5 f6 u) y6 Y
的局部变量。
% J S y* ]" g) V
. t" O$ R# W3 `" }7 H3 K' } 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
+ T+ N; s" ~8 Y; y3 V
1 J3 _- Y. A g" O, Y& j地址 变量号 地址 变量号 地址 变量号
( {( ?4 Q: s/ P& f5 ^A #1 E #8 T #20
" }3 P9 @4 D' R4 f5 ^3 C M! [B #2 F #9 U #21- i* |: x" O) T. I Q
C #3 H #11 V #22
) c( S; F$ ^0 i CI #4 M #13 W #236 _5 w7 U7 l, o. z# Z9 ?5 j
J #5 Q #17 X #24
7 d# t1 f0 }/ R Y- U& p9 S4 dK #6 R #18 Y #25
3 m+ [# j* I3 u/ m8 Q& Q# aD #7 S #19 Z #26
0 b4 j: D6 U( r$ ]( D☆ 地址G、L、N、O、P不能当作自变量使用。
. s7 d4 [4 \: [7 u☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。1 m0 t7 ]2 w- n q5 F3 v& X
3 R3 b6 W: B: B: \ 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使/ {4 ]3 N" l" J# D1 [, f1 ~
用的字母自动确定:
! _% f* M) l& q4 h. Q, h Z& Q地址 变量号 地址 变量号 地址 变量号
7 Y/ \% N8 `! KA #1 K3 #12 J7 #23
- B4 g/ w% D+ B7 eB #2 I4 #13 K7 #24' ~. }" j' x, v8 I! E# U8 O% A# I! k
C #3 J4 #14 I8 #25* X) ]! |6 z& |
I1 #4 K4 #15 J8 #26
3 m" V5 u. h$ MJ1 #5 I5 #16 K8 #27
1 B; C. r2 q6 Y8 i$ s6 W1 VK1 #6 J5 #17 I9 #28* r4 C1 F( G( @# `4 D
I2 #7 K5 #18 J9 #29
0 z$ I% @( y5 IJ2 #8 I6 #19 K9 #30! r% d* x# J( Q' z& B
K2 #9 J6 #20 I10 #31: K: L) M% p( j6 [+ G
I3 #10 K6 #21 J10 #32( R) |( \! d4 Z0 \
J3 #11 I7 #22 K10 #33 E* v* @ W5 t
☆ 在实际的程序中,I、J、K的下标不用写出来。
% d2 g$ K/ R0 ^8 B0 p; r. `# P注意:4 h5 v) p0 k; F4 K
☆ 在自变量之前一定要指定G65。
- F& b P) D- T8 Q☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。& D4 d: W( y2 m
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。: u7 Z3 o# n1 S( U7 o- ^
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
2 z8 }' l; k" ~7 @4 t4 e G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
[: K. ~8 C3 K! L; s之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|