|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
2 L1 N+ B* g" E/ m* E详解A类宏7 V/ M; P! |0 z0 @% q$ d
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
7 X+ Y. w6 w N6 I- `8 a4 Q 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。: S+ v$ h$ h& z$ Q$ w6 |5 m
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
5 b: p+ ~7 m6 @1 h 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。9 p) `* o `% L8 R: l$ {% k
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
# b+ z9 {* S: s- d/ W1、变量
" g* v' s, }# F0 T 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
; I$ r7 u1 }: Q(1)变量的表示1 I/ p- L( i* o# A1 x) T
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)0 r, r6 u- y& n# E
例:#5, #109, #501。
% I. h N! k' M) r4 E. }) d(2)变量的引用
4 s( y* m8 M$ Q# {4 p. C& X 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
3 @# u2 b$ O. g/ h例:对于F#103,若#103=50时,则为F50;$ \. j: X: ^2 y2 J1 }7 K8 G4 I
对于Z-#110,若#110=100时,则Z为-100;
: r' x$ ?: {; z! \: a9 o5 r对于G#130,若#130=3时,则为G03。
$ |6 |& D5 `$ |5 i/ \(3)变量的类型 ) G. e' [3 ^) {6 O2 \7 S
0MC系统的变量分为公共变量和系统变量两类。
( C Z2 Z6 G$ @8 r( g1)公共变量
4 D! T! a5 m' C 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
: B/ z( M/ S- l$ S" K/ e公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
! Z0 z! L' `9 r- _3 t% R2 b$ d, L* p z
3 ~' Q8 a# P% I8 I5 G* g4 v
3 D8 Y$ M- L9 B# ^% l2)系统变量 ' x1 G* ` ~. X0 N, @
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
4 D! T M+ l, e( O# V! N/ v 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
7 ^9 K. k7 q: _8 n" z8 _ 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。: U4 ~2 L0 ?4 c( _; j; O' ^; e- X
2、宏指令G65
$ E9 [9 C, v. _+ n+ h B 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
4 L2 f- \6 A- U, w 一般形式: G65 Hm P#i Q#j R#k
+ d( `3 z7 M: |( Q6 g式中:--宏程序功能,数值范围01~99;
7 F: C- s3 e; C; t6 E% S#i--运算结果存放处的变量名;
* E, U+ v) Q" ~ x6 f7 G1 t1 [3 A#j--被操作的第一个变量,也可以是一个常数;
! b* u- R: ]% C2 f: X% z3 W, h#k--被操作的第二个变量,也可以是一个常数。- a5 Z6 {! f/ }1 h- ^, N8 J4 J
例如,当程序功能为加法运算时:
5 Q- e3 c, g. w6 x- l( s* u! [, O% {程序 P#100 Q#101 R#102...... 含义为#100=#101+#102+ o* \, C. i0 q; Z) E: p* t, y) V4 Y
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
3 J+ }$ W" T4 J }! w0 ~程序 P#100 Q#101 R15...... 含义为#100=#101+15
% z2 g. o. I8 q% ?1 g0 g/ h9 F6 b
: Q2 n' Z2 k, e* k4 P" l3、宏功能指令
5 w# c8 J/ F" z% ]0 E- o6 |( S7 R2 F } w$ j& C2 K
(1)算术运算指令 ) `* W/ i0 v1 c# N3 \! {% o) y
* c# P. \7 E/ X
1)变量的定义和替换 #i=#j
" _9 E* x- w7 S/ ^( E7 ^. T+ L/ Z" V ?; Q2 C
编程格式 G65 H01 P#i Q#j
: K5 C/ H( l' X. [! p- ?例 G65 H01 P#101 Q1005; (#101=1005) 0 |3 ?+ t- v! W' Q7 w; V+ O8 S6 @! L6 B
G65 H01 P#101 Q-#112;(#101=-#112) 5 Y% e8 j1 j: ^
2)加法 #i=#j+#k
, [1 f4 n% r, o9 E编程格式 G65 H02 P#i Q#j R#k 3 Y, s/ k U9 P: G
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103), C: _0 a) `9 E9 y5 T" Q3 [( N
3)减法 #i=#j-#k
: m8 X9 H! {' E5 O6 b, Y g5 W! W编程格式 G65 H03 P#i Q#j R#k
8 |/ z6 W2 ^1 c- }例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
2 @1 a& v5 Q' `4 x$ h( `4)乘法 #i=#j×#k
, L- R( ? J8 d- h# m编程格式 G65 H04 P#i Q#j R#k
& s; x( k! q8 {例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
5 T, {/ |* j* m, `7 w4 y& K' H4 V5)除法 #i=#j / #k# k# k4 B$ X8 O7 y
编程格式 G65 H05 P#i Q#j R#k8 T$ X4 o2 A, Y& A* J) b1 g
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
8 l0 I k; X9 j3 d# \! o6)平方根 #i=
9 c. f, e4 N' S编程格式 G65 H21 P#i Q#j
- @% { J) h+ x/ N( G8 [2 h6 [例 G65 H21 P#101 Q#102;(#101= )* j) |* P2 D0 x4 G" K" ]
7)绝对值 #i=│#j│3 }5 K3 ]# e. q! _& a6 Y
编程格式 G65 H22 P#i Q#j
5 N, L( Q9 s$ C5 i+ H* ~例 G65 H22 P#101 Q#102;(#101=│#102│) ( y% Z! Y {) U, G8 d
8)复合平方根1 #i=
; ?! g. j; t. n2 d. O) g编程格式 G65 H27 P#i Q#j R#k
; ~( e# \+ r. o. D1 ]2 s例 G65 H27 P#101 Q#102 R#103;( #101= ; v1 N9 ~% m! D3 t2 N- [
9)复合平方根2 #i=
! W( i& n( U% P( G; x5 U% z, h编程格式 G65 H28 P#i Q#j R#k
5 s' y/ u' i$ |2 k) I2 j例 G65 H28 P#101 Q#102 R#103
. T" \) L( j f8 o6 L9 L9 @, A& I2 c0 ]' B. {. V+ g
1)逻辑或 #i=#j OR #k
4 u, X5 t# H3 l) m7 {编程格式 G65 H11 P#i Q#j R#k5 }. d7 x+ K h4 L+ D0 T7 }
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)) r: ]: q! ^3 l8 {1 j
6 R5 |% t P: d1 g& G# X
2)逻辑与 #i=#j AND #k" [5 N$ K8 ]# w/ Z# z
编程格式 G65 H12 P#i Q#j R#k* I8 h$ f1 x& R D3 f D; r
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
5 S& l4 W3 ~# ^3 t% f6 j" g/ c- s" o" `% ^$ m2 m! D1 o/ u6 ^
% \4 L% f+ c6 A# i0 _7 K
- E L) U1 [/ V- C9 C& a1 _8 m! Z1 W. }* s
(3)三角函数指令
T/ X7 ^( O! f8 f
4 q& f9 l8 D: e& T2 f4 D7 v, n. n ' E& |6 ?: T& b8 o' V `3 {: j
$ E- q( G& @% _9 N/ d% z1)正弦函数 #i=#j×SIN(#k) ( K# Z" y. h8 h: ^* V
. S7 N @+ f% ]) `5 b
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
1 w7 w! b6 T- J5 o7 U; o5 ~ x2 V% q6 @9 S' ?6 \$ I) n
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))% }3 F W' Z9 v
2)余弦函数 #i=#j×COS(#k)
% ?$ g& w- M: c7 G& y8 r编程格式 G65 H32 P#i Q#j R#k (单位:度)0 P$ F0 {# U e4 Y
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
$ \0 k6 z& l7 j9 A; ]: D% I/ M3)正切函数 #i=#j×TAN#k
; t' ?7 ] z0 E+ D/ Y编程格式 G65 H33 P#i Q#j R#k (单位:度)
; h4 K' r0 }7 \4 g% ?& M0 y例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))* @( a, A- h* x
4)反正切 #i=ATAN(#j/#k)
- y" |; S, K0 T编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)8 z1 l% I9 T# I* D) b) I5 k* G
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)3 s Q" ^/ G+ `
/ T* L, `9 L7 E # C+ `1 Z' x, }2 Y
# T! S# f! E+ y9 d5 V0 v, t; U(4)控制类指令
, [) S6 K& K$ h# J' j: |
' C% h6 M3 v. m K" p) Y! O0 V, _ * @3 w) ]( g- s+ r* v
. z) G* i: Z! R6 I, p3 S编程格式 G65 H80 Pn (n为程序段号)( p' b! R$ ^2 ]1 t. t
例 G65 H80 P120;(转移到N120)/ Z) r- M3 R' n# _4 T _5 z
2)条件转移1 #j EQ #k(=). T5 E' H& V5 t& h, V) E6 x1 h
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)3 ?3 }! P7 E. ~6 \$ X# A* l3 U
例 G65 H81 P1000 Q#101 R#102
9 {+ W. f1 n0 I) f* q# D当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
# u) w. B p: R& u) i3)条件转移2 #j NE #k(≠)* x. a/ Y% Q& v$ L
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
& L( t( {4 T1 N7 q( m3 z例 G65 H82 P1000 Q#101 R#102
9 K7 Z1 B. d) }0 w当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
+ n/ j5 c: A9 x8 A4)条件转移3 #j GT #k (> )
& a0 m p) I n6 l1 F编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
- b% G V# P( K% z4 |* ?* Z例 G65 H83 P1000 Q#101 R#102
# P& y9 {# s ?$ H) h; i当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。3 u4 c2 w& l* r4 e1 `$ i
5)条件转移4 #j LT #k(<)" i( b+ k) @* ~. `0 [
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
- @- C) q* H2 x0 `. f' r- @例 G65 H84 P1000 Q#101 R#102
; L: w! Y5 m# n8 e! A当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。! ]8 s) ^/ n. T& [
6)条件转移5 #j GE #k(≥)
9 p; B7 c: `: Q- w* |编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
- o. U6 ?5 O0 c$ ^ t8 o例 G65 H85 P1000 Q#101 R#1020 D, B' o: P' Q% {5 U
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
: J- a' ?2 t8 ? H' c! o6 n9 ^7)条件转移6 #j LE #k(≤)
$ O9 u: r) t3 ~+ z5 Q" C' i编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
) d2 I( R0 F5 u m) g& T) ^% T例 G65 H86 P1000 Q#101 R#102
* [) {2 `# R% J; x1 k2 {' M当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
z3 {* B% [2 G% E: e" p Z6 E; r( c" c' Z
4、使用注意
- N( u7 K- o, B! M0 _5 T 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;, B% t& _& G: e+ ?9 O
(1)由G65规定的H码不影响偏移量的任何选择;
6 v) m& N. \5 B6 b5 _4 q; d(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
' H- n: I, @" w" g9 \' y(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。. r8 U* W1 C8 \) K/ k+ P. G7 i
(4)转移目标序号可以是变量。 & [ p% J y. D. f- e" z; g9 h t
* _, w4 r0 k- M2 a: j
5、用户宏程序应用举例 :
4 z* p" {5 S" d% C/ S* A7 y7 ~' D* H, E8 f* g/ G
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 9 V2 M: \' g% b4 k4 t
1 W* v e! G2 T" X% ~" j/ h使用以下保持型变量:
. Z; u) S* i1 }7 A! \' A4 x) t#502:半径r;
^! Y. N9 I' z9 \3 ]) o9 O$ s* x: q#503:起始角度α;3 l, s: S$ o: W
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;5 E# X2 y% e1 O2 @: Q, p
#505:孔底Z坐标值;
$ N4 e- a- ]1 N0 m M8 R#506:R平面Z坐标值;( H Q6 G; ]% l" W
#507:F进给量。
. [* q0 [; n& O* l使用以下变量进行操作运算:% }' u5 [% K8 D. Z( q4 X2 W1 c* _$ O
#100:表示第i步钻第i孔的记数器;
) F* l, C$ j1 q$ l6 w+ i#101:记数器的最终值(为n 的绝对值);
* [( M( i" R) \: ~) d) {+ U#102:第i个孔的角度位置θi的值; 4 O, u# d% A$ ]$ y: s" d5 ?
#103:第i个孔的X坐标值;+ x* ?6 v* I! F$ F/ [6 q( o
#104:第i个孔的Y坐标值;# V/ y! r8 c! _
用用户宏程序编制的钻孔子程序如下: 4 }3 D- ?/ ^( c( S" f5 _
O9010
" C3 i! E+ K# {/ |1 I; xN110 G65 H01 P#100 Q0 //#100 = 0
! M7 u2 s3 R4 UN120 G65 H22 P#101 Q#504 //#101 = │#504│# L# u% O u9 |
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o% d! J" h, E6 }: |$ w
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
) \+ }( p5 F- G! }N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n& f- @* i3 L7 G3 v) z+ ?' y
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标; a$ R3 z) s M4 R+ g
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
4 a: C7 ]) i3 d. \5 O) EN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)& F6 }1 Z4 F4 E# h6 X
N190 G00 Z#506 //快速进到R平面+ `' L" \# Y/ }, C, m; K
N200 G01 Z#505 F#507 //加工当前孔4 P% q/ L0 j$ W5 ]. y
N210 G00 Z#506 //快速退到R平面 @' |% _4 l& t2 x$ c5 @/ I2 w
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数9 Y9 N. N# M7 ~3 B# Z9 F* H* e
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段& ? _8 z) d( z) A8 ?* R
N240 M99 //子程序结束
/ t' P4 I: S, A" ^$ m1 z. d7 c0 O- I
1 u4 F% U, J8 p 0 P* D% j& B: E- ?2 L
' Y8 h8 v9 w0 o) B2 o调用上述子程序的主程序如下:
j" f% ?* [! [4 z7 m! aO0010
' C8 C+ g+ h8 Q# @N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
6 p# Z; D2 v# d) x/ oN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔' M5 L) y+ r) b4 J
N30 Z20 //抬刀
/ {, H. }7 n# \N40 G00 G90 X0 Y0 //返回加工坐标系零点 $ b& S D' p. Y, H5 J9 j7 y; T5 U
N50 M30 程序结束
* v' ?4 k7 [1 ]% W, ?& V P设置G54:X=-400,Y=-100,Z=-50。
3 _4 V) r& O5 @6 `; t变量#500~#507可在程序中赋值,也可由MDI方式设定。 ' d5 N# \( |5 m
) v) o& x8 r' w' t5 @2 KB类宏G65
# [5 L$ }5 x& ~' b- J9 h
- F; W, k M& _简单调用(G65)
1 Z5 v7 z, f2 T# ~9 A 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
: t5 T$ W% m3 n+ L6 K/ ~+ @ 格式 G65 Pp Ll <自变量表>;
1 e) P, |4 _- s& c, J' \7 B 其中: p 要调用的程序号
/ ?9 T; L3 T& X; i l 重复的次数(缺省值为1,取值范围1~9999)
: u5 m7 W7 @4 [& [2 F, I, A 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
) Y+ l5 s m8 u+ L' y* r 的局部变量。
7 Z2 y4 h0 f A: ^3 |4 e* b4 K3 a& X
8 z2 U' c% n2 d6 C2 r: U 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
6 I& I. J* t6 o/ y4 A" z
5 J4 q% J# B1 \5 x8 M5 w) ]; e+ h地址 变量号 地址 变量号 地址 变量号( r! i2 Z1 W) @
A #1 E #8 T #202 h c/ Y" m4 s1 p) c( O0 S
B #2 F #9 U #21) H G2 p6 H' m2 M( T
C #3 H #11 V #22) G* N' E6 h, G* p" R3 H
I #4 M #13 W #23
' R5 s6 S% m/ b( V. u" v. EJ #5 Q #17 X #24/ ~. n% X( L/ y( @; e
K #6 R #18 Y #255 c' h* ?' n3 ]
D #7 S #19 Z #26
7 E. [: A4 J( h* }4 B+ y& Z☆ 地址G、L、N、O、P不能当作自变量使用。7 {0 A0 f' ]2 f3 T
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。1 \3 G w5 V6 I2 l
: C! b9 I' M6 i5 ]0 K0 | 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
% S, z2 m3 O8 y5 Y5 a用的字母自动确定:5 u+ F% D g" U* L3 S: e- [
地址 变量号 地址 变量号 地址 变量号
' c) g) V$ m; ~" yA #1 K3 #12 J7 #23
' j s6 r+ i! BB #2 I4 #13 K7 #24% S/ k0 x/ b: s7 @" U$ [! j2 L
C #3 J4 #14 I8 #25
. D7 r3 F. r7 ]I1 #4 K4 #15 J8 #26. ] Z4 i& x, ^4 ~
J1 #5 I5 #16 K8 #27/ j2 t% ?1 ^/ J' b! g( j& T+ I
K1 #6 J5 #17 I9 #289 {& {- k: `. z4 E
I2 #7 K5 #18 J9 #29, I" c3 i" v( J$ [
J2 #8 I6 #19 K9 #304 F# s1 }. n# g5 z* {& i
K2 #9 J6 #20 I10 #31
& F/ p/ J6 I1 v' QI3 #10 K6 #21 J10 #32+ q3 [2 X5 c2 s- Y' n% u& W
J3 #11 I7 #22 K10 #33
4 w% ~2 F+ e! f) O" N- H: M, y☆ 在实际的程序中,I、J、K的下标不用写出来。" d* w3 q5 g; b+ l* I0 d
注意:
" ^; I. C+ O- M0 L" z☆ 在自变量之前一定要指定G65。
# u- Z- H; `! Q# i: ?" Z+ }/ q☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。% `0 n6 \3 W1 _% P
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
, u, u# ^; j9 B7 D☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。* J, v$ Y5 K+ v
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环) l4 l b: y: y2 e- a1 ^
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|