|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
2 Y S6 v/ o7 F. p详解A类宏
O# ~! R0 H/ U }" g9 L/ s5 e分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。* Z4 Y; n; G1 R4 [6 i4 ~4 t
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
* @7 r1 t' k7 \* }* b: x8 r 宏指令是代表一系列指令的总指令,相当于子程序调用指令。4 y# D! O5 h/ c) l0 L
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。. d( O3 n8 P3 N$ ~: P
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。! W" k" e$ I) C! O+ f
1、变量2 j7 i' n+ k B7 k. j+ x
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。$ z3 `- t0 e$ ~1 |& G
(1)变量的表示! s/ v% ~6 ]0 W- Y' u2 S
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
3 J! p6 h# i& h. p7 M例:#5, #109, #501。: I# N3 c* l) Y% K1 P% V- v
(2)变量的引用; h3 @" o% u: s& l) h8 t- d3 x
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
% d7 m' B: o' A+ Q7 D, P2 O y例:对于F#103,若#103=50时,则为F50;, n8 \ o; ?0 _# ?$ W1 y
对于Z-#110,若#110=100时,则Z为-100;
- z- U/ }# J5 l3 b7 a8 f对于G#130,若#130=3时,则为G03。- G9 \; X2 N& M) _
(3)变量的类型
t% N, n0 m$ q6 `+ V 0MC系统的变量分为公共变量和系统变量两类。; f' i, X* I9 a4 z7 h0 @7 V5 d
1)公共变量
+ i7 ^" G, r5 V% ^' }* R 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。* I; J3 y. y* N
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
* y6 I# B# D7 K# ^4 i1 ~, o
1 f) E3 f& s! \% k4 M% a5 D' T5 x( g0 i0 z6 u7 u5 K" g
L9 S! H) g; S5 }& A: A0 y2)系统变量 ) Q* D; F* v+ _; J# u
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。( _! T" `' \2 R
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。- b6 w) t0 R2 U# S' d$ |
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
- N7 e; J5 i5 J2、宏指令G65
" X7 ]# }% t! a% D# q/ u( W 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。+ }( U' D2 M: [/ v, I4 F
一般形式: G65 Hm P#i Q#j R#k5 a3 z0 Y6 M( e% `) e& B
式中:--宏程序功能,数值范围01~99;
/ @; p* b6 A# z0 A. K#i--运算结果存放处的变量名;" E' B; l9 p* a
#j--被操作的第一个变量,也可以是一个常数;7 W3 c. ^4 t) j! r' }+ `# D! `
#k--被操作的第二个变量,也可以是一个常数。3 l0 k+ F. c+ L
例如,当程序功能为加法运算时:
`& t) p. Z/ o! c. c9 Q程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
+ q; w! E: H- S! L$ y$ W* [程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
" m* d2 l9 e8 N程序 P#100 Q#101 R15...... 含义为#100=#101+15 # e8 K! b% X6 ~
' O, k0 i) p0 ^5 Y; @! \3、宏功能指令
6 L, t+ V0 R6 E
9 ^6 B+ [, s" G4 R. Z(1)算术运算指令 & \" I" z! x3 w/ y5 H
/ p& X! H2 K( R; Z' t* {" l1)变量的定义和替换 #i=#j E1 M! u" ~- }/ A( j7 W S7 p) K. g; _
/ z" s h, s0 w! g" _# F编程格式 G65 H01 P#i Q#j" u& l2 n8 E' J7 X8 S0 Z
例 G65 H01 P#101 Q1005; (#101=1005) $ o' E- b% |2 S8 N
G65 H01 P#101 Q-#112;(#101=-#112)
" } b* E9 J' k$ k9 K/ g2)加法 #i=#j+#k
8 J0 e2 c) t2 Z; P. \编程格式 G65 H02 P#i Q#j R#k F+ ~4 {* t$ X& c0 R
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
, k1 Y i: s5 D7 d3)减法 #i=#j-#k+ ]+ _- Q; c1 n9 M
编程格式 G65 H03 P#i Q#j R#k
" o% j9 ]& ~0 s, l# I: r8 I) ~+ ~例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)' @/ m- I5 x6 d
4)乘法 #i=#j×#k
9 H2 o4 r& Y* g. p# n& G/ h% k9 W编程格式 G65 H04 P#i Q#j R#k
$ |% c0 O+ `, F& {5 m8 g$ n% A例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
8 S1 A$ e7 b# Q5)除法 #i=#j / #k; M3 `! p" u7 ]7 _& e
编程格式 G65 H05 P#i Q#j R#k" R& n6 z5 W# I& X' f4 [) O
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)% f' D) u- D" q4 ?5 d4 t
6)平方根 #i=
D. t' ~' C$ J% A' w8 p4 f( n! r) K6 n编程格式 G65 H21 P#i Q#j
/ w5 W( k8 v, I6 w% L; X8 B( }7 y; }) q例 G65 H21 P#101 Q#102;(#101= )( V1 Y' ^7 Z' U
7)绝对值 #i=│#j│! W6 X v S8 w& _8 Q6 m
编程格式 G65 H22 P#i Q#j# F! a8 ]* J) _. n
例 G65 H22 P#101 Q#102;(#101=│#102│) 2 R6 o/ I, \# c }3 u/ u
8)复合平方根1 #i=
8 R1 t( X+ m( j( i, n4 {% \编程格式 G65 H27 P#i Q#j R#k
0 ? I6 k$ q# r7 `& K例 G65 H27 P#101 Q#102 R#103;( #101=
, l1 ?$ S4 h9 u! t9)复合平方根2 #i= 9 C" n" k' s( I' c
编程格式 G65 H28 P#i Q#j R#k# o; d5 h+ Y% T. ~' T1 k0 G0 z
例 G65 H28 P#101 Q#102 R#103
; ~% H2 ?' Y5 R- ]. L# G% l( F9 W
1)逻辑或 #i=#j OR #k
+ Y' b" A: J( U& u1 A( c3 g编程格式 G65 H11 P#i Q#j R#k! R/ N! G: F2 b: C3 \% b
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
: A# [ g* m8 }' V6 E( ^( z* T6 K$ k0 r1 ~1 A6 d% t5 |
2)逻辑与 #i=#j AND #k
4 `; i2 i9 N" d, S+ P5 S编程格式 G65 H12 P#i Q#j R#k
5 k" _: M6 l/ Z' B( p2 N" h3 ]- q例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
8 S/ e) [, Q5 I" B4 v& i: h' s* s6 i$ r: K- V* O$ M* a
" l6 H% Z- H0 C9 x- _ 4 c5 V5 p7 [4 ?
' ~4 F: N; Q7 _) p. A, i(3)三角函数指令 . ^9 H3 Z( {4 f- f
2 v0 h, s( L7 {5 j. |! J3 h& s
9 [9 z! T- m7 q" Q, I
# x6 N$ G! c+ w( R% }3 J- U* I2 x
1)正弦函数 #i=#j×SIN(#k) * u5 R& k! c8 a8 x' H9 q! q
6 c( ?& Q4 z/ y( z. i* b- s编程格式 G65 H31 P#i Q#j R#k (单位:度) .
# a& ^& c1 K; Z Y* I7 I3 e. L; h8 G0 g9 n
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103)): z- b- x. H! J" e, a( Q* k" G
2)余弦函数 #i=#j×COS(#k)
! a5 ?! M; a% E- Y编程格式 G65 H32 P#i Q#j R#k (单位:度)1 i. w, c4 W- m
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))& ^* _7 l& t% r- T1 Y2 Z m2 K" s5 c
3)正切函数 #i=#j×TAN#k
8 V% z+ s3 t' L编程格式 G65 H33 P#i Q#j R#k (单位:度)
5 Y8 e8 Q+ ^: v3 V, \例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
. I# {+ X( j, y0 F4)反正切 #i=ATAN(#j/#k)7 I+ x1 B4 V1 m+ F9 x7 Q/ I
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
+ ~4 l0 ]0 v# x! W& n4 C+ a* _例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)- |3 s; k! T' K( {7 g$ A
1 I* j2 L& r3 `7 b
9 I% J* R6 `2 P$ ~6 K
4 b4 y4 e5 h! k3 d, W" a4 k9 }(4)控制类指令% L) E4 Y2 b: M3 P R
4 s! m; R" l! y* B: R2 h$ y ; @' Y$ w2 Z# q) @7 Q' n
: {+ ]1 }' W/ |# R8 i( n2 v$ |* {
编程格式 G65 H80 Pn (n为程序段号). i2 @3 U: L* S) U9 T
例 G65 H80 P120;(转移到N120)
+ k; @! X$ b# Q3 _5 P2)条件转移1 #j EQ #k(=)# T( ^/ y. W9 d5 o/ x
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
) ~! l9 N! r3 K" g5 T- ?1 y例 G65 H81 P1000 Q#101 R#102
$ q: c' I% t5 V3 E5 Y) x当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
- \, e" }2 B) y3)条件转移2 #j NE #k(≠)5 }+ p1 q* n+ Z& \+ t/ b
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
U5 t, k& v6 h! ~& }例 G65 H82 P1000 Q#101 R#102* F' l0 _1 A- U" @' s; G
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
2 A/ q$ v* x# F) G; L3 J4)条件转移3 #j GT #k (> ), [4 {$ t' m5 {) }" j# q
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
2 j- L4 n3 D% @. A例 G65 H83 P1000 Q#101 R#102
- k( l& o7 M' j5 \0 V当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
+ W% p7 @% k8 G) R, b) q5)条件转移4 #j LT #k(<)
! e( @2 P0 o1 I编程格式 G65 H84 Pn Q#j R#k (n为程序段号)! X% ]" j2 z7 i
例 G65 H84 P1000 Q#101 R#102
3 u( {: a5 v3 x当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。2 j3 F& D/ r3 p* T
6)条件转移5 #j GE #k(≥)5 o. _, L3 t7 N* ^" k8 v
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
3 [9 V; o# [0 P- L! k" p$ P5 B例 G65 H85 P1000 Q#101 R#102$ s x) c8 x' ^ w
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。8 L. T$ m8 g; `, y7 I# i
7)条件转移6 #j LE #k(≤)
' A7 E( r+ c3 f1 j7 \* E: v编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
8 f) q$ x$ E4 ^1 j) B* n D- c; ~( {例 G65 H86 P1000 Q#101 R#102
. i6 r( y% I' D当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
) q/ }& _; T6 d; x
+ S: h O; {8 Q6 e4、使用注意
* V! u" ^$ d( G" K7 V 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
! k) Z4 u3 x3 g5 }3 \2 \(1)由G65规定的H码不影响偏移量的任何选择;" K+ S' w1 \* q/ V, s
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
3 g* c( U% L9 z(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
6 E$ g! Y' l/ n. O4 K(4)转移目标序号可以是变量。 " `0 v& ]! s! _7 Q3 n8 n' L* h
4 F" Q4 V) Z \2 A
5、用户宏程序应用举例 : m# d. F9 B' U/ D2 c7 x
9 p/ }) v9 c. `. E, [用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
/ }$ I* X: C/ A& r! U7 L
8 P; n( g% }$ ^% T" ~$ n使用以下保持型变量:
5 @# M7 c: x! {" C1 l! {/ \4 f#502:半径r;- q" g& l4 Q) [0 e( \& H3 ~( u
#503:起始角度α;* i. ]6 p, I% G4 h* j# q
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
9 U0 Z4 r M' n- p#505:孔底Z坐标值;
& @- v$ d% e( i* W: w' T+ Q#506:R平面Z坐标值;; d9 E/ O- V8 y% q! r
#507:F进给量。
) E' b7 ?: C: S3 d! Z- [; s# t使用以下变量进行操作运算:6 n$ l2 g7 [# [) ^, A
#100:表示第i步钻第i孔的记数器;
3 |/ D0 _+ @ t/ Q* O* b8 X3 y#101:记数器的最终值(为n 的绝对值);. S6 i: `: D* J- \# \
#102:第i个孔的角度位置θi的值; % E/ W7 _6 l% E7 ~6 F
#103:第i个孔的X坐标值;
+ I; t* Z1 E9 D$ t$ M5 ~" Z#104:第i个孔的Y坐标值;' i2 M6 a8 z$ f1 j
用用户宏程序编制的钻孔子程序如下:
4 n# W: J' I9 p' Q& q8 y8 l+ x% CO9010 P# ~* N/ A" w
N110 G65 H01 P#100 Q0 //#100 = 0 |& p/ k6 ]1 q% v
N120 G65 H22 P#101 Q#504 //#101 = │#504│
3 v2 t9 J* S# j/ p/ a% d N0 GN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
6 }$ G. W7 L- u6 XN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
8 O5 `$ X' K7 dN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n0 ~. E% N$ X. _
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标2 j* ~& J% S$ J3 i* C- w! N P6 k/ Q
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
$ O) O! H- s' kN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面), N C, B* l% P; R8 K7 C
N190 G00 Z#506 //快速进到R平面
& ^. X% {" B' ?# s" hN200 G01 Z#505 F#507 //加工当前孔5 _' c' l# Q R4 I- V
N210 G00 Z#506 //快速退到R平面- z+ I8 ^2 ?* W8 F9 y. Z `$ s
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数7 X& ~# Z$ d" m+ v
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段; Y! A' y4 O# h4 k. h
N240 M99 //子程序结束
+ S1 T+ B& |5 H; s- v6 L* n+ S9 o9 E, g( R$ |
6 v9 q3 Q3 d) Q8 g1 J/ q: W8 O% l2 w0 \1 q" e* s7 M
调用上述子程序的主程序如下:
& R; J5 L- E+ w5 HO0010
7 D* q4 e" i0 V" Y0 o# TN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
$ t- t' u3 V8 q7 fN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
, | ~* p$ S! U/ q5 X3 X3 y! yN30 Z20 //抬刀! d* p* X* y! n
N40 G00 G90 X0 Y0 //返回加工坐标系零点
# A3 _* h$ V( \* A8 zN50 M30 程序结束7 w8 S. G9 F. ^9 ]- J. a6 U: e& ~
设置G54:X=-400,Y=-100,Z=-50。
' J: ^7 F, S: M6 S1 U' b1 {变量#500~#507可在程序中赋值,也可由MDI方式设定。
" f {! y' H* j( _* v5 d
8 r8 }: F+ v! ?+ i& EB类宏G65
2 ^! @: J& X+ _3 f, R! l4 l& x! h/ H
简单调用(G65)0 v' j/ L. a x6 T2 ^: j
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
0 U" |7 M" h& j: M6 i4 `5 D; y: e 格式 G65 Pp Ll <自变量表>;9 f9 h8 z# N) s) q
其中: p 要调用的程序号
# C0 j6 M' K9 h7 | l 重复的次数(缺省值为1,取值范围1~9999)# o3 P: `6 Z7 Q5 a9 m1 g
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
7 l5 F9 @0 t8 t( A, O 的局部变量。" m4 P8 ]! @4 @
- I$ T/ N6 ?2 ?5 W! X 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:8 J: G8 ~4 ?2 b- A& N, E9 J
9 P x8 V, A' O
地址 变量号 地址 变量号 地址 变量号- V2 |5 R7 O, `# ^& e" @
A #1 E #8 T #20
9 Q. d% ]/ R/ u3 E1 z$ Z& ZB #2 F #9 U #21
; N6 E. m# O7 f9 E- O$ k1 g- oC #3 H #11 V #22
: N- j: A6 N# b: e4 f, b j. I6 UI #4 M #13 W #23
- W6 T3 c0 O& o. U) V! YJ #5 Q #17 X #240 r" s) D+ X( G4 G$ X0 \; u) ^
K #6 R #18 Y #25
1 g' y; |, e6 L! @! i0 ?% C5 oD #7 S #19 Z #26
+ S: s9 J* P( B3 M9 {/ R☆ 地址G、L、N、O、P不能当作自变量使用。
& K) D% e" P& \" l/ z& k2 t( Q☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
; {. { O C6 V! x
. Q! {* H0 f% P4 Z/ e- ~1 A 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
5 x0 v) t+ ^, o6 ?# Q# m- G用的字母自动确定:- Q2 \) t, m3 T* B5 o# A
地址 变量号 地址 变量号 地址 变量号
8 u i: U( |* dA #1 K3 #12 J7 #23# l) L' O" ?& E4 [) ^0 j
B #2 I4 #13 K7 #24/ F9 A6 [. }0 c- W7 y0 V/ w
C #3 J4 #14 I8 #25 F. ` t" c3 q9 M6 T* Q" Q" R
I1 #4 K4 #15 J8 #26' W5 q# s2 S* o
J1 #5 I5 #16 K8 #271 _1 `( L/ Y% L. E* j4 n5 F
K1 #6 J5 #17 I9 #28
S9 z+ K) ?& k) j8 ?5 m4 d" O, |I2 #7 K5 #18 J9 #29
% Z3 \6 N0 }0 ]7 t1 C1 zJ2 #8 I6 #19 K9 #30
5 O" t/ Y1 v' I$ rK2 #9 J6 #20 I10 #31. m) l6 S* l1 G( W9 ~% \' H* G" u& ]
I3 #10 K6 #21 J10 #32
: ? R& {' B3 K5 p1 ZJ3 #11 I7 #22 K10 #33
( r( v7 j1 T* W7 h1 e9 o% i☆ 在实际的程序中,I、J、K的下标不用写出来。
& p3 \+ s2 U4 X& |. X7 v# A注意:
& l1 u& n9 X0 C& Q- x2 L☆ 在自变量之前一定要指定G65。) @7 {" X" \0 x8 X
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。' a3 d. L, c- \
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。* H. D3 N2 G. D. U3 L
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。7 R7 G. t5 y' V l& [# i
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
$ ^" G2 E% u9 ?" j, y2 }3 r之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|