|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
! j9 t2 D6 L0 J' |+ V$ t9 }详解A类宏. Y Y: ^) P4 s2 E! v0 u
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。0 Y& s) {( z- O& d
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
* Z; E6 n2 v$ J6 o 宏指令是代表一系列指令的总指令,相当于子程序调用指令。- ^- ^& m2 R% ?* F, U8 i4 t
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
! B) [5 C; J0 S" ~" w( b. c% d! T8 c 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。- r* ?7 ^5 P3 n0 S
1、变量
- \$ s4 X; u6 q, d 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
( t+ `. M7 ?. |7 t(1)变量的表示
; l0 L- `' u1 U; B+ S变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
2 l7 D3 f. L7 X! }% q例:#5, #109, #501。
/ B9 c: T6 A2 ?9 R& ?: z7 l* z(2)变量的引用; p5 S! S& m1 K2 k3 i, J# X" ^( }
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
/ p/ a, D* s% ~8 y例:对于F#103,若#103=50时,则为F50;: S2 o8 p2 N0 Q2 u4 h5 [% p
对于Z-#110,若#110=100时,则Z为-100;4 I0 q" r% V: Y% Q5 m
对于G#130,若#130=3时,则为G03。
0 R1 n ^: P; Q: ^(3)变量的类型
3 t+ d( _: m, _9 R. v 0MC系统的变量分为公共变量和系统变量两类。
( r5 T- o* M; {1)公共变量
7 q. x$ e3 E$ S% t8 m: M, Z' m 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。/ S9 F9 h7 |2 f! ^% t: U
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 . h' @/ b: p# I. t3 w0 I
' B1 @- D- M+ U8 w2 _4 k4 ^
5 o& z, W5 L# ]) X3 ^1 b6 s4 Z2 G) U1 j; p2 w8 O( }
2)系统变量 1 K9 ]. c; t3 l* c' F9 f
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。5 y2 B6 x/ z8 O3 S
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。1 u7 ?2 S. J/ Z! F# n) @
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
7 y" B" X0 q, O! b0 Y2、宏指令G65
) T$ Y: {' a5 Y, p 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
8 J- e6 f7 ?+ e8 b& o& z( H 一般形式: G65 Hm P#i Q#j R#k
0 t+ N. f+ P4 B m3 `% l0 L5 E3 ]式中:--宏程序功能,数值范围01~99;
! u: v; A; O/ C$ l* V: Q' @& E#i--运算结果存放处的变量名;
' }, M; H* I5 a+ f! Y#j--被操作的第一个变量,也可以是一个常数;
1 x% h6 f% `# s. H7 Q& ]8 V#k--被操作的第二个变量,也可以是一个常数。6 R% _0 x/ \. z9 f/ {/ d
例如,当程序功能为加法运算时:
# c E/ r% N! U0 c* a9 o( W程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
8 ]' H/ a2 o; L7 i6 Q2 o程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
) Q1 ]8 M) u, J; A: A程序 P#100 Q#101 R15...... 含义为#100=#101+15
( q& g" N) N4 J1 O1 n# h3 f; t+ w* s) T3 n- G* x
3、宏功能指令
* V& |5 e1 ^5 }% b3 F1 i' b( }1 P% u3 I; N8 Z! _1 ]$ b0 x
(1)算术运算指令 : ?% {/ [$ P, Q9 t
: y7 r8 [7 Q- L; A H4 o* x3 z. Y5 Y1)变量的定义和替换 #i=#j
4 t0 d/ J& Q7 Q1 `
5 h5 O ^% F: Z/ K1 m8 v9 T编程格式 G65 H01 P#i Q#j
; S% @, o" }3 G, I6 k例 G65 H01 P#101 Q1005; (#101=1005)
2 m: X5 `' s- S3 JG65 H01 P#101 Q-#112;(#101=-#112)
4 C9 r4 t- d, Y. ?; f2)加法 #i=#j+#k
# j1 ]" c+ ^, H8 S6 @编程格式 G65 H02 P#i Q#j R#k
; n" d* e5 F& |& g. |) \+ y" s例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
% G1 @% x7 U& V3)减法 #i=#j-#k9 \* l$ P0 C; i7 }3 H6 _/ I
编程格式 G65 H03 P#i Q#j R#k
. b$ t* ~+ x5 M. d% U5 l# j例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)& b: j6 Y/ H& G% [0 \
4)乘法 #i=#j×#k, n" ]1 o! v: N4 d+ C/ F1 V/ e0 H
编程格式 G65 H04 P#i Q#j R#k
5 H2 C# W; @5 l6 c- u% @例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
$ o4 \% y) I* `5)除法 #i=#j / #k. v8 F9 y0 ~ i' H: B- ~2 f% m
编程格式 G65 H05 P#i Q#j R#k+ u" F' d7 D# W
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
2 b9 |1 ~) t. \7 _% d6)平方根 #i= 4 W1 o4 | M: U, g' O( P$ d( Z" n
编程格式 G65 H21 P#i Q#j
: V' q$ s8 @$ d, M& @例 G65 H21 P#101 Q#102;(#101= )5 Q; {2 s1 n7 S6 L; B* u
7)绝对值 #i=│#j│* k3 [" M) C' q( d! p( u* ]4 i( g
编程格式 G65 H22 P#i Q#j
; `, x* ?1 W8 \+ R/ [例 G65 H22 P#101 Q#102;(#101=│#102│) 2 Z7 f2 S3 [1 X+ B6 Q2 Q
8)复合平方根1 #i= % g& p2 T# j# b0 E( L
编程格式 G65 H27 P#i Q#j R#k
# B. T$ \6 D" Q0 y, v2 r9 ~3 `例 G65 H27 P#101 Q#102 R#103;( #101= * H6 V8 r& z) r. d4 K
9)复合平方根2 #i=
9 u4 ~% |7 N! b! i2 Q编程格式 G65 H28 P#i Q#j R#k- v6 z6 f; I- ^- Q. B, D
例 G65 H28 P#101 Q#102 R#103 6 b8 f' E L4 J( k: W
, t# V6 I# K; T- [& F9 Y2 A1)逻辑或 #i=#j OR #k; m2 R4 c4 T9 K& e& J
编程格式 G65 H11 P#i Q#j R#k v6 g' c9 y! Z) U+ G
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)3 Q3 \+ q- v& C& A4 A2 V
/ O" e5 O m& o+ T7 X4 W
2)逻辑与 #i=#j AND #k
0 i7 U" g. L1 e9 T# M9 d编程格式 G65 H12 P#i Q#j R#k
' r6 `0 z' T7 ^/ E7 @例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 * j- W6 l" b% M- {# A7 }) S
: L$ Z- f/ S! L/ Y! K; Z; G3 }0 a2 A) A& N3 W& _/ r! X5 _( J$ c" F" n
, @2 d8 s. ], W, T8 ^
9 L6 e7 M V: g' r# h(3)三角函数指令
1 A$ O' n. m+ b+ U* _& r$ z% x1 r
9 p& U1 j, ]* `. N3 I' ?1 n7 J+ ^
e/ ^/ P2 l* d# q* b# g; G1)正弦函数 #i=#j×SIN(#k) 4 F7 U/ T% u* }! Z% z) ]) U
" g& K1 V. l3 U, M* x6 o A! P
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
6 E2 g4 T- d7 k M3 \1 p% |" ^' O: P. I1 m) {
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
" I$ G: d; p* ~- U& C1 ~2)余弦函数 #i=#j×COS(#k)/ A4 f% W: K0 @4 q' }
编程格式 G65 H32 P#i Q#j R#k (单位:度)
* n7 j. ]! C0 `0 C例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))) ^' g" \7 F5 [1 E0 Q
3)正切函数 #i=#j×TAN#k1 F$ D! ^0 y8 ?9 q3 E3 y
编程格式 G65 H33 P#i Q#j R#k (单位:度)5 L7 W* l( |+ \* N+ n6 j
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
6 a! p2 ?; u% o4)反正切 #i=ATAN(#j/#k)
7 X8 m. }& ?! O" K! o编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)5 s) [; f* q0 }! v
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
. V# C$ |6 K9 {
, g3 e4 t0 c9 w+ C & J! K# @& P9 H4 L- F0 A
' }. k+ Z. \4 ? U* L! y5 r3 y: j
(4)控制类指令
6 [& O: A8 j- n: P# ]; t3 i) z
! ?- |" ], h, `3 [0 ?! ~3 ?
* g. n. v, v: e% f3 |/ X1 z$ n* Y% K% M3 J9 K
编程格式 G65 H80 Pn (n为程序段号)
9 N' Y# H9 A; a+ Z s, c例 G65 H80 P120;(转移到N120)
2 [; b- [- x% N2)条件转移1 #j EQ #k(=)
' ~) b0 T9 K+ X编程格式 G65 H81 Pn Q#j R#k (n为程序段号)6 c z+ o( B& q, a" V! r, _
例 G65 H81 P1000 Q#101 R#1020 E/ I c1 O2 k
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。/ n0 ~ X5 I. V! W9 f* B
3)条件转移2 #j NE #k(≠)% k+ u, |2 d' W
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
+ G& n2 d5 `3 {2 }! r例 G65 H82 P1000 Q#101 R#102
, e1 W. s8 h* z2 n: N% W+ v当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。' D8 \" ~0 o: k% _, r( ^
4)条件转移3 #j GT #k (> )' T; \) r9 d& ]0 \
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)$ T2 \( [+ y" p/ w' w
例 G65 H83 P1000 Q#101 R#102) T) z7 o G" N. {0 M* y
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
4 n: d+ i9 f5 H. ~3 J1 L5)条件转移4 #j LT #k(<). t! W# f- R. E9 l
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
7 S0 ]2 h# z& ^# i/ j3 a例 G65 H84 P1000 Q#101 R#102 % K: R- c" G5 X) n
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
% S1 b7 b" N# y6)条件转移5 #j GE #k(≥). m1 U: t! Q- ~5 z* B0 B4 i
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
( `$ S# X, o: {! A+ a- g6 `例 G65 H85 P1000 Q#101 R#102
, J! R' q. q. t$ x当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
x6 r/ Q, n- v9 F& y( j& c7)条件转移6 #j LE #k(≤)( C& c+ c% y$ E) t4 l' {. n# G
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)3 Q9 P8 j+ C2 }& q- g
例 G65 H86 P1000 Q#101 R#102
5 I( B$ |1 \4 Z8 x. L8 ]当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
$ k% t2 C% b6 o& W/ F
" ]& v/ l) F( J9 z; l0 X, `4、使用注意
* X. ?4 H6 N1 _5 O& M7 {/ X6 l 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
) L6 F$ M" J p& ^( z) }(1)由G65规定的H码不影响偏移量的任何选择;
# w4 A& Z1 S3 @(2)如果用于各算术运算的Q或R未被指定,则作为0处理;& u! n2 n: Q) ^5 M! [. Y
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。 ~6 j" n6 w U
(4)转移目标序号可以是变量。
4 w2 M5 Z6 s6 _0 n/ v- ?4 r
* f5 U/ R9 E7 _' w$ Z3 e- d5、用户宏程序应用举例 :
0 @% S8 s9 N0 p0 Y
$ S3 t$ h; M; B; i/ V用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 2 H, Q: j$ L( t1 N9 J4 a$ ]
8 D o8 a! M# D) \& `使用以下保持型变量:, W- {, I, n- h7 b# l
#502:半径r;
4 f: B# h9 l' z5 a! Z7 H7 j, J#503:起始角度α;
2 b9 Z) z" P5 W0 B1 }3 r#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
9 q# U( E2 ^! G, y2 m2 J#505:孔底Z坐标值;7 D2 {. ~, q* l
#506:R平面Z坐标值;
4 a- u W; [. k9 y& ]8 V$ K% F#507:F进给量。
+ d7 o: E- w# d" d! p: U7 J使用以下变量进行操作运算:% e6 F) ^- S* P0 A3 k4 z
#100:表示第i步钻第i孔的记数器;1 V5 M+ C6 ?/ n' M0 V/ U
#101:记数器的最终值(为n 的绝对值);
+ A: b9 x4 m' i#102:第i个孔的角度位置θi的值; ) z5 \0 o% f$ ~$ j3 f" g2 }7 `
#103:第i个孔的X坐标值;
, i: G* N4 y- O0 Z#104:第i个孔的Y坐标值;- C+ }% i! q9 Z% i
用用户宏程序编制的钻孔子程序如下: + {. O- h% [: O9 ^$ {$ E
O90104 A1 m: c. ?5 W9 i+ x
N110 G65 H01 P#100 Q0 //#100 = 04 q' |! b6 m8 e+ W8 b; ~
N120 G65 H22 P#101 Q#504 //#101 = │#504│
- x$ n0 J9 j- `) E VN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
6 e: e6 o6 p0 B H0 ~ h* eN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504- n) e% t! V$ ~5 I- H7 Y, o7 C
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
/ r6 d6 s9 f& C3 iN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标8 w9 i+ y2 P2 u
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
$ N) d( @6 [! o9 L! e! o" [9 G: w# qN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
! O E* m" @4 p- U8 gN190 G00 Z#506 //快速进到R平面2 ?2 i8 h4 ?6 n+ j: U/ ], |5 A% ]8 b
N200 G01 Z#505 F#507 //加工当前孔/ R# s3 ?! @5 x7 s3 E- |; o
N210 G00 Z#506 //快速退到R平面% U7 G& ]( z9 D. i9 ^; _. p
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
, [8 A3 ~, R% ]/ w5 FN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段! _9 H& f+ I! N8 F! {" T
N240 M99 //子程序结束
8 R# s2 v1 O O2 A5 }1 F D
2 @ y( p- T- K 2 _ t% R5 s( r& [% U" M$ Z
5 ~( u/ A+ r. q9 m6 e+ `; U( z调用上述子程序的主程序如下:
% V/ R: a. G6 \3 |" ]/ sO0010+ K7 \" [$ {3 V2 [" c; Q
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
9 r7 v* {+ C6 |& o8 G2 GN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔7 ` _3 M& _; s0 z4 e6 v4 r: i
N30 Z20 //抬刀
5 L! t+ e7 L. r: b9 eN40 G00 G90 X0 Y0 //返回加工坐标系零点 6 }4 w: k5 d; A
N50 M30 程序结束7 p7 r) e" M5 q2 k% j- M
设置G54:X=-400,Y=-100,Z=-50。
. ?$ C: j; w$ o- o) c( ?, _变量#500~#507可在程序中赋值,也可由MDI方式设定。 ; I7 |- b# u) X$ F+ p" N
0 B9 i, A. W7 Y8 a: V5 t5 _
B类宏G65( U: d4 @% \2 L% X+ W/ O# p
) f% d) w/ i" O
简单调用(G65)3 G g" d& j! T' ~& c
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。4 c* `! `0 e0 K9 z' f
格式 G65 Pp Ll <自变量表>;
( B b0 w/ _, _3 a1 g& V 其中: p 要调用的程序号1 H! e/ y7 v% `
l 重复的次数(缺省值为1,取值范围1~9999)
3 o8 r0 c2 g& [4 z 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 ' l9 S4 H: g9 }* S3 d( g
的局部变量。
. K. U! O& H: e+ O# o3 \: u
- A/ A! `- z" E9 s3 | 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
# J6 _5 r0 X* R% ]
% J: O6 ]8 X8 s2 @* b# r4 e0 w/ s7 n地址 变量号 地址 变量号 地址 变量号
8 o; \# f+ z6 B3 [( K! ]" d' BA #1 E #8 T #20
/ w/ S1 k% M& L: d. l1 m) l6 CB #2 F #9 U #21
( I u% h. Q8 W$ qC #3 H #11 V #220 P! P; x& C; C% r1 W4 D) \
I #4 M #13 W #23; H6 E8 k3 W( |5 R G: ?5 } V4 K, @
J #5 Q #17 X #24
% }! N3 x$ ] HK #6 R #18 Y #25 h+ n s! o0 T% G3 y" p3 g
D #7 S #19 Z #26" @. _! }' t2 G0 u" ~$ z3 Z, g
☆ 地址G、L、N、O、P不能当作自变量使用。, g0 I* J/ p& ]0 f
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
) C8 l0 g. b- A: S7 U9 d
: ]3 U3 ]4 R" ^5 I 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
! b) [5 e% L* |5 w/ w3 s用的字母自动确定:5 c% m6 `* @* K# `$ t, q
地址 变量号 地址 变量号 地址 变量号
; Z$ \# J( B; H; `) H; {! `! wA #1 K3 #12 J7 #23
- J4 P, X9 N c7 r9 t1 b# \3 cB #2 I4 #13 K7 #24# J" N1 p# e' k0 n A& B
C #3 J4 #14 I8 #25* X5 o/ j+ |6 U# I w* m7 d6 r
I1 #4 K4 #15 J8 #26
' [) o3 G0 e/ w$ HJ1 #5 I5 #16 K8 #273 J# a5 W. s% Y" q( _7 t
K1 #6 J5 #17 I9 #28
3 w* e7 `9 z. N3 G0 k- X4 E' `I2 #7 K5 #18 J9 #29! [8 ^' v9 Q% Q- N( V' }
J2 #8 I6 #19 K9 #30
) e& L" ]* I$ Q5 A6 }K2 #9 J6 #20 I10 #313 L) G1 B$ E3 ^5 K1 O7 \( ^1 d% |: h5 N
I3 #10 K6 #21 J10 #32# o$ ?0 C" D* N/ ]% W7 t
J3 #11 I7 #22 K10 #33/ j7 g8 R4 h! r
☆ 在实际的程序中,I、J、K的下标不用写出来。
6 I! k/ B3 @; _* V% r# i1 R注意:% C8 G& M: w1 l% @9 p$ g# y2 I
☆ 在自变量之前一定要指定G65。2 j9 n2 w- q( `$ G( S* P6 C
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。' I( m" {9 q6 c+ e0 \; D$ _
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。) X7 p/ d. i/ f4 B( k, [
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。: z* d8 `% O# O9 j7 y1 Q! M$ J$ t
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环+ j5 p$ k# Z) Y" ]( o! _( o9 }
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|