|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 / H( y* C: P$ m7 ?6 [. _
详解A类宏3 }# h! d9 ]8 f' T% X: t! e
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。1 B8 x/ M2 c& s: P4 J; E! o
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。# b6 X5 [0 B8 D
宏指令是代表一系列指令的总指令,相当于子程序调用指令。3 W [+ Q* Z2 Z# Z: u
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。2 u2 S, r* E5 u# C
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。% _' q$ E" P* q- R( g6 t0 G7 a
1、变量
' V' S6 G) u7 _3 h* c 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
: n. W( P5 g7 A, F5 H$ M(1)变量的表示
9 c" d5 y! [6 W$ A8 I变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
( B. F3 Q2 @4 d% @8 S- I例:#5, #109, #501。: H( F9 D8 R" H: J
(2)变量的引用# G8 Q+ D9 m: a0 r# c
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
. n3 C, k, Y1 N$ K例:对于F#103,若#103=50时,则为F50;
' I% c# d2 A; \1 n# ?2 i# ]; Y对于Z-#110,若#110=100时,则Z为-100;5 ], l" Q, b: y8 N7 r% v
对于G#130,若#130=3时,则为G03。! D$ a9 m. B2 x0 s7 P
(3)变量的类型 % }+ [( {1 g% P! i$ C" A O
0MC系统的变量分为公共变量和系统变量两类。' F3 _/ G' ^; S t* @8 w$ d0 n
1)公共变量
1 k5 W+ y" W4 e3 w' `+ ~% o 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
8 d6 |: o, t% C7 \; i& A公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
0 Y( g0 E$ H$ d0 G% H' y& E5 }5 i! m$ b. l# x& a1 |& d
( P+ g; ~. a n" s; B& K! B+ A
: t+ k4 R8 i" n0 x. K; ?% E2 T4 M5 R
2)系统变量 5 \, n P3 _4 W0 `- v$ [4 Y8 x% G+ E
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。9 g" O# i' W* S- g
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。6 G& r& G3 b" S+ ]& ?5 m7 c
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
, W8 ^' e. z) C9 h2、宏指令G658 }4 y2 R% U4 W' z8 U% M- |
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。5 L% C- i' [! ~4 O* }3 \- L( `
一般形式: G65 Hm P#i Q#j R#k. W7 Z: c, {/ ?
式中:--宏程序功能,数值范围01~99;
+ ~. a2 [1 L: s8 S/ z#i--运算结果存放处的变量名;
5 I, G$ L( {+ I! A& u#j--被操作的第一个变量,也可以是一个常数;( F% O% K5 [9 g1 `+ I( o
#k--被操作的第二个变量,也可以是一个常数。
4 o0 Z6 C4 F- n例如,当程序功能为加法运算时:
7 q0 R. W: H$ F* ^程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
& j) W) z; n/ q* g: h! U4 h" O$ r2 m程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
/ W8 M8 f1 q& n" L) n- r程序 P#100 Q#101 R15...... 含义为#100=#101+15 0 o. A/ l, g. Y5 `
7 \# d& F F8 v+ N9 `3 L5 i3、宏功能指令 9 P) A: Z. R+ z% G2 p$ @( ~
3 c6 t6 n5 _) U& b7 n
(1)算术运算指令 9 I5 f& T0 E- z" R# _- U/ ~! Z
' w1 o5 c; } t) Y( L. f1)变量的定义和替换 #i=#j
( u2 p! ^2 y: T6 x' m( A# v6 o$ J4 j
编程格式 G65 H01 P#i Q#j
; t, X% v: [ }例 G65 H01 P#101 Q1005; (#101=1005)
' Z0 x" F. V, R/ JG65 H01 P#101 Q-#112;(#101=-#112)
; K3 Q% H3 r6 g/ l, D/ }6 p# _) h6 ^( u2)加法 #i=#j+#k
7 w+ k7 L; ^, G& O编程格式 G65 H02 P#i Q#j R#k . Z% E8 J. h! t: Q' w* |) n
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
- c9 s* K, P) v# o( }3)减法 #i=#j-#k; b. D" I6 r4 G" a
编程格式 G65 H03 P#i Q#j R#k# Q0 [ d, W/ s4 P' A T0 ^ B
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
" ^0 J: o- K6 l1 S' h4)乘法 #i=#j×#k( E5 G g j( x' V4 g
编程格式 G65 H04 P#i Q#j R#k
' H- o: u7 c) [4 k1 p) I+ t X例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
" B4 o8 u" m. F% n5)除法 #i=#j / #k
8 }$ }( h" D* r5 X编程格式 G65 H05 P#i Q#j R#k
* m! M6 f# I+ O( K2 Y8 b: M/ d# ~例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)2 [7 A& E0 m5 h
6)平方根 #i=
) n# ?/ N6 Z" ~# O编程格式 G65 H21 P#i Q#j. f9 K0 L6 D# V8 k( A* i# X* h
例 G65 H21 P#101 Q#102;(#101= )
! [4 w& n/ z: d. k( `/ x5 |" s" l7)绝对值 #i=│#j│8 B+ {- N& p1 d" A& B2 o
编程格式 G65 H22 P#i Q#j3 ^7 X- I7 ?+ q( z
例 G65 H22 P#101 Q#102;(#101=│#102│) . ~( x) Y. A, K) F7 D
8)复合平方根1 #i=
/ |& l+ r4 E! }0 ?; l编程格式 G65 H27 P#i Q#j R#k( u y6 e$ Y1 Z) M6 U* a2 Y
例 G65 H27 P#101 Q#102 R#103;( #101= * }$ V+ L: `$ M& F6 e y; M
9)复合平方根2 #i=
" u( J: i3 x: J6 @: n- W, s* S+ _# N a) p编程格式 G65 H28 P#i Q#j R#k
3 |1 g% G2 K+ Y- i7 F例 G65 H28 P#101 Q#102 R#103 6 x( J) o9 f. N
* P Z* R- ~2 j' t2 b$ H
1)逻辑或 #i=#j OR #k
- s$ E! ]0 k: D+ U3 N编程格式 G65 H11 P#i Q#j R#k% t, y4 p4 ^. U: f
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
$ o) h D5 h+ j" ^- U, a$ R# Q# i) D+ t5 {+ Q5 w
2)逻辑与 #i=#j AND #k
o9 K* H0 t$ M编程格式 G65 H12 P#i Q#j R#k
6 R, t; l( i; U例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 5 G, ?/ H9 O3 p1 B
8 H6 U+ C: R* O; w9 r
* z: r" D @) z* g: A
1 S, e6 _$ J6 Y/ Y4 k/ L6 ^; L8 U$ y/ C, Q- N. ~
(3)三角函数指令
0 {- |5 i1 E+ n0 a$ c( q
* ] j: h7 E c# M* [# O% ^: M 9 N& m+ C: T& k; K$ n- D9 d3 h& a
" i" o2 b5 P1 z) e- n" U5 v8 ?
1)正弦函数 #i=#j×SIN(#k)
9 c- J% m1 j* t& V; S
1 n) j. ?( a2 I8 T% [. N编程格式 G65 H31 P#i Q#j R#k (单位:度) .+ p& ^8 G4 v; f$ ~2 b
# R: x* Q9 N3 t1 {! V% w$ n例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))5 W( C) e$ v+ v+ E
2)余弦函数 #i=#j×COS(#k)
* o4 q u1 @$ l9 j编程格式 G65 H32 P#i Q#j R#k (单位:度)
# o/ q* A- \ c8 r. T6 v1 |1 B* J8 f例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
g/ b; u8 y: d9 @3)正切函数 #i=#j×TAN#k' U. a, B8 R% W
编程格式 G65 H33 P#i Q#j R#k (单位:度)- ~$ ]9 b. i, i2 `
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))+ ~5 `3 F* O4 y7 ^
4)反正切 #i=ATAN(#j/#k)
& B. j- U7 Y/ J5 U9 {编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)9 g; N# V& Y3 K5 ~5 r* Z
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
8 }" j$ r. _% i5 P9 g0 K F% {4 D: _( v
. H& u' `* F0 R, V# N: D9 O' G
9 q; m& b& o2 a& N/ {# T! v(4)控制类指令
( \* ?; U& X2 N
# h, J' T! T1 ]! |. G- u - Z3 z. D) f; ^$ H3 B o. X
7 ?3 t H; @, i5 G$ [3 A
编程格式 G65 H80 Pn (n为程序段号)
+ s' i- [" z) v- J" P$ z% q/ V例 G65 H80 P120;(转移到N120)8 a+ T$ d$ F( u; B& g
2)条件转移1 #j EQ #k(=)
* u2 \# k# w$ Z, u4 m编程格式 G65 H81 Pn Q#j R#k (n为程序段号)- k! a. P- d* {2 A F8 \
例 G65 H81 P1000 Q#101 R#102
1 K6 f! J( ~7 p5 S% o( ?5 p1 {9 m: j当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。1 L1 l3 L; m: p; _* _% [1 b) a% w
3)条件转移2 #j NE #k(≠)
# J2 ^4 P# H5 ` m' N. l; c4 h编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
( \0 P5 ~% ]! y& p例 G65 H82 P1000 Q#101 R#102
2 A( O2 r+ A/ ~7 f" j: t) h当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。: e) u3 w0 a; J; ` O5 @
4)条件转移3 #j GT #k (> )
9 R% T! ]) |& s9 x编程格式 G65 H83 Pn Q#j R#k (n为程序段号)2 I0 C# U* Y# I: d: y" R) O" i! [
例 G65 H83 P1000 Q#101 R#102+ S9 j' O) _, \& m
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。% w q' C/ a4 C% _# L" `
5)条件转移4 #j LT #k(<)0 F9 s, r" |/ T; ]
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
* ?' }' D+ F+ j例 G65 H84 P1000 Q#101 R#102 6 f; I, {% [2 V% z2 N$ c
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。, C9 P; x# ? q( C- ?
6)条件转移5 #j GE #k(≥)3 x- @0 I" {- g8 Y
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)4 C2 H+ L" a5 P; @" B' l9 G- C
例 G65 H85 P1000 Q#101 R#102
) l7 J4 c9 l3 P' \9 n9 N! F" Q k2 T当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
6 @7 g1 e8 E; U1 F7)条件转移6 #j LE #k(≤)
! j" u) m5 q# ?; E编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)$ y. Q5 Y4 J% r' v
例 G65 H86 P1000 Q#101 R#102/ ]( r) L" z j
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
2 q, w1 ?$ b ]& ]6 I* Y. I% x; g- M- I8 @7 n9 G: r
4、使用注意
) @. l9 W, E& v) j6 p/ { 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
( S3 L5 t+ Y4 a(1)由G65规定的H码不影响偏移量的任何选择;- E: X) \0 g3 r# R0 M) T
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
; y& c+ U4 t! K9 A' {2 M(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
1 Q1 u( X3 ?3 V! P, O. I2 j(4)转移目标序号可以是变量。
- B& q0 f' p/ A) x. }3 @ G7 ~! W
" ^/ \4 g3 ~) q6 x; a5、用户宏程序应用举例 :
% h7 ^* d9 E5 Z6 P8 Y/ G4 E4 O, `1 t/ |4 h
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
# J, v1 x; @1 Z1 H. E7 W) S: {( c- g, b0 S; h; C1 Y, M% t" K
使用以下保持型变量:( J6 Z6 B( L) m( G) Q
#502:半径r;
9 N9 m) `) u, V9 j, `( p/ @#503:起始角度α;, |" M* N0 @7 m& q6 ?5 a
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;) j* {& Y" X' p: Y: |: r1 D
#505:孔底Z坐标值;
; ? M K7 O: D( S P( Z#506:R平面Z坐标值;
" `: w( B% P& Q1 W- t* {: ?#507:F进给量。 , a2 L5 ~0 k j
使用以下变量进行操作运算:' p2 w0 X- w) z b5 G" B
#100:表示第i步钻第i孔的记数器;( I0 _+ A+ l" B+ K% v. v1 c
#101:记数器的最终值(为n 的绝对值);
; s- `0 \# l/ s: W$ _( B#102:第i个孔的角度位置θi的值;
7 s) ~+ {% B. `" o% j- @1 l' m7 N2 f#103:第i个孔的X坐标值;
. b! g) F- \+ F( X/ v% \1 \#104:第i个孔的Y坐标值;2 ]5 Q, B- j, A
用用户宏程序编制的钻孔子程序如下: % Z1 P! B# r5 Z
O9010
* t5 C" q+ g+ s3 I2 q& g6 r2 M0 Z$ WN110 G65 H01 P#100 Q0 //#100 = 0
; j: J$ k& I8 g, {! H8 C1 q ]N120 G65 H22 P#101 Q#504 //#101 = │#504│" G# t& n& M. _( C0 g' v. ]
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o" F4 s& i6 v( m2 m9 m
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
. N u& R9 d$ ?1 hN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n8 K) S2 E* Z. k; b6 e) M6 B. l
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标' m7 Q% y& [& | Q+ s$ m
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
L0 A1 y6 O' _+ U0 ~N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
2 ?; J1 u0 B6 F) `% n$ A/ U7 jN190 G00 Z#506 //快速进到R平面
% c, |7 L3 K7 n; dN200 G01 Z#505 F#507 //加工当前孔
% t+ G. i8 f9 e6 j5 a2 V& bN210 G00 Z#506 //快速退到R平面
/ P: n3 \1 y% ~1 s2 X4 I/ P1 CN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
! C; U# L: Z2 G0 `) dN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
/ e- e- @1 O4 Q0 ZN240 M99 //子程序结束
2 G& P5 [0 B+ P9 F( l4 @: S' R. t
/ i3 K% o2 }& [$ [0 ~) P/ U$ k6 [ , F4 D2 M; _# D( Z3 E4 E- f
7 B; I) V$ x: C- E( t% ~$ a调用上述子程序的主程序如下: 8 s( g. \4 p4 N, D4 N
O0010) J2 Y( L# ]! J8 y
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系2 J: I: `: A$ f6 ~3 C# Q( U
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔( Q3 Q% J- D4 c/ a" m
N30 Z20 //抬刀
4 w: R) q# K7 n5 \ Q( [N40 G00 G90 X0 Y0 //返回加工坐标系零点
; _" V1 m- L- ]N50 M30 程序结束- Y2 e; s& f" `9 A3 H
设置G54:X=-400,Y=-100,Z=-50。
9 j' q+ @! f- C+ w变量#500~#507可在程序中赋值,也可由MDI方式设定。 0 {2 [0 b# b& H; k+ z2 Y/ I/ o
, {% x$ `! X2 j3 a- \$ f" p! d# @B类宏G658 t" Y* G0 B3 e. h
- c; z4 u- ?: C6 @+ Z简单调用(G65)
+ z' ]( f, L3 x$ k4 \' L/ T 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
5 x( x8 H. Z, P! O! Q 格式 G65 Pp Ll <自变量表>;9 b: N6 W* ~6 J1 i% t1 d& |* Z
其中: p 要调用的程序号
, l7 \0 \6 ^' h) d/ \ l 重复的次数(缺省值为1,取值范围1~9999), O, g4 K( ~. S& w6 s7 Y
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 0 E8 w3 J0 M' B6 ?! N
的局部变量。* E, B9 m* ~3 [+ ?4 g' V2 v$ ]7 k6 s
$ \; u- t0 R7 K4 C" \" |
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
2 [7 ~4 x$ F* y3 x9 |$ t
, W# z! e& H% `3 R% g) E地址 变量号 地址 变量号 地址 变量号$ t, m* G* G9 J5 E4 }
A #1 E #8 T #20' F5 F$ y {7 |8 |% |
B #2 F #9 U #21# `- K5 y0 Z( l5 `/ k
C #3 H #11 V #22
* Q |9 ~6 S7 ]& C: L5 o) f+ cI #4 M #13 W #23
$ _! ^9 X) i2 p$ e. P IJ #5 Q #17 X #24% ?* x/ K. o: s7 `( k, Y* ]
K #6 R #18 Y #25
2 N4 |. x; y n" @3 F% k( [. [" j0 rD #7 S #19 Z #26 n# ~& Y' q: P; \9 L6 e/ Q, [/ m2 f
☆ 地址G、L、N、O、P不能当作自变量使用。7 J7 P1 W" ?8 @9 C' F
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
& U; W E; L+ {6 ?' Z0 Q & h1 G- H9 d! X! b" B/ W' P" a
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
9 X: k3 Y6 @7 j用的字母自动确定:
4 l$ m3 ?$ T# y, _地址 变量号 地址 变量号 地址 变量号
8 T0 ?2 k1 z, f& l! M( P" Z) ]# X2 qA #1 K3 #12 J7 #23 }, a# A+ R: b' y; J
B #2 I4 #13 K7 #24
$ A, @0 b- ~3 U0 x: L/ u4 ]C #3 J4 #14 I8 #254 w/ C- P! `, S4 {) A
I1 #4 K4 #15 J8 #26
0 Y! ~' P; {5 t$ y BJ1 #5 I5 #16 K8 #276 l) ^6 g8 Q+ t$ f
K1 #6 J5 #17 I9 #28; [: f2 H' ]8 P2 _# ]5 |
I2 #7 K5 #18 J9 #29/ y7 A+ D7 q7 ~: j! f
J2 #8 I6 #19 K9 #30
$ h7 g+ F- u5 d# V& GK2 #9 J6 #20 I10 #31
/ p9 T8 Z7 V+ M9 ~I3 #10 K6 #21 J10 #32, C$ p* Z7 j) G" }* b; p7 d0 K
J3 #11 I7 #22 K10 #33; Y% ~- L( r8 o
☆ 在实际的程序中,I、J、K的下标不用写出来。
1 ]2 Y$ O: N; }! Y7 l注意:4 l7 y# o2 ?' ?7 V2 }9 U1 S
☆ 在自变量之前一定要指定G65。
. d3 q6 q7 j# x. ^☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。7 L* }/ b! u$ e8 }) Z7 P. }
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
; P3 J5 ~; i# }- _8 Y7 F! q7 R☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
$ a, u" p! K! E" d G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
- o% T% r" j& X之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|