|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
" O4 {0 R$ m- g- W2 A1 h详解A类宏6 }7 d% |* C; E8 w
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
) h; q R1 |4 s1 ^& k 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
, ?2 t# }; S" f- W+ y 宏指令是代表一系列指令的总指令,相当于子程序调用指令。! ]& V& s+ W/ j0 Z& }8 _7 ^
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
% v8 l- j5 ^0 m" o7 i8 Q4 x 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
4 n3 P$ H E4 J: b u$ t& }! W" E Y- l$ q1、变量
: S3 S& |; h ?2 x5 b5 o 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
+ s" n/ u( F ]: @. }(1)变量的表示
$ q; f. `2 @/ {变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
7 o6 f# l% u! q* F4 q# c: X6 a$ I例:#5, #109, #501。
# }& ?; n# D- d: K' |# z) z(2)变量的引用
- s/ X9 K7 t7 q& b( d$ g 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
; V2 V- v$ U6 T9 z例:对于F#103,若#103=50时,则为F50;
3 T9 X0 P6 z7 ?4 A对于Z-#110,若#110=100时,则Z为-100;
) e2 e/ H' M9 E+ h8 o9 \: e对于G#130,若#130=3时,则为G03。
3 R* j& s9 N" t# e Q(3)变量的类型
7 l7 U' S8 z3 F- p$ O 0MC系统的变量分为公共变量和系统变量两类。: w) A7 r$ G" L; J
1)公共变量 7 k4 y4 A4 G) x# e
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。4 f m* z* X5 F( a) }! {0 z
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
) t3 z2 z' ]! e5 w) E+ o/ Z
' P; X5 h& ]2 h
4 l7 o* z% ]5 g; s# Q/ Z
5 Y! d9 l6 x/ ?5 I3 Z2)系统变量
& \3 p' R) z2 _4 P 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
3 O7 t$ Q, A. W5 r( } 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
" }( \; `" f2 Z 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。! R: q& q. B0 e! ?' b
2、宏指令G65
" q+ u# }$ c" l! a/ x- H 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。- @9 G- @$ d0 d/ D. l; ?
一般形式: G65 Hm P#i Q#j R#k
$ {/ {" q) z* P& y0 @/ d式中:--宏程序功能,数值范围01~99;
7 ~# a N9 I. c. w#i--运算结果存放处的变量名;
& h4 V, t0 Q+ ?7 S/ a' g#j--被操作的第一个变量,也可以是一个常数;( Q) q5 ?$ G" F7 e* `+ t4 \
#k--被操作的第二个变量,也可以是一个常数。* c+ x5 Q7 _ }* `# e' O
例如,当程序功能为加法运算时:
+ \; Q- t2 q! ]5 f! {5 {8 b; M程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
" q; W3 \; h- r# x程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102& o% r; i9 b7 Y
程序 P#100 Q#101 R15...... 含义为#100=#101+15
+ O$ H3 z5 p. j6 e/ `: Z* c8 T( Y& a$ w+ Q: J7 G
3、宏功能指令 / E! C- f" B, r' V4 Q4 |( {
" G5 C4 E e. G7 W+ V
(1)算术运算指令 7 e+ `6 O8 E$ l/ f: O- z+ M Z+ Z+ H
?1 K1 ]8 l2 d1 k% Q! S1)变量的定义和替换 #i=#j
+ O' P* G9 d+ K" t: L9 a' Y( \+ \( u6 r" y/ z( z) e
编程格式 G65 H01 P#i Q#j5 A' |: n! B2 {) q
例 G65 H01 P#101 Q1005; (#101=1005)
, H4 f( G h D" c" J4 q3 ]% LG65 H01 P#101 Q-#112;(#101=-#112)
! f! C5 v% h# U/ t2 z! X' a2)加法 #i=#j+#k
- m5 b! Y7 M! W e! ?编程格式 G65 H02 P#i Q#j R#k
/ Y) I% B! o: g$ K+ w# ]- t! L8 x- ]例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
; b9 [7 o/ w' H% M- i X$ Y3)减法 #i=#j-#k
6 Z1 R+ Y2 f% p2 J, ]" z9 Y编程格式 G65 H03 P#i Q#j R#k
: S% N; Q9 g9 {2 m' C. ^例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103): P8 s% p' F2 Z) G3 D8 ?, _
4)乘法 #i=#j×#k
: E. r$ s- M% v* A2 T6 T& q& r编程格式 G65 H04 P#i Q#j R#k7 Y$ c& e5 Y) A D7 O3 `
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)) M0 j0 F5 ]8 c) U+ s& b2 Y
5)除法 #i=#j / #k
) h" k5 y/ G! O* x( o0 m9 Q/ } [编程格式 G65 H05 P#i Q#j R#k
& ]: s r' L7 l9 M例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
* x! H. x J% _6)平方根 #i=
( L4 {( d4 x) i: c( [( J6 s编程格式 G65 H21 P#i Q#j+ E' G7 f# ]6 x$ P" L& H" y2 E
例 G65 H21 P#101 Q#102;(#101= )
, v1 M- J/ M$ b2 O) w7)绝对值 #i=│#j│
* `' L: l$ S6 q编程格式 G65 H22 P#i Q#j
7 e( m& T# ]" q9 x& \例 G65 H22 P#101 Q#102;(#101=│#102│) 9 V0 ~1 a r" c) ]& W
8)复合平方根1 #i=
0 k( j2 \) s) Q0 A+ [( u4 P* X编程格式 G65 H27 P#i Q#j R#k& _8 B. ?) i$ L: D9 A0 Y5 T
例 G65 H27 P#101 Q#102 R#103;( #101=
* l9 d& M, Q, q4 a9 N2 z9)复合平方根2 #i=
" R) W% c# B+ ?: `) I: ]* b4 Q编程格式 G65 H28 P#i Q#j R#k$ U# S! Z9 L# p9 f Z( x7 X
例 G65 H28 P#101 Q#102 R#103
9 e- ] n1 n( |1 m% [6 d) \$ c' H
1)逻辑或 #i=#j OR #k, L. H9 ^) }2 s. \5 O
编程格式 G65 H11 P#i Q#j R#k
% n% J- n8 \1 i$ p例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)! u- v- ^" B) ~
# o8 k% v) D' K7 ?5 t+ }
2)逻辑与 #i=#j AND #k
$ n8 o9 M* z) I5 X1 Q/ N* W8 |编程格式 G65 H12 P#i Q#j R#k
; e8 ^; L1 n7 v例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 / J& G- T# A8 q, S
& [3 m9 N2 R- y! z' `
8 ?4 _: U" l8 J# |8 R& ? / {# g ^5 D+ R9 p
1 S$ y5 f4 S/ M8 r6 _) u$ O
(3)三角函数指令
/ c) _' f* N0 {' R6 Y W& w c0 J4 E) p5 f' u( A
; d" v: S# n+ ?0 v; N4 @
+ x5 Z! \6 p- U7 a$ ]) N0 e1)正弦函数 #i=#j×SIN(#k) # q2 I% r1 h: D) W/ Y0 Q3 d
/ J7 V' R0 ?, J# J
编程格式 G65 H31 P#i Q#j R#k (单位:度) .% P0 G0 t0 G! F/ ?
- |0 U" q; @* d( x n2 }
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))/ [3 _+ z6 {4 c" q {) i
2)余弦函数 #i=#j×COS(#k)
6 r3 t- P: v' ^编程格式 G65 H32 P#i Q#j R#k (单位:度)
" q4 d# C0 r9 |: J- v3 X例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
; D; l/ G# I6 l, x6 A4 J3)正切函数 #i=#j×TAN#k7 o3 o6 L; e! ^; F" D
编程格式 G65 H33 P#i Q#j R#k (单位:度)
# k+ h8 n- I) k例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))9 l# G U- w* V0 i2 W
4)反正切 #i=ATAN(#j/#k)
8 f( F) t" ^0 s0 F h0 p: [# e" [+ j编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
9 Y- m u4 E( X1 b0 N( t; k$ b4 l- D例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
8 I3 T; ?" o0 J8 f2 y0 [
% p8 B1 b+ d5 U3 B) d v& H , d! m$ A2 r7 ?! P3 T0 [
; q S* c$ M: i G. E" P. j0 Y' _
(4)控制类指令2 w/ N& L0 }. ^% b
: F: @. Z u% [" O2 j 8 ~0 p+ J \$ p( ^1 e! |0 }
: |, S: H' |. C. B5 y6 j
编程格式 G65 H80 Pn (n为程序段号)( r8 c8 i3 M& M, r, a
例 G65 H80 P120;(转移到N120)5 f% u; i0 r6 L% p2 R
2)条件转移1 #j EQ #k(=)
, k4 z+ G) n1 i% w编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
0 U! b; D$ ~7 e% B( t3 s例 G65 H81 P1000 Q#101 R#102
9 ^: R h5 [+ ^% n/ F3 z1 N1 {; o, }当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。6 V$ d/ e3 ~3 X6 u
3)条件转移2 #j NE #k(≠)
k) F5 [. N2 y5 w编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
! m- V5 x" ]6 y8 L/ ~+ o, k- I7 i例 G65 H82 P1000 Q#101 R#102
4 C0 d, Q/ n# w* y2 H( {5 M& u6 k; S5 |当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。' \# n; S2 }+ z* D4 m* J
4)条件转移3 #j GT #k (> )* S1 f7 n; f: x$ x
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)% ]$ Q) x# c& \: e" ?
例 G65 H83 P1000 Q#101 R#102
1 `0 Z3 x6 K9 i7 [0 [9 t6 \- {当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。& n6 c3 K! I8 F/ r2 X- k) W0 H
5)条件转移4 #j LT #k(<)
' y! F+ R0 U( r& l编程格式 G65 H84 Pn Q#j R#k (n为程序段号)1 z2 v: ^2 z( @, [
例 G65 H84 P1000 Q#101 R#102 - r( z# \! o8 T' ]5 P3 i6 d
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。) [' n4 h0 h+ x2 T s7 G' d
6)条件转移5 #j GE #k(≥)
3 K% ]$ j b' o$ B, f编程格式 G65 H85 Pn Q#j R#k (n为程序段号)9 h2 L- Q: m- v9 _
例 G65 H85 P1000 Q#101 R#102: Z. d2 f2 K5 T4 D4 L6 W
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。 M4 p4 Z, S1 M: P
7)条件转移6 #j LE #k(≤)
! X, `, D/ e9 D3 Q- J编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)9 s4 [4 z0 h+ d
例 G65 H86 P1000 Q#101 R#102
1 i( L1 G1 i! p% F4 D9 r4 \3 i; t当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
2 f2 p1 J5 L: t Y$ z
3 Y& W* K+ C, u# ~) u% b. Q4、使用注意
) o. Q' L' D1 d9 ]- l" J4 c' h. P5 J 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
9 n3 m7 N2 ]$ a* M(1)由G65规定的H码不影响偏移量的任何选择;$ F, u: v' i, c" C" @6 o
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
" G; Z- Y+ m" [( q(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。5 a( m$ C0 j+ F: k7 I" P* M
(4)转移目标序号可以是变量。 9 B% N: \* q0 K- i4 ?
' q3 C X- I9 k5 G7 w$ R5、用户宏程序应用举例 : 0 n, y' m$ x6 K8 f: f
+ G6 M! N. m$ f# z用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
( g. {6 E* u" g% B/ ?% I
3 ?6 q: K8 s6 o8 u8 W使用以下保持型变量:
6 b( K; \: W2 e#502:半径r;
3 @* @# o+ \+ Z) L' b) m! e, ^- @; Q. p/ Q#503:起始角度α;
- X: b+ S \& ` M" e: V- o+ [; [6 ^#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
- X7 m2 ^1 j2 [4 U# a! ?#505:孔底Z坐标值;- y5 z# {/ ^% T
#506:R平面Z坐标值;/ o: r! a* Q1 o, _+ x
#507:F进给量。
7 L0 w0 s/ S: L1 d+ Y5 t# u1 |. o# E2 [使用以下变量进行操作运算:
6 j+ D- P( E" M#100:表示第i步钻第i孔的记数器;( O- C, p7 c# o) X7 o2 v
#101:记数器的最终值(为n 的绝对值);& g2 B# ~( T, ?7 C4 U$ |7 B9 _
#102:第i个孔的角度位置θi的值;
+ ]( M* K" w# F/ Z0 U, V$ B9 S4 s#103:第i个孔的X坐标值;& R6 h$ \& I* r2 e$ Q5 q7 v
#104:第i个孔的Y坐标值;
" w: j( u1 W( \: q用用户宏程序编制的钻孔子程序如下: 4 ]8 B/ A0 [$ l
O90102 Y j: E8 O5 e. `* @: m
N110 G65 H01 P#100 Q0 //#100 = 0* A6 V; e" l4 ^8 b1 {! x! Q( R# n
N120 G65 H22 P#101 Q#504 //#101 = │#504│( Q1 v. N7 ?0 o0 f
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
- z) z9 {4 h+ v0 l! D( MN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504+ _+ U3 r G6 v# u7 m) j8 K! W' e
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n" ~- C- O4 p3 n6 Q' z
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标. @3 D" A7 d5 }, I, O
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
% ~, J' ~* w5 I$ a7 ?6 qN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)! e8 w K" K( p6 ?: _1 x
N190 G00 Z#506 //快速进到R平面( n# Q0 F8 `: d; ~( Q
N200 G01 Z#505 F#507 //加工当前孔
" s, X# t1 x) Q9 ^' m# G3 U( X7 ZN210 G00 Z#506 //快速退到R平面
! K# M8 `: ~8 w( J3 e' E' o+ QN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
( L; O% U+ J& Z9 t; zN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
1 v" U* | N% HN240 M99 //子程序结束
2 x @: V; S; ]' }5 D u
! ?" Z5 p1 A7 {& Z 7 h8 \& ]; D& \7 r5 y4 O
; ]$ N( _9 r K8 Z调用上述子程序的主程序如下: . n O/ Q6 z5 Q e& M" `" _
O0010
$ t7 f0 o; o# z* ^2 l& Q, LN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系% f: q$ v* H- O4 D3 M, B
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
* R* t2 O4 h+ D. R9 ]; F7 ^$ KN30 Z20 //抬刀* b7 N8 I; H8 s! E4 s( f2 s
N40 G00 G90 X0 Y0 //返回加工坐标系零点 & d' F p" G# h
N50 M30 程序结束
- B# j \6 Q, N' ~设置G54:X=-400,Y=-100,Z=-50。
- j2 c% c8 [5 E变量#500~#507可在程序中赋值,也可由MDI方式设定。
3 C6 q0 Z0 k" i. d4 m5 G
( ~# {1 a) J9 P% i/ n3 MB类宏G65. p) B6 |% f0 R( U/ m+ C
3 V0 H" U8 N( Z! I, q
简单调用(G65)
3 @7 _( z- Q" L5 C) w 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
7 r# @/ q# H- s% x4 U& g7 n 格式 G65 Pp Ll <自变量表>;' g$ _0 _4 d M1 s9 Y6 C
其中: p 要调用的程序号! S/ K q2 ^2 R5 A: I1 f
l 重复的次数(缺省值为1,取值范围1~9999)5 S! Q8 y1 M4 E/ n. M5 _
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 5 V/ E1 h+ t+ h5 W8 |
的局部变量。) _9 K# i( f& Q! z
9 t" i7 _7 G w& ?- [/ j* B
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
) O: p5 y8 j( N& O& u) I
" C. X; r/ P$ y# C0 d W0 R地址 变量号 地址 变量号 地址 变量号/ u2 |% \7 ]8 }! h4 U
A #1 E #8 T #20' }8 ?! ]% Y2 R$ Y3 |, @" Y
B #2 F #9 U #21
T4 C% o" i6 {2 ^& b* zC #3 H #11 V #22& B x0 {2 y; I; b' u
I #4 M #13 W #232 K) P5 L' ^7 x: M8 K
J #5 Q #17 X #24
3 k: x* K ]) g% v. m$ ], JK #6 R #18 Y #25- [4 p7 ^2 C" h7 `4 G
D #7 S #19 Z #263 B$ x7 D" D% @
☆ 地址G、L、N、O、P不能当作自变量使用。5 ^ ?5 z% W! [, y T: H
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
5 M/ g a) `- b0 U 0 y0 J( A, a; O; e: j+ J4 O
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
" l$ W5 z; `/ G+ n用的字母自动确定:
! X8 O0 p& c: ~ ]+ _; v地址 变量号 地址 变量号 地址 变量号
9 ~) M s3 g [4 mA #1 K3 #12 J7 #23
+ ?4 K6 n. W8 A) V" Q h5 E. LB #2 I4 #13 K7 #24
& E9 v; v; \, ~5 FC #3 J4 #14 I8 #255 z6 D7 O: L- O% f1 \
I1 #4 K4 #15 J8 #26- O, g/ F. s" t: f1 r; p
J1 #5 I5 #16 K8 #27; X; I" l+ h" a3 i
K1 #6 J5 #17 I9 #28% l4 n4 O% C( `; R. q( W; V
I2 #7 K5 #18 J9 #29* X- ?* ?( o8 R4 K/ {+ f) J
J2 #8 I6 #19 K9 #307 ]* K' w4 Y9 B1 E* ~3 A
K2 #9 J6 #20 I10 #31
5 w+ D8 r# K2 y/ f+ A9 |I3 #10 K6 #21 J10 #32. ~& N& U! g' T" y3 g* i
J3 #11 I7 #22 K10 #33! j5 u$ X8 T* u. n$ e: A2 k
☆ 在实际的程序中,I、J、K的下标不用写出来。
% Q7 B& h/ f, Z! Y; n. H: i$ l注意:
& w' g6 g2 D4 N5 ^4 i+ e+ M. t9 m( I☆ 在自变量之前一定要指定G65。8 d+ L6 C) v3 a6 U8 W
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
. M2 T) I2 [8 N2 _☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。1 F5 a- n8 t# @" Y6 v/ L! \
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
# N3 @2 ^" _8 ]5 ]) j G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环' H: s1 G5 N# j5 m* p& S1 R
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|