數(shù)控加工仿真課程設(shè)計(jì)說明書_第1頁
已閱讀1頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  數(shù)控仿真技術(shù)課程設(shè)計(jì)</p><p><b>  摘 要</b></p><p>  從工程的角度來看,仿真就是通過對(duì)系統(tǒng)模型的實(shí)驗(yàn)去研究一個(gè)已有的或設(shè)計(jì)中的系統(tǒng),分析復(fù)雜的動(dòng)態(tài)對(duì)象,仿真是一種有效的方法,可以減少風(fēng)險(xiǎn),縮短設(shè)計(jì)和制造的周期并節(jié)約投資。計(jì)算機(jī)仿真就是借助計(jì)算機(jī),利用系統(tǒng)模型對(duì)實(shí)際系統(tǒng)進(jìn)行實(shí)驗(yàn)研究的過程。它隨著計(jì)算機(jī)技術(shù)的發(fā)展而迅

2、速地發(fā)展,在仿真中它有越來越重要的地位。</p><p>  計(jì)算機(jī)仿真技術(shù)的發(fā)展趨勢(shì)主要表現(xiàn)在兩個(gè)方面:應(yīng)用領(lǐng)域的擴(kuò)大和仿真計(jì)算機(jī)的智能化。計(jì)算機(jī)仿真技術(shù)不僅在傳統(tǒng)的工程技術(shù)領(lǐng)域(航空、航天、化工等方面)繼續(xù)發(fā)展,而且擴(kuò)大到社會(huì)經(jīng)濟(jì)、生物等許多非工程領(lǐng)域,此外,并行處理、人工智能、知識(shí)庫和專家系統(tǒng)等技術(shù)的發(fā)展正影響著仿真計(jì)算機(jī)的發(fā)展。</p><p>  數(shù)控加工仿真利用計(jì)算機(jī)來模擬實(shí)際

3、的加工過程,是驗(yàn)證數(shù)控加工程序的可靠性和預(yù)測(cè)切削過程的有力工具,以減少工件的試切,提高生產(chǎn)效率。</p><p>  仿真軟件界面友好,基本實(shí)現(xiàn)了設(shè)計(jì)任務(wù)的要求,通過本軟件可以知道在仿真加工刀具的坐標(biāo)、各軸的工作情況以及輔助電機(jī)(冷卻液的控制情況)</p><p>  本仿真程序應(yīng)用的是脈沖插補(bǔ)算法。在仿真過程中應(yīng)用了兩種插補(bǔ)方法:直線插補(bǔ),圓弧插補(bǔ)(包括順時(shí)方向插補(bǔ)和逆時(shí)方向插補(bǔ))。&l

4、t;/p><p>  本仿真程序可以實(shí)現(xiàn)如下指令的判別和執(zhí)行:G01,G02, G03, G04,G05,M05,M08 ,M09,M03,M30.</p><p>  在應(yīng)用時(shí),編程者只要按照本應(yīng)用程序的要求輸入程序,即可以實(shí)現(xiàn)所要求的加工過程的仿真過程。本程序能夠判斷所輸入的程序的正確性,可以對(duì)程序進(jìn)行編輯。</p><p>  本軟件可以從平面和軸測(cè)兩個(gè)視圖同時(shí)觀

5、察仿真過程。</p><p><b>  Abstract</b></p><p>  The type of numerical control in my resign is point-to-point .</p><p>  There are two interpolation schemes that have been used

6、to generating a smooth continuous path. They include:</p><p>  Linear interpolation</p><p>  Circular interpolation </p><p>  Linear interpolation is used to generate a straight-lin

7、e path. The programmer is required to specify the beginning point and end point of the straight line (X. Y. Z.). Circular interpolation schemes is used to generate a circular (I. J). The interpolator computes the feed ra

8、tes for each of the two (or three)axes in order to achieve the specified feed rate.</p><p>  My resign can carry out these commands such as G01,G02, G03, G04,G05,M05,M08 ,M09,M03,M30;</p><p>  T

9、he simulation process can be seen in two means: orthographic and Isometric at the same time.</p><p><b>  目 錄</b></p><p>  設(shè)計(jì)任務(wù)書……………………………………………4</p><p>  數(shù)控仿真技術(shù)發(fā)展?fàn)顩r

10、………………………………5</p><p>  功能簡介………………………………………………7</p><p>  NC代碼的讀取…………………………………………9</p><p>  插補(bǔ)過程………………………………………………10</p><p>  設(shè)計(jì)小結(jié)………………………………………………13</p><p>

11、;  參考書目………………………………………………13</p><p>  數(shù)控代碼………………………………………………14</p><p>  第一章 設(shè)計(jì)任務(wù)書</p><p><b>  1.設(shè)計(jì)題目:</b></p><p>  對(duì)于給定的一段NC代碼,用VB或其他高級(jí)語言編寫程序解釋、插補(bǔ),在PC機(jī)上仿真數(shù)控

12、裝置,進(jìn)行圖形描繪、坐標(biāo)值顯示、步進(jìn)電機(jī)控制模擬顯示及信號(hào)輸出、冷卻液和主軸開關(guān)量控制模擬顯示及信號(hào)輸出。 </p><p><b>  具體要求如下:</b></p><p>  NC代碼中包含的代碼類型有:</p><p>  G90 G54 G00 G01 G02 G03 M03 M05 M08 M09 M30<

13、;/p><p>  2、數(shù)控系統(tǒng)的計(jì)算機(jī)仿真</p><p>  對(duì)于給定的一段NC代碼,用VB或其他高級(jí)語言編寫程序解釋、插補(bǔ),在PC機(jī)上仿真數(shù)控裝置,進(jìn)行圖形描繪、坐標(biāo)值顯示、步進(jìn)電機(jī)控制模擬顯示及信號(hào)輸出、冷卻液和主軸開關(guān)量控制模擬顯示及信號(hào)輸出。具體要求如下:</p><p>  (1) NC代碼中包含的代碼類型有:</p><p> 

14、 G90 G54 G00 G01 G02 G03 M03 M05 M08 M09 M30</p><p>  圖1 工件平面 </p><p>  例:下面給出一個(gè)具體的圖形示意圖,NC代碼及其加工軌跡圖: </p><p>  (2)、要求根據(jù)NC代碼屏幕模擬加工過程,圖形顯示位置,坐標(biāo)值顯示,輔助功能狀態(tài)顯示(冷卻液和主軸開關(guān)量控

15、制模擬顯示)。</p><p>  (3)、PC機(jī)模擬加工過程中,要求有實(shí)時(shí)的驅(qū)動(dòng)三軸步進(jìn)電機(jī)的控制信號(hào)、控制冷卻液和主軸轉(zhuǎn)動(dòng)的開關(guān)量輸出控制信號(hào)。假設(shè)信號(hào)從計(jì)算機(jī)并行打印口的數(shù)據(jù)信號(hào)線輸出,端口地址為0x378。并行口數(shù)據(jù)線分配如下(低電平有效):</p><p><b>  圖2 加工仿真示圖</b></p><p>  第二章 數(shù)控仿真技

16、術(shù)發(fā)展?fàn)顩r</p><p> ?。?) 計(jì)算機(jī)仿真的概念及應(yīng)用</p><p>  為了解決數(shù)控加工中的程序編制問題,50年代,MIT設(shè)計(jì)了一種專門用于機(jī)械零件數(shù)控加工程序編制的語言,稱為APT(Automatically Programmed Tool)。其后,APT幾經(jīng)發(fā)展,形成了諸如APTII、APTIII(立體切削用)、APT(算法改進(jìn),增加多坐標(biāo)曲面加工編程功能)、AP

17、TAC(Advanced contouring)(增加切削數(shù)據(jù)庫管理系統(tǒng))和APT/SS(Sculp tured Surface)(增加雕塑曲面加工編程功能)等先進(jìn)版。 采用APT語言編制數(shù)控程序具有程序簡煉,走刀控制靈活等優(yōu)點(diǎn),使數(shù)控加工編程從面向機(jī)床指令的“匯編語言”級(jí),上升到面向幾何元素.APT仍有許多不便之處:采用語言定義零件幾何形狀,難以描述復(fù)雜的幾何形狀,缺乏幾何直觀性;缺少對(duì)零件形狀、刀具運(yùn)動(dòng)軌跡的直觀圖形顯示和刀

18、具軌跡的驗(yàn)證手段;難以和CAD數(shù)據(jù)庫和CAPP系統(tǒng)有效連接;不容易作到高度的自動(dòng)化,集成化。 針對(duì)APT語言的缺點(diǎn),1978年,法國達(dá)索飛機(jī)公司開始開發(fā)集三維設(shè)計(jì)、分析、NC加工一體化的系統(tǒng),稱為為CATIA。隨后很快出現(xiàn)了象EUCLID,UGII,IN</p><p> ?。?)數(shù)控仿真技術(shù)的研究現(xiàn)狀</p><p>  數(shù)控機(jī)床加工零件是靠數(shù)控指令程序控制完成的。為確保數(shù)控程序

19、的正確性,防止加工過程中干涉和碰撞的發(fā)生,在實(shí)際生產(chǎn)中,常采用試切的方法進(jìn)行檢驗(yàn)。但這種方法費(fèi)工費(fèi)料,代價(jià)昂貴,使生產(chǎn)成本上升,增加了產(chǎn)品加工時(shí)間和生產(chǎn)周期。后來又采用軌跡顯示法,即以劃針或筆代替刀具,以著色板或紙代替工件來仿真刀具運(yùn)動(dòng)軌跡的二維圖形(也可以顯示二維半的加工軌跡),有相當(dāng)大的局限性。對(duì)于工件的三維和多維加工,也有用易切削的材料代替工件(如,石蠟、木料、改性樹脂和塑料等)來檢驗(yàn)加工的切削軌跡。但是,試切要占用數(shù)控機(jī)床和加工

20、現(xiàn)場(chǎng)。為此,人們一直在研究能逐步代替試切的計(jì)算機(jī)仿真方法,并在試切環(huán)境的模型化、仿真計(jì)算和圖形顯示等方面取得了重要的進(jìn)展,目前正向提高模型的精確度、仿真計(jì)算實(shí)時(shí)化和改善圖形顯示的真實(shí)感等方向發(fā)展。</p><p> ?。?)虛擬制造目前的發(fā)展?fàn)顩r 虛擬制造從提出到現(xiàn)在已歷經(jīng)了20多年,技術(shù)上得到了很大的發(fā)展,應(yīng)用方面也得到了廣泛的擴(kuò)展。在國外,有很多學(xué)校、研究所、科研單位、大型企業(yè)等都在不斷的研究和

21、應(yīng)用虛擬制造技術(shù)。近年來,虛擬現(xiàn)實(shí)技術(shù)已較多地應(yīng)用到汽車開發(fā)工作中,已初步形成一種集專業(yè)理論、工程設(shè)計(jì)、科學(xué)試驗(yàn)等為一身的較為完整的應(yīng)用體系。例如,1995年美國標(biāo)準(zhǔn)與技術(shù)研究所的報(bào)告“國家先進(jìn)制造實(shí)驗(yàn)臺(tái)的概念設(shè)計(jì)計(jì)劃”,強(qiáng)調(diào)了分散的、多節(jié)點(diǎn)的分散虛擬制造(DVM),即虛擬企業(yè)的概念;而美國國家研究委員會(huì)的報(bào)告“制造中的信息技術(shù)”,則探討了產(chǎn)品集成、過程設(shè)計(jì)、車間控制、虛擬工廠等的信息技術(shù)問題。福特汽車公司也已經(jīng)計(jì)劃應(yīng)用虛擬環(huán)境技術(shù)來設(shè)

22、計(jì)和開發(fā)汽車,該公司的先進(jìn)車輛技術(shù)組把虛擬制造技術(shù)應(yīng)用于裝配仿真和虛擬成形,以提高空氣動(dòng)力學(xué)、人機(jī)工程學(xué)和表面建模的效果。</p><p>  第三章 功能簡介</p><p><b>  圖(1)</b></p><p><b>  1.1、主界面簡介</b></p><p>  如圖(1)

23、所示,程序主界面由如下幾個(gè)部分組成:工具欄、NC代碼輸入框、坐標(biāo)值實(shí)時(shí)狀態(tài)框、工作狀態(tài)框、NC模擬框。其中,工具欄菜單依次為:文件、編輯、視圖、運(yùn)行,工作狀態(tài)框顯示了冷卻液的開關(guān)狀態(tài)、主軸的轉(zhuǎn)速及轉(zhuǎn)向、步進(jìn)電機(jī)X電機(jī)、Y電機(jī)的轉(zhuǎn)向。NC代碼在NC代碼輸入框輸入,根據(jù)NC代碼在NC模擬框進(jìn)行模擬加工。</p><p>  1.2、參數(shù)設(shè)置定界面:</p><p><b>  圖(2

24、)</b></p><p>  如圖(2)所示,在此界面,根據(jù)需要可以選擇脈沖當(dāng)量(單位為毫米mm)以及圖形的放大倍數(shù),以便顯示,插補(bǔ)形式由于時(shí)間關(guān)系。通過寫入工件坐標(biāo)的原點(diǎn)。便可隨時(shí)改變坐標(biāo)的原點(diǎn)。</p><p>  1.3、NC代碼格式</p><p>  在NC代碼輸入框輸入代碼,開頭必須要有程序開始符“%”、結(jié)尾同樣以結(jié)束符“%”結(jié)束,程序不能

25、輸入行符,因?yàn)楸境绦蜻€不能辨別。指令符(G、M)可以是大寫也可以是小寫,指令間允許有空格。輸入圓心時(shí)只能用IJ指令,R指令不能識(shí)別——這是該程序的不足之處,還有待提高。</p><p>  1.4、程序基本操作</p><p>  首先,在NC代碼輸入框輸入NC代碼或打開已有的代碼,接著按工具欄上的運(yùn)行——“調(diào)試”,程序經(jīng)過調(diào)試后,如果程序有錯(cuò),會(huì)自動(dòng)報(bào)錯(cuò),報(bào)錯(cuò)時(shí)光標(biāo)將會(huì)定位在有錯(cuò)的代碼附

26、近,可以方便用戶修改,直到無誤為至,此時(shí)程序會(huì)告訴用戶——調(diào)試成功,緊接著按——“模擬”,在NC模擬框便會(huì)出現(xiàn)用戶希望的圖形。繪圖的過程中用戶可以按——“暫?!辨I——暫停繪圖、再按時(shí)便繼續(xù)繪制,按——“結(jié)束”整個(gè)程序?qū)⑼V?。與此同時(shí),坐標(biāo)值實(shí)時(shí)顯示框?qū)崟r(shí)顯示動(dòng)點(diǎn)的坐標(biāo),工作狀態(tài)框也反映工作狀況。在快捷工具欄功能按鈕一樣可以實(shí)現(xiàn)如上功能。整個(gè)加工過程比較直觀,一目了然。本程序優(yōu)秀之處在于——當(dāng)程序未調(diào)試之前“模擬”鍵成淡色,不能使用,以防

27、出錯(cuò),而當(dāng)模擬時(shí)“調(diào)試”鍵成淡色,程序不會(huì)亂套。</p><p>  第四章 NC代碼的讀取</p><p><b>  第五章 插補(bǔ)過程</b></p><p><b>  3.1插補(bǔ)算法說明</b></p><p>  本軟件應(yīng)用脈沖增量插補(bǔ)方法,這類插補(bǔ)方法的特點(diǎn)是:</p>

28、<p>  每次插補(bǔ)的結(jié)果僅產(chǎn)生一個(gè)單位的行程增量(一個(gè)脈沖當(dāng)量),以一個(gè)脈沖的方式輸出給步進(jìn)電機(jī)。其基本思想是:用折線來逼近曲線(包括直線)。</p><p>  插補(bǔ)速度與進(jìn)給速度密切相關(guān)。</p><p>  脈沖增量插補(bǔ)的實(shí)現(xiàn)方法較簡單。</p><p>  脈沖增量插補(bǔ)的方法有逐點(diǎn)比較法、數(shù)字積分法,本軟件用逐點(diǎn)比較法。逐點(diǎn)比較法的原理是:在仿

29、真過程中,能逐點(diǎn)地計(jì)算和判別運(yùn)動(dòng)軌跡與給定軌跡的偏差,并根據(jù)偏差控制進(jìn)給軸向給定輪廓靠近,縮小偏差,使加工輪廓逼近給定輪廓。逐點(diǎn)比較法是以折線來逼近直線和圓弧曲線的,它與規(guī)定的直線或圓弧之間的最大誤差不超過一個(gè)脈沖當(dāng)量,因此,只要將脈沖當(dāng)量取得足夠小,就可達(dá)到加工精度的要求。</p><p>  3.2直線插補(bǔ)原理:</p><p>  3.2.1直線插補(bǔ)流程圖</p>&l

30、t;p><b>  :</b></p><p>  3.2.2偏差計(jì)算公式</p><p>  假設(shè)加工如圖 所示直線OA,取直線起點(diǎn)為坐標(biāo)原點(diǎn),直線終點(diǎn)坐標(biāo)A(Xe,Ye)為已知,即直線OA為給定軌跡。M(Xm,Ym)點(diǎn)為加工點(diǎn)(動(dòng)點(diǎn))。若M點(diǎn)在直線OA上,則根據(jù)相似三角形的關(guān)系可得:</p><p>  Xm/Ym=Xe/Ye<

31、/p><p>  即 Ym Xe—YeXm=0</p><p>  由此,可定義直線插補(bǔ)的偏差判別式如下:</p><p>  Fm=XeYm-YeXm</p><p>  若 Fm=0 表示動(dòng)點(diǎn)在OA直線上</p><p>  若 Fm>0 表示動(dòng)點(diǎn)在OA直線上方</p><p&

32、gt;  若 Fm<0 表示動(dòng)點(diǎn)在OA直線下方</p><p>  當(dāng) 時(shí)M點(diǎn)在直線上或在直線上方</p><p>  ,應(yīng)沿+X方向進(jìn)給一步,走步后新的坐標(biāo)值為</p><p>  Xm+1=Xm +1</p><p><b>  Ym+1=Ym</b></p><p>  新的偏差為:F

33、 m+1=Fm—Ye</p><p>  若Fm<0 則應(yīng)沿+Y方向進(jìn)給一步,走步后新的坐標(biāo)值為</p><p><b>  Xm+1=Xm</b></p><p>  Ym+1=Ym +1</p><p>  新的偏差為:F m+1=Fm+Xe</p><p>  3.2.3終點(diǎn)判斷的方法

34、</p><p>  設(shè)置變量CountN減法計(jì)數(shù)器,在</p><p>  加工之前存入終點(diǎn)坐標(biāo)值Xe 、Ye,</p><p>  X或Y坐標(biāo)每進(jìn)給一步時(shí),就</p><p>  在計(jì)數(shù)器中、減去1,直到為零,</p><p>  停止插補(bǔ),到達(dá)終點(diǎn)。</p><p>  3.2.4其它象限

35、的直線插補(bǔ)計(jì)算</p><p>  其它象限其實(shí)與第一象限或關(guān)于原心</p><p>  對(duì)稱或關(guān)于X軸對(duì)稱,所以,只要作符合上的</p><p>  變化,程序?qū)崿F(xiàn)非常方便。</p><p><b>  圓弧插補(bǔ)流程圖</b></p><p><b> ?。?lt;/b><

36、/p><p>  3.2.1偏差計(jì)算公式</p><p>  以第一象限逆圓為例介紹插補(bǔ)公式</p><p>  如圖7所示,要加工圓弧AB,設(shè)圓弧的圓心在原點(diǎn),并已知圓弧的起點(diǎn)A(Xo,Yo),終點(diǎn)B(Xe,Ye),圓弧半徑為R。加工動(dòng)點(diǎn)M(Xm,Ym),</p><p>  它到圓心的距離為Rm。則有三種情況:</p><

37、p><b>  當(dāng)動(dòng)點(diǎn)M在圓上有:</b></p><p><b>  當(dāng)動(dòng)點(diǎn)M在圓內(nèi)有:</b></p><p><b>  當(dāng)動(dòng)點(diǎn)M在圓外有:</b></p><p>  因此,可定義圓弧偏差判別公式如下:</p><p>  若,應(yīng)沿-X軸方向進(jìn)給一步,到M+1點(diǎn),

38、</p><p><b>  其坐標(biāo)值為: </b></p><p>  則新加工點(diǎn)的偏差為:</p><p>  若,沿+Y軸方向進(jìn)一步,到M+1點(diǎn),其坐標(biāo)值為</p><p>  則新加工點(diǎn)的偏差為:</p><p>  3.2.2終點(diǎn)判斷的方法</p><p>  在

39、繪圖的過程中,不斷地比較動(dòng)點(diǎn)與終點(diǎn)的距離,當(dāng)其距離小于脈沖當(dāng)量時(shí),在誤差允許的范圍達(dá)到終點(diǎn)。</p><p>  3.2.3其它象限的圓弧插補(bǔ)計(jì)算</p><p>  如圖8所示,其它象限的圓弧或關(guān)于X軸對(duì)稱、或關(guān)于X軸對(duì)稱、或關(guān)于原心對(duì)稱,完全可以按第一象限逆圓偏差公式進(jìn)行計(jì)算,所不同的是將進(jìn)給方向改變。</p><p><b>  第六章 設(shè)計(jì)小結(jié)&

40、lt;/b></p><p>  數(shù)控課程設(shè)計(jì)是機(jī)電專業(yè)的一個(gè)重要的實(shí)踐性環(huán)節(jié),是對(duì)所學(xué)《數(shù)控技術(shù)》課程和其它有關(guān)課程知識(shí)和技能的一次綜合性練習(xí),旨在使我們的知識(shí)得以鞏固、充實(shí)、系統(tǒng)化,并進(jìn)一步擴(kuò)展。課程設(shè)計(jì)是培養(yǎng)我們理論聯(lián)系實(shí)際、解決生產(chǎn)實(shí)際問題的良好機(jī)會(huì)。通過對(duì)數(shù)控銑床典型部件的設(shè)計(jì)和零件編程的具體問題的解決,不僅使我們對(duì)CAD/CAM仿真軟件有了更深刻的了解,還是我們編程能力有了很大的提高。</

41、p><p>  通過這次的設(shè)計(jì),使我們更加明白知識(shí)的聯(lián)貫性、融合性、全面性以及交錯(cuò)性的重要所在,這也是設(shè)計(jì)目的所在。我們應(yīng)該持有自我增值、自我發(fā)展的人生觀。要領(lǐng)悟“學(xué)海無邊苦作舟”的真諦。力爭上游。</p><p><b>  第七章 參考書目</b></p><p>  [1] 廖效果等主編.《數(shù)控技術(shù)》[M]湖北科學(xué)技術(shù)版社-2000.5&l

42、t;/p><p>  [2]《數(shù)控原理》機(jī)械工業(yè)出版社1997.3</p><p>  [3] 龔沛曾等.《Visual Basic 程序設(shè)計(jì)教程》[M].高等教育出版社-1998</p><p>  [4]《Visual Basic6.0》清華大學(xué)出版社1998.1</p><p><b>  第八章 數(shù)控代碼</b>&l

43、t;/p><p>  Dim X As Double, Y As Double, z As Double 'X,Y,Z起點(diǎn)坐標(biāo)</p><p>  Dim x1 As Double, y1 As Double, z1 As Double 'X,Y,Z終點(diǎn)坐標(biāo)</p><p>  Dim gorder As String, morde

44、r As String, ornumber As Integer 'GM指令</p><p>  Dim movorder As String, conorder1 As String, conorder2 As String '移動(dòng),控制指令</p><p>  Dim cbstype As Integer '移動(dòng)指令類型</p><

45、;p>  Dim xpoint As Double, ypoint As Double '軸測(cè)圖坐標(biāo)</p><p>  Dim xpp As Double, ypp As Double, zpp As Double '平面圖坐標(biāo)</p><p>  Dim centi As Double, centj As Double '圓心相對(duì)起點(diǎn)坐

46、標(biāo)</p><p>  Public getx As Double, gety As Double, getz As Double 'get參數(shù)設(shè)置</p><p>  Public bei As Integer '圖形放大倍數(shù)</p><p>  Dim str As String '讀入NC代碼</p><

47、p>  Dim prgline As Integer '運(yùn)行行數(shù)</p><p>  Dim readnum As Integer</p><p>  Dim mm As Double '積分插補(bǔ)累加數(shù)</p><p>  Dim fm As Double '比較插補(bǔ)FM</p><p>  D

48、im dl As Double '脈沖當(dāng)量</p><p>  Dim Stepdl As Integer</p><p>  Dim xm As Double, ym As Double, zm As Double '動(dòng)點(diǎn)X,Y,Z</p><p>  Dim mx As Double, my As Double, mz As Inte

49、ger '積分插補(bǔ)數(shù)</p><p>  Dim pausecon As Integer '暫??刂?lt;/p><p>  Dim xx() As Double, yy() As Double, zz() As Double '保存XYZ值</p><p>  Dim xx0() As Double, yy0() A

50、s Double, zz0() As Double</p><p>  Dim xf0() As Double, yf0() As Double, zf0() As Double</p><p>  Dim xf1() As Double, yf1() As Double, zf1() As Double</p><p>  Dim movrou As Intege

51、r</p><p>  Dim mousex As Double, mousey As Single</p><p>  'Private Declare Sub DIO_OutputByte Lib "d:/dio.dll" (ByVal Address As Integer, ByVal DataOut As Integer)</p><

52、p>  'Private Declare Function DIO_InputByte Lib "dio.dll" (ByVal Address As Integer) As Integer</p><p>  '并行口輸入輸出函數(shù)</p><p><b>  '畫坐標(biāo)</b></p><p>

53、  Sub drawxyz()</p><p>  linez.Cls '畫軸測(cè)圖坐標(biāo)</p><p>  linez.Scale (-700 / bei, 700 / bei)-(600 / bei, -600 / bei)</p><p>  linez.Line (0, 0)-(0, 650 / bei), QBColor(10)</

54、p><p>  linez.Line (0, 650 / bei)-(-10 / bei, 620 / bei), QBColor(10)</p><p>  linez.Line (0, 650 / bei)-(10 / bei, 620 / bei), QBColor(10)</p><p>  linez.Line (0, 0)-(-650 / bei, 0),

55、QBColor(10)</p><p>  linez.Line (-650 / bei, 0)-(-620 / bei, 10 / bei), QBColor(10)</p><p>  linez.Line (-650 / bei, 0)-(-620 / bei, -10 / bei), QBColor(10)</p><p>  linez.Line (0,

56、0)-(650 / bei * 0.7071, -650 / bei * 0.7071), QBColor(10)</p><p>  linez.Line (650 / bei * 0.7071, -650 / bei * 0.7071)-(620 / bei * 0.7071, -640 / bei * 0.7071), QBColor(10)</p><p>  linez.Line

57、 (650 / bei * 0.7071, -650 / bei * 0.7071)-(640 / bei * 0.7071, -620 / bei * 0.7071), QBColor(10)</p><p>  xlab.Caption = "X": ylab.Caption = "Y": zlab.Caption = "Z": olab.Capti

58、on = "0"</p><p>  xlab.Refresh: ylab.Refresh: zlab.Refresh: olab.Refresh</p><p>  linez.PSet (0, 600)</p><p>  linep.Cls '畫平面圖坐標(biāo)</p><p>  linep.Scal

59、e (-200 / bei, 1000 / bei)-(1000 / bei, -200 / bei)</p><p>  linep.Line (0, 950 / bei)-(0, -150 / bei), QBColor(10)</p><p>  linep.Line (10 / bei, 920 / bei)-(0, 950 / bei), QBColor(10)</p>

60、;<p>  linep.Line (-10 / bei, 920 / bei)-(0, 950 / bei), QBColor(10)</p><p>  linep.Line (-150 / bei, 0)-(950 / bei, 0), QBColor(10)</p><p>  linep.Line (950 / bei, 0)-(920 / bei, 10 / be

61、i), QBColor(10)</p><p>  linep.Line (950 / bei, 0)-(920 / bei, -10 / bei), QBColor(10)</p><p>  linep.PSet (0, 0)</p><p><b>  End Sub</b></p><p><b>  

62、'逆圓插補(bǔ)</b></p><p>  Private Sub ycirsub(rr As Double, qbc As Integer)</p><p>  Dim xtemp, ytemp, ztemp As Double</p><p>  Dim xppt, yppt, zppt As Double</p><p>

63、;  Dim xpointtemp, ypointtemp As Double</p><p>  xtemp = xm: ytemp = ym: ztemp = zm</p><p>  If X = x1 And Y = y1 Then Exit Sub</p><p>  If fm >= 0 Then</p><p>  If

64、xm >= 0 Then</p><p>  If ym >= 0 Then</p><p>  xm = xm - dl</p><p>  outdata(0).Text = 0</p><p><b>  Else</b></p><p>  ym = ym + dl</p

65、><p>  outdata(2).Text = 0</p><p><b>  End If</b></p><p><b>  Else</b></p><p>  If ym >= 0 Then</p><p>  ym = ym - dl</p>&l

66、t;p>  outdata(2).Text = 0</p><p><b>  Else</b></p><p>  xm = xm + dl</p><p>  outdata(0).Text = 0</p><p><b>  End If</b></p><p>

67、<b>  End If</b></p><p><b>  Else</b></p><p>  If xm >= 0 Then</p><p>  If ym >= 0 Then</p><p>  ym = ym + dl</p><p>  outdata

68、(2).Text = 0</p><p><b>  Else</b></p><p>  xm = xm + dl</p><p>  outdata(0).Text = 0</p><p><b>  End If</b></p><p><b>  Else&

69、lt;/b></p><p>  If ym >= 0 Then</p><p>  xm = xm - dl</p><p>  outdata(0).Text = 0</p><p><b>  Else</b></p><p>  ym = ym - dl</p>

70、<p>  outdata(2).Text = 0</p><p><b>  End If</b></p><p><b>  End If</b></p><p><b>  End If</b></p><p>  If xtemp = xm And ytemp

71、 = ym And ztemp = zm Then Exit Sub</p><p>  xpp = xm - (centi - X) * 10: ypp = ym - (centj - Y) * 10: zpp = zm</p><p>  xppt = xtemp - (centi - X) * 10: yppt = ytemp - (centj - Y) * 10: zppt = z

72、temp</p><p><b>  '平面圖坐標(biāo)</b></p><p>  If zpp <= 0 Then</p><p>  ReDim Preserve xx(UBound(xx) + 1), yy(UBound(yy) + 1), zz(UBound(zz) + 1) As Double</p><

73、p>  xx(UBound(xx)) = xpp: yy(UBound(yy)) = ypp: zz(UBound(zz)) = zpp</p><p>  ReDim Preserve xx0(UBound(xx0) + 1), yy0(UBound(yy0) + 1), zz0(UBound(zz0) + 1) As Double</p><p>  xx0(UBound(xx0

74、)) = xpp: yy0(UBound(yy0)) = ypp: zz0(UBound(zz0)) = 0</p><p><b>  End If</b></p><p>  xpoint = -xpp + ypp * 0.7071 '軸測(cè)變換</p><p>  ypoint = -ypp * 0.7071 + zpp<

75、;/p><p>  xpointtemp = -xppt + yppt * 0.7071</p><p>  ypointtemp = -yppt * 0.7071 + zppt</p><p>  xcText.Text = xpp / 10: ycText.Text = ypp / 10: zcText.Text = zpp / 10 '工件坐標(biāo)</p

76、><p>  linep.Line -(xpp, ypp), QBColor(qbc) '畫平面圖</p><p>  linez.Line (xpointtemp, ypointtemp)-(xpoint, ypoint), QBColor(qbc)</p><p>  If zpp < 0 Then</p><p&g

77、t;  linez.Line (xpointtemp, ypointtemp - zppt)-(xpoint, ypoint - zpp), QBColor(qbc - 1)</p><p><b>  End If</b></p><p>  fm = xm ^ 2 + ym ^ 2 - rr ^ 2</p><p><b>  E

78、nd Sub</b></p><p><b>  '順圓插補(bǔ)</b></p><p>  Private Sub scirsub(rr As Double, qbc As Integer)</p><p>  Dim xtemp, ytemp, ztemp As Double</p><p>  Di

79、m xppt, yppt, zppt As Double</p><p>  Dim xpointtemp, ypointtemp As Double</p><p>  xtemp = xm: ytemp = ym: ztemp = zm</p><p>  If X = x1 And Y = y1 Then Exit Sub</p><p&g

80、t;  If fm >= 0 Then</p><p>  If xm >= 0 Then</p><p>  If ym >= 0 Then</p><p>  ym = ym - dl</p><p>  outdata(2).Text = 0 '0表示正方向</p><

81、;p>  outdata(3).Text = 1 '1表示負(fù)方向</p><p><b>  Else</b></p><p>  xm = xm - dl</p><p>  outdata(0).Text = 0</p><p>  outdata(1).Text = 1<

82、/p><p><b>  End If</b></p><p><b>  Else</b></p><p>  If ym >= 0 Then</p><p>  xm = xm + dl</p><p>  outdata(0).Text = 0</p>

83、<p>  outdata(1).Text = 0</p><p><b>  Else</b></p><p>  ym = ym + dl</p><p>  outdata(2).Text = 0</p><p>  outdata(3).Text = 0</p><p><

84、b>  End If</b></p><p><b>  End If</b></p><p><b>  Else</b></p><p>  If xm >= 0 Then</p><p>  If ym >= 0 Then</p><p>

85、  xm = xm + dl</p><p>  outdata(0).Text = 0</p><p>  outdata(1).Text = 0</p><p><b>  Else</b></p><p>  ym = ym - dl</p><p>  outdata(2).Text =

86、0</p><p>  outdata(3).Text = 1</p><p><b>  End If</b></p><p><b>  Else</b></p><p>  If ym >= 0 Then</p><p>  ym = ym + dl</p&

87、gt;<p>  outdata(2).Text = 0</p><p>  outdata(3).Text = 0</p><p><b>  Else</b></p><p>  xm = xm - dl</p><p>  outdata(0).Text = 0</p><p>

88、;  outdata(1).Text = 1</p><p><b>  End If</b></p><p><b>  End If</b></p><p><b>  End If</b></p><p>  If xtemp = xm And ytemp = ym An

89、d ztemp = zm Then Exit Sub</p><p>  xppt = xtemp - (centi - X) * 10: yppt = ytemp - (centj - Y) * 10: zppt = ztemp</p><p>  xpp = xm - (centi - X) * 10: ypp = ym - (centj - Y) * 10: zpp = zm<

90、/p><p>  If zpp <= 0 Then</p><p>  ReDim Preserve xx(UBound(xx) + 1), yy(UBound(yy) + 1), zz(UBound(zz) + 1) As Double</p><p>  xx(UBound(xx)) = xpp: yy(UBound(yy)) = ypp: zz(UBound

91、(zz)) = zpp</p><p>  ReDim Preserve xx0(UBound(xx0) + 1), yy0(UBound(yy0) + 1), zz0(UBound(zz0) + 1) As Double</p><p>  xx0(UBound(xx0)) = xpp: yy0(UBound(yy0)) = ypp: zz0(UBound(zz0)) = 0</p

92、><p><b>  End If</b></p><p>  xpoint = -xpp + ypp * 0.7071 '軸測(cè)變換</p><p>  ypoint = -ypp * 0.7071 + zpp</p><p>  xpointtemp = -xppt + yppt * 0.70

93、71</p><p>  ypointtemp = -yppt * 0.7071 + zppt</p><p>  xcText.Text = xpp / 10: ycText.Text = ypp / 10: zcText.Text = zpp / 10 '工件坐標(biāo)</p><p>  linep.Line -(xpp, ypp), QBColor(qbc

94、) '畫平面圖</p><p>  linez.Line (xpointtemp, ypointtemp)-(xpoint, ypoint), QBColor(qbc)</p><p>  If zpp < 0 Then</p><p>  linez.Line (xpointtemp, ypointtemp - zppt)-(xpoin

95、t, ypoint - zpp), QBColor(qbc - 1)</p><p><b>  End If</b></p><p>  fm = xm ^ 2 + ym ^ 2 - rr ^ 2</p><p><b>  End Sub</b></p><p><b>  '

96、直線積分插補(bǔ)</b></p><p>  Private Sub linesub(cx, cy, cz As Integer, fangx, fangy, fangz As Integer, qbc As Integer)</p><p>  'CX,CY,CZ為x,y,z偏移量,fangx,fangy,fangz 1表示正方向,-1為負(fù)方向</p>&l

97、t;p>  If cx = 0 And cy = 0 And cz = 0 Then Exit Sub</p><p>  Dim xtemp, ytemp, ztemp As Double</p><p>  Dim xppt, yppt, zppt As Double</p><p>  Dim xpointtemp, ypointtemp As Doub

98、le</p><p>  xtemp = xm: ytemp = ym: ztemp = zm</p><p>  mx = mx + cx / 10: my = my + cy / 10: mz = mz + cz / 10</p><p>  If mx >= mm Then</p><p>  xm = xm + fangx *

99、dl</p><p>  mx = mx - mm</p><p>  outdata(0).Text = 0</p><p><b>  End If</b></p><p>  If my >= mm Then</p><p>  ym = ym + fangy * dl</p&g

100、t;<p>  my = my - mm</p><p>  outdata(2).Text = 0</p><p><b>  End If</b></p><p>  If mz >= mm Then</p><p>  zm = zm + fangz * dl</p><p&

101、gt;  mz = mz - mm</p><p>  outdata(4).Text = 0</p><p><b>  End If</b></p><p>  If xtemp = xm And ytemp = ym And ztemp = zm Then Exit Sub</p><p>  xpp = xm +

102、 X * 10: ypp = ym + Y * 10: zpp = zm + z * 10</p><p>  If zpp <= 0 Then</p><p>  ReDim Preserve xx(UBound(xx) + 1), yy(UBound(yy) + 1), zz(UBound(zz) + 1) As Double</p><p>  xx(U

103、Bound(xx)) = xpp: yy(UBound(yy)) = ypp: zz(UBound(zz)) = zpp</p><p>  ReDim Preserve xx0(UBound(xx0) + 1), yy0(UBound(yy0) + 1), zz0(UBound(zz0) + 1) As Double</p><p>  xx0(UBound(xx0)) = xpp: y

104、y0(UBound(yy0)) = ypp: zz0(UBound(zz0)) = 0</p><p><b>  End If</b></p><p>  xppt = xtemp + X * 10: yppt = ytemp + Y * 10: zppt = ztemp + z * 10</p><p>  xpoint = -xpp +

105、ypp * 0.7071 '軸測(cè)變換</p><p>  ypoint = -ypp * 0.7071 + zpp</p><p>  xpointtemp = -xppt + yppt * 0.7071</p><p>  ypointtemp = -yppt * 0.7071 + zppt</p><p>  xcText.Te

106、xt = xpp / 10: ycText.Text = ypp / 10: zcText.Text = zpp / 10 '工件坐標(biāo)</p><p>  linep.Line -(xpp, ypp), QBColor(qbc)</p><p>  linez.Line (xpointtemp, ypointtemp)-(xpoint, ypoint), QBColor(qbc)&

107、lt;/p><p>  If zpp < 0 Then</p><p>  linez.Line (xpointtemp, ypointtemp - zppt)-(xpoint, ypoint - zpp), QBColor(qbc - 1)</p><p><b>  End If</b></p><p><b

108、>  End Sub</b></p><p>  Private Sub Form_Load()</p><p>  Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)</p><p>  Me.Top = GetSetting(App.

109、Title, "Settings", "MainTop", 1000)</p><p>  Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500)</p><p>  Me.Height = GetSetting(App.Title, &q

110、uot;Settings", "MainHeight", 6500)</p><p><b>  '讀入設(shè)置</b></p><p>  fileframe.Caption = "代碼"</p><p>  getx = getform.getxt.Text '讀入get

111、參數(shù)設(shè)置</p><p>  gety = getform.getyt.Text</p><p>  getz = getform.getzt.Text</p><p>  bei = getform.beit.Text</p><p>  dl = dlt.Text * 10</p><p>  Call drawx

112、yz</p><p>  ReDim xx(0) As Double, yy(0) As Double, zz(0) As Double</p><p>  ReDim xx0(0) As Double, yy0(0) As Double, zz0(0) As Double</p><p><b>  End Sub</b></p>

113、<p>  Private Sub Form_Unload(Cancel As Integer)</p><p>  If Me.WindowState <> vbMinimized Then</p><p>  SaveSetting App.Title, "Settings", "MainLeft", Me.Left&l

114、t;/p><p>  SaveSetting App.Title, "Settings", "MainTop", Me.Top</p><p>  SaveSetting App.Title, "Settings", "MainWidth", Me.Width</p><p>  SaveS

115、etting App.Title, "Settings", "MainHeight", Me.Height</p><p><b>  '保存設(shè)置</b></p><p><b>  End If</b></p><p><b>  End</b><

116、;/p><p><b>  End Sub</b></p><p><b>  '清除</b></p><p>  Private Sub mnueditclear_Click()</p><p>  filetxt.Text = "" '清除文件框<

117、;/p><p>  arimage.Top = 300</p><p><b>  End Sub</b></p><p><b>  '清除</b></p><p>  Private Sub clear_Click()</p><p>  filetxt.Text =

118、 "" '清除文件框</p><p>  arimage.Top = 300</p><p><b>  End Sub</b></p><p><b>  '暫停</b></p><p>  Private Sub mnurunpause_Click

119、()</p><p>  clear.Enabled = True</p><p>  Timer2.Interval = 0</p><p>  Timer1.Interval = 0</p><p>  pausecon = 1</p><p><b>  End Sub</b></p&

120、gt;<p><b>  '暫停</b></p><p>  Private Sub pause_Click()</p><p>  clear.Enabled = True</p><p>  Timer2.Interval = 0</p><p>  Timer1.Interval = 0<

121、;/p><p>  pausecon = 1</p><p><b>  End Sub</b></p><p><b>  '運(yùn)行</b></p><p>  Private Sub mnurunrun_Click()</p><p>  If pausecon = 1

122、 Then '當(dāng)暫停時(shí)為繼續(xù)</p><p>  Timer1.Interval = 1</p><p>  Timer2.Interval = 1</p><p>  pausecon = 0</p><p><b>  Else</b></p><p>  If file

123、txt.Text = "" Then</p><p>  MsgBox "請(qǐng)加載NC程序", vbOKOnly, "加載失敗"</p><p><b>  Exit Sub</b></p><p><b>  Else</b></p><p&g

124、t;  clear.Enabled = False</p><p>  ReDim xx(0), yy(0), zz(0) As Double</p><p>  ReDim xx0(0), yy0(0), zz0(0) As Double</p><p>  ReDim xf0(0) As Double, yf0(0) As Double, zf0(0) As D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論