|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 , z( }. H; Y8 C# Q- O
详解A类宏1 C; R- T) ~9 @( {
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。% G( o6 Z: P1 a0 {
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。6 ?! X& I# S* C9 H. w+ ?! P7 @% A0 n [
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
9 b6 X+ Q; x' d/ V; u2 N+ p4 L& F$ B 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
; L" }( s! l; I% r. I" | 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
' `% z+ ` o- ^8 [2 T- P, x0 ?1、变量 y- q4 @/ H% I. `+ g9 V- J
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
6 s% A8 z7 q" W9 d! u0 j(1)变量的表示0 n k1 g; N# l% @
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
$ A! O& n x% o- J& d例:#5, #109, #501。0 n; b! P& C/ r; U, H
(2)变量的引用
7 G$ `, M& t; W; i" C' } 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。1 }9 B5 T5 _3 T$ C
例:对于F#103,若#103=50时,则为F50;6 }+ v' V- M! e+ `+ N7 ~1 o
对于Z-#110,若#110=100时,则Z为-100;2 D6 [9 J X5 ?( s. Z
对于G#130,若#130=3时,则为G03。
# q( p, R# c( `& y3 o% D(3)变量的类型 , d* q0 k# G. V
0MC系统的变量分为公共变量和系统变量两类。+ l. G; G, [/ \* l S
1)公共变量
7 w6 c7 u5 t7 n0 r* e! x4 | a 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。$ H7 O- s: v; s: e6 A; J/ s2 Y
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 3 o& ]# x, u6 f) O* I, r& B
' \! x0 j! U+ H+ T; W
% N. x- c; T5 V. B1 Y6 V' ?9 _
P; _/ R6 W5 m8 a
2)系统变量 / }- w: h p: P- K7 E) D
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
+ S$ B7 a' w- _4 ? 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。" X6 O1 T5 H$ z/ D# b+ t- u3 {5 r
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。/ |" ^, q! h4 }9 Q0 e- Y
2、宏指令G65
C* ~9 W/ S& }, ?" x4 F7 I% _ 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。. B, _& z9 m' q! E0 a
一般形式: G65 Hm P#i Q#j R#k
" A0 ?) W5 \" ]) F9 q) Y式中:--宏程序功能,数值范围01~99;, b: X5 g& M) e/ U0 }
#i--运算结果存放处的变量名;) H8 W$ e3 n/ ]4 K- J
#j--被操作的第一个变量,也可以是一个常数;
! B$ D' a- y3 Z/ ~! ?4 M i- {#k--被操作的第二个变量,也可以是一个常数。7 G8 |- f+ W$ q' D* @$ P
例如,当程序功能为加法运算时:. B0 e8 c; H! ^$ v m
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102/ c0 Y2 ~ F! ~, I
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102+ A7 H+ t6 J, ~- t# {/ C
程序 P#100 Q#101 R15...... 含义为#100=#101+15
$ ~: @6 J% i) M4 c' _) o' ^' p4 Q$ b; p! ~& G( t
3、宏功能指令
4 _5 Q% C5 k3 w$ C
! m _4 D$ G6 J; m, C(1)算术运算指令
A. W) W6 h ~' Z) b) R* r. e# C; \" _" M5 Z* c$ c2 T
1)变量的定义和替换 #i=#j 0 F- A4 H* P& Z1 e% r
4 j- b7 [5 h0 m [
编程格式 G65 H01 P#i Q#j
A* t+ e' i* D+ J, n% C* q例 G65 H01 P#101 Q1005; (#101=1005) ) ^+ _# M, Z; F4 c; N3 g
G65 H01 P#101 Q-#112;(#101=-#112)
2 Y f" _; r9 s' k+ P7 J# F7 V) U2)加法 #i=#j+#k
8 w0 S6 e7 o# M: Y" u6 U; K编程格式 G65 H02 P#i Q#j R#k . h; f _1 a( t9 a# ]7 h6 T9 c7 f
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
2 }+ r9 X/ s5 V/ J3)减法 #i=#j-#k
* Y3 S/ b" j5 b2 s$ [9 P编程格式 G65 H03 P#i Q#j R#k- O; c/ Z/ ~0 s
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)0 c6 r* g! _, e$ s
4)乘法 #i=#j×#k5 ?) |+ v* N K6 v
编程格式 G65 H04 P#i Q#j R#k2 T' I8 I: S6 r% a% I
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
: b* }5 q# j0 m7 h' X" W, ~' m5)除法 #i=#j / #k- M* }. z5 v; ~6 j3 O J
编程格式 G65 H05 P#i Q#j R#k
6 Z( J5 V3 A# H( I3 g例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
2 y# {! r b, r; s' J4 x: p6 s) R9 f* \6)平方根 #i=
- M# E2 P: K( {编程格式 G65 H21 P#i Q#j- `- |& J; M6 ]! R
例 G65 H21 P#101 Q#102;(#101= )) o/ U+ z0 v" k1 a M7 ]" |9 j
7)绝对值 #i=│#j│( Q" M# r/ j" V2 `, |: n% i
编程格式 G65 H22 P#i Q#j
; i) F! u8 @) x5 x7 {例 G65 H22 P#101 Q#102;(#101=│#102│) 4 w7 [7 b1 Y9 c$ {
8)复合平方根1 #i=
) N3 M# X! M) i编程格式 G65 H27 P#i Q#j R#k3 G# @# ]7 E* F, n) ?5 U6 N
例 G65 H27 P#101 Q#102 R#103;( #101= % p& c/ O, f4 o% j
9)复合平方根2 #i=
1 x; J A' t3 V6 Z M编程格式 G65 H28 P#i Q#j R#k5 }8 [& H* k8 C4 ` B
例 G65 H28 P#101 Q#102 R#103 # T( T6 L) i9 ~( l. v
2 ]! c6 G* @8 Y8 Z& L
1)逻辑或 #i=#j OR #k
* c* E5 M7 s- _ K8 v编程格式 G65 H11 P#i Q#j R#k( d# d! t2 \& F
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103) b! {1 Y( u$ }: E0 R$ Y
. v" H6 w+ p6 |- l, u& m U0 j" e, t
2)逻辑与 #i=#j AND #k, w+ ~$ a8 n# X2 B# T
编程格式 G65 H12 P#i Q#j R#k3 V) }. S. h' o" O1 M' W0 w
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 9 R9 ^* r: I2 T% a9 e
+ Q. T6 \" K! q9 n. e9 \- T% q" ]
* Q9 D, T' R* S6 F4 ]
& b8 ?3 z4 a# }& ^0 W f+ F, ]: ]& h
(3)三角函数指令
; @7 ^/ a& i# u6 [. u9 s& ~" e: G
# {: u: @3 j0 W/ E: C
8 C6 x! h& h3 m8 g5 l1)正弦函数 #i=#j×SIN(#k) 0 b3 \% f# U* z% v4 C+ p
4 j+ b% }2 g2 ?; k$ O编程格式 G65 H31 P#i Q#j R#k (单位:度) .! W3 t/ [& I1 v8 y' p3 }
# |! g# x# F" o9 |% a* P S
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
4 o. H5 X. O+ }" x" e9 H! \2)余弦函数 #i=#j×COS(#k)' F7 `. Z% i2 Y+ R/ y2 Y- Y
编程格式 G65 H32 P#i Q#j R#k (单位:度)
$ R4 E% c6 J& A9 K* Z1 r6 a例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
& |) ~& W t4 ]- m3)正切函数 #i=#j×TAN#k1 j4 Y$ {# C0 i* a
编程格式 G65 H33 P#i Q#j R#k (单位:度)+ U. L: J- q4 [+ F: c' m
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)): F4 K, q9 N! _/ h
4)反正切 #i=ATAN(#j/#k): L, R# Q1 n4 L2 {; t7 @+ @
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
2 T# \, I. _; i* e例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)# N7 ^9 z x- F
* C$ T" m/ y* {9 \4 r) S) a
! u3 k1 u" N0 M( \ M, ]4 T- F8 t
% ^4 `; ]7 _: H" j: ~5 t2 N
(4)控制类指令2 ~6 t. Y. X: i9 R0 P5 E4 T% q
1 i5 Z4 p+ y, U1 \5 J |) w, g& n. o
5 Z; R& @+ L' T9 R
编程格式 G65 H80 Pn (n为程序段号)5 }- w9 N7 ]" S% c" w) u
例 G65 H80 P120;(转移到N120)
, x d2 E/ s/ L& l2)条件转移1 #j EQ #k(=)! I- T3 x- ]2 Z+ E5 G
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)/ [7 ?1 t7 E& I. A2 I7 T
例 G65 H81 P1000 Q#101 R#102& G' _9 W4 A9 d$ S
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。# F2 J/ w5 G$ w3 o+ O) j4 w, I0 o! J
3)条件转移2 #j NE #k(≠)' I2 L' Z, a- e; H: J* U7 c
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)- \8 V7 @$ ]; V; ]8 J
例 G65 H82 P1000 Q#101 R#102
, f! E# Z2 R7 ^" Q当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
! V+ c0 p# @# f; Z) c! g& W4)条件转移3 #j GT #k (> )% n9 f4 U; Z+ y+ U6 ~/ o; L; V, u
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
! K" K) q. w* l; M例 G65 H83 P1000 Q#101 R#102
0 @, @; I( ^4 d7 O% n% G当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
/ ^0 }2 g+ J7 v, Z8 j5)条件转移4 #j LT #k(<)
9 e6 Z0 B3 c6 L编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
9 _( N) i1 g7 s; y% M. w( Y例 G65 H84 P1000 Q#101 R#102 0 k8 l7 e7 i, l
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。% X8 B+ |' M S3 y
6)条件转移5 #j GE #k(≥)1 B0 `& V9 f& ^9 a' t- K% `6 Y
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
0 B4 @9 S" U6 c例 G65 H85 P1000 Q#101 R#102; t A/ P0 ?& g J! m; R
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。) X; e6 i# n( u, j L
7)条件转移6 #j LE #k(≤)1 I$ e. z" q% t' i4 ?/ y
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
_8 m1 u- J, p1 `4 N& N例 G65 H86 P1000 Q#101 R#102
# T! _0 ~9 C# H; D. K当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。2 R2 N( n+ q; z, o' i& T$ R$ B4 T2 X2 i
5 R+ _ P) j4 u& y
4、使用注意+ _6 q, Y4 ] X$ a1 {! N6 W% V: P
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;4 Z, ?5 `, C/ D( _, G: G
(1)由G65规定的H码不影响偏移量的任何选择;, U, D8 P( D( j) J0 {9 ], c
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;3 y! e0 C2 a& v7 ^7 h8 |+ p
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。$ d1 G. L6 F, ]. q( R+ B8 G: S5 N
(4)转移目标序号可以是变量。 ; x$ [- y6 L9 L- K/ ?
% s# t; A8 ]" \2 z0 P
5、用户宏程序应用举例 :
3 x% Q! s' g* F/ k
5 L: ?; K2 h0 O' ^* t6 J9 A2 G. V用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
3 j6 ^2 W G! u( t
4 l- Q) _+ b, `( Z4 a: P使用以下保持型变量: s, O1 @6 E4 u% e
#502:半径r;
) O4 T' T& A7 \- _. {#503:起始角度α;/ H' D/ R! v# x5 u7 ^; a2 ^
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;5 ]: R a# @: R/ u" V/ C
#505:孔底Z坐标值;
9 e7 U( J; b* M/ T" S3 |* H#506:R平面Z坐标值;' A/ e, ?0 u1 `
#507:F进给量。 . x7 ]+ y* i; z* i4 ]
使用以下变量进行操作运算:
0 I; f2 m4 z/ X#100:表示第i步钻第i孔的记数器;/ r C/ |0 h+ ~3 M4 ?5 ~
#101:记数器的最终值(为n 的绝对值);! k" f9 w- ~$ W( F6 Q. W
#102:第i个孔的角度位置θi的值; / A/ c) Q9 ~" r; g8 r$ O( q9 _
#103:第i个孔的X坐标值;
0 K# v$ U/ S: i8 p& {- b8 ^#104:第i个孔的Y坐标值;( p' t& p; S* L) w/ i
用用户宏程序编制的钻孔子程序如下:
$ [% l7 u6 p: A' M. I0 h B3 sO90103 L% n2 j' S1 l# @. J6 V( d6 ^
N110 G65 H01 P#100 Q0 //#100 = 0" n" _- P8 Q1 p3 O7 k
N120 G65 H22 P#101 Q#504 //#101 = │#504│
8 S) Y8 L! A" MN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o; J+ C+ X$ l1 u0 R5 g
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
8 v+ j: C+ }. h5 c9 iN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
: R; b1 c' z( j$ w ~N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
! ?: R! u" R5 bN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标+ n2 ?- J& u$ O+ J4 @" e
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面). H! A! m1 \* d1 T) Y Q( H7 ]
N190 G00 Z#506 //快速进到R平面
7 f3 |5 d+ n3 X! s/ b9 tN200 G01 Z#505 F#507 //加工当前孔
; K6 x" ?/ K9 i" MN210 G00 Z#506 //快速退到R平面
' }* ~9 S7 ? X! Y6 |N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数% v! G8 {) Q7 g# X
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
) u# Q" U+ ?& b4 c! B$ NN240 M99 //子程序结束
/ L4 N8 M' G9 d+ w q! g7 N3 B! A1 V. p* c
4 v' s; w; R8 ?5 l* j3 l7 u7 A
9 w6 p, Q0 e d- O1 q& n调用上述子程序的主程序如下:
( q, t1 W5 p" \) c, tO00101 r. e! a% V/ U- u$ u- c
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系& U" k, E" \4 F
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔! U$ f# {3 ?. Q1 v/ t
N30 Z20 //抬刀- w1 L- r7 M; u3 M5 d; m8 r
N40 G00 G90 X0 Y0 //返回加工坐标系零点
# K* A$ M0 s- k$ h$ tN50 M30 程序结束
7 v' E, L5 @5 b! A设置G54:X=-400,Y=-100,Z=-50。# P8 w3 M+ y# o' X" T6 k: V
变量#500~#507可在程序中赋值,也可由MDI方式设定。 ! Z; D! `) Q% L2 S, X5 Z- c# f
" A% m n! X5 {+ R: ]& e1 i3 }B类宏G65* |: |$ u+ ^9 n# G
9 b/ z' y7 Q2 O) Y4 |1 e
简单调用(G65)# P: W, n9 `% Y: n1 L# G9 @& ?
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。. i6 f2 n: Q2 I
格式 G65 Pp Ll <自变量表>;
* w) i$ b; ~. Z, N6 L( f: ~ H 其中: p 要调用的程序号
# g% m- D+ y1 Y2 C/ r l 重复的次数(缺省值为1,取值范围1~9999)/ C( S2 N9 {& D$ [9 i
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 7 ?9 f' V# i# e
的局部变量。& F0 M2 D+ p$ T6 |$ ]) I! l3 k5 S8 m
8 x0 v4 e/ ?5 b& ]' R3 m" u
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:" B0 O: p5 w0 r
% s. s4 c7 {9 K0 K地址 变量号 地址 变量号 地址 变量号
$ P# N7 d& K: R0 L; EA #1 E #8 T #20
0 O5 e8 [3 [6 o& }) G) x# KB #2 F #9 U #218 a0 v H7 A/ z; u
C #3 H #11 V #229 [( G! f2 g7 n) k% Q. ^( E: G
I #4 M #13 W #235 A; v/ B* q. w. H
J #5 Q #17 X #24
: c$ ~$ O* q6 y9 N; C% O+ r& A8 Y+ LK #6 R #18 Y #25
1 P+ v( ^+ E! W- H) o/ ~D #7 S #19 Z #26" F9 M7 y3 b- x' I1 E' `6 \9 B
☆ 地址G、L、N、O、P不能当作自变量使用。% K. @4 e4 N; [
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。) v9 g+ o/ W+ g
/ X$ o7 ]. @ N8 H- E# ?# i
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使- F) z3 @7 n# r( }* y* ]
用的字母自动确定:
0 Z7 M7 ~( b- r" s! ~. a' }地址 变量号 地址 变量号 地址 变量号
* h2 N! ~+ o) o- H* e5 V' JA #1 K3 #12 J7 #23
- o: [* {1 l* t( L8 [& PB #2 I4 #13 K7 #24( P5 M( x+ L( M5 T3 P! H1 m& r
C #3 J4 #14 I8 #258 I( d8 h4 W& M
I1 #4 K4 #15 J8 #264 u; C4 ~' G4 s2 @3 G6 K3 T7 s! E
J1 #5 I5 #16 K8 #27! _' y* Z$ O* N! P1 o
K1 #6 J5 #17 I9 #28
9 V s6 G8 a( w( L9 u; w, XI2 #7 K5 #18 J9 #29
' ^, y6 L1 B: t; E5 HJ2 #8 I6 #19 K9 #30! P* D' R1 D: k2 a! M$ ]
K2 #9 J6 #20 I10 #31
$ T; |& ?+ K' ]6 l7 FI3 #10 K6 #21 J10 #32
+ Q: ^5 c6 z7 p1 iJ3 #11 I7 #22 K10 #339 ]- v# n" z7 O7 w7 i- E
☆ 在实际的程序中,I、J、K的下标不用写出来。
& D: k$ M8 w$ R/ ]/ u( ^; U注意:
' f p3 ~8 y- I% x% D$ f2 D☆ 在自变量之前一定要指定G65。+ b( M2 C5 A% O S8 m$ K$ E
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。, l6 C0 B9 f/ N& h3 D' @
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
5 i+ x3 Y8 ^' l! a a; e☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。( c; E4 O2 z4 [% p J1 X3 j
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
. t+ v5 G3 [+ ]$ e3 W% P* V. G之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|