|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
4 G$ A) i" V$ C. S详解A类宏
& O& b; y! P! p分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
& r" B3 @) ?' v. H- B/ F4 z 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
9 E# l( R1 R3 t3 M 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
1 t& s) a4 h# Y# n4 f, } 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。6 l$ j3 t- F# G" i1 M, F, z3 n
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
* p3 {# {$ P* w& ~$ U' o; }1、变量
2 |# K+ t7 H# j1 C; q; B. z 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。. F; r! A$ N1 _/ P2 V- \# s8 \
(1)变量的表示
9 z# U v' G8 @% V0 o变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
" X- r# c( J7 E! v4 k& r2 a( v! c例:#5, #109, #501。
* l& H2 b' L3 ^) D* _* |(2)变量的引用
) E1 [- i: ]; B2 j' W7 u 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。( U6 O' W3 p1 n' O+ b4 T u% T
例:对于F#103,若#103=50时,则为F50;
9 y) J# ]3 o/ F3 _7 t; o对于Z-#110,若#110=100时,则Z为-100;
) o1 J( O% } d: a' s& m: J对于G#130,若#130=3时,则为G03。& M9 I* M4 e) T. S. s
(3)变量的类型 ' J/ U+ ]5 P7 h4 }! J: F
0MC系统的变量分为公共变量和系统变量两类。. R. }& X3 { O3 V1 ]- ]
1)公共变量
, _, R0 r0 J3 x8 ^* |- n 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
3 Q% q7 \; ^+ ?0 c公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 7 U; _- Y, z, b- n6 \8 g- K; T
/ ^$ o2 o4 j+ b: \) [: c8 g* _. s6 ]
, x* a3 o$ }; i1 t8 T% u
2)系统变量 " w0 a! r" C; s7 C; [# y
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。2 m2 N8 k7 [/ {# Z, n8 o8 B2 C1 \
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
0 z) {6 `" l" T; J: {, \ 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
) ~& F7 f0 k) @& }: k8 ?2、宏指令G65: V$ c# U7 d9 I. m0 |
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
" S$ [ s/ L2 A 一般形式: G65 Hm P#i Q#j R#k( I" d( Q/ Z+ |0 x4 F
式中:--宏程序功能,数值范围01~99;! y; d- v- v/ p3 n/ y
#i--运算结果存放处的变量名;# Y: R' q a3 L& T# b7 [+ e
#j--被操作的第一个变量,也可以是一个常数;+ O' P% V+ s3 q+ e$ T; [
#k--被操作的第二个变量,也可以是一个常数。2 k, P& g& p/ ~$ ?; P& W
例如,当程序功能为加法运算时:
) c+ |8 f( X, k! M% r程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
" J2 E; b1 e8 J程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102% Y) p( i7 p) K+ O G+ F2 Q
程序 P#100 Q#101 R15...... 含义为#100=#101+15 . u# z% t7 W" F2 w- S4 T* V
' [; P, O$ N0 c7 t0 u2 A3、宏功能指令
4 V0 V9 u( B4 b- O4 P7 n9 ^: L3 k0 \/ i; z3 J8 y9 ^0 |' ]* t
(1)算术运算指令
P" s, s: i! l8 Q$ z* D( {$ c, p1 C" a: ?. H: v8 O
1)变量的定义和替换 #i=#j
1 l) z9 w# T; U1 H: } J2 j/ e7 {$ c/ X0 s% u
编程格式 G65 H01 P#i Q#j
0 [' J9 b* S4 b. A4 ?9 N例 G65 H01 P#101 Q1005; (#101=1005) 2 ^ [, m! ]" Q# W' T/ o8 ]
G65 H01 P#101 Q-#112;(#101=-#112) 0 w+ N) U$ W4 a" B, x7 z
2)加法 #i=#j+#k
$ l+ E) `4 p! C4 ?8 z' Y+ _, ?编程格式 G65 H02 P#i Q#j R#k
; d' v) c* ]" C+ u/ B) e8 r例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)* U" ^. ` P1 g( X
3)减法 #i=#j-#k/ v$ v' g* X: h" r( K
编程格式 G65 H03 P#i Q#j R#k( \4 B3 B/ P Z) Y
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)0 B3 }9 t2 n8 ?6 \6 g
4)乘法 #i=#j×#k; ?3 \& b8 g" B7 a' u! j) R
编程格式 G65 H04 P#i Q#j R#k2 O1 n; {+ W1 t; X: _3 G
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
7 s4 e6 X( k$ C0 B" s, ~5)除法 #i=#j / #k* C* r0 F' o0 \" e! m9 I
编程格式 G65 H05 P#i Q#j R#k
) R2 q* [- E! n3 @) R" ]例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
) C; | \4 K( z, r6)平方根 #i= " b: | M" h" U) d6 [8 D3 V3 v8 u
编程格式 G65 H21 P#i Q#j
) Z8 _$ q5 Q& N+ P( t, M0 G例 G65 H21 P#101 Q#102;(#101= )
5 T+ _' g$ }( C3 m+ F7)绝对值 #i=│#j│
: F# l4 h4 ?+ U, R编程格式 G65 H22 P#i Q#j
* U! G2 P9 O6 F* V5 D例 G65 H22 P#101 Q#102;(#101=│#102│) 5 F; E) }" y+ X, T* X6 t5 ^% {
8)复合平方根1 #i=
6 c7 H& _0 u8 F% f s编程格式 G65 H27 P#i Q#j R#k
/ o/ F. G; t7 Q例 G65 H27 P#101 Q#102 R#103;( #101=
; ~( U: J1 t) ~9 F$ \9)复合平方根2 #i= 0 q3 O: O4 c. w1 f3 i6 F
编程格式 G65 H28 P#i Q#j R#k
5 {2 ^5 z1 S1 {# h) f9 h例 G65 H28 P#101 Q#102 R#103 + B$ V: y) D+ L* Q
8 y& `# o* `2 u0 h- C
1)逻辑或 #i=#j OR #k' x$ i" ^+ N6 `$ B+ J; ]" Q
编程格式 G65 H11 P#i Q#j R#k5 r4 `' y! l; S8 `
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
3 w3 d2 T9 O( D5 q# X$ f) q W6 P+ p8 ~, ?# |
2)逻辑与 #i=#j AND #k
) m/ s# ~/ }+ Q$ l3 z+ z7 x编程格式 G65 H12 P#i Q#j R#k
! y* i0 F; l8 m/ N$ f1 g2 A9 n. q例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 ( u8 Y5 _1 E8 r8 D. }$ V: u% \9 p
$ f1 S6 t4 O, t7 o! \6 D& q
3 F) E( L* P) u' y, L: u |- w* t7 A* T h
! y5 G0 L5 @- W+ D- `; S(3)三角函数指令
, [6 J. ]6 |! g4 x) O1 H( Q
5 l1 Z) A! Z. \0 K- W l T+ t( ^4 O* Z T- y1 \
3 a2 \6 |5 F* D( d2 {/ A3 x1 ]
1)正弦函数 #i=#j×SIN(#k) . {8 I- d6 f# U9 Z& `! R
1 O9 H; X7 S/ D9 S编程格式 G65 H31 P#i Q#j R#k (单位:度) .* {8 ^2 J/ r" {( {$ W/ c
0 _* z) |' i: ?; U7 A7 m& q例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
+ @: ^( I$ H# ^+ R! h2)余弦函数 #i=#j×COS(#k)7 r7 m8 H, ]0 A7 Y/ b7 G* J0 T
编程格式 G65 H32 P#i Q#j R#k (单位:度)( j9 m" K! c: G
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
/ K* G* F* N' G. s/ Y% S) t3)正切函数 #i=#j×TAN#k
- J3 H2 x) }4 E- K3 A f编程格式 G65 H33 P#i Q#j R#k (单位:度)
- B& w9 E1 ]. c" [6 y) e例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))" h+ g2 b+ E# t3 ]! P
4)反正切 #i=ATAN(#j/#k)# s d5 v& h4 @6 @) ^1 T
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)8 P# \/ }8 o$ f0 x k
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103): t# x% k3 k( A4 a+ K
( A+ r1 r3 c% R% w ! z% f* ?7 j) m* C
9 s" f3 v% O7 Q(4)控制类指令
, k9 H' g+ ^! D6 _' i/ e
k3 k& @' d# r+ H8 A- E/ f+ ? # |0 ]# Z3 }: @; d( K8 w# j) h* U
s" H3 D c( A7 ^
编程格式 G65 H80 Pn (n为程序段号)! \. D& V$ D' o6 w+ R% E6 I) u" P
例 G65 H80 P120;(转移到N120). m! v$ _9 i# z
2)条件转移1 #j EQ #k(=)1 S& A' G$ A( j3 z0 w! D( ^+ Y
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
% y* |5 w8 h5 m, E9 Z; k3 F例 G65 H81 P1000 Q#101 R#102
, [% n* w0 p% w2 [% Z/ ~* D当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。/ g3 R& i) t$ D |
3)条件转移2 #j NE #k(≠)7 @" }+ a/ `6 ~
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)! k' k) T# T9 p4 J
例 G65 H82 P1000 Q#101 R#102, `( Z+ J$ m3 H& i# c4 M
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。5 q6 L% g u8 K2 G2 L8 B3 _
4)条件转移3 #j GT #k (> )
- r7 i& A) j+ L编程格式 G65 H83 Pn Q#j R#k (n为程序段号)# c9 \- f- V: @+ u
例 G65 H83 P1000 Q#101 R#102
, ?7 U+ h8 b; ]2 D, Y5 B当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
- P2 y& k6 Q& Q" H+ e! i5)条件转移4 #j LT #k(<)) @$ N, i. R& U2 I6 N
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
/ J1 Q/ M9 _! J! w例 G65 H84 P1000 Q#101 R#102 & T, ?+ j4 X! }% _) @! I
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
( A6 e7 x; T1 i( \, A8 }9 b8 y6)条件转移5 #j GE #k(≥)2 N" `$ Q! x% v/ [
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)3 p; B* |' q, s+ ]) g" Y8 t
例 G65 H85 P1000 Q#101 R#102
( y: I: K0 A7 `7 |当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
/ i3 f+ M6 j6 T- Y8 l$ ?. ]7)条件转移6 #j LE #k(≤)& n, z* p3 q) p6 O. m: n- L
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)7 Y& @& d% Q) O3 q
例 G65 H86 P1000 Q#101 R#1023 f: r B6 J( b. y* v& `! V
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。5 P1 b- N3 c. D# N, V, z
: v5 l- W$ s8 ^* _* d B
4、使用注意2 J$ S. ]1 I! ]- v( A& G& X. b
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
% P4 M3 O2 j, b6 l, H: A' H(1)由G65规定的H码不影响偏移量的任何选择;
9 g; r. K5 ?% `7 u4 W(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
, X, P2 H& C$ D(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。- i2 Y& Y' `. k) v( R- J3 V8 Z
(4)转移目标序号可以是变量。
' I8 y) p8 W+ N: D+ K0 P0 Y) J+ ]5 f7 G, X
5、用户宏程序应用举例 : 5 E, w2 u& s0 k, b3 P' y- ^ m/ p
) N* E4 U1 c1 ~7 r- _9 H, p
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 0 z4 E- @3 X& b: z" m8 G# O# z5 m2 x
# q1 `1 J5 p0 P& t5 \* X使用以下保持型变量:. G) s! \( |! ~' f/ U% C
#502:半径r;; q4 F1 Z$ r- x+ u7 l+ S
#503:起始角度α;) A4 M7 h6 @+ ?5 `0 t% ], H: m, J
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
/ F% N" b$ ?6 ]/ H! X* A#505:孔底Z坐标值;, R2 }0 L7 D: X* l" e
#506:R平面Z坐标值;& J! R" U' _4 ~7 |
#507:F进给量。 * v& Z* T' N/ ~
使用以下变量进行操作运算:" G9 ?4 p' B4 D
#100:表示第i步钻第i孔的记数器;4 a7 l5 ~9 w! n& J5 g2 Z c
#101:记数器的最终值(为n 的绝对值);
% b K# {3 W4 ~#102:第i个孔的角度位置θi的值; 4 D& B @0 D& M* K
#103:第i个孔的X坐标值;
: ^* C. X! z3 v) Q$ l5 z2 V#104:第i个孔的Y坐标值;: Q( w/ w: W9 l4 G4 P9 G* s) d% Q' \5 y
用用户宏程序编制的钻孔子程序如下: ) x( v& a# L5 z6 G: G# h* Y1 N, _. h
O9010
& G2 H/ r% d: b i: M; ?, I+ r8 xN110 G65 H01 P#100 Q0 //#100 = 00 r2 m& E0 G) T7 x
N120 G65 H22 P#101 Q#504 //#101 = │#504│/ x8 S7 f% M: c$ E% Z- i! a1 A
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o! [" U$ b) l& |7 i
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
6 u' L/ q0 R* {6 lN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
- M$ S) Y+ M* M& X% |$ @N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
; R" ^ V4 n9 o$ S$ w5 uN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标! ~; t f2 e" _- R! G2 }
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)5 e9 U; P% x; g/ q
N190 G00 Z#506 //快速进到R平面6 M$ G6 \ Z! x
N200 G01 Z#505 F#507 //加工当前孔; s! B! E' t+ W& C" f
N210 G00 Z#506 //快速退到R平面( S3 h% s ]3 }8 d- R# B
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
. J5 J8 y7 v) r/ c$ u$ i/ r9 i9 yN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
8 P' u% G0 @+ U V! J& ?0 yN240 M99 //子程序结束
. T( A' A3 f8 [, m4 {$ B) R+ D+ a) C9 D7 n: |% ]
/ K A& j: V. o% A U* }
3 J* u: H% ]& N" Z/ Z调用上述子程序的主程序如下: ! L9 t2 c; ]4 W# b) L! x( i# J3 Q8 q
O0010
* ~ G3 }! U3 i8 i# xN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
( f1 z: Y) J* A) J/ ^* jN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
9 v: X) g, ]# f8 j: U% b. IN30 Z20 //抬刀- z, {; V; W& ?2 L8 g7 g$ a
N40 G00 G90 X0 Y0 //返回加工坐标系零点
0 h9 ^, ]2 M! F! S9 n/ lN50 M30 程序结束
7 {) B* C5 ~1 k7 T3 }设置G54:X=-400,Y=-100,Z=-50。
! [* ?' Y: {1 B- L ]变量#500~#507可在程序中赋值,也可由MDI方式设定。 % E9 M$ c3 p$ l6 C" `& b% u6 O& p
" F9 z* j+ D5 A
B类宏G65
& g! ~& _* t V+ r& m2 L! f( ~0 W6 [; e7 ^
简单调用(G65)/ u& X7 g$ }( C2 H) H
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。: ?; u3 ~% A% q3 w( c# U
格式 G65 Pp Ll <自变量表>;
5 U& k& a) E C: u% t9 ~2 n+ s/ f/ H 其中: p 要调用的程序号0 R/ @, ~) T5 _+ f
l 重复的次数(缺省值为1,取值范围1~9999)
+ j* k" a, o% d9 l8 T; L4 V2 V4 @3 E 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 # P2 q: l3 a) T. v
的局部变量。
: G5 N) P% i% Z+ e. h k6 k9 S8 H, ]9 _6 k7 X3 j
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:! ? Y E4 O$ p3 ~6 I* ]4 Z7 m
: i$ _' p( R5 N, O+ |
地址 变量号 地址 变量号 地址 变量号
0 U; L0 c7 D( Q& i0 _2 o# x# hA #1 E #8 T #206 z3 W1 g- J7 ` {# s3 K# X
B #2 F #9 U #21
9 f5 w8 ?' D; [0 fC #3 H #11 V #229 S" B0 C+ v$ @, {/ p
I #4 M #13 W #23! t' v2 ~2 Q/ {, G( z' w: @0 q# B
J #5 Q #17 X #24) Q0 H$ {5 ?+ g4 M
K #6 R #18 Y #25( `$ x4 u) v5 W* ^
D #7 S #19 Z #26
7 V6 f- V' y* w- Y" u& P, h( z☆ 地址G、L、N、O、P不能当作自变量使用。
" r# Y' _( R/ P; Y: D☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。; ? b! V5 t6 _3 a7 T
! o# \+ I. A) b4 H# y 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使$ m' M0 `# _7 d9 E: r7 l$ N: @/ i
用的字母自动确定:
+ k# g y; q R4 G: A地址 变量号 地址 变量号 地址 变量号, w: H2 x5 s9 n1 a! D$ {( o
A #1 K3 #12 J7 #23
( Z$ u( z C8 _- ^B #2 I4 #13 K7 #24
* q* r8 G( m) ]- ]4 i$ IC #3 J4 #14 I8 #25
+ Z0 @; a) b/ @- d( s& @/ VI1 #4 K4 #15 J8 #26" r6 p$ C% b9 v; [* v7 H. v
J1 #5 I5 #16 K8 #27
! {- P* ~7 u" t0 y" ?K1 #6 J5 #17 I9 #283 j) k) t |! ~- _* }, P
I2 #7 K5 #18 J9 #29" l- p# ^, y M y' g2 i
J2 #8 I6 #19 K9 #30; |+ @" _# x* z$ r, M
K2 #9 J6 #20 I10 #311 S3 t% r! k2 M) O# \4 `/ t
I3 #10 K6 #21 J10 #326 b8 p* _+ P6 Q A
J3 #11 I7 #22 K10 #33- y; Y# e1 V( s. h# X- ^1 D: z* h
☆ 在实际的程序中,I、J、K的下标不用写出来。, m9 ?( f5 g: c# U) }8 i
注意:
6 u: b4 A( ~1 e& Q3 B/ C# b5 Q7 _☆ 在自变量之前一定要指定G65。
/ O [- m7 K6 E5 F☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
/ i$ F* f1 d" y/ O5 O. U☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
. L/ v/ E5 P7 [2 E6 R6 N B☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。* O& X5 O* U0 i
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环. r6 h3 I* ~# W( t) |# s
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|