|
|
回復 1# 鐘云駒 8 _# C1 B8 s' b) i8 v
詳解A類宏! b+ E9 i, U, j9 I. A$ g* C/ ?
分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。
/ a) F9 ]1 ~1 d 用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
7 p) G& Q/ Y4 H# p @- y! E4 F 宏指令是代表一系列指令的總指令,相當于子程序調用指令。1 X9 m3 N! k$ ^& S4 W
用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。
' s" F1 Z+ \1 p1 | I 用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。/ R ~* d; O% @* [
1、變量- S! c8 ?7 g8 L) w/ b9 t. k
在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。5 E" t" D: [( }
(1)變量的表示8 K7 K |/ J5 W* z0 a, h
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)
- |* n) q$ ?+ U. |例:#5, #109, #501。& l/ X5 h8 S1 x: C3 Y9 d, w2 w
(2)變量的引用3 Z) j0 n2 I3 [ ]
將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。" c+ ?" b5 B( v6 I, _0 x
例:對于F#103,若#103=50時,則為F50;; P2 r% \) C+ n" ?% s8 I2 {/ Y
對于Z-#110,若#110=100時,則Z為-100;
; U" q4 R$ L0 @/ \8 I對于G#130,若#130=3時,則為G03。4 P& y# q' ` b/ t' y5 T
(3)變量的類型 + C$ c6 I! A' \& b( P A: G' [" \
0MC系統的變量分為公共變量和系統變量兩類。5 W R8 }& B$ A) j* W7 {- N3 F9 o
1)公共變量
* B1 y2 D: h' m+ c" } g3 i 公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。 W2 f# Y" @6 B/ J* D K
公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。 * i5 B7 Q# ]) I
7 G M4 Z" W- A- k5 {; Y z' ~# B
: T% l9 @7 Q3 ?# w
- q7 Z/ ~; E2 Y5 P. k2)系統變量
; ?3 n7 p9 f- T8 A! U6 h/ c: }8 w 系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。2 r# n; U" d. |3 x
系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。8 a' K+ c4 T5 L, q* g: s
接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
; @9 S' i" z E( L3 E2、宏指令G65
( [4 O& g1 k4 ~; L8 l; B, ` 宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。
- x( V) e- D5 J) {" | 一般形式: G65 Hm P#i Q#j R#k o: k% v/ }, p- {6 _# A3 j9 z% ?
式中:--宏程序功能,數值范圍01~99;3 k5 H) |: ^! f' r4 Q
#i--運算結果存放處的變量名;
& {1 P) g0 _6 T3 F+ n#j--被操作的第一個變量,也可以是一個常數;
+ v- _$ s8 i; `6 x#k--被操作的第二個變量,也可以是一個常數。
' E6 P5 X$ v" Y+ J例如,當程序功能為加法運算時:) K* p& u8 n; n0 d2 D D3 {- @9 X
程序 P#100 Q#101 R#102...... 含義為#100=#101+#102
& U" L a: b9 z$ O! f程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#1029 k4 W$ l$ i+ v% Z8 L5 t j
程序 P#100 Q#101 R15...... 含義為#100=#101+15 2 [# J3 i9 ?0 \6 U0 h. D \: O
# J3 a8 I( b; w2 y5 `3、宏功能指令 . D. @3 e7 I# B7 o
' _+ Y0 b7 P- N5 X(1)算術運算指令 3 ^2 U3 M1 r5 ` G Z3 o
" [4 @# n* v- Z, v0 ^# H( ^1)變量的定義和替換 #i=#j # I3 J+ ]/ n- j( R. r; f
) q, F8 ^/ I/ D; H; g0 O+ A
編程格式 G65 H01 P#i Q#j
; I" y% B* n6 Y% Y例 G65 H01 P#101 Q1005; (#101=1005) 2 x Z/ Q( H4 P/ D. \
G65 H01 P#101 Q-#112;(#101=-#112) 5 I- A9 `: K; R _
2)加法 #i=#j+#k
& Q7 S8 p' D+ w編程格式 G65 H02 P#i Q#j R#k ; x$ H$ @ C' i. p; ~" A/ I3 C, t+ F
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
) I! e: B6 G4 x3 H# t3)減法 #i=#j-#k
, u0 S) A% p# w8 Y6 u5 U% p編程格式 G65 H03 P#i Q#j R#k
4 p9 W4 ^ ?) g0 u4 Y例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
# F7 n( r0 K$ t2 w4)乘法 #i=#j×#k
. a$ K7 ` K8 G( X編程格式 G65 H04 P#i Q#j R#k
/ P. k8 f8 C" p; q, C5 i; F例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
( S7 Q; V8 t) }5)除法 #i=#j / #k
6 H4 ~ _2 ]* w編程格式 G65 H05 P#i Q#j R#k
3 U/ r- W6 x+ V" ]7 F例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
; ?; K! j+ y7 F0 K3 j/ s6)平方根 #i= 7 N; a5 g0 t# N
編程格式 G65 H21 P#i Q#j
& q8 U% Y1 q2 a3 v例 G65 H21 P#101 Q#102;(#101= )+ _& e! P9 z8 o ?( j/ K
7)絕對值 #i=│#j│1 ]3 R l0 s2 K
編程格式 G65 H22 P#i Q#j2 g% q3 P: w# f! V2 V
例 G65 H22 P#101 Q#102;(#101=│#102│)
! a' J. z4 z r5 l* v9 j8)復合平方根1 #i=
; k! q" Q6 `( I: r3 G- K編程格式 G65 H27 P#i Q#j R#k
3 H# _) E! c, m7 V$ m5 j例 G65 H27 P#101 Q#102 R#103;( #101= / I8 s, T$ v) X m# x
9)復合平方根2 #i= ( B0 C( }/ h3 o2 j
編程格式 G65 H28 P#i Q#j R#k
5 }0 l5 e( C4 j( j0 b例 G65 H28 P#101 Q#102 R#103
* [# A: M' c" R4 X. F4 c3 G, {. |1 F
1)邏輯或 #i=#j OR #k
( P- m* S E$ ]! k編程格式 G65 H11 P#i Q#j R#k
$ i! q4 G1 A8 U; h* X5 m例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
u8 l. W6 @ |3 P* H: A- w; L4 Q; Q! S: T8 p4 y
2)邏輯與 #i=#j AND #k
# g& J8 C* P# H, N+ Q; C2 F5 r1 c( I編程格式 G65 H12 P#i Q#j R#k
0 @& C+ p# A9 g+ M6 K4 W例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
, d) E) g& o# s4 ?- X: m
$ H3 D" @9 e0 L% t- ?( t& a8 N! K. I" J+ \! S2 c
& j% R/ u$ F8 c5 [* t+ m5 t. h) M2 `9 ~
(3)三角函數指令 ; ^6 g+ f9 w! ?2 v4 u+ a5 s
$ p( b9 D3 H( h w7 J2 K
& ], ]: h) ]/ X( w. \) D5 r
7 q! E7 k4 R" v* f C6 q% N6 m& w1)正弦函數 #i=#j×SIN(#k)
% P$ p2 {. N6 ~% w8 a0 a5 ~
! V1 J" o+ h0 X! U; p編程格式 G65 H31 P#i Q#j R#k (單位:度) . {: [! f7 p! g% ~6 V2 I
8 t" a: s% O# Q" \0 m: U例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))2 n z( M3 ]* B
2)余弦函數 #i=#j×COS(#k)# U) L1 u2 s C, e; d% g
編程格式 G65 H32 P#i Q#j R#k (單位:度)8 \; |4 V& t8 I9 U4 b4 C
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
$ z4 [3 F7 i' n1 c H _3 @# c4 ~3)正切函數 #i=#j×TAN#k! A1 K& H( h+ e/ u( E, i' G/ M
編程格式 G65 H33 P#i Q#j R#k (單位:度)
) { c+ O+ k) m" t& \+ C S/ `例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
: A5 n5 ^2 V4 Q4 z* U, z4)反正切 #i=ATAN(#j/#k)
4 S5 @0 P8 J, }編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)& z& g7 q6 i* v, U u. ]! }9 r
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
$ L; [' ~2 v- S' l( t8 m: L0 @! T
2 I! j! A( d2 i- k
+ I/ g: ]5 B& L/ R; n5 w5 N0 W2 V8 j3 d I
(4)控制類指令
: Z1 `5 X1 w7 ]) p, J8 Y
$ [4 S8 J- z5 C$ K( k) I: S$ { 7 x' h M8 c# V) q) n& i) g
7 V G' G3 w0 r/ |" X9 t
編程格式 G65 H80 Pn (n為程序段號)
5 {9 h. W, N; g例 G65 H80 P120;(轉移到N120)9 o2 T% Y% o9 N: g7 h) [
2)條件轉移1 #j EQ #k(=)( {/ S! @8 n: f8 Y
編程格式 G65 H81 Pn Q#j R#k (n為程序段號)
7 S x7 ]. ~ k0 V7 ?( o1 Y例 G65 H81 P1000 Q#101 R#102! ^; M% b* c' E0 O$ J* p/ Y
當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。5 q5 {2 a7 @% G
3)條件轉移2 #j NE #k(≠)* m- g( W4 s1 m4 H) J
編程格式 G65 H82 Pn Q#j R#k (n為程序段號)
) ^7 Q6 X+ s+ Q5 X+ X1 P+ S O' J例 G65 H82 P1000 Q#101 R#1026 y3 }" x3 o* a! H: I
當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。* f+ ?6 H. C/ D/ s8 K( c) x. O
4)條件轉移3 #j GT #k (> )2 ^2 q% {! O. d8 J/ E( v6 K
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)
( L0 k; R* F: Q& E! ], ]( A例 G65 H83 P1000 Q#101 R#102, e% D: c; r6 C5 E7 t$ a3 g5 _9 z
當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。5 u0 X& j2 k7 w/ R! S
5)條件轉移4 #j LT #k(<) a- e( b+ D3 f# W& C! Q
編程格式 G65 H84 Pn Q#j R#k (n為程序段號): V( B( @+ i1 O" F0 {" a
例 G65 H84 P1000 Q#101 R#102 $ e# @3 t& q& C" j8 s* x% O6 l1 R- b
當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。
g; a5 Q0 Y. d( G8 k- X6)條件轉移5 #j GE #k(≥)
8 b& E$ Y6 }+ b0 k編程格式 G65 H85 Pn Q#j R#k (n為程序段號)
) _* m4 c0 _& _+ b例 G65 H85 P1000 Q#101 R#102+ R5 k, G: u3 o" `0 ]$ S& g9 O8 F* n
當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。 W% M8 N2 ?& S
7)條件轉移6 #j LE #k(≤)
/ M1 G' ~2 ^+ T% d2 u編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)$ j4 v4 P" j: x2 _' z; L/ }; Y8 ]
例 G65 H86 P1000 Q#101 R#1023 @) y0 E2 q5 U: @
當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。
$ P3 \, D, R, [* M1 C. ?2 N' r1 ?1 n' ~# D9 p
4、使用注意2 j( K* I5 I! V/ a, V% K
為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;1 y% |3 { m% V0 ?6 [
(1)由G65規定的H碼不影響偏移量的任何選擇;2 [' o; Y: `) k6 l& R$ W' u
(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
$ c3 q+ H1 Z# f- v7 F; i1 P' e(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。
; z9 \9 {3 i$ K) @+ `(4)轉移目標序號可以是變量。
1 d/ D6 V, U5 w0 c0 Y3 C1 V* r2 m2 e' ], J" k% E& x
5、用戶宏程序應用舉例 :
a0 `6 O3 @9 E" }& g
9 d" @1 ^9 A$ j3 w" J2 d用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。
( J- _3 i9 v8 P; K O0 ?! ?6 V. d* g+ S# O7 z& o! y+ i6 Q5 Q
使用以下保持型變量:0 U6 E0 g" k- x6 F- u: m1 P
#502:半徑r;5 w" ?: `2 E5 l* u, r6 K3 |7 C
#503:起始角度α;$ ]( {2 p F: E6 n+ n
#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;
: I0 T' l0 d$ z: Z#505:孔底Z坐標值;
1 h1 }4 t- e8 F" p3 m, X# K8 Q#506:R平面Z坐標值;
* s9 T& r0 h0 S5 L/ T#507:F進給量。
; h6 G E" C1 h/ f使用以下變量進行操作運算:
; t5 g: c$ z$ X6 w8 ^! S#100:表示第i步鉆第i孔的記數器;( K, r0 x& I1 b/ {+ `
#101:記數器的最終值(為n 的絕對值);
5 M; J. N: V0 ^2 ~, J' u#102:第i個孔的角度位置θi的值;
# `5 ^: u' G- D9 Y, G# ^; E#103:第i個孔的X坐標值;+ R( B" ^$ K: e# a \9 z
#104:第i個孔的Y坐標值;) E# k( b6 }2 V+ m% c. D3 @3 Y- G: Q
用用戶宏程序編制的鉆孔子程序如下: ( U& R, Z5 i3 r
O9010
3 B! x* F: @8 b# p6 l4 j TN110 G65 H01 P#100 Q0 //#100 = 0
( i7 u0 O* | M5 k* \N120 G65 H22 P#101 Q#504 //#101 = │#504│
! x# O! e ?) O5 sN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o! O7 h& f$ T5 j0 \% j' p, w
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504: x2 e! d2 x4 K( n- B9 U' C) C
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n% t+ U/ b* R/ H5 j' q
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標; x( y }3 A- o) e: A9 a% U
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標6 h# D5 R5 r( A, W2 j$ z6 E; b# M
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)
' d/ f) L- o! ^( W5 g8 p/ U3 BN190 G00 Z#506 //快速進到R平面
' b( y! o: l1 Y wN200 G01 Z#505 F#507 //加工當前孔
* E9 g, J% e8 [5 M d& a0 }+ L9 CN210 G00 Z#506 //快速退到R平面
" p6 {# C; r0 D) M: k( ]/ \# mN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數3 a" C+ f* ^7 V ~6 o; D6 G
N230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段2 F p k, b$ h+ V" d
N240 M99 //子程序結束 & U- ^! s- e4 x( E
5 ]( D# l( u* i' e
/ c* x$ m7 O6 }6 W0 t5 w' m& u0 P
. K" G+ ?+ m6 G' m1 B; Y; E調用上述子程序的主程序如下:
& j# ~, x: R3 @5 ^% ^" Z1 }& zO0010
3 e& G/ C) ^. r; Q/ _, O) KN10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系0 z* |5 y, R& N: h4 @6 T
N20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔
+ |$ _) t" B9 N+ \: G+ x3 E3 eN30 Z20 //抬刀, ]" ~4 C2 m! z+ u) Z$ m, Z; d5 X
N40 G00 G90 X0 Y0 //返回加工坐標系零點 7 t. y3 O/ ?: _; Y
N50 M30 程序結束
0 ]4 @; q1 ]( G7 [, ?& F設置G54:X=-400,Y=-100,Z=-50。
% M& L# I! G- \' H. `& y變量#500~#507可在程序中賦值,也可由MDI方式設定。
7 Q% v- g3 B. l. ?7 a, E5 c" ~& a4 C5 J1 P, n8 F& Z
B類宏G65 o. h6 E" o; r9 b- Y& w
( W7 z3 m5 o% ~* F
簡單調用(G65)& T! V6 K) p, |
功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。
# `( Q5 [3 l- o* Z0 s, t 格式 G65 Pp Ll <自變量表>;
, {0 m. `& `8 B0 l) p, I3 o' y* p- _ 其中: p 要調用的程序號
/ y( v# w! o# O6 V, i% f% S2 ] l 重復的次數(缺省值為1,取值范圍1~9999)
6 b2 \) |5 N s6 I4 }9 p$ ] 自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應 2 L! k5 s1 \( R# i6 @9 T
的局部變量。
. `" z- I% a& h1 F& W) M; T: J
5 P% a& U' D9 V( T 自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:
6 |, k) B$ }) n. d% w6 ~3 @% \3 F
. z2 |/ g. t+ Q4 s& q地址 變量號 地址 變量號 地址 變量號6 \* s }, Q; y, y$ j6 k! W* b( T9 y
A #1 E #8 T #20! w8 k$ N1 u/ g8 W+ P
B #2 F #9 U #213 v% k7 U* {9 Y1 o3 r% z( D
C #3 H #11 V #22; i( a% U8 s; t3 I% I
I #4 M #13 W #23" b7 S" [. c" F4 G5 D/ c
J #5 Q #17 X #24
- m' T, x. y0 j8 a2 z8 LK #6 R #18 Y #25
4 z* C1 e4 o1 c* m$ t g6 OD #7 S #19 Z #26
8 Q2 l+ S+ Q; e" ] t5 s☆ 地址G、L、N、O、P不能當作自變量使用。" [4 w9 z6 d- j/ g# ?& w) `
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。( t( e% n5 k) i. F
- l5 E; M9 G6 `# D9 L- m9 I/ A 第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使/ l3 M9 l% z* P6 A& }% ?
用的字母自動確定:
0 U$ W9 i! F6 T: r; p7 s地址 變量號 地址 變量號 地址 變量號
' A" f7 p+ _0 p" t n: d% aA #1 K3 #12 J7 #23 `( S4 Z _( k# M* U% W& z
B #2 I4 #13 K7 #24
s( C- P, u0 a" gC #3 J4 #14 I8 #25
" a3 K' G' A# \7 Y/ }( DI1 #4 K4 #15 J8 #26
$ G: V b P) ^/ K- h k5 zJ1 #5 I5 #16 K8 #276 K! s- T: ^/ D1 ~. s, A
K1 #6 J5 #17 I9 #28; W9 m9 [$ E2 y# o
I2 #7 K5 #18 J9 #29: h$ i3 E7 C* w; X) @. G& j+ o
J2 #8 I6 #19 K9 #30
, W8 S! p5 a+ S# U2 C# W8 vK2 #9 J6 #20 I10 #31& _: X. i& H0 P% J2 R
I3 #10 K6 #21 J10 #32
. y) y7 q$ n6 r0 n! L; yJ3 #11 I7 #22 K10 #33
- u- ?! S( O7 @+ G☆ 在實際的程序中,I、J、K的下標不用寫出來。
3 j8 N7 H7 E% N$ _注意:, y$ E8 m8 E0 ?* j/ d- @ f
☆ 在自變量之前一定要指定G65。; `$ z) b- A' Z9 p3 w6 k) c
☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。2 U) f5 @: {/ v4 @3 d- a1 w- [
☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。
8 N2 v G4 r, J1 K6 t& `/ a☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。9 P: x! T' P. I
G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環( R! i; {+ l* K3 z' @
之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|