數控車床的特點及功能
4 S& S- h1 f/ W6 l" ?0 d數控車床的工藝裝備* y3 \' N- h- Z: e- C7 B
零件圖紙的數據處理
5 h% X, u" z/ [! v7 t9 |2 H數控車削加工工藝處理
w1 S+ Z, E3 A) j( I6 P5 a( B數控車削加工程序編制 9 }8 z6 | I# h$ K$ U
數控車床的分類與結構特點0 n$ r5 G- h+ b% y$ ~
數控機床的分類) j: X* |5 [- }9 _! o
按車床主軸位置分類: G" `) d% d* h; d
臥式數控車床
* o: O8 T+ R7 \- h 立式數控車床 , X8 [* [- {; j5 o6 J* e
對刀具的要求' C. }, N- Z+ f h3 p! j
數控車床能兼作粗、精加工。為使粗加工能以較大切削深度、較大進給速度地加工,要求粗車刀具強度高、耐用度好。精車首先是保證加工精度,所以要求刀具的精度高、耐用度好。為減少換刀時間和方便對刀,應可能多地采用機夾刀。2 x, F% r* [ \5 a
數控車床還要求刀片耐用度的一致性好,以便于使用刀具壽命管理功能。在使用刀具壽命管理時,刀片耐用度的設定原則是以該批刀片中耐用度最低的刀片作為依據的。在這種情況下,刀片耐用度的一致性甚至比其平均壽命更重要。9 M/ J1 I# V$ w+ D, `
刀片可分為正型和負型兩種基本類型。正型刀片:對于內輪廓加工,小型機床加工,工藝系統剛性較差和工件結構形狀較復雜應優先選擇正型刀片。負型刀片:對于外圓加工,金屬切除率高和加工條件較差時應優先選擇負型刀片 ( S2 R* P1 P+ l; h8 x; g
切削用量的確定# `% f2 T" @" [1 C4 g
切削用量包括主軸轉速(切削速度)、背吃刀量和進給量。對于不同的加工方法,需要選擇不同的切削用量,并應編入程序單內。
% ] e z% q8 k. s8 m 合理選擇切削用量的原則是,粗加工時,一般以提高生產率為主,但也應考慮經濟性和加工成本,通常選擇較大的背吃刀量和進給量,采用較低的切削速度;半精加工和精加工時,應在保證加工質量的前提下,兼顧切削效率、經濟性和加工成本,通常選擇較小的背吃刀量和進給量,并選用切削性能高的刀具材料和合理的幾何參數,以盡可能提高切削速度。具體數值應根據機床說明書、切削用量手冊并結合經驗而定。
. \) _: F1 i* f( y(1) 背吃刀量阿ap (mm),亦稱切削深度。主要根據機床、夾具、刀具和工件的剛度來決定。在剛度允許的情況下,應以最少的進給次數切除加工余量,最好一次切除余量,以便提高生產效率。精加工時,則應著重考慮如何保證加工質量,并在此基礎上盡量提高生產率。在數控機床上,精加工余量可小于普通機床,一般取(0.2~0.5) mm
0 [6 A5 ~6 r+ t6 M# g% J式中:
8 b4 G* @5 m2 J% u. r9 ] E vc————切削速度,由刀具的耐用度決定;
* _3 U% j) T2 F4 [ D——工件或刀具直徑(mm)。
% G1 d# l1 v3 ^/ e# F 主軸轉速n要根據計算值在機床說明書中選取標準值,并填入程序單中。+ e, F( t3 f/ y( Z7 g
(3) 進給量(進給速度)f(mm/min或mm/r)是數控機床切削用量中的重要參數,主要根據零件的加工精度和表面粗糙度要求以及刀具、工件材料性質選取。最大進給量則受機床剛度和進給系統的性能限制并與脈沖當量有關。/ J* t$ g; s7 P: Q w& J; b
當加工精度、表面粗糙度要求高時,進給速度(進給量)應選小些,一般在20~50 mm/min范圍內選取。粗加工時,為縮短切削時間,一般進給量就取得大些。工件材料較軟時,可選用較大的進給量;反之,應選較小的進給量。
2 H7 Y) v5 z/ u1 `3 B) s* T7 V. L3 P 車、銑、鉆等加工方式下的切削用量可參考下表選取。1 E4 p+ `- T- a \
加工坐標系* ?- N# b G4 `9 N8 a
直徑編程方式 ?4 U% r7 o- z) n, `" r' N
進刀和退刀方式
2 u% x5 H7 x3 J2 B6 X" E數控車削加工包括內外圓柱面的車削加工、端面車削加工、鉆孔加工、螺紋加工、復雜外形輪廓回轉面的車削加工等,在分析了數控車床工藝裝備和數控車床編程特點的基礎上,下面將結合FANUC-0T數控系統討論數控車床基本編程方法。 8 _, @( \/ G: d% q5 X/ i8 q
F功能指令用于控制切削進給量。在程序中,有兩種使用方法
8 t2 T I! P- d 每轉進給量
' Q% S- A t$ f 編程格式 G95 F~ 7 D' a, n2 j6 d" g
F后面的數字表示的是主軸每轉進給量,單位為mm/r
2 ^ F- `) G9 z4 v4 R$ D; W 例:G95 F0.2 表示進給量為0.2 mm/r
V( o% o( a E
- k a. a. ~, N5 d' ~ 每分鐘進給量2 Z- L+ P/ o3 ~: R8 Z: ^8 G
編程格式G94 F~# b' j% r4 ?0 f+ ^, ^
F后面的數字表示的是每分鐘進給量,單位為mm/min; ?; }5 A! D) \1 d+ L
例:G94 F100 表示進給量S功能指令用于控制主軸轉速 ! V' n& _' }# i6 S" e6 d+ v
S后面的數字表示主軸轉速,單位為r/min。在具有恒線速功能的機床上,S功能指令還有如下作用: ]/ K4 W! l) y" |: Z2 t, q
最高轉速限制
# ?% E) M2 e3 T) S! [ 編程格式 G50 S~
+ |3 ~: u' K. l" M4 F7 a S后面的數字表示的是最高轉速:r/min0 Q' `- y( t4 a% m" X( Q
例:G50 S3000 表示最高轉速限制為3000r/min
' o# z* \$ H' t' w! V: M1 h 恒線速控制
; @* P0 ~+ Z( W& W 編程格式 G96 S~4 b& G! W8 f4 s, N+ h+ X
S后面的數字表示的是恒定的線速度:m/min。
& m: Z* Q, G' y9 H 例:G96 S150 表示切削線速度控制在150 m/min。
" ?- I- ~* k( {4 e 恒線速取消
$ r& R% z" Z- ?: x+ w 編程格式 G97 S~
' c% e8 @4 E% g! C* }; l1 I S后面的數字表示恒線速度控制取消后的主軸轉速,如S未指定,將保留G96的最終值。
6 C1 B0 |/ ^; v6 v; m" { N 例:G97 S3000 表示恒線速控制取消后主軸轉速3000 r/min為100mm/min
8 N8 ?4 ^' R, t( q; u# o2 m T功能指令用于選擇加工所用刀具。
% G* }" m9 Y6 \ 編程格式 T~
" F: U F) T# r y& [ T后面通常有兩位數表示所選擇的刀具號碼。但也有T后面用四位數字,前兩位是刀具號,后兩位是刀具長度補償號,又是刀尖圓弧半徑補償號。 例:T0303+ N5 x" i$ F/ S0 q
表示選用3號刀及3號刀具長度補償值和刀尖圓弧半徑輔助功能字由M地址符及隨后的兩位數字組成,所以也稱為M功能或M指令。它用來指令數控機床的輔助動作及其狀態。
9 Z9 Q) h; b B 常用的M功能有:3 m% t# K4 c7 ~+ T( E# q( ]; i
M00: 程序暫停,可用NC啟動命令(CYCLE START)使 程序繼續運行; M01:計劃暫停,與M00作用相似,但M01可以用機床“任選停止按鈕”選擇是否有效; M03:主軸順時針旋轉; M04:主軸逆時針旋轉; M05:主軸停止;3 u5 L1 r# G! k, R K7 T' q
M06:換刀 M08:冷卻液開; M09:冷卻液關; M30:程序停止,程序復位到起始位置。 # R# U3 N5 O* f2 \) F' o& x$ g, o4 W+ z
補償值。T0300 表示取消刀具補償。
n. c T7 i L! A) b Q- F
6 g$ w0 J) w( P+ i編程格式 G50 X~ Z~ 式中X、Z的值是起刀點相對于加工原點的位置,G50使用方法與G92類似。: J- q4 ]& t/ n6 H0 X8 T/ b
例:如圖所示設置加工坐標的程序段如下:G50 X128.7 Z375.1
' w4 T: t; i& k. b3 ^% rG00指令命令機床以最快速度運動到下一個目標位置,運動過程中有加速和減速,該指令對運動軌跡沒有要求。
0 L" C( h, Y0 l( [ 其指令格式:! r4 n1 k# n: G ?0 u6 {$ i
G00 X(U)____ Z(W)____
7 E! m4 M6 m- S+ Q, J 因為X軸和Z軸的進給速率不同,因此機床執行快速運動指令時兩軸的合成運動軌跡不一定是直線,因此在使用G00指令時,一定要注意避免刀具和工件及夾具發生碰撞。& o0 M& q7 h! Z
如所示的定位指令如下:) {' I0 \0 }6 K9 |1 y
G50 X200.0 Z263.0
, ^3 t0 h1 P/ k5 p+ j G00 X40.0 Z212.0
, I' l# g- L$ \. ^6 { 或G00 U-160.0 W-51.0 G00指令命令機床以最快速度運動到下一個目標位置,運動過程中有加速和減速,該指令對運動軌跡沒有要求。: B, W G$ l7 F y! d: p
其指令格式:
2 y2 V& `0 m1 H" Z7 C* u! w G00 X(U)____ Z(W)____ 3 y2 \1 K4 m1 y" [
因為X軸和Z軸的進給速率不同,因此機床執行快速運動指令時兩軸的合成運動軌跡不一定是直線,因此在使用G00指令時,一定要注意避免刀具和工件及夾具發生碰撞。& K$ g/ C' V7 }! {* x1 Q/ N1 n
如所示的定位指令如下:
$ Q |! o* Z" c: B! p& [7 ` G50 X200.0 Z263.0
; r$ d$ d7 s) I G00 X40.0 Z212.0
& p6 u- k8 D8 M; I7 |1 t5 P6 n1 ~: T 或G00 U-160.0 W-51.0 G01指令命令機床刀具以一定的進給速度從當前所在位置沿直線移動到指令給出的目標位置。; b' @& v! _6 t ]/ L: F
指令格式:5 _1 @/ D# [2 C' @; q W
G01 X(U)__Z(W)__F ;- J3 L' d( i/ U& {! _& q$ _& ^
使用G01指令時可以采用絕對坐標編程,也可采用相對坐標編程。當采用絕對坐編程時,數控系統在接受G01指令后,刀具將移至坐標值為X、Z的點上;當采用相對坐編程時,刀具移至距當前點距離為U、W值的點上。如圖所示的直線運動指令如下:
1 o# x. Y: l. @ s1 w- R( z G01 X40.0 Z20. F0.2;
C# G) N$ {+ c% D6 X" h, C 絕對值指令編程9 V& }1 K5 j+ X* S! i8 s; O& `
G01 U20.0 W-25.9 F0.2;( G" A; E" r2 g6 y4 f& Y3 {
相對值指令編程% ]! v" j+ c% ~6 P, X
圓弧插補指令命令刀具在指定平面內按給定的F進給速度作圓弧插補運動,用于加工圓弧輪廓。圓弧插補命令分為順時針圓弧插補指令G02和逆時針圓弧插補指令G03兩種。其指令格式如下:5 R0 N! A5 H; x( z4 K% w
順時針圓弧插補的指令格式:' a" \$ U& W6 P6 u
G02 X(U)____Z(W)____I____K____F____;' t: F$ u% {. ~8 @6 A5 P
G02 X(U)____Z(W)___R___ F____;
. _5 v: j1 s' E- u1 r 逆時針圓弧插補的指令格式:: H/ L5 _, I% Y9 \& R$ z1 K! D
G03 X(U)____Z(W)____ I____K____F____;;: @8 X4 ^ a+ g5 {3 V
G03 X(U)____Z(W)___R___ F____;
, u' x, n' o, ]2 C4 v4 ^ 使用圓弧插補指令,可以用絕對坐標編程,也可以用相對坐標編程。絕對坐標編程時,X、Z是圓弧終點坐標值;增量編程時,U、W是終點相對始點的距離。圓心位置的指定可以用R,也可以用I、K,R為圓弧半徑值;I、K為圓心在X軸和Z軸上相對于圓弧起點的坐標增量; F為沿圓弧切線方向的進給率或進給速度。0 ^$ ~+ S: J# j7 p4 @* i5 m# T
規定圓心角α≤180°時,用“+R”表示;α> 180°時,用“-R”。0 m1 ^7 F/ j+ d& F
注意:R編程只適于非整圓的圓弧插補的情況,不適于整圓加工 3 G, V' J8 q# C2 c" D0 U" Z4 `
如圖所示的圓弧從起點到終點為順時針方向,其走刀指令可編寫如下:! m* g: m9 j3 J* x& K; D( S
G02 X50.0 Z30.0 I25.0 F0.3;! p$ I. \/ a# M0 j& V& X: q2 w$ }3 P
絕對坐標,直徑編程,切削進給率0.3mm/r! v, d7 @9 b" C) e' i: E" Q" b
G02 U20.0 W-20.0 I25.0 F0.3;0 `! O& @$ m$ J* m p
相對坐標,直徑編程,切削進給率0.3mm/r
$ w: x9 e$ U) W9 H' l! } G02 X 50. 0 Z30.0 R25.0 F0.3;
6 ~. F8 ^, Z7 @7 x 絕對坐標,直徑編程,切削進給率0.3mm/r
# V' {) @* F% G& G/ I5 I0 K1 O9 F4 R! Q G02 U20.0 W-20.0 R25.0 F0.3;
% `) v: `+ n) K6 _ 相對坐標,直徑編程,切削進給率0.3mm/r G04指令用于暫停進給。) P6 R" @9 M& u1 @9 X1 i% ~
其指令格式是:
7 @8 d m% M; C7 a# ? G04 P____或G04 X(U)____$ a5 k: v6 ]& s
暫停時間的長短可以通過地址X(U)或P來指定。其中P后面的數字為整數,單位是ms;X(U)后面的數字為帶小數點的數,單位為s。有些機床,X(U)后面的數字表示刀具或工件空轉的圈數。$ a7 Z9 q) T. u+ f4 T; g. n
該指令可以使刀具作短時間的無進給光整加工,在車槽、鉆鏜孔時使用,也可用于拐角軌跡控制。例如,在車削環槽時,若進給結束立即退刀,其環槽外形為螺旋面,用暫停指令G04可以使工件空轉幾秒鐘,即能將環形槽外形光整圓,例如欲空轉2.5s時其程序段為:' @. G2 b) P6 C6 e9 h8 W
G04 X2.5或G04 U2.5或G04 P2500;
5 | m \/ T/ o) KG20表示英制輸入
& j8 w5 E6 r" W- A3 e4 C G21表示米制輸入/ `# T) w3 |4 n4 h4 t: R
G20和G21是兩個可以互相取代的代碼+ h" c; D4 o- _. Y, _
機床出廠前一般設定為G21狀態,機床的各項參數均
; Y4 V4 `4 D6 |2 \( c" ]5 s( u以米制單位設定。
8 L) E; Z( B. v 如果一個程序開始用G20指令,則表示程序中相關的# [, T0 S5 z( G( c5 x8 I
一些數據均為英制(單位為英寸)。) q0 ]7 c/ d/ r/ G5 Q# L
如果程序用G21指令,則表示程序中相關的一些數據
7 z0 _* z8 r' d u! u均為米制(單位為mm)。: F6 O K. ?6 r0 O
在一個程序內,不能同時使用G20或G21指令,且必
4 l+ F0 K F+ m) W須在坐標系確定前指定。
: G7 k7 V. N6 J3 i G20或G21指令斷電前后一致,即停電前使用G20或( X$ \7 c1 z) C) P
G21指令,在下次后仍有效,除非重新設定。 . @4 b6 @' u% p4 H! T$ J
在數控車削中有兩種切削進給模式設置方法,即進給率(每轉進給模式)和進給速度(每分鐘進給模式)。
\# C; e* P% k7 p1 ~ 2.6.1 刀具的幾何補償和磨損補償
: [: j; }+ H' [2 t9 W 如圖所示,刀具幾何補償是補償刀具形狀和刀具安裝位置與編程時理想刀具或基準刀具的偏移的;刀具磨損補償則是用于補償當刀具使用磨損后刀具頭部與原始尺寸的誤差的。這些補償數據通常是通過對刀后采集到的,而且必須將這些數據準確地儲存到刀具數據庫中,然后通過程序中的刀補代碼來提取并執行。
. g* {! f- X: w6 _% r刀補指令用T代碼表示。常用T代碼格式為:T xx xx,即T后可跟4位數,其中前2位表示刀具號,后兩位表示刀具補償號。當補償號為0或00時,表示不進行補償或取消刀具補償。有些系統 T代碼格式為: T xx ,即T后可跟2位數,2位數既表示刀具號,同時表示刀具補償號。
: s+ b8 ?1 a2 E# E& q* j 若設定刀具幾何補償和磨損補償同時有效時,刀補量是兩者的矢量和。若使用基準刀具,則其幾何補償位置補償為零,刀補只有磨損補償。在圖示按基準刀尖編程的情況下,若還沒有磨損補償時,則只有幾何位置補償,?X=?Xj、?Z=?Zj;批量加工過程中出現刀具磨損后,則:?X=?Xj+?Xm、?Z=?Zj+?Zm;而當以刀架中心作參照點編程時,每把刀具的幾何補償便是其刀尖相對于刀架中心的偏置量。因而,第一把車刀:?X=?X1、?Z=?Z1;第二把車刀:?X=?X2、?Z=?Z3。
5 q8 q. C8 I0 Q M數控系統對刀具的補償或取消刀補都是通過拖板的移動來實現的。對帶自動換刀的車床而言,執行T指令時,將先讓刀架轉位,按前2位數字指定的刀具號選擇好刀具后,再按后2位數字對應的刀補地址中刀具位置補償值的大小來調整刀架拖板位置,實施刀具幾何位置補償和磨損補償。T代碼指令可單獨作一行書寫,也可跟在移動程序指令的后部。當一個程序行中,同時含有刀補指令和刀具移動指令時,是先執行T代碼指令,后執行刀具移動指令。. w: l) h) P0 H$ c
刀尖半徑補償
9 q1 k5 M) N5 v% G! m& ? 雖然采用尖角車刀對加工及編程都很方便,但由于刀頭越尖就越容易磨損,并且當刀具太尖而進給速度又較大時,可明顯地感覺出一般的輪廓車削將產生車螺紋的效果,即使減小進給速度,也會影響到加工表面的粗糙度。為此,精車時常將車刀刀尖磨成圓弧過渡刃。采用這樣的車刀車內、外圓和端面時,刀尖圓弧不影響加工尺寸和形狀,但轉角處的尖角肯定是無法車出的,并且在切削錐面或圓弧面時,會造成過切或少切,因此,有必要對此采用刀尖半徑補償來消除誤差。' a, N, Z q0 k M, X$ W2 y1 g
如圖所示,有刀尖存在時,對刀尖按輪廓線編程加工,即可以得到理想輪廓,不需要考慮刀補;而用圓弧頭車刀時,若還按假想刀尖編程加工而又不考慮刀補,則實際切削得到的輪廓將產生誤差,只有考慮刀補(人工考慮刀補量進行編程,即以偏移理想輪廓一個刀具半徑的軌跡線計算)編程加工后,方可保證切削得到理想輪廓線。當然也可以按照輪廓軌跡編程,再在程序中適當位置加上刀補代碼,讓機床自動進行刀補。
& ~1 N3 A6 t5 A! G- a4 @, @利用機床自動進行刀尖半徑補償時,需要使用G40、G41、G42指令。
- b' M5 c4 P3 }8 t$ G/ J$ _ 當系統執行到含T代碼的程序指令時,僅僅是從中取得了刀具補償的寄存器地址號(其中包括刀具幾何位置補償和刀具半徑大小),此時并不會開始實施刀尖半徑補償。只有在程序中遇到G41、G42、G40指令時,才開始從刀庫中提取數據并實施相應的刀徑補償。
6 y7 ?1 O9 H v" a1 G% ]7 Q% D! ^ G41——刀尖半徑左補償。沿著進給方向看,刀尖位置應在編程軌跡的左邊。; R) p% Y* t# ^9 L+ A
G42——刀尖半徑右補償。沿著進給方向看,刀尖位置應在編程軌跡的右邊,如圖2-41所示。
, y9 k. Y, m# R9 n& P G40——取消刀尖半徑補償。刀尖運動軌跡與編程軌跡一致。
0 T: ]# M7 Q# z刀位點與刀尖方位
; a4 l# y" e# b( f' w* _' A$ E 刀位點即是刀具上用于作為編程相對基準的參照點。當執行沒有刀補的程序時,刀位點正好走在編程軌跡上;而有刀補時,刀位點將可能行走在偏離于編程軌跡的位置上。按照試切對刀的情況看,對刀所獲得的坐標數據就是刀尖的坐標,采用對刀儀,也基本上是按刀尖對刀的。而事實上,對于圓弧頭車刀而言,這個刀尖是不存在的,是一個假想的刀尖點(如圖 (a)中A點)。當然,也可通過測出刀尖圓弧半徑值來推測出刀尖圓弧中心點(圖 (a) 中B點)。編程時,通常就是用這樣兩個參照點來作為刀位點的,刀尖半徑補償也就是圍繞這兩種情況進行的。
) j( F4 X: a' E. {事實上,當采用A點編程補償方式時,系統內部只對錐面及圓弧面計算刀補,而對車端面與車外圓則不進行刀補。當采用B點編程刀補方式時,則無論什么樣的輪廓線都需要進行刀補運算。當然,對有刀補功能的車床來說,無論用哪種補償方式,我們都只需要按零件最終得到的輪廓線進行編程,至于怎么具體地實施刀補,則是數控系統內部要做的事情。但對于沒有刀補功能的車床來說,考慮如何刀補則是編程者必須要考慮的問題,只有正確的刀補編程才能得到準確的輪廓軌跡。
% ~& P5 y% a2 [" ~雖然說只要采用刀徑補償,就可加工出準確的軌跡尺寸形狀,但若使用了不合適的刀具,如左偏刀換成右偏刀,那么采用同樣的刀補算法還能保證加工準確嗎?肯定不行。為此,就引出了刀尖方位的概念。圖 (b)所示為按假想刀尖方位以數字代碼對應的各種刀具裝夾放置的情況;如果以刀尖圓弧中心作為刀位點進行編程,則應選用0或9作為刀尖方位號,其他號都是以假想刀尖編程時采用的。只有在刀具數據庫內按刀具實際放置情況設置相應的刀尖方位代碼,才能保證對它進行正確的刀補;否則,將會出現不合要求的過切和少切現象。5 c, ^" e+ U# m# V4 W) S/ r
刀徑補償的引入(初次加載)" s2 V% G# t9 E5 C" p. ]# z
由沒有設定刀徑補償的運動軌跡到首次執行含G41、G42的程序段,即是刀尖半徑補償的引入過程。見圖2-43,編程時書寫格式為:+ X! o9 @+ s9 H! B- N9 O% u- {1 d
...
7 T0 ?7 M% ?0 W: P. f9 UG40G00(G01) ... ;先取消以前可能加載的刀徑補償(如果) k" o$ A- P' W n7 p/ f5 p4 U( e
以前未用過G41或G42,則可以不寫這一行), C5 s) I" k; M: o
G41(G42) G01(G00) ...Dxx; 在要引入刀補的含坐標移( x' r- r8 x, |2 N
動的程序行前加上G41或G42 G( F4 j5 Z0 c& N
刀徑補償的取消(卸載). @' o" B! [. A2 K+ F
執行過刀徑補償G41或G42的指令后,刀補將持續對每一編程軌跡有效;若要取消刀補,則需要在某一編程軌跡的程序行前加上G40指令,或單獨將G40作一程序行書寫。& ?. ~3 x2 h) E. E, U4 z" t
注意:
7 s0 X' s% A& r. k1 t. ~ (1) 刀徑補償的引入和卸載不應在G02、G03圓弧軌跡程序行上實施。8 X: q+ q/ Q) Y" G9 R
(2) 刀徑補償引入和卸載時,刀具位置的變化是一個漸變的過程。
" ^( e) ^" t0 V2 Q (3) 當輸入刀補數據時給的是負值,則G41、G42互相轉化。0 w% g: d' [. u m. I7 A
(4) G41、G42指令不要重復規定,否則會產生一種特殊的補償。
3 b' [8 E0 x$ S c X2 e. u/ ~/ ^
, ^( {. D, D) J3 C9 t |