|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 ! W9 n# J2 H4 w0 u* c$ P
详解A类宏
1 K9 y& k8 s; \; ^& C分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
8 b% h+ { u; `# R( ]$ z4 f 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。9 }8 b, y& H3 `) w% ]- C1 ^
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
' o/ N* H5 c9 q2 s+ k 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。# ^7 ^0 p( |! ?4 M# D5 y' p
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
. R" \3 C) ~+ Q: U1、变量
" \2 z5 D0 ]7 B2 l5 P 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。5 U6 l+ p, m0 {
(1)变量的表示+ {7 e3 s! E' y/ I8 I1 L
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)# y y" m( G% l. W2 U# e# Q
例:#5, #109, #501。
0 ?0 O$ l0 Y" }& }9 n( c(2)变量的引用
: u! i: f0 a* L" [/ Z! ]+ u1 ^ 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。3 C& t6 \! {" q- o0 ~* U7 n
例:对于F#103,若#103=50时,则为F50;
$ g; [6 D6 r( I) I- }: j对于Z-#110,若#110=100时,则Z为-100;2 n) L7 h, f+ Z3 `% A/ p/ G
对于G#130,若#130=3时,则为G03。9 Y( }4 w9 a n2 q/ c
(3)变量的类型
# Z& q" d' [3 h" F+ u 0MC系统的变量分为公共变量和系统变量两类。% \: a- U2 _4 ~% R6 Z% I
1)公共变量 ! F$ I. n7 Z- j: q( K
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
0 j. t2 g( \2 W, i/ I公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
+ W8 Z" f9 @) j- H. q9 P
# \; H7 Y y6 [, s& Q% c2 m8 ~% b" O7 {+ }- S- N9 ]: B0 R
- J: K$ u* b* n3 g: b
2)系统变量 $ h( _! ]1 x7 Z
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
2 a" K, s& z) K S; z 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。* ]9 W L ^8 i Z' c. U
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。6 O# A/ X& X: y0 w' V- X' t
2、宏指令G65
* t# P0 S2 t3 W3 Q4 @ 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。, \/ i9 e: `# P! e @! s
一般形式: G65 Hm P#i Q#j R#k% W2 Y- ~- B. _3 _7 p
式中:--宏程序功能,数值范围01~99;2 e1 {! X4 k7 E; G0 O6 l4 p
#i--运算结果存放处的变量名;
: J- k. ]+ s& \4 l9 l/ t" O9 R#j--被操作的第一个变量,也可以是一个常数;3 r+ _0 g* o0 d0 z! z0 @% |8 {# F
#k--被操作的第二个变量,也可以是一个常数。* e& N/ N& F0 P
例如,当程序功能为加法运算时:7 c1 w" P5 V) w
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
* R* `8 X. x& e. `程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1029 h \# t2 f! A9 k/ X+ _" q0 t
程序 P#100 Q#101 R15...... 含义为#100=#101+15 $ c% R; g3 |! {7 W0 }
' t0 I/ G7 R5 }* y# n+ m
3、宏功能指令 # W O4 e% v) k8 C1 y
7 W4 Q& k8 }1 w
(1)算术运算指令
% L2 j" a. y" u) b( |' i+ a: q" M( g( T9 Y
1)变量的定义和替换 #i=#j . \6 m, V8 b7 z) ` {# u6 u
`/ l- D& ]: q; u: \编程格式 G65 H01 P#i Q#j4 {0 Y. D0 J6 I) N
例 G65 H01 P#101 Q1005; (#101=1005) ! C V1 [: f# v- Q$ R; ^) T, ^
G65 H01 P#101 Q-#112;(#101=-#112)
, x8 Z, ]. N2 f# {/ k1 w6 C2)加法 #i=#j+#k. w( U7 ]) y( b" ^7 d% n
编程格式 G65 H02 P#i Q#j R#k
- Q( p- Z9 A* I; x' a例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
3 @- C/ G. V! D0 P3 U- p0 y3)减法 #i=#j-#k
& K9 [4 q# _7 u5 y: s$ j编程格式 G65 H03 P#i Q#j R#k
- M: [2 e3 O8 E$ q0 e例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
0 `* S( F4 N' @# J1 M4 l/ `6 _4)乘法 #i=#j×#k4 H& A% }( q$ Q. p5 k: R
编程格式 G65 H04 P#i Q#j R#k
0 L1 L0 O: w+ k: ~例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)) c6 x, H8 ]* B3 p; Z3 K" \9 y
5)除法 #i=#j / #k, v0 S% Z8 x6 a" [- X0 P
编程格式 G65 H05 P#i Q#j R#k, T* v6 y9 }" P% |5 |
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
4 w2 u+ W1 f/ Y/ t. Y1 C- ?6)平方根 #i= ! |5 t/ Y1 x- V3 u
编程格式 G65 H21 P#i Q#j+ E% j }6 c; T$ L: E; L
例 G65 H21 P#101 Q#102;(#101= )
: J- ^' a2 y/ N+ d1 e7)绝对值 #i=│#j│) j+ G" H9 M% W" Y4 W5 |
编程格式 G65 H22 P#i Q#j
5 {: s7 d' q; y7 m P2 {例 G65 H22 P#101 Q#102;(#101=│#102│) 7 J( a- U4 m5 s3 `4 v; ~$ t
8)复合平方根1 #i= & C" \7 I% N( B' S. D2 J2 w
编程格式 G65 H27 P#i Q#j R#k% a9 B- i3 ?$ _8 F1 {/ M6 d; K9 u* l
例 G65 H27 P#101 Q#102 R#103;( #101= 6 w* ]% n4 n! B2 z' k6 z
9)复合平方根2 #i= " I7 N% g; r# m, ^ N
编程格式 G65 H28 P#i Q#j R#k( H p+ C9 l- u
例 G65 H28 P#101 Q#102 R#103 : l' d9 M& E3 f; Q: t
: y8 n# L( O2 ^5 n- S3 w$ X8 x
1)逻辑或 #i=#j OR #k- i8 N& ]5 \' a# G1 W4 B! L7 G
编程格式 G65 H11 P#i Q#j R#k! h6 d/ h+ I$ c# ^$ m: X
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
: [/ s2 A' [1 C" I* y v. n# {5 ?6 ~
2)逻辑与 #i=#j AND #k
$ {- [+ C: l# H) O) h# j: B8 W. H编程格式 G65 H12 P#i Q#j R#k! s. Z- I& ^5 T- ?3 X% r
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 7 a3 u0 F! L! H$ ]4 P
! l' d) U9 E+ ~; C3 E7 F7 d2 k5 s6 ]& E3 O1 s# K1 `
5 g8 ?+ [2 B/ a9 S7 V
% i2 L7 {2 O, V7 v" n. \8 D(3)三角函数指令
6 g4 B/ i' W9 c
( ?9 Q [+ _5 c$ n/ x+ v0 A - R3 {- s& G( Z
5 V5 B2 T3 R M& t. e; e3 q5 C1)正弦函数 #i=#j×SIN(#k) * C1 y* w- @# n# Z. K0 f
. r4 x; X$ p' b. A# w9 f( c; g
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
i$ \, D5 {3 r# H# c/ @4 v2 b: @7 ^; r8 b' s
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103)), s7 ~# w- c: h7 X
2)余弦函数 #i=#j×COS(#k), [& e( e1 K4 Y! q8 P+ l w& u5 N
编程格式 G65 H32 P#i Q#j R#k (单位:度)
/ K( B* d( g( F例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))# f) W% D1 D: t* h1 y) @: r/ O" f
3)正切函数 #i=#j×TAN#k
g. R. p$ c0 l6 d3 x. E编程格式 G65 H33 P#i Q#j R#k (单位:度)
. l2 v/ m3 Q* y9 J; _; `; L7 I7 X例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))" s+ _4 v$ h$ g- W& h- n6 @9 q
4)反正切 #i=ATAN(#j/#k)
* c) b# U2 Q' o* V4 W. j. X编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)0 N) o1 H2 v! K/ ?3 _! [- {
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
: B+ D' d! l3 c z7 W: j+ [8 F( o7 H$ P- C$ |; E4 c! i( X
0 {6 H1 }, K9 L6 L9 }' t1 q
2 {6 _. B$ j- B6 |9 I
(4)控制类指令
t( V* r2 F0 ]5 j3 u+ p# g
- g# i) s# c% o- `+ E& _ 4 A" {8 e" s' Y/ n3 v' `4 z) T, X
! r* D( C0 m2 {0 v7 E
编程格式 G65 H80 Pn (n为程序段号)
7 O8 Q+ u3 {1 g* n例 G65 H80 P120;(转移到N120)3 |" c- @8 g4 \) N$ A+ m: Z+ B" `) U" n
2)条件转移1 #j EQ #k(=)
& q- w0 x5 W. t- }, l8 R编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
7 D/ z5 i% [1 W6 k9 i例 G65 H81 P1000 Q#101 R#102
. ~6 L. u5 Q- w# }7 t% x3 x! ?当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
& C3 K, p* h9 A! [, O: J2 T1 x3)条件转移2 #j NE #k(≠)) j1 b5 K; m4 h, s) R; p$ a
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
) m( y: M7 p( P2 ?% {; U" v+ d例 G65 H82 P1000 Q#101 R#102. C7 D' @( d" I3 U/ T8 I, X- W' ]
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。* f1 H7 r# f+ f6 ]
4)条件转移3 #j GT #k (> )5 ^; A$ ~ W" ~+ b" Z
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)- Q- R+ @7 h/ o3 ^/ w
例 G65 H83 P1000 Q#101 R#102
, A! |! K1 Z# ~: D, J. Y2 N当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
% m3 q- H1 B' P( ^5)条件转移4 #j LT #k(<) C2 D6 R; T7 I; p; l$ M2 f+ H
编程格式 G65 H84 Pn Q#j R#k (n为程序段号): X8 }% a( z9 N3 a1 z8 l& n
例 G65 H84 P1000 Q#101 R#102
' A& X" w( Z! K; p2 ]" |) F当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。& g& v: j4 i8 b! G
6)条件转移5 #j GE #k(≥)* d$ Q; J- S' ]( d9 Z
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)9 L& S, q# C; ?/ Y+ r
例 G65 H85 P1000 Q#101 R#102
6 u) G& R# h/ z+ K7 s当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。, x3 X# a; [6 M) Y
7)条件转移6 #j LE #k(≤)
( s3 x$ @# v& \8 m4 ?& b3 g编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): ^, `, t8 }; m$ N- p' C7 P
例 G65 H86 P1000 Q#101 R#102
; r& \/ p) V' w# J8 G+ G当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。4 H3 J5 y6 i" n' H6 _
( E+ Z* j! C9 J$ |: x( ^+ _
4、使用注意/ H- z( ]8 s- J" E: D- M+ U! U. y
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
, N- P! D% u$ N. a6 H$ ](1)由G65规定的H码不影响偏移量的任何选择;
6 ~- A& `" P# t4 j(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
" c; `( O# B0 ~& k(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
/ k7 `& A. Y5 H- H% b(4)转移目标序号可以是变量。
; w. U2 x, u: Q0 F
5 |) W( _( J/ |9 C }5、用户宏程序应用举例 : + e7 X. ]) Q+ q# M7 @
/ W! P" ]" S# d1 l2 W, s( m用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 $ c2 ~7 g @+ R- W. u
3 Q, J/ F6 E+ J/ K使用以下保持型变量:
3 u% \- r! }. r#502:半径r;: Q# \! d$ p3 x J
#503:起始角度α;
* z* w2 s |2 w) G" b, l#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;7 [. G$ g- M* f
#505:孔底Z坐标值;
8 S; E9 C7 k+ M8 Y+ ?9 h1 P* N% a#506:R平面Z坐标值;
: ]5 p" D0 N8 w1 u#507:F进给量。
/ D) q) g* j$ ^- s! O# E8 r6 h使用以下变量进行操作运算:( P. y9 n3 h+ q# K `' k% |
#100:表示第i步钻第i孔的记数器;0 j2 D7 t: x& U& j! T2 _, f( G4 A4 l
#101:记数器的最终值(为n 的绝对值);% ]$ O q* ~# n9 H- K: A1 M# o
#102:第i个孔的角度位置θi的值;
! @8 V$ E* J `- O& L, [#103:第i个孔的X坐标值;& C6 ?3 X! w3 K U1 {2 A7 _
#104:第i个孔的Y坐标值;
' @) t3 O/ `" x+ \: P+ b用用户宏程序编制的钻孔子程序如下:
5 M2 ^+ R/ B9 V b- u4 ~O9010
* A: { P( b+ e1 L5 F% i8 t" NN110 G65 H01 P#100 Q0 //#100 = 0
) i! Y6 T( v3 e: s% Z3 T B& kN120 G65 H22 P#101 Q#504 //#101 = │#504│' h. F" }! R& A7 y* Z
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
, g3 G0 ~/ p7 h( n8 z; vN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
$ `# C, ^" G$ ]N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n0 u' l- Z0 a5 N7 o0 U s: a( g
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
, ?* Z0 v8 Q( Q' j' cN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
# }$ k- f' M+ ?; f2 K$ N9 uN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
+ X* L& p. X5 L0 W$ R) @% jN190 G00 Z#506 //快速进到R平面+ V, r q* u* E; ^5 E3 n$ G
N200 G01 Z#505 F#507 //加工当前孔
$ S% @% Y# _! \0 \; T }! eN210 G00 Z#506 //快速退到R平面) N5 R9 K' _# ?8 r
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数- A# k7 v. T, Q- u
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
1 i% g' W" j% G$ d$ NN240 M99 //子程序结束
: ^: |( k1 }8 A% W( n0 h* x2 d) b( o- o6 W. v
! x" s: ~/ e9 R9 \
% T" a! m( N: r+ b2 y0 Z8 P1 o调用上述子程序的主程序如下: * j) ^# h2 }& f& r+ f
O00109 m4 {7 {& `6 R: a
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系' o1 Y) u3 m0 F' H
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
6 q1 B+ g) q, EN30 Z20 //抬刀
* u$ a0 X. o5 T# `# i1 B5 |* sN40 G00 G90 X0 Y0 //返回加工坐标系零点
4 ^: C2 t7 u" X6 f: l, c) O" d% n$ e% NN50 M30 程序结束: P" s% \. N* K
设置G54:X=-400,Y=-100,Z=-50。
; u# T. x; z% D4 P5 G变量#500~#507可在程序中赋值,也可由MDI方式设定。 ' l- C) d- @, C' k b; O2 r" q
5 U4 u; p$ H: q2 e- H5 VB类宏G65
, m; I, M) }9 ]0 H6 E! O; n8 ~5 R6 Q0 ~2 g/ G1 j
简单调用(G65)
' b) [; ^9 c- }( k( Y 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。9 }9 G3 [. m8 b# \# W- R
格式 G65 Pp Ll <自变量表>;( L7 B5 S4 M# I3 ~ U
其中: p 要调用的程序号. @2 H" o" {5 N! w
l 重复的次数(缺省值为1,取值范围1~9999)) S% I* T* u0 v. ~# X% d" D
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
$ s* f) F8 x- j, O9 q 的局部变量。* A7 ^" g9 o, D+ E
0 d% W( l' r+ h: ]' q1 r 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下: @$ g; `+ D9 K( b
W3 e9 e( `% y) F2 o) u: C) s地址 变量号 地址 变量号 地址 变量号
1 E( q/ ]0 @0 {7 d5 @, ]$ ]A #1 E #8 T #20
1 ~7 K) _8 g' N0 M4 [$ PB #2 F #9 U #21+ R( n( W9 W b& p; R, [
C #3 H #11 V #22
$ z- V. \4 M) H2 b( |1 s! `$ wI #4 M #13 W #23
$ y" Z. l) \1 A4 d+ VJ #5 Q #17 X #24! a8 O: N% g% x t, S. a/ u
K #6 R #18 Y #25
# \! _& A# u. }/ v; AD #7 S #19 Z #26
, b1 J2 u" a! V☆ 地址G、L、N、O、P不能当作自变量使用。
" m% M9 [ f" ^, ]" L; M/ U' [☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。' G& _: ^$ S. Q3 V( ?1 ]
7 ^! w& g" E+ r; K7 L 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使, X- \5 Q% h6 S) r% S2 v" N3 O
用的字母自动确定:) k3 v+ w M6 X
地址 变量号 地址 变量号 地址 变量号
! ?+ [6 H7 w3 F1 E% W) [A #1 K3 #12 J7 #23 U D7 w! v% c4 e8 u# W! K
B #2 I4 #13 K7 #24
}5 _& @$ r# n8 R+ ?: HC #3 J4 #14 I8 #25
! q+ i+ L y* p( W: ], cI1 #4 K4 #15 J8 #265 Q6 n% J$ L- u" U; L+ \* e# y6 G# G
J1 #5 I5 #16 K8 #27: a5 U% F. f U
K1 #6 J5 #17 I9 #28
, s }4 y6 D' ]7 P; p1 GI2 #7 K5 #18 J9 #29) ] o: j j5 \: i3 O
J2 #8 I6 #19 K9 #30
% l( ~: Q- U5 }% q8 u( N' zK2 #9 J6 #20 I10 #31
) \) `+ |! g. ] f# OI3 #10 K6 #21 J10 #32
8 Z/ `/ m) q9 u! PJ3 #11 I7 #22 K10 #33
1 K+ H3 c7 ]! A☆ 在实际的程序中,I、J、K的下标不用写出来。
- _ y/ S; _; o; q注意:
0 m. f' O+ H, L9 V: S! Q# S☆ 在自变量之前一定要指定G65。( n5 R- p# H/ E" B* j6 P
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
6 o' [# I4 x& _, C2 {☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
/ |, w \7 r3 u9 S, F, G N |☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。: i8 K( u9 q; ^1 v* K
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环) k4 E7 P) E6 a/ c
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|