|
|
回復 1# 鐘云駒 3 Q/ |4 W( L& N, B' O* g
詳解A類宏) g2 g7 K& x% G
分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。
9 A3 m7 z5 m3 s+ {1 h 用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
. |4 O# v" B: t8 \5 | {% l 宏指令是代表一系列指令的總指令,相當于子程序調用指令。
1 \: \4 J3 x8 i# p5 [ 用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。& ^4 j' d. l( B M0 a
用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。. X2 I$ P! b, d3 D# B& q
1、變量
, h+ U; g* r# N: ~. z9 }9 e+ f% h: A 在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。
6 d. q9 A ?/ ^9 X(1)變量的表示* n& Q' Y3 g) c5 p/ X, a
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)+ x5 E! L4 i) Y! G" o; K
例:#5, #109, #501。
6 ~% E+ H3 A( Q(2)變量的引用
4 N" n! s: [$ C 將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。6 M1 q( `1 s3 H9 s7 ]
例:對于F#103,若#103=50時,則為F50;
B& H- k/ }9 G, d0 p! ~對于Z-#110,若#110=100時,則Z為-100;& V6 U/ Z! p/ z7 F& ]
對于G#130,若#130=3時,則為G03。- x, Q$ g# R) H9 K) j/ Y
(3)變量的類型
; M7 B1 ^- w2 {- N# Z+ l 0MC系統的變量分為公共變量和系統變量兩類。
) ]. p1 m b) q; y0 s1)公共變量 ! S6 o6 ]) m; v6 ^6 [+ z0 U" C
公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。 S* @2 U4 Q5 J2 }6 U9 J- D0 n9 N1 P
公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。
. X5 z2 X# P) S* }4 ?
7 ?' L @( [! e
! |& o7 R2 P6 q
2 o' |1 @3 T0 l% ]' s# G- R2)系統變量 9 U' c$ a& D0 _" W5 g1 M
系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。, x' O4 _/ i: |# j
系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。2 C8 a% n* t( |0 S
接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
n* S$ r* q0 y6 p2 ^" Z2、宏指令G65% i" l. _6 M3 O3 @
宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。
5 B3 M+ H* z9 I' L5 T 一般形式: G65 Hm P#i Q#j R#k
/ L W4 Q' O1 h+ U S2 M式中:--宏程序功能,數值范圍01~99;! X3 `9 I1 g# D1 [! O
#i--運算結果存放處的變量名;5 }7 j+ d3 z2 v# d( j
#j--被操作的第一個變量,也可以是一個常數;& d; k4 p; n6 V& S2 s/ o
#k--被操作的第二個變量,也可以是一個常數。+ T5 q- U4 }+ G4 T, d
例如,當程序功能為加法運算時:) K/ J; }0 k+ T& n9 y
程序 P#100 Q#101 R#102...... 含義為#100=#101+#1029 m! R8 Q: g$ ]
程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102" T: Z% N! d$ d. v; K
程序 P#100 Q#101 R15...... 含義為#100=#101+15 ; W9 c9 a% t- m h
- r" } {: \+ s4 j1 z
3、宏功能指令 7 Q5 c% P0 M( g7 E) Y7 B" W
( }2 D6 l) {+ ]2 U$ k5 ]
(1)算術運算指令 1 b" L) t4 m2 P: @1 w
- q9 q' [- I* W9 [0 s" K) @8 D1)變量的定義和替換 #i=#j
/ x" |$ A6 m5 ? \ d
$ o1 u5 Q% G$ V+ [+ U/ @! ]: ~編程格式 G65 H01 P#i Q#j
3 A! M" ~$ V) G B例 G65 H01 P#101 Q1005; (#101=1005)
$ r( L! C: \- b! t8 U" v5 _G65 H01 P#101 Q-#112;(#101=-#112) 2 V' j- v; z/ Y9 x: o! ~
2)加法 #i=#j+#k* W, J( d, {! a
編程格式 G65 H02 P#i Q#j R#k - M$ c: f. |1 B& E% e& z6 B
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)9 Q/ p; f& B3 ]& L% x/ x; z; @' G
3)減法 #i=#j-#k& p( f7 ^ k5 Y0 U+ ~0 |
編程格式 G65 H03 P#i Q#j R#k4 ?$ z3 G4 M+ P3 N8 O
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
, [5 ~5 H% \, w% ~8 @" _4)乘法 #i=#j×#k) T# i/ C- |/ G5 `, _+ I
編程格式 G65 H04 P#i Q#j R#k
$ }, t- q9 \$ p6 m. @例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)- V0 ]" e# q# |* J! R1 ~/ E
5)除法 #i=#j / #k
; ^* j/ ]/ o; Q) H6 {* x編程格式 G65 H05 P#i Q#j R#k3 W2 ?( D: b4 R+ W4 o W
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
9 ~9 V- Y' s. G/ J4 g6)平方根 #i= ( h6 r F, w3 }1 w9 ~ i* H: ^
編程格式 G65 H21 P#i Q#j; P* d+ J( ]1 l9 {/ A, I4 P
例 G65 H21 P#101 Q#102;(#101= )( e4 w x3 i2 R/ H
7)絕對值 #i=│#j│
; [- Y; n9 a6 L# N編程格式 G65 H22 P#i Q#j" W2 A1 k8 U- k) ^+ i! r/ C- x; N
例 G65 H22 P#101 Q#102;(#101=│#102│)
5 b' r0 _1 [, f% z- P6 |" X8)復合平方根1 #i=
! Y# Q4 q& y* u3 n" L編程格式 G65 H27 P#i Q#j R#k: v9 |" c- Z4 W' D. O! D% p$ r
例 G65 H27 P#101 Q#102 R#103;( #101= 8 M* D; |. g/ w, P) n2 E
9)復合平方根2 #i=
8 s% P( {; f" I% e" T2 s; q5 g' v i編程格式 G65 H28 P#i Q#j R#k# V! e9 w& [- x
例 G65 H28 P#101 Q#102 R#103
& h! o% Y( G: R( s+ t3 L5 s
! ^6 y/ ]. e6 _2 B4 Y+ J$ L5 i6 G& R3 `1)邏輯或 #i=#j OR #k! E9 H/ l" i* q0 y1 n) ?
編程格式 G65 H11 P#i Q#j R#k
$ R2 S; d0 X4 B$ J例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)& h5 K {# X" I! r
0 Y8 @' ^+ h; A# E) D2)邏輯與 #i=#j AND #k& P) J* n- p9 M
編程格式 G65 H12 P#i Q#j R#k
( B* u, H9 q6 k( ]/ C4 ]* o例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
. R8 Y2 g& ?. u& Y! C9 {; u* ~* T. e% A3 ~9 T
% e% H: ?/ N$ n0 d& W# a$ X$ E
- Q# ]8 D4 ^: r
2 d5 |- F: \; d; a& I, K(3)三角函數指令 8 m/ O2 S3 a6 ]0 P
. {/ _- ^+ D [* ` - d" U6 |( R! _$ N4 e
7 B; q$ u+ y) j8 C! l. w! B1)正弦函數 #i=#j×SIN(#k) + ?- g+ Q6 l$ U# j5 r, F* o
, M I) q6 x5 ~: L( p
編程格式 G65 H31 P#i Q#j R#k (單位:度) ." z4 F4 \/ g7 e8 u3 k; S
9 w& ]7 B0 C( K例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))$ R5 T/ x6 w7 n# I
2)余弦函數 #i=#j×COS(#k)
6 `1 b+ e( u5 z. X3 F編程格式 G65 H32 P#i Q#j R#k (單位:度)
$ P9 q' ^, [3 [" p例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))7 y6 |/ l& y5 g% k/ B9 `6 r
3)正切函數 #i=#j×TAN#k* v' I \& w A4 P8 v" c
編程格式 G65 H33 P#i Q#j R#k (單位:度)
5 H' o# J8 f; Y- f+ {* ~+ `4 c' f例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
- n" j, y1 i( [, W3 e4 B4)反正切 #i=ATAN(#j/#k)
) Q3 l u4 U) {編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)% L2 Y- s$ u/ d( N6 o
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
: \+ |$ a/ y; _7 }1 A
& d+ o$ h; N! l' [ @9 c& R- G 1 D( u3 e; F3 ?2 j+ g4 Y U `
3 F. M# y/ B) M3 e6 V) y e% F: t$ }(4)控制類指令
( {8 f1 _& H2 z
% }, ^. T: X! o( |, z+ d- E
+ V2 Y% [) k1 e8 Y. x8 c Q" C. P4 V3 W" p: L6 V
編程格式 G65 H80 Pn (n為程序段號)
: H$ K: [: A7 z+ s5 f! q2 o. k例 G65 H80 P120;(轉移到N120)
3 j3 l: d2 n3 G; W2 r) ?2)條件轉移1 #j EQ #k(=)
& ^4 B; N5 v- q4 Z0 y8 \編程格式 G65 H81 Pn Q#j R#k (n為程序段號)4 Y3 R! z9 A- d. w
例 G65 H81 P1000 Q#101 R#102& s* |2 t; ?$ R1 z* q
當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。/ m( E4 F. ?! Y0 K- Y5 _
3)條件轉移2 #j NE #k(≠)
* t: L: T' Z0 P. ~+ N/ C& L編程格式 G65 H82 Pn Q#j R#k (n為程序段號)+ r+ I/ j2 w N& G$ G @7 B- ^; a* X
例 G65 H82 P1000 Q#101 R#102' O$ c6 [6 W: `. j; ~6 k. `6 y
當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
. N0 p0 M, b6 w% i4)條件轉移3 #j GT #k (> )" V* X# L' ~- D) @# o) `+ m
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)
) y1 j8 I$ F- r* p' ?例 G65 H83 P1000 Q#101 R#102
5 }/ j/ [! b" t, M) Z當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。8 ?& V$ M" G* y ?
5)條件轉移4 #j LT #k(<)
* \( b/ J- I- N! l2 w7 M編程格式 G65 H84 Pn Q#j R#k (n為程序段號)
% y2 ~$ ]- M- }* {例 G65 H84 P1000 Q#101 R#102 i" F0 o `1 T5 L
當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。
" i2 L+ B. w+ B" P. l. T, F2 P6)條件轉移5 #j GE #k(≥)( e) r- k# S+ T. \
編程格式 G65 H85 Pn Q#j R#k (n為程序段號), t2 X% {- K* K. i1 `' S- G
例 G65 H85 P1000 Q#101 R#102
4 K( ^ d; l. D, y- E: q9 Y當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
8 X q5 y& ?1 n* E0 g7)條件轉移6 #j LE #k(≤)
& K/ j, O& u \編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)
& `6 K. ]3 r& l: F例 G65 H86 P1000 Q#101 R#102 x( z& ~3 N5 b! ^
當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。* K9 N g0 U7 R* T+ c1 U3 [
: m) }3 B9 Y0 C3 Y+ K4、使用注意 z9 [4 p W+ P3 s& h' B$ b
為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點; k: e" B+ i6 F# s
(1)由G65規定的H碼不影響偏移量的任何選擇;2 S( N' S9 B/ L. H, t6 X
(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
" {' B, {; @5 E& i5 j+ M' Z6 r(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。
$ U- ]: O/ U4 o B(4)轉移目標序號可以是變量。
/ O2 f& C+ l3 ]5 D4 b5 v+ ?" }3 q2 Q8 b: q
5、用戶宏程序應用舉例 :
7 g( Y( m( O, i4 m" k, l
$ z2 |9 ?( P% |! g& z6 F$ c$ {用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。 ( n! I% m2 Q, W- P, [
, T5 G3 T* w$ u* K
使用以下保持型變量:
; N5 }* ~* Z n5 }) y* c2 g#502:半徑r;5 h4 ~1 Y: n$ A5 A* `) _# k
#503:起始角度α;0 C! X( u) \: v5 u" a3 }7 x" }
#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;
. {* G3 H6 s6 T' s9 A#505:孔底Z坐標值;, ]8 P. p0 ^) \7 o' B) m
#506:R平面Z坐標值;
0 [( h7 T) k4 r5 @; K# E0 o. [#507:F進給量。
/ G# V* m, O/ G2 x. B' U3 d. N使用以下變量進行操作運算:
- @, k4 `$ b. a6 P6 ]#100:表示第i步鉆第i孔的記數器;
: \" c5 X" t! J#101:記數器的最終值(為n 的絕對值);. ?' a; y" V8 S4 }/ d. H' g" g
#102:第i個孔的角度位置θi的值; 1 a* s/ ~' m1 q4 E% L2 F+ T
#103:第i個孔的X坐標值;
" D! F) N3 l. I9 n2 c* S! p#104:第i個孔的Y坐標值;
" |% _9 o3 B5 ^4 v1 y, `用用戶宏程序編制的鉆孔子程序如下:
( y* K* b$ F7 W3 ]7 XO9010
; v& I' @- Z8 f/ |3 qN110 G65 H01 P#100 Q0 //#100 = 0
1 H" e" V+ l3 w* |! }2 M6 DN120 G65 H22 P#101 Q#504 //#101 = │#504│+ c/ K! B% u6 Q1 s# x
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o+ S9 T$ C& u4 l
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
7 s, a/ q$ d1 F; C; s5 \: ~N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n
$ Z: w5 [' u- I6 v z8 o0 ^. z3 YN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標 G' a* g) {0 m. M
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標* j8 |3 e; S" N$ D; D6 b5 |
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)
$ ~ t, k8 |% M% ~; DN190 G00 Z#506 //快速進到R平面
% }+ g7 ]* F: w _! _# m% lN200 G01 Z#505 F#507 //加工當前孔0 T7 C7 W! n8 X1 g
N210 G00 Z#506 //快速退到R平面
' I$ g4 P' k2 T; `- v; jN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數+ C2 U0 h) X' J$ V
N230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段
1 r" C- k1 u4 i; EN240 M99 //子程序結束 ) Q2 g" z1 c! ]7 O0 q1 _6 ]4 ?5 \
3 G/ {/ d4 O- I9 @1 E6 V- _
3 B& v& ^/ G# V: ]: V0 ^
! E% R" c7 R! U5 D2 n9 _& ]調用上述子程序的主程序如下: ; z& {# J! l8 w1 H
O0010+ r4 V6 Q5 |8 O9 R. k
N10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系5 V( Z0 G) W2 y- T5 P& J; e
N20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔
' ~9 {: [7 `+ UN30 Z20 //抬刀4 _1 J1 ^/ q7 _
N40 G00 G90 X0 Y0 //返回加工坐標系零點 % D2 M) s- `0 S' w
N50 M30 程序結束
! F5 S3 `( ~7 k5 { S設置G54:X=-400,Y=-100,Z=-50。" {) ~1 F) R% D) |
變量#500~#507可在程序中賦值,也可由MDI方式設定。
2 o* J) f0 k* ^8 R3 v) }1 e# w% h6 H: s5 B V
B類宏G65
; W) \7 T% @( H, I6 i
' b% e- F% I7 `- O' I簡單調用(G65)
+ s, P* O3 g8 q3 m. O 功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。: g) Q! t9 J; L
格式 G65 Pp Ll <自變量表>;# s; S" Y4 U( r9 N
其中: p 要調用的程序號+ m/ g0 m- W; K: z D3 k1 w
l 重復的次數(缺省值為1,取值范圍1~9999)" R4 J- I2 n. p
自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應
# i8 v& T, j7 p2 V 的局部變量。% `6 C" s% K: K8 s
, l6 e7 F) R5 W 自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:! y/ Z; d1 L( A+ R0 `
* F! A+ P" ~" S* [$ M
地址 變量號 地址 變量號 地址 變量號# N7 l' T; L/ Q! T! m
A #1 E #8 T #20# y! W2 O% _5 L
B #2 F #9 U #21
" f+ e: _) N$ w" HC #3 H #11 V #22
9 S) ^. p: |: i6 KI #4 M #13 W #23
/ k; N( ~2 Y% |$ sJ #5 Q #17 X #247 V% d1 O5 U$ R( }( \7 K
K #6 R #18 Y #25+ z6 o+ l. e& x: S
D #7 S #19 Z #26' ?" ^/ C6 E! Q6 s8 E2 T' m, Z
☆ 地址G、L、N、O、P不能當作自變量使用。( t3 Q: L. i. o; O
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。, g( _" _2 r7 d/ G' G+ N( p; k
, `5 s) I) S( w4 j, q# w3 U
第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使1 t5 {! ?6 }5 h' l
用的字母自動確定:
; ~) p& a1 t- B3 g# g- J1 |地址 變量號 地址 變量號 地址 變量號+ X7 \ v( C8 X4 L
A #1 K3 #12 J7 #23
2 Y, s/ [- `& {; OB #2 I4 #13 K7 #24! U1 J, g/ o: F' @# u
C #3 J4 #14 I8 #25+ M ]. y* j' v# [; r9 j; g/ D
I1 #4 K4 #15 J8 #26' C& T# m' L0 | n
J1 #5 I5 #16 K8 #27; D! I8 [ f& y" [
K1 #6 J5 #17 I9 #28" ]! h' i) W% l& |, S
I2 #7 K5 #18 J9 #29+ V3 B3 s; M) W- h9 Y0 |, x4 W
J2 #8 I6 #19 K9 #30. Z4 R+ Q- w; P$ _. r9 x
K2 #9 J6 #20 I10 #31
( o( I+ q6 Q. W& lI3 #10 K6 #21 J10 #32( u. v/ }. x% Q
J3 #11 I7 #22 K10 #33
7 g( V, ^1 B2 Y1 c {. P: m☆ 在實際的程序中,I、J、K的下標不用寫出來。
- ?5 L' Q `- m0 p/ X/ u注意:
2 l6 N- `3 ?% `2 _! v. c9 c☆ 在自變量之前一定要指定G65。; S' n. Z4 [. C& v
☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。6 Q2 j6 K% `, D4 R" N
☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。
8 T! l& P& a; ^$ H0 s5 \* H: v! n. m: r☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。
2 \; A6 S2 F6 t* a4 K G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環
* s K; i0 N1 _6 \$ F之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|