編程實際案例
『壹』 數控車床編程實例詳解
一、數控車編程特點
(1)可以採用絕對值編程(用X、Z表示)、增量值編程(用U、W表示)或者二者混合編程。
(2)直徑方向(X方向)系統默認為直徑編程,也可以採用半徑編程,但必須更改系統設定。
(3)X向的脈沖當量應取Z向的一半。
(4)採用固定循環,簡化編程。
(5)編程時,常認為車刀刀尖是一個點,而實際上為圓弧,因此,當編制加工程序時,需要考慮對刀具進行半徑補償。
『貳』 單片機c語言編程100個實例
51單片機C語言編程實例 基礎知識:51單片機編程基礎 單片機的外部結構: 1. DIP40雙列直插; 2. P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平) 3. 電源VCC(PIN40)和地線GND(PIN20); 4. 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位) 5. 內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍) 6. 程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 單片機內部I/O部件:(所為學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務) 1. 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2. 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一個串列通信介面;(SCON,SBUF) 4. 一個中斷控制器;(IE,IP) 針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。 C語言編程基礎: 1. 十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。 2. 如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。 3. ++var表示對變數var先增一;var—表示對變數後減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。 6. While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;} 在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P1.3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。 在某引腳輸出低電平的編程方法:(比如P2.7引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2.7 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 在某引腳輸出方波編程方法:(比如P3.1引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P3.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 5. { 6. P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC 7. P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND 8. } //由於一直為真,所以不斷輸出高、低、高、低……,從而形成方波 9. } 將某引腳的輸入電平取反後,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P0.4和P1.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_1 = 1; //初始化。P1.1作為輸入,必須輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { 7. if( P1_1 == 1 ) //讀取P1.1,就是認為P1.1為輸入,如果P1.1輸入高電平VCC 8. { P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 2 51單片機C語言編程實例 9. else //否則P1.1輸入為低電平GND 10. //{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 11. { P0_4 = 1; } //給P0_4賦值1,引腳P0.4就能輸出高電平VCC 12. } //由於一直為真,所以不斷根據P1.1的輸入情況,改變P0.4的輸出電平 13. } 將某埠8個引腳輸入電平,低四位取反後,從另一個埠8個引腳輸出:( 比如 P2 = NOT( P3 ) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2和P3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P3 = 0xff; //初始化。P3作為輸入,必須輸出高電平,同時給P3口的8個引腳輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { //取反的方法是異或1,而不取反的方法則是異或0 7. P2 = P3^0x0f //讀取P3,就是認為P3為輸入,低四位異或者1,即取反,然後輸出 8. } //由於一直為真,所以不斷將P3取反輸出到P2 9. } 注意:一個位元組的8位D7、D6至D0,分別輸出到P3.7、P3.6至P3.0,比如P3=0x0f,則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個埠P2,即是將P2.7、P2.6至P2.0,讀入到一個位元組的8位D7、D6至D0。 第一節:單數碼管按鍵顯示 單片機最小系統的硬體原理接線圖: 1. 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF 2. 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF 3. 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理 4. 接配置:EA(PIN31)。說明原因。 發光二極的控制:單片機I/O輸出 將一發光二極體LED的正極(陽極)接P1.1,LED的負極(陰極)接地GND。只要P1.1輸出高電平VCC,LED就正向導通(導通時LED上的壓降大於1V),有電流流過LED,至發LED發亮。實際上由於P1.1高電平輸出電阻為10K,起到輸出限流的作用,所以流過LED的電流小於(5V-1V)/10K = 0.4mA。只要P1.1輸出低電平GND,實際小於0.3V,LED就不能導通,結果LED不亮。 開關雙鍵的輸入:輸入先輸出高 一個按鍵KEY_ON接在P1.6與GND之間,另一個按鍵KEY_OFF接P1.7與GND之間,按KEY_ON後LED亮,按KEY_OFF後LED滅。同時按下LED半亮,LED保持後松開鍵的狀態,即ON亮OFF滅。 代碼 1. #include <at89x52.h> 2. #define LED P1^1 //用符號LED代替P1_1 3. #define KEY_ON P1^6 //用符號KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符號KEY_OFF代替P1_7 5. void main( void ) //單片機復位後的執行入口,void表示空,無輸入參數,無返回值 6. { 7. KEY_ON = 1; //作為輸入,首先輸出高,接下KEY_ON,P1.6則接地為0,否則輸入為1 8. KEY_OFF = 1; //作為輸入,首先輸出高,接下KEY_OFF,P1.7則接地為0,否則輸入為1 9. While( 1 ) //永遠為真,所以永遠循環執行如下括弧內所有語句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1輸出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1輸出低,LED滅 13. } //松開鍵後,都不給LED賦值,所以LED保持最後按鍵狀態。 14. //同時按下時,LED不斷亮滅,各佔一半時間,交替頻率很快,由於人眼慣性,看上去為半亮態 15. } 數碼管的接法和驅動原理 一支七段數碼管實際由8個發光二極體構成,其中7個組形構成數字8的七段筆畫,所以稱為七段數碼管,而餘下的1個發光二極體作為小數點。作為習慣,分別給8個發光二極體標上記號:a,b,c,d,e,f,g,h。對應8的頂上一畫,按順時針方向排,中間一畫為g,小數點為h。 我們通常又將各二極與一個位元組的8位對應,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應8個發光二極體正好與單片機一個埠Pn的8個引腳連接,這樣單片機就可以通過引腳輸出高低電平控制8個發光二極的亮與滅,從而顯示各種數字和符號;對應位元組,引腳接法為:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果將8個發光二極體的負極(陰極)內接在一起,作為數碼管的一個引腳,這種數碼管則被稱為共陰數碼管,共同的引腳則稱為共陰極,8個正極則為段極。否則,如果是將正極(陽極)內接在一起引出的,則稱為共陽數碼管,共同的引腳則稱為共陽極,8個負極則為段極。 以單支共陰數碼管為例,可將段極接到某埠Pn,共陰極接GND,則可編寫出對應十六進制碼的七段碼表位元組數據
『叄』 g71編程實例及解釋是什麼
g71編程實例及解釋是如下:
一、實例:
輸入:G71U-W-R;G71P-Q-U-W-F。
輸入:G71U-W-R;G71P-Q-U-W-F。
二、解釋:
由於數控車G71這些零件的徑向尺寸,無論是測量尺寸還是圖紙尺寸,都是以直徑值來表示的,所以數控車床採用直徑編程方式,即規定用絕對值編程時,X為直徑值,用相對值編程時,則以刀具徑向實際位移量的二倍值為編程值。
數控車床編程基礎。
1、坐標系、程序的基本知識G代碼,M功能。
2、G00快速定位G01,直線插補。
3、G90單一外圓車削循環。
4、G94單一端面車削循環。
5、宇龍模擬軟體的使用。
6、G92螺紋車削循環。
7、G71內外徑復合循環及練習。
『肆』 數控車床編程實例帶圖的
G99(每轉進給)
G0 X200 Z100(快速移動到安全位)
T0101(換1號外圓刀,執行1號刀補)
M03 S500(開啟主軸正轉,速度500R/MIN)
G0 X112 Z2(快速接近工件毛坯)
G71 U3 R0.5 F0.2(G71軸向精車循環加工,U3每次吃刀3MM單邊,退刀0.5MM,速度0.2MM/R)
G71 P1 Q2 U0 W0(P1程序開始階段,Q2程序結束階段,U0——X軸不留精加工餘量,W0——Z軸不留精加工餘量)
N1 G0 X30(循環開始以後的第一階段)
G1 Z-50
X90
Z-70
X110
N2 Z-140(循環結束的最後一階段)
G0 X200 Z100(快速移動至安全換刀位)
T0202(換2號刀螺牙刀,執行2號刀補)
G0 X200 Z100 S300(快速移動至安全位,轉速改為300R/MIN)
X30 Z4(快速定位至螺牙循環開始位置)
G92 X29.8 Z-48 F1.5(車螺牙,X軸牙底徑29.8,Z牙長48MM,牙距1.5MM)
X29.6
X29.4
X29.2
X29
X28.8
X28.6
X28.4
X28.3
X28.2
X28.1
X28.05
G0 X200 Z100(快速移動至安全換刀位置)
T0303(換3號割刀,執行3號刀補)
G0 X200 Z100 S200(快速定位,轉速200R/MIN)
X110 Z-84(移動至割槽循環開始位置)
G75 R0.5 F0.08(G75割槽循環,R——每次退刀0.5MM,F——每轉進給0.08MM)
G75 X60 Z-120 P6000 Q4000(槽底徑60MM,Z軸最大深度120MM,P——每次切入6MM,Z軸移動量)
M09(關水泵)
G0 X200 Z100 M05(快速移動至換刀安全位,關閉主軸)
T0101(換1號刀)
M30(程序結束)
『伍』 C語言的經典編程例子
程序員》推薦C++ 圖書三人談
主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章
透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。
惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。
夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。
夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。
透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。
夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。
透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。
惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。
透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。
惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。
透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。
透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。
夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。
透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。
夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。
透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。
夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。
透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。
夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。
透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。
夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。
透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。
夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。
透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。
夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。
透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。
『陸』 數控車宏程序編程實例
統宏程序編程一 變數 普通加工程序直接用數值指定G代碼和移動距離;例如,GO1和X100.0。使用用戶宏程序時,數值可以直接指定或用變數指定。當用變數時,變數值可用程序或用MDI面板上的操作改變。 #1=#2+100G01 X#1 F300說明:變數的表示 計算機允許使用變數名,用戶宏程序不行。變數用變數符號(#)和後面的變數號指定。 例如:#1表達式可以用於指定變數號。此時,表達式必須封閉在括弧中。 例如:#[#1+#2-12]變數的類型變數根據變數號可以分成四種類型 變數號變數類型功能#0空變數該變數總是空,沒有值能賦給該變數.#1-#33局部變數局部變數只能用在宏程序中存儲數據,例如,運算結果.當斷電時,局部變數被初始化為空.調用宏程序時,自變數對局部變數賦值,#100-#199#500-#999 公共變數公共變數在不同的宏程序中的意義相同.當斷電時,變數#100-#199初始化為空.變數#500-#999的數據保存,即使斷電也不丟失.#1000系統變數系統變數用於讀和寫CNC運行時各種數據的變化,例如,刀具的當前位置和補償值.變數值的范圍局部變數和公共變數可以有0值或下面范圍中的值:-1047到-10-29或-10-2到-1047如果計算結果超出有效范圍,則發出P/S報警NO.111.小數點的省略當在程序中定義變數值時,小數點可以省略。 例:當定義#1=123;變數#1的實際值是123.000。變數的引用為在程序中使用變數值,指定後跟變數號的地址。當用表達式指定變數時,要把表達式放在括弧中。 例如:G01X[#1+#2]F#3;被引用變數的值根據地址的最小設定單位自動地舍入。 例如: 當G00X#/;以1/1000mm的單位執行時,CNC把123456賦值給變數#1,實際指令值為G00X12346.改變引用變數的值的符號,要把負號(-)放在#的前面。 例如:G00X-#1當引用未定義的變數時,變數及地址都被忽略。 例如:當變數#1的值是0,並且變數#2的值是空時,G00X#1 Y#2的執行結果為G00X0。 雙軌跡(雙軌跡控制)的公共變數對雙軌跡控制,系統為每一軌跡都提供了單獨的宏變數,但是,根據參數N0.6036和6037的設定,某些公共變數可同時用於兩個軌跡。 未定義的變數當變數值未定義時,這樣的變數成為空變數。變數#0總是空變數。它不能寫,只能讀。 引用當引用一個未定義的變數時,地址本身也被忽略。 當#1= 當#1=0G90 X100 Y#1G90 X100G90 X100 Y#1G90 X100 Y0(b) 運算 除了用賦值以外,其餘情況下與0相同。 當#1=時 當#1=0時 #2=#1#2=#2=#1#2=0#2=#*5#2=0#2=#*5#2=0#2=#1+#1#2=0#2=#1+#1#2=0(c)條件表達式 EQ和NE中的不同於0。 當#1=時 當#1=0時 #1EQ#0 成立 #1EQ#0 不成立 #1 NE #0 成立 #1 NE #0 不成立 #1 GE #0 成立 #1 GE #0 不成立 #1 GT #0 不成立 #1 GT #0 不成立 限製程序號,順序號和任選程序段跳轉號不能使用變數。 例:下面情況不能使用變數: 0#1; /#2G00X100.0;N#3Y200.0;二 算術和邏輯運算 下面表中列出的運算可以在變數中執行。運算符右邊的表達式可包含常量和或由函數或運算符組成的變數。表達式中的變數#j和#k可以用常數賦值。左邊的變數也可以用表達式賦值。 說明: 角度單位函數SIN ,COS,ASIN,ACOS,TAN和ATAN的角度單位是度。如90°30'表示為90.5度。ARCSIN # i= ASIN[#j] (1)取值范圍如下: 當參數(NO.6004#0)NAT位設為0時,270°~90° 當參數(NO.6004#0)NAT位設為1時,-90°~90° (2)當#j超出-1到1的范圍時,發出P/S報警NO.111.(3)常數可替代變數#jARCCOS #i=ACOS[#j] 取值范圍從180°~0° 當#j超出-1到1的范圍時,發出P/S報警NO.111. 常數可替代變數#j三 程序舉例銑橢圓:軌跡:橢圓程序代碼如下:N10 G54 G90 G0 S1500 M03N12 X0 Y0 Z20.N14 G0 Z1N16 G1 Z-5. F150.N18 G41 D1N20 #1=0N22 #2=34N24 #3=24N26 #4=#2*COS[#1]N28 #5=#3*SIN[#1]N30 #10=#4*COS[45]-#5*SIN[45]N32 #11=#4*SIN[45]+#5*COS[45]N34 G1 X#10 Y#11 N36 #1=#1+1N38 IF [#1 LT 370] GOTO26N40 G40 G1 X0 Y0 N42 G0 Z100N44 M30 銑矩形槽:銑矩形槽代碼如下:#102=0.N3#100=0.#101=0.#103=200.#104=400.G91G28Z0.G0G90G54X0.Y0.G43H1Z20.M3S2000.N4G0X#100Y#101G01Z#102F200.#102=#102-2.IF[#102EQ-50.]GOTO1GOTO2N2N4X#104F500.Y#103X#100Y#101#100=#100+10.#101=#101+10.#103=#103-10.#104=#104-10.IF[#100EQ100.]GOTO3GOTO4N3N1M5M9G91G28Z0.G28Y0.M30銑傾斜3度的面:軌跡:銑傾斜3度的面的代碼如下:O0001#[#1+1*2]=1G65P9012L1A0B0.1C4I100J3K0M30宏程序O9012代碼如下:G54 G90 G00 X[#3] Y0 Z100S500 M3G01 Z0 F300WHILE[#1LE10]DO1#7= #1/TAN[#5]+#3G1Z-#1 X#7#8=#6/2-ROUND[#6/2]IF[#8EQ0]GOTO10G1Y0 GOTO20N10 Y#4N20#1=#1+#2#6=#6+1END1G0 Z100銑半球:軌跡:銑半球代碼如下:G90G0G54X-10.Y0M3S4500G43Z50.H1M8#1=0.5WHILE[#1LE50.]DO1#2=50.-#1#3=SQRT[2500.-[#2*#2]]G1Z-#1F20X-#3F500G2I#3#1=#1+0.5END1G0Z50.M5M30銑喇叭:銑喇叭代碼如下:M03 S500M06 T01#1=0#2=0G0 Z15X150 Y0N11#2=30*SIN[#1]#3=30+30*[1-COS[#1]]G01 Z-#2 F40G41 X#3 D01G03 I-#3G40 G01 X150 Y0#1=#1+1IF [#1 LE 90] GOTO 11G0 Z30M30
『柒』 數控車床G94車錐度編程實例
G94X(U)_Z(W)_R_F_。
X:切削終點X軸坐標。
Z:切削終點z軸坐標。
驅動裝置和位置檢測裝置。驅動裝置的作用是:接受來自數控裝置的攤信息,經功率放大後,嚴格按照指令信息的要求驅動機床移動部件,以加工出符合圖樣要求的零件。位置檢測裝置的作用是:將數控機床各坐標軸的實際位移檢測出來,經反饋系統輸入到。
數控機床是按照事先編制好的加工程序:
自動地對被加工零件進行加工。我們把零件的加工工藝路線、工藝參數、刀具的運動軌跡、位移量、切削參數以及輔助功能。
按照數控機床規定的指令代碼及程序格式編寫成加工程序單,再把這程序單中的內容記錄在控制介質上,然後輸入到數控機床的數控裝置中,從而指揮機床加工零件。
『捌』 求加工中心編程實例
1、根據圖紙要求,確定工藝方案及加工路線
(1)以底面為定位基準,兩側用壓板壓緊,固定於銑床工作台上
(2)工步順序
鑽孔φ20㎜、按O』ABCDEFG線路銑削輪廓。
2、選用經濟型數控銑床,華中Ⅰ型(XZK7532型)數控銑鑽床。
3、選擇刀具
現採用φ20㎜的鑽頭,鑽削φ20㎜孔;φ4㎜的平底立銑刀用於輪廓的銑削,並把該刀具的直徑輸入刀具參數表中。由於華中Ⅰ型數控銑鑽床沒有自動換刀功能,鑽孔完成後,直接手工換刀。
4、確定切削用量
切削用量的具體數值應根據該機床性能、相關的手冊並結合實際經驗確定,詳見加工程序。
5、確定工件坐標系和對刀點
在XOY平面內確定以0點為工件原點,Z方向以工件表面為工件原點,建立工件坐標系,如上圖所示。採用手動對刀方法把0點作為對刀點。
1、加工φ20㎜孔程序(手工安裝好φ20㎜鑽頭)%7528
G54G91M03;相對坐標編程
G00X40Y30;在XOY平面內加工
G98G81X40Y30Z-5R15F120;鑽孔循環
G00X5Y5Z50
M05
M02
2、銑輪廓程序(手工安裝好ф4㎜立銑刀)%7529
G54G90G41G00X-20Y-10Z-5D01
G01X5Y-10F150
G01Y35
G91G01X10Y10
G01X11.8Y0
G02X30.5Y-5R20
G03X17.3Y-10R20
G01X10.4Y0
G01X0Y-25
G01X-100Y0
G90G40G00X0Y0Z100
M05 M02
(8)編程實際案例擴展閱讀:
十字槽粗加工程序
O0001;
G90 G40 G21 G17 G94;
G91 G28 Z0;
G90 G54 M3 S480;
G00 X30.0 Y0;
Z5.0 M08;
G01 Z-4.0 F40;
X-30.0 F60;
Z-8.0 F40;
X30.0 F60;
G00 Z5.0;
X0 Y25.0;
G01 Z-4.0 F40;
Y-25.0;
Z-8.0 F40;
Y25.0 F60;
G00 Z5.0 M09;
G91 G28 Z0;
M30
『玖』 g73編程實例及解釋是什麼
g73編程實例及解釋是如下:
輸入:G73U--W--R;G73P--Q--U--W--F。
由於數控車G73這些零件的徑向尺寸,無論是測量尺寸還是圖紙尺寸,都是以直徑值來表示的,所以數控車床採用直徑編程方式,即規定用絕對值編程時,X為直徑值,用相對值編程時,則以刀具徑向實際位移量的二倍值為編程值。
對於不同的數控車床、不同的數控系統,其編程基本上是相同的,個別有差異的地方,要參照具體機床的用戶手冊或編程手冊。
系統格式指令:
g73指令是外圓粗車循環指令!各種數控系統的編程格式都不一樣,如最簡單的廣州928系統格式:G73、X、I、K、L、F。
X:精加工X起點坐標,一般要偏端面X為0。
I:每次進刀量MM。
K:每次退刀量MM。
L:總的精加工程序段。
F:進給量。
『拾』 數控編程的實例!
數控機床編程實例
作者: 來源:
--------------------------------------------------------------------------------
常用的圓弧編程指令是G2和G3,使用時必須編入圓弧起點坐標,終點坐標、圓弧半徑或中心坐標,可處理各種類型的圓弧編程。西門子810D/840D系統中的CT和RND指令也可以生成精確的圓弧軌跡,在加工輪廓中出現用圓弧與其他直線或圓弧相切連接的軌跡時,靈活運用CT和RND指令進行圓弧編程比使用G2和G3指令方便得多:
--------------------------------------------------------------------------------
一、兩種特殊的圓弧編程指令:CT和RND
常用的圓弧編程指令是G2和G3,使用時必須編入圓弧起點坐標,終點坐標、圓弧半徑或中心坐標,可處理各種類型的圓弧編程。西門子810D/840D系統中的CT和RND指令也可以生成精確的圓弧軌跡,在加工輪廓中出現用圓弧與其他直線或圓弧相切連接的軌跡時,靈活運用CT和RND指令進行圓弧編程比使用G2和G3指令方便得多:
1、RND指令處理輪廓拐點的圓弧過渡
RND指令的含義:輪廓拐點處用指定半徑的圓弧過渡處理,並且和相關的直線或圓弧相切連接,數控系統自動運算各個切點的坐標。
參照圖1 加工內容為底邊外的其餘輪廓,所用程序如下。
N005 G54 G90 G0 Z100 T1 D1
N010 X-70 Y-50
N015 M03 S1000 F500 Z-10
N020 G41 Y-20
N025 G1 Y70 RND=5
N030 G1 X-40 RND=5
N035 G3 ×0 CR=20 RND=5
N040 G3 ×40 CR=20 RND=5
N045 G1×70 RND=5
N050 G1 Y-30
N055 M30
程序中用RND=5的格式表示輪廓拐點處用半徑R5的圓弧過渡處理,並與相關的直線或圓弧相切連接,數控系統自動運算各個切點的坐標,程序中不需寫入切點的坐標。而用G2和G3指令編寫各處R5圓弧就必須計算各個切點的坐標(共10個點),還多了五條程序。
2、CT指令完成直線和圓弧或圓弧和圓相切邊接
CT指令的含義是:經過一段直線或圓弧的結束點P1和另一個指定點P2生成一段圓弧並且和前面的直線或圓弧在P1點處相切,數控系統自動運算圓弧半徑CT指令是模態的。
參照圖2 加工內容為底邊外的其餘輪廓,所用程序如下:
N005 G54 G90 G0 Z100 T1 D1
N010 X-90 Y-120
N015 M03 S1000 F500Z-10
N020 G41Y-100
N025 G1 Y20
N030 X-60
N040 Yo
N045 CT X-20(第一個R20圓弧)
N050 X20(第二個R20圓弧)
N055 X60(第三個R20圓弧)
N060 G1 Y20
N065 G1×90
N070 Y-100
N075 M30
用CT在編製程序時只需輸入切點坐標而不用寫入圓弧半徑,也不用判斷圓弧的方向,在直線和圓弧或多段圓弧相切連接的輪廓編程時使用非常方便。
3、CT和RND指令在極坐標系中的應用
在極坐標系中用G2和G3指令編程時有一個限制,極點必須設定在所編程圓弧的中心。而用CT和RND指令就很好地克服了這一障礙。
(1)RND指令在極坐標系中的應用
參照圖3在數控銑床加工4個30度的V型槽,以90度位置的V型槽為常式序如下。
N005 G54 G0 T1 D1 Z100
N010 G111 Xo YO
N015 AP=90-15 RP=110
N020 M03 S1000 F500 Z10
N025 G42 RP=100
N030 G1 RP=0 RND=10
N035 G1 RP=100
N040 M30
(2)CT指令在極坐標系中的應用。
參照圖4 加工上部的3段圓弧和2段直線相切連接的部位,程序如下。
N005 G54 G90 Go Z100 T1 D1
N010 G111 XO YO
N015 AP=90-36-18 RP=150
N020 M03 S1000 F500 Z-10
N025 G42 RP=130
N030 G1 RP=142.66/2
N035 CT AP=90-18
N040 AP=90+18
N045 AP=90+18+36
N050 G1 RP=150
N055 M30
圖3和圖4 這兩種類型的工件加工部位使用算術坐標系編程數據處理比較麻煩,在極坐標系中用G2和G3指令編程圓弧時極點必須設定在所編圓弧的中心,需要一些計算工作,而使用RND和CT指令編程圓弧時,極點就不必設定在所編圓弧的中心,極點可以設定在任意的方便數據處理的位置。圖3和圖4 這兩種類型的工件加工部位在編程時使用極坐標且極點設定在工件中心最為方便。
二、特殊刀具補償方法在加工扇形段導入板中的應用
1、一般的刀具補償方法
參照圖5 ,在數控銑上用40mm立銑刀加工60H7的槽,按照槽的邊界線進行編程,使用的程序如下。
N005 G54 G90 Go Z100 T1 D1
N010 X-150 YO
N020 M03 S300 F100 Z30
N025 G42 Y30
N030 G1×150
N035 Y-30
N040 X-150
N050 M30
實際加工中要經過粗加工、半精加工和精加工運行三次程序,對應的半徑補償值先大後小分別是22mm,20.5mm,20mm(理念值,最終的半徑補償值要經過實際測量確定)。
2、特殊的刀具補償方法
參照圖5,在數控銑床上40mm立銑刀加工60H7的槽,按照中心線進行編程,使用的程序如下。
N005 G54 G90 GO Z100 T1 D1
N010 X-150 YO
N020 M03 S300 F100 Z30
N025 G42 X-140
N030 G1 X150
N035 GO Z100
N040 G40 X-150
N050 Z30
N055 G41 X-140
N060 G1 X150
N065 GO Z100
N070 M30
實際加工中要經過粗加工、半精加工和精加工運行三次程序,對應的半徑補償先小後大分別是8mm、9.5mm,10mm(理論值,最終的半徑補償值要經過實際測量後確定),最終的半徑補償理論值=槽的寬度/2-刀具半徑。在程序中分別用G41和G42激活兩次刀補,增加了一次空行程,這種使用刀具半徑補償的方式在加工一般類型的工件時顯得很麻煩,但是在加工特定類型的工件時使用這種方法就會使編程工作變得非常簡單。
3、在加工扇形段導入板中的應用
在一些比較特殊槽體的加工中,圖紙中只標注槽的寬度、深度和中心線的形狀尺寸,針對這一類型的工件,按照中心線進行編程,加工中應用特殊的刀具補償方法。
參照圖6,這是我公司薄板廠連鑄設備中使用的扇形段導入板,它是扇形段導入裝置中的關鍵零件。用Tk6920數控銼銑床的加工七條128×44mm導入槽。該工件的七條導入槽是由多段圓弧和直線相切連接構成,圖紙中只標注了槽的寬度、深度和中心線的形狀尺寸,以上部第一個導入槽為例說明特殊的刀具補償使用方法,按照中心線進行編程。
程序名稱:CA01
程序內容:N5 G54 G90 G64 GO Wo Z150 T1 D1(調用第一個刀號)
N10 G111 XO YO
N15 X=-1804-100 Y=464.424
N20 M04 S250 F200 Z-44
N25 G41 X=IC(50)(激活刀補開始加工槽體的上邊界)
N30 G1 X=-1804+920.617
N35 CT AP=90-16.03 RP=1499.5
N40 G1 AP=90-16.03 RP=1499.5+100
N45 GO G40 X=IC(100)Z150
N50 X=-1804-100 Y=464.424 T1 D2(調用第二個刀號)
N55 G42 X=IC(50)(激活刀補開始加工槽體的下邊界)
N60 G1 X=-1804+920.617
N65 CT AP=90-16.03 RP=1499.5
N70 G1 AP90-16.03 RP=1499.5+100
N75 GO G40 X=IC(100)Z150
N80 M30
槽的寬度和中心線不對稱,程序中用了兩個刀號,加工槽體的上邊界時用D1,加工槽體的下邊界是時用D2,實際加工中用50mm銑刀要經過粗加工、半精加工和精加工運行三次程序,對應的半徑補償值先小後大分別是D1=100mm,12mm,12.5mm,D2=13mm,15mm,15.5mm.
如果使用一般的刀具補償使用方法,按照槽的邊界線進行編程,就要計算槽的邊界線中各段圓弧和直線切點的坐標以及各段圓弧的半徑,計算量是非常大的。而按照中心線進行編程就可直接使用力紙上標注的尺寸,避免了大量、繁瑣的數據計算工作,保證了程序中所用數據的准確性,極大的提高了編程效率。
其方法有兩個特殊:(1)按照中心線進行編程而不是按照真實的加工邊界線進行編程。(2)刀具補償值按照粗加工、半精加工和精加工的順序逐漸加大,理論補償值二加工的邊界到中心線的距離--刀具半徑。優點是直接使用圖紙上標注的尺寸進行編程,保證了程序中所用數據的准確性,不需進行大量繁瑣的數據計算工作。