|
|
回復 1# 鐘云駒
8 B2 n- k7 a' \! \7 L; e" q0 X詳解A類宏
% V, @/ g/ p' R分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。% V' D/ u7 z2 @4 A
用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
7 d! W* v6 \* P, }% G: d 宏指令是代表一系列指令的總指令,相當于子程序調用指令。$ e9 z' r: A0 P* q9 t( n
用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。; B) W+ A* f5 q0 o B
用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。
3 C% c0 n0 O/ T) k% W8 p/ t% Y3 ]1、變量 {0 m4 `/ k H: P4 o
在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。
# Q- s B0 ?: X6 I" Z0 \(1)變量的表示% }* f5 _; y+ r/ }
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)
: p9 \& f$ H4 w( j8 {' J例:#5, #109, #501。4 x( m" M5 j+ _9 j" o/ P! w
(2)變量的引用# W! `5 {) G) I( b9 O9 I$ b* p
將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。
" G$ [. H5 v. F% X0 I" M+ _* c- X例:對于F#103,若#103=50時,則為F50;
, s5 ]* F9 m3 A對于Z-#110,若#110=100時,則Z為-100;9 D4 l9 ~4 `+ s" j
對于G#130,若#130=3時,則為G03。3 D4 O4 c, \8 M7 g. R/ @
(3)變量的類型
: {0 a; V/ v; H9 L; p 0MC系統的變量分為公共變量和系統變量兩類。4 o; u# Q6 m# ^/ I8 B; @
1)公共變量 ( G# k4 B4 |4 k5 V5 ^
公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。
% b; A1 |: D7 v8 U; R i0 q! S公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。 # R# X& m( c9 I, P% A
% D! ^ ~+ k& H" I q5 Y% S0 M8 B6 j8 V C6 \
7 Z! D' f/ ^& h/ P4 \6 ^2)系統變量 $ u, J) q) _1 ]$ F. M& k
系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。
# O Y6 j$ I6 I 系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。" S5 a- r E! p) t% p/ W4 I5 b
接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。& `, \2 Y- h' Y
2、宏指令G65
2 K- ^. I C+ A6 l& A, C* [ 宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。; R- h' A" l! O
一般形式: G65 Hm P#i Q#j R#k$ b6 L# ^/ p6 G/ T. Y2 Q
式中:--宏程序功能,數值范圍01~99;
' P/ w0 C7 D0 N8 q) Q0 h6 y' ]#i--運算結果存放處的變量名;7 D) \* _/ @5 \) g
#j--被操作的第一個變量,也可以是一個常數;
( x: F) g/ G: o' Q#k--被操作的第二個變量,也可以是一個常數。0 z5 L- I5 |9 K: U) @0 n: i
例如,當程序功能為加法運算時:
# Y9 ^! c! R, W; Y Z* P3 i程序 P#100 Q#101 R#102...... 含義為#100=#101+#1027 F) _+ d4 L2 B9 D0 B
程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102
5 o1 e( w* }4 K程序 P#100 Q#101 R15...... 含義為#100=#101+15
6 W, j& x4 c9 I" Z+ O) f8 f
4 x+ M% V/ G3 J0 t7 a; Y3、宏功能指令 8 ~: @8 d3 N3 u3 p0 T
' Z( b( ?9 `; l
(1)算術運算指令
1 `! } I+ F B* j) ~- x8 J( [+ ^) T
1)變量的定義和替換 #i=#j
: z5 I: [9 l2 S# V* T( i
2 E! j. h( K7 c編程格式 G65 H01 P#i Q#j
* Z; e3 h* e% Y& E2 | ~5 y8 ]2 A例 G65 H01 P#101 Q1005; (#101=1005) * w1 H4 h/ M4 E2 x W# J
G65 H01 P#101 Q-#112;(#101=-#112) $ G+ n* E5 \( O# f
2)加法 #i=#j+#k+ `' t( N0 W8 j! U& z( j% D8 b6 r
編程格式 G65 H02 P#i Q#j R#k
' G8 ~, z. `0 j$ E例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)/ @# x4 D/ V, r6 p2 @
3)減法 #i=#j-#k
$ l- z* s/ P, _* W編程格式 G65 H03 P#i Q#j R#k
7 d) S- `8 s/ B1 j7 N例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
7 Z! \9 _ u6 R' N" T4)乘法 #i=#j×#k
! r: ]4 l8 ?3 C; X編程格式 G65 H04 P#i Q#j R#k4 W, z3 p L1 b2 [" l7 k) ?
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)$ c Z- K# c" G& {' V9 [
5)除法 #i=#j / #k) p' {$ `6 ?' E) C" ^
編程格式 G65 H05 P#i Q#j R#k1 t5 x. ^+ }8 j
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)3 `/ L' `- t& F$ {4 R, {, |, v
6)平方根 #i= 8 X9 C( X* K3 Y6 `3 v3 S: l) T
編程格式 G65 H21 P#i Q#j' N" |. P$ F+ b/ W! _& G! }
例 G65 H21 P#101 Q#102;(#101= )( y1 c, l2 x* Y- O+ j/ A
7)絕對值 #i=│#j│
. F& z4 P& y0 J; p- u+ X4 r+ w1 [1 y編程格式 G65 H22 P#i Q#j! [1 W' e3 B, f' d
例 G65 H22 P#101 Q#102;(#101=│#102│)
. K7 S6 W* C7 g( }8)復合平方根1 #i=
4 o" h- \" K4 S5 q- n9 s, \編程格式 G65 H27 P#i Q#j R#k
$ Z, z8 i1 s7 X2 ~7 [! _) _例 G65 H27 P#101 Q#102 R#103;( #101= ! x4 M# ]- g: ?7 x
9)復合平方根2 #i= ! m2 s4 O9 U/ s
編程格式 G65 H28 P#i Q#j R#k9 y9 C5 Y9 v: y$ e% E7 F- `
例 G65 H28 P#101 Q#102 R#103 8 D$ p3 L' e; b; H
" ^3 m0 E* T5 Y) D: e
1)邏輯或 #i=#j OR #k2 l: P# p0 \* z7 m
編程格式 G65 H11 P#i Q#j R#k
% f; Q* V6 P" n1 O7 h例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
- p0 i" z% F z) o- @
: W* ^: x# v' K+ ^2)邏輯與 #i=#j AND #k
. }9 c' C8 x+ R' v! o# I r. p編程格式 G65 H12 P#i Q#j R#k- m1 j& `: s( `4 \
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 7 Y" O3 _, S! F, s. e
- e+ P8 \- a2 R
9 {. Y1 ?8 _$ X' t
8 T/ y; v% o% F2 G% @
: \3 b3 ?9 @9 e a* I
(3)三角函數指令 6 Y8 M8 w: G R
) s5 s0 p+ Q4 h: @9 r1 M
2 X& ?; \5 P3 Y; J# [2 X7 h; P8 Q9 O" Z- w: d- |% b
1)正弦函數 #i=#j×SIN(#k) 4 o W4 g- v1 e. p! ~
+ B1 h4 _- V7 O. i. g編程格式 G65 H31 P#i Q#j R#k (單位:度) .. l. e: F/ w* C/ w' x+ k2 ^' `; q
( Y& `5 e9 Y/ C' g4 g( m例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))+ P( G- X# t% I& H
2)余弦函數 #i=#j×COS(#k)* S. Z g) W3 T& b6 D! R, C
編程格式 G65 H32 P#i Q#j R#k (單位:度)- Z# ^9 m$ e8 ?5 Y; ~# ]
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)). o% G5 W3 b% \( s. D
3)正切函數 #i=#j×TAN#k
+ o8 H+ ~- {9 w1 P( a編程格式 G65 H33 P#i Q#j R#k (單位:度)3 e9 E; {9 l3 {) j L5 D
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
8 Q" Z: ~5 f1 U6 d4)反正切 #i=ATAN(#j/#k)
# w ~% E- T7 t, s# |編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)
2 p0 \% F U" u' ~5 h/ c" X7 E8 Z例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
L$ ^( n5 {7 \- M5 F& J) K' X; K: { I7 {6 C! }+ L1 q4 |5 a2 c
- F+ b, m+ a& B" l2 x
' c2 w8 j; d) Y6 V) W: f& b! c(4)控制類指令
e4 V" d, o/ m9 v( _
; K3 y6 v6 N. h+ P6 u 5 k0 R! |3 P/ z; a
. W3 L2 t! a. v9 w" c1 B' m
編程格式 G65 H80 Pn (n為程序段號)
) r, \3 U% b3 E! J例 G65 H80 P120;(轉移到N120)5 H$ {" q C$ Z( l: V; z
2)條件轉移1 #j EQ #k(=)% J4 W7 }5 G* R9 k+ I4 D5 a9 m% L
編程格式 G65 H81 Pn Q#j R#k (n為程序段號)+ L q. Y2 ~# }# H' p5 l
例 G65 H81 P1000 Q#101 R#102" C1 h3 P' O! q7 K c) s }* m5 q# U
當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。
6 h/ `% X( Z2 J4 u' B. H) m. ^$ s3)條件轉移2 #j NE #k(≠)# x" V$ ^) \' |, e3 T3 l
編程格式 G65 H82 Pn Q#j R#k (n為程序段號)
# |" _% h$ L9 P/ `% F例 G65 H82 P1000 Q#101 R#102: ?/ O2 z6 Y& Y) W, C
當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
! {* P- v; `/ E# S4)條件轉移3 #j GT #k (> )% u: D6 I* g: K' V6 R. p7 q% E
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)* c- c- X! q6 X# Q/ r
例 G65 H83 P1000 Q#101 R#1024 @" k5 G# ?. x1 D& {/ u/ ?6 v
當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。
" J$ b( [7 N) o5)條件轉移4 #j LT #k(<)4 M* u2 u1 M0 L/ y8 i* q Y1 @
編程格式 G65 H84 Pn Q#j R#k (n為程序段號)% m$ f! M. I' v3 l" D/ \
例 G65 H84 P1000 Q#101 R#102 1 v$ s" v0 L D3 p7 x( w* s
當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。3 ~2 G# v6 ], u
6)條件轉移5 #j GE #k(≥)/ d8 x. y. W- h; h* ?8 ]
編程格式 G65 H85 Pn Q#j R#k (n為程序段號)
. }1 u1 J2 @2 ?1 u3 v: ]9 k( L例 G65 H85 P1000 Q#101 R#102
: p# Z4 {$ Y- P7 Z當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
: Y6 x) }9 S" ~" s I- A% W+ ]9 T7)條件轉移6 #j LE #k(≤)
% L2 L- y2 z& g& p; ~5 Y0 h編程格式 G65 H86 Pn Q#j Q#k (n為程序段號); ~0 F' B* ^' _
例 G65 H86 P1000 Q#101 R#1025 T5 i. e$ D0 x+ N9 D! |" j2 W
當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。' V t$ ?# ]! L1 m
3 M, S4 j8 E# @) e9 Q* E& i
4、使用注意8 @ ~* ?+ m4 l
為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;
$ A! @0 U1 R# K7 I+ b- C/ u(1)由G65規定的H碼不影響偏移量的任何選擇;
8 E* H8 U3 ~2 \7 h2 W3 }(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
! n: R! a: k% S* u2 i4 \(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。# f$ C6 F0 {3 f& f0 j; F$ @
(4)轉移目標序號可以是變量。
8 a/ B" h8 t! B# _' E$ f n* ~1 w/ K5 i, P- o& D5 X. I% s
5、用戶宏程序應用舉例 :
) A* q [% ]* |" ]" ]4 M
R0 }; N2 @2 w用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。
/ Y" y! Y: ]% s6 |$ i1 ?9 y6 n. W4 k" h m# I
使用以下保持型變量:
. c8 P2 e3 n/ Q2 |3 ]#502:半徑r;
8 p8 \6 N! T+ r/ u' }/ l0 D- l, \' |#503:起始角度α;
$ `3 [+ n8 @8 |3 z4 F2 t+ [#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;6 x" y- `' J! M7 G: o; T+ c$ ^- X
#505:孔底Z坐標值;
1 E( y% }, Q. F# w#506:R平面Z坐標值;3 y) C/ f. H* _% S. C# t
#507:F進給量。 1 z1 J4 \8 Z& O2 v* v3 D! `
使用以下變量進行操作運算:/ W- }7 n+ B) H. ]+ ], `, b6 g- }) c
#100:表示第i步鉆第i孔的記數器;$ N+ |; H0 a$ n" b
#101:記數器的最終值(為n 的絕對值); g. n3 }: ^1 S2 ^
#102:第i個孔的角度位置θi的值;
, U' p7 _5 U* b4 H/ J#103:第i個孔的X坐標值;' X6 H6 u% X% n( w& ^
#104:第i個孔的Y坐標值;( \+ o- J& w! L% f: ^6 Q: w
用用戶宏程序編制的鉆孔子程序如下: ; f3 r8 q7 L+ F% D2 \" E
O9010& C* t4 P. M; r: |+ Q( l b* z
N110 G65 H01 P#100 Q0 //#100 = 0
0 t+ s M. b2 \3 G$ _N120 G65 H22 P#101 Q#504 //#101 = │#504│
( u6 k, a o( h* b, S/ rN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
3 l% z0 S6 y- Q0 a9 |N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
; p+ U* `' M' E2 u$ t6 T% x& gN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n- {) o o h) l$ l5 a
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標8 N, v" e1 Y/ A
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標
: b# [1 V6 J% Z) sN180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)5 U9 D# A, X; N$ E2 G9 h# v8 n
N190 G00 Z#506 //快速進到R平面2 [) p: H n* p$ N# J
N200 G01 Z#505 F#507 //加工當前孔$ {7 b6 B# s. K' H* o
N210 G00 Z#506 //快速退到R平面4 n- k6 Y4 J) W4 F& d% `; Y
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數
7 ~# q3 k2 w& i. x! a: p7 |N230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段; H9 [7 Q7 B. p5 d% o! o
N240 M99 //子程序結束 2 Q" [: {+ D* W$ P# u5 H/ ^
1 i9 f0 ]& C% V5 k7 s+ S; `2 p
: w) R$ I) \4 P9 d' l
1 i& e" k+ Z k% J0 f1 `9 T! U調用上述子程序的主程序如下: ) l( @7 J) T* @& A7 Z
O0010
5 k4 [- D2 H5 kN10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系
6 {" t, v4 L( b/ ]; K0 I/ nN20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔# ?1 Y( |" a% A. I9 z
N30 Z20 //抬刀
, h8 A) Y) a& y4 x0 tN40 G00 G90 X0 Y0 //返回加工坐標系零點
7 g" Z7 ~+ T4 m/ i& Y& K) UN50 M30 程序結束" P) y% W& [4 r1 L0 h
設置G54:X=-400,Y=-100,Z=-50。3 K0 |3 ~9 C- b/ b( \- T
變量#500~#507可在程序中賦值,也可由MDI方式設定。 & u4 n) V, K' X* V4 Q$ q$ ?
8 U3 u9 b/ \; K/ M0 B2 \B類宏G65
+ I" b0 [- d5 p3 ^9 D4 Q5 c. e1 D
0 N' N( k( D4 t4 Q% \6 B7 M簡單調用(G65)
: V; r, X) `( A) t9 Q% G 功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。0 m4 U( A3 C9 ]
格式 G65 Pp Ll <自變量表>;
! g. I; J" l; f Q" A5 O 其中: p 要調用的程序號4 T9 w& X! l1 e
l 重復的次數(缺省值為1,取值范圍1~9999)
8 B P; g# K, t3 ~. P! I' B 自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應
) D" C' K# j% N 的局部變量。
" I2 o& Q! T4 q: H% o5 p- I3 |* c9 w ~1 e
自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:
# k7 N8 j( d1 d5 u7 z0 E& N! O/ ]' Y
地址 變量號 地址 變量號 地址 變量號
; u6 m3 L. ] h* }. [( VA #1 E #8 T #20
0 j' T" g9 t3 a3 {0 RB #2 F #9 U #21& ~7 ~) K4 j5 ^* X8 J
C #3 H #11 V #22
0 B g3 [6 l, ?4 P( u mI #4 M #13 W #232 b! _7 t% x" Q4 o% V
J #5 Q #17 X #24
6 }! B- r6 {: P: s9 D8 F$ R+ B6 }K #6 R #18 Y #252 L# j1 q8 l3 K* l1 t; E$ ^
D #7 S #19 Z #266 L' H' n- Y1 a0 x0 k
☆ 地址G、L、N、O、P不能當作自變量使用。6 O% o9 h1 o; U2 @# l
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。
3 n! s. W6 I- U5 z
& O1 A/ ^; L! p! l 第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使
0 H# Q! w/ J" l. G0 H4 |用的字母自動確定:
4 ~3 l* v* k1 j: u; D! k- ]地址 變量號 地址 變量號 地址 變量號7 ^9 R- Z* N: s2 v! h( ?) p
A #1 K3 #12 J7 #23) L/ J6 l- A+ t# O5 ^+ x
B #2 I4 #13 K7 #24
* g$ l: r2 {" G( g9 eC #3 J4 #14 I8 #25& e3 \ [" \; L! Z8 `+ l x2 ~
I1 #4 K4 #15 J8 #26
6 v# N+ P! w# u* l, Q! @* xJ1 #5 I5 #16 K8 #273 E: [6 u. U. v; ^* P7 ?
K1 #6 J5 #17 I9 #28
# K g/ B$ i6 f0 q( O* xI2 #7 K5 #18 J9 #29' n* t: R6 W* f2 ?$ |; a
J2 #8 I6 #19 K9 #30
' E# f J& \% j% L# K9 RK2 #9 J6 #20 I10 #31
2 m g, g/ V2 d6 U) ^2 zI3 #10 K6 #21 J10 #325 k2 }9 w. o& U1 w! h& B- }
J3 #11 I7 #22 K10 #33
9 G [& x: i( Z. c, u9 Z' C8 F8 H☆ 在實際的程序中,I、J、K的下標不用寫出來。
2 o \ R$ K( P4 A注意:& s" z5 X4 }1 H' ?7 q+ b% T* f
☆ 在自變量之前一定要指定G65。
2 p" n" V* g* H5 O s☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。
, x7 R8 v- R! F& C* n☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。
: e6 A. l: C0 }! V* n& ]☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。
$ M/ R1 T" r0 o! T9 Y0 Z G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環
' p7 H- }$ ^& V" s: Z$ n之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|