版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)控機床課程設(shè)計數(shù)控系統(tǒng)的計算機仿真 TOC o 1-3 h z u 目 錄 HYPERLINK l _Toc43608834 一、任務(wù)書2 HYPERLINK l _Toc43608835 二、摘要3 HYPERLINK l _Toc43608836 三、課程設(shè)計概述4 HYPERLINK l _Toc43608838 四、設(shè)計說明5 HYPERLINK l _Toc43608840 1總流程圖52NC代碼的取 63插補算法說明 74插補過程 7五、程序結(jié)果說明111、主界面簡介112、參數(shù)設(shè)定界面圖123、NC代碼格式124、程序根本操作12六 HYPERLINK l _Toc436088
2、51 、心得體會15七、參考文獻16八、附錄程序原代碼17一、任務(wù)書設(shè)計題目:對于給定的一段NC代碼,用VB或其他高級語言編寫程序解釋、插補,在PC機上仿真數(shù)控裝置,進行圖形描繪、坐標(biāo)值顯示、步進電機控制模擬顯示及信號輸出、冷卻液和主軸開關(guān)量控制模擬顯示及信號輸出。 具體要求如下:NC代碼中包含的代碼類型有:G90 G54 G圖1例:如右圖為一給具體圖形示意圖,NC代碼如下及加工軌跡圖:圖1%O0000N106 G0 G90 G54 X10. Y20. MN108Z50.s100N110Z10.N112G1Z-1.N114Y15.0N118GN122G1Y20.0N126X10.N128G0Z
3、50.N130M5MN136M30%要求根據(jù)NC代碼屏幕模擬加工過程,圖形顯示位置,坐標(biāo)值顯示,輔助功能狀態(tài)顯示冷卻液和主軸開關(guān)量控制模擬顯示。PC機模擬加工過程中,要求有實時的驅(qū)動三軸步進電機的控制信號、控制冷卻液和主軸轉(zhuǎn)動的開關(guān)量輸出控制信號。假設(shè)信號從計算機并行打印口的數(shù)據(jù)線輸出,端口地址為0X378。并行數(shù)據(jù)線分配如下低電平有效表一 并行口數(shù)據(jù)線信號數(shù)據(jù)線信號D0D1D2D3D4D5D6D7定義PulseXDirXPulseYDirYPulseZDirZ主軸控制信號冷卻液控制信號二、摘要從工程的角度來看,仿真就是通過對系統(tǒng)模型的實驗去研究一個已有的或設(shè)計中的系統(tǒng),分析復(fù)雜的動態(tài)對象,仿
4、真是一種有效的方法,可以減少風(fēng)險,縮短設(shè)計和制造的周期并節(jié)約投資。計算機仿真就是借助計算機,利用系統(tǒng)模型對實際系統(tǒng)進行實驗研究的過程。它隨著計算機技術(shù)的開展而迅速地開展,在仿真中它有越來越重要的地位。本仿真程序應(yīng)用的是脈沖插補算法。在仿真過程中應(yīng)用了兩種插補方法:直線插補,圓弧插補包括順時方向插補和逆時方向插補。本仿真程序可以實現(xiàn)如下指令的判別和執(zhí)行:G01,G02, G03, G04,G05,M05,M08 ,M09,M03,M04,M30. AbstractLooked from the project angle that, the simulation was through stud
5、iesto the system model experiment to have or in the design system,analyzed the complex dynamic object, the simulation is one effectivemethod, might reduce the risk, reduced design and the manufacturecycle and saves the investment. The computer simulation draws supportfrom the computer, conducts the
6、experimental study using the systemmodel to the actual system the process. It but rapidly develops alongwith the computer technology development, it has the more and moreimportant status in the simulation. This simulated program applies is the pulse inserts makes up thealgorithm. Applied two kinds i
7、n the simulation process to insert makesup the method: The straight line inserts makes up, the circular arcinserts makes up (including inserts along the time direction makes upwith counter time direction inserts makes up). This simulated program may realize the following instructiondistinction and t
8、he execution: G01,G02, G03, G04,G05, M05, M08, M09, M03, M04, M30. 三、 課程設(shè)計概述3.1 課程設(shè)計的目的數(shù)控機床課程設(shè)計是機電專業(yè)教學(xué)活動的一個重要的實踐性環(huán)節(jié),是對學(xué)生所學(xué)?數(shù)控機床?課程和其它有關(guān)課程知識和技能的一次綜合性練習(xí),旨在使之穩(wěn)固、充實、系統(tǒng)化,并得到進一步擴展。課程設(shè)計是培養(yǎng)學(xué)生理論聯(lián)系實際、解決生產(chǎn)實際問題的時機。通過對數(shù)控銑床典型部件的結(jié)構(gòu)設(shè)計和零件編程的具體問題的解決,使學(xué)生對數(shù)控機床的結(jié)構(gòu)原理、設(shè)計方法以及用編程方法處理實際問題的一般步驟和具體技巧得到訓(xùn)練,提高運用所學(xué)專業(yè)知識分析問題和解決問題的能力
9、。3.2 課程設(shè)計的內(nèi)容與要求用VB編程,編寫計算機軟件在WINDOWS實現(xiàn)數(shù)控裝置的計算機仿真。要求清楚地分析問題,提出算法、確定人機界面、列出流程圖,最后用程序驗證,并且提交程序說明書。3.3課程設(shè)計的步驟課程設(shè)計的步驟大致包括:調(diào)查研究,收集資料,查閱文獻;論證及確定設(shè)計方案,進行機械結(jié)構(gòu)設(shè)計和軟件設(shè)計,編寫程序和編制設(shè)計說明書,最后參加課程設(shè)計的辯論。四、 設(shè)計說明1、總流程圖結(jié)束結(jié)束開始圖1 總體流程圖輸入NC代碼到“程序代碼編輯欄運行相關(guān)狀態(tài)恢復(fù)默認值,并讀入NC代碼到“程序運行狀態(tài)欄存在NC代碼NY獲取工件原點坐標(biāo)從“程序運行狀態(tài)欄逐行讀入NC命令命令讀完?插補成型YN坐標(biāo)值M代
10、碼F代碼S代碼G代碼狀態(tài)信息G01G02/G03G90/G542、NC代碼的讀取代碼讀取的流程圖如下列圖2,為了能在模擬前讀完代碼,并且判斷出代碼的正確性,本程序采取一開始就調(diào)試全部代碼。如圖,一開始先讀入整個代碼文本,接著判斷程序的開頭和結(jié)尾是否有%為程序開始和結(jié)束的標(biāo)志符號,然后一行一行地讀,把每行所讀入的指令和坐標(biāo)值存入數(shù)組,并且判斷代碼和坐標(biāo)值的正誤,特別是遇到G02、G03的圓弧指令時,要判斷所給定的坐標(biāo)值能否畫圓弧。正確性判斷完畢之后,就判斷整段程序是否讀完,即判斷下一行是否“%,如果不是就循環(huán)讀下一行,直到下一行為“%為止。讀入程序到讀入程序到“程序運行狀態(tài)欄k=0結(jié)束讀入第K行
11、X、Y、I、J的坐標(biāo)值和G、M、S、F指令調(diào)用相應(yīng)的模塊代碼程序全部讀完?開始N,next kY圖2 NC代碼流程圖3、插補算法說明本軟件應(yīng)用脈沖增量插補方法,這類插補方法的特點是:每次插補的結(jié)果僅產(chǎn)生一個單位的行程增量一個脈沖當(dāng)量,以一個脈沖的方式輸出給步進電機。其根本思想是:用折線來逼近曲線包括直線。插補速度與進給速度密切相關(guān)。脈沖增量插補的實現(xiàn)方法較簡單。脈沖增量插補的方法有逐點比擬法、數(shù)字積分法,本軟件用逐點比擬法。逐點比擬法的原理是:在仿真過程中,能逐點地計算和判別運動軌跡與給定軌跡的偏差,并根據(jù)偏差控制進給軸向給定輪廓靠近,縮小偏差,使加工輪廓逼近給定輪廓。逐點比擬法是以折線來逼近
12、直線和圓弧曲線的,它與規(guī)定的直線或圓弧之間的最大誤差不超過一個脈沖當(dāng)量,因此,只要將脈沖當(dāng)量取得足夠小,就可到達加工精度的要求。4、插補過程本程序采用的是逐點比擬插補方法。1直線插補1.1偏差計算公式XYAXe,YeXYAXe,YeMXm,Ym圖3Xm/Ym=Xe/Ye即 Ym XeYeXm=0由此,可定義直線插補的偏差判別式如下:Fm=XeYm-YeXm假設(shè) Fm=0 表示動點在OA直線上假設(shè) Fm0 表示動點在OA直線上方假設(shè) Fm0 表示動點在OA直線下方當(dāng) 時M點在直線上或在直線上方,應(yīng)沿+X方向進給一步,走步后新的坐標(biāo)值為Xm+1=Xm +1Ym+1=Ym新的偏差為:F m+1=Fm
13、Ye假設(shè)Fm0 那么應(yīng)沿+Y方向進給一步,走步后新的坐標(biāo)值為Xm+1=XmYm+1=Ym +1新的偏差為:F m+1=Fm+Xe1.2終點判斷的方法設(shè)置變量CountN減法計數(shù)器,在加工之前存入終點坐標(biāo)值Xe 、Ye,X或Y坐標(biāo)每進給一步時,就在計數(shù)器中、減去1,直到為零,停止插補,到達終點。Xo,YoX(Y)= X(Y)-1+Y進給F=F+YeXo,YoX(Y)= X(Y)-1+Y進給F=F+YeF=F-Xe+X進給F0X(Y)=0=NYNNY圖4直線插補流程圖結(jié)束開始其它象限其實與第一象限或關(guān)于原心對稱或關(guān)于X軸對稱,所以,只要作符合上的化,程序?qū)崿F(xiàn)非常方便。直線插補流程圖2圓弧插補2.1
14、偏差計算公式以第一象限逆圓為例介紹插補公式如圖7所示,要加工圓弧AB,設(shè)圓弧的圓心在原點,并圓弧的起點AXo,Yo,終點B(Xe,Ye),圓弧半徑為R。加工動點M(Xm,Ym),它到圓心的距離為Rm。那么有三種情況:當(dāng)動點M在圓上有:RmRXRmRXYB(Xe,Ye)A(Xo,Yo)圖6第一象限逆圓弧M(Xm,Ym)當(dāng)動點M在圓外有:因此,可定義圓弧偏差判別公式如下:假設(shè),應(yīng)沿-X軸方向進給一步,到M+1點,其坐標(biāo)值為: 那么新加工點的偏差為:假設(shè),沿+Y軸方向進一步,到M+1點,其坐標(biāo)值為YF(xYF(xm)0y= +F(xm)0 x= F(xm)0y= F(xm)0 x= F(xm)0 x
15、= +F(xm)0y= F(xm)0y= +F(xm)0 x= +XO逆圓圖7逆圓插補示意圖那么新加工點的偏差為:2.2終點判斷的方法在繪圖的過程中,不斷地比擬動點與終點的距離,當(dāng)其距離小于脈沖當(dāng)量時,在誤差允許的范圍到達終點。2.3其它象限的圓弧插補計算如圖8所示,其它象限的圓弧或關(guān)于X軸對稱、或關(guān)于X軸對稱、或關(guān)于原心對稱,完全可以按第一象限逆圓偏差公式進行計算,所不同的是將進給方向改變。2.4 圓弧插補流程圖:起點起點(X1,Y1) 終點(X2,Y2)Xm=Xm1 Ym=Ym1Fm=偏差判別式到了終點Fm0N動點在圓心的東北向Ym1=Ym+1 Xm1=Xm-1Ym1=Ym-1Xm1=Xm
16、+1YcircleI=0 circleJ=0X1=X2 Y1=Y2(下一次插補的起點為當(dāng)前終點)Y開始動點在圓心的西北向動點在圓心的西南向動點在圓心的東南向YYY動點在圓心的東北向Xm1=Xm-1Ym1=Ym-1Xm1=Xm+1Ym1=Ym+1 Y動點在圓心的西北向動點在圓心的西南向動點在圓心的東南向YYY圖8 逆圓弧插補流程圖結(jié)束畫圖NY五、 程序設(shè)計及運行結(jié)果1、主界面簡介本程序完全實現(xiàn)設(shè)計任務(wù)的要求。圖圖 SEQ 圖表 * ARABIC 1代碼編輯框代碼運行實時顯示框并行口輸出狀態(tài)工作狀態(tài)框工件坐標(biāo)原點及動態(tài)坐標(biāo)顯示刀具切割路線模擬顯示區(qū)菜單工具欄平面軸測圖轉(zhuǎn)換如圖1所示,程序主界面由如
17、下幾個局部組成:菜單工具欄、快捷鍵、NC代碼編輯框、代碼實時運行顯示框、坐標(biāo)值實時顯示框、工作狀態(tài)框、冷卻狀態(tài)框、刀具切割路線模擬框等等。其中,工具欄菜單依次為:文件、編輯、運行、關(guān)于,工作狀態(tài)框顯示了主軸的轉(zhuǎn)速及轉(zhuǎn)向、脈沖響應(yīng)狀態(tài)框顯示了步進電機X電機、Y電機的轉(zhuǎn)向。NC代碼在NC代碼輸入框輸入,根據(jù)NC代碼在NC模擬框進行模擬加工。2、參數(shù)設(shè)定界面圖如圖2所示,在此界面,根據(jù)需要可以選擇脈沖當(dāng)量單位為毫米微米mm以及圖形的放大倍數(shù),以便顯示,插補形式由于時間關(guān)系,只編寫一種逐點比擬法,有可能的話繼續(xù)完善。圖3 圖3 NC代碼輸入框圖圖 SEQ 圖表 * ARABIC 2 參數(shù)設(shè)定界面3、N
18、C代碼格式在NC代碼輸入框如右,開頭必須要有程序開始符“%、結(jié)尾同樣以結(jié)束符“%結(jié)束。指令符G、M可以是大寫也可以是小寫,指令間允許有空格。輸入圓心時只能用IJ指令,R指令不能識別,令外,在同一行中不可輸入兩條M指令這是該程序的缺乏之處,還有待提高。4、程序根本操作首先,在NC代碼輸入框輸入NC代碼或翻開已有的代碼,接著按工具欄上的運行“調(diào)試,程序經(jīng)過調(diào)試后,如果程序有錯,會自動報錯,報錯時光標(biāo)將會定位在有錯的代碼附近,可以方便用戶修改,直到無誤為至,此時程序會告訴用戶調(diào)試成功,緊接著按“模擬,在NC模擬框便會出現(xiàn)用戶希望的圖形同時紅色指標(biāo)實時指在程序運行所在的代碼段。繪圖的過程中用戶可以按“
19、暫停鍵暫停繪圖、再按時便繼續(xù)繪制,按“結(jié)束整個程序?qū)⑼V埂Ec此同時,坐標(biāo)值實時顯示框?qū)崟r顯示動點的坐標(biāo),工作狀態(tài)框也反映工作狀況。在快捷工具欄功能按鈕一樣可以實現(xiàn)如上功能。整個加工過程比擬直觀,一目了然。例子一代碼%例子一代碼%O0000N106G090GN108Z50.s100N110Z10.N112G1Z-1.N114Y15.0N118GN122G1Y20.0N126X10.N128G0Z50.N130M5MN136M30%圖4平面圖例二N例二N01 G92X0Y0Z0;N02 G90G17G00X15Y10SN03 G01X58F100MN04 G02X78Y30I-20J0;N05 G
20、01Y48;N06 X38;N07 G03X15Y25I0J23;N08 G01Y10;N09 G00Y0M09;N10 M02;六、心得體會課程設(shè)計是培養(yǎng)我們理論聯(lián)系實際、解決生產(chǎn)實際問題的良好時機。通過對數(shù)控銑床典型部件的設(shè)計和零件編程的具體問題的解決,不僅使我們對CAD/CAM仿真軟件有了更深刻的了解,還是我們編程能力有了很大的提高。雖然設(shè)計過程很辛苦、,但當(dāng)看到自己奮戰(zhàn)的勞動成果,還是開心得忘記了一切,沖動不已。通過這次數(shù)控課程設(shè)計,加深了對所學(xué)?數(shù)控技術(shù)?課程和其它有關(guān)課程知識的理解。使我們的知識得以穩(wěn)固、充實、系統(tǒng)化,并進一步擴展。使我們更加明白知識的聯(lián)貫性、融合性、全面性以及交錯
21、性的重要所在,這也是設(shè)計目的所在。軟件的主程序是由小組成員共同合作完成的,由于我對VB的掌握水平有限,在這個程序中還存在著這樣或者那樣的錯誤,特別是對平面圖到軸測圖圖的轉(zhuǎn)換里坐標(biāo)的轉(zhuǎn)換和z軸脈沖和直線插補的問題,到現(xiàn)在還沒有解決,有待于自己再更進一步的學(xué)習(xí)后解決。不管最終的成績?nèi)绾?,這絕對是我至今最難忘的一次實習(xí),而且是最有成功感的一次。同時我學(xué)會了耐心、合作、互助、堅持不懈,受益匪淺。七參考資料廖效果,劉又午,朱劍英. 數(shù)控技術(shù).武漢湖北科學(xué)技術(shù)出版社,2000.5江志文主編. Visual basic 程序設(shè)計教程.廣州中山大學(xué)出版社,2003.2孫宏偉 馬玉林 數(shù)控加工仿真器加工代碼的計
22、算機識別 機械制造-2002年3期譚親四 用VB60開發(fā)數(shù)控仿真系統(tǒng) 機械制造-2001年9期劉炳文.visual basic圖形與多媒體程序設(shè)計.清華大學(xué)出版社,2002八、實現(xiàn)程序的代碼及其說明Dim absXo As Single, absYo As Single, absZo As Single 絕對坐標(biāo)原點在PictureXY控件中的位置Dim Xo As Single, Yo As Single, Zo As Single 工件坐標(biāo)原點Dim x1 As Single, y1 As Single, z1 As Single 起點Dim x2 As Single, y2 As Sin
23、gle, z2 As Single 終點Dim xm As Single, ym As Single, zm As Single 當(dāng)前動點Dim xm1 As Single, ym1 As Single, zm1 As Single 下一動點Dim circleI As Single, circleJ As Single 圓心指向起點向量Dim circleXo As Single, circleYo As Single 圓弧圓心Dim CircleRunTimes As Integer 記錄圓弧插補時間控件運行次數(shù)Dim fm As Single 偏差判別式Dim CoefInPic As
24、Single 在PictureXY上畫圖的修正系數(shù)Dim Step As Single 頻沖當(dāng)量Dim Multiple As Single 圖形放大倍數(shù)Dim g0123 As String 判斷之前是否執(zhí)行過G00,G01,G02或G03Dim flagG00 As Boolean True為快速定位Dim flagG90 As Boolean True使用絕對坐標(biāo)Dim flagChangeXYZ As Boolean 判斷XYZ坐標(biāo)是否改變Dim flagStop As Boolean 判斷是否按了停止按扭Private Sub drawing()畫平面坐標(biāo)PictureXY.ClsP
25、ictureXY.Scale (-4500, 4500)-(4500, -4500)PictureXY.Line (-4450, 0)-(4450, 0), vbWhitePictureXY.Line (4450, 0)-(4350, 25), vbWhitePictureXY.Line (4450, 0)-(4350, -25), vbWhitePictureXY.Line (0, -4450)-(0, 4450), vbWhitePictureXY.Line (25, 4350)-(0, 4450), vbWhitePictureXY.Line (-25, 4350)-(0, 4450),
26、 vbWhitexlabel.Visible = True: Ylabel.Visible = True: Olabel.Visible = Truexlabel.Caption = X: Ylabel.Caption = Y: Olabel.Caption = Oxlabel.Refresh: Ylabel.Refresh: Olabel.Refresh畫軸側(cè)坐標(biāo)Picturexyz.ClsPicturexyz.Scale (-4500, 4500)-(4500, -4500)Picturexyz.Line (-4450, 0)-(0, 0), vbWhitePicturexyz.Line
27、(-4450, 0)-(-4350, 25), vbWhitePicturexyz.Line (-4450, 0)-(-4350, -25), vbWhitePicturexyz.Line (0, 0)-(0, 4450), vbWhitePicturexyz.Line (25, 4350)-(0, 4450), vbWhitePicturexyz.Line (-15, 4350)-(0, 4450), vbWhitePicturexyz.Line (0, 0)-(4450 * 0.7071, -4450 * 0.7071), vbWhitePicturexyz.Line (4345 * 0.
28、7071, -4320 * 0.7071)-(4450 * 0.7071, -4450 * 0.7071), vbWhitePicturexyz.Line (4320 * 0.7071, -4345 * 0.7071)-(4450 * 0.7071, -4450 * 0.7071), vbWhitexyz_x.Visible = True: xyz_y.Visible = True: xyz_z.Visible = True: XYZ_O.Visible = True xyz_x.Caption = X: xyz_z.Caption = Z: xyz_y.Caption = Y: XYZ_O.
29、Caption = Oxyz_x.Refresh: xyz_y.Refresh: xyz_z.Refresh: XYZ_O.RefreshEnd SubPrivate Sub CmdCls_Click() MenuCls_ClickEnd SubPrivate Sub CmdPause_Click() MenuPause_ClickEnd SubPrivate Sub CmdStop_Click() MenuStop_ClickEnd SubPrivate Sub CodeEditCls_Click() MenuCls_ClickEnd SubPrivate Sub CodeEditOpen_
30、Click() MenuOpen_ClickEnd SubPrivate Sub Exit_Click()EndEnd SubPrivate Sub Form_Load() absXo = 0: absYo = 0: absZo = 0 絕對坐標(biāo)原點 Xo = Setupform.TextYC: Yo = Setupform.TextXC: Zo = Setupform.TextZC 工件坐標(biāo)原點 flagG00 = False FramePicXY.Caption = 比例: + Setupform.TextMultiple + 脈沖當(dāng)量: + Setupform.TextStep + mm
31、End SubPrivate Sub NCircleTimer_Timer() 逆圓弧插補 xm = xm1: ym = ym1: zm = zm1 把上次的動點值賦給當(dāng)前動點 fm = (xm - circleXo) 2 + (ym - circleYo) 2 - circleI 2 - circleJ 2 偏差判別式 CircleRunTimes = CircleRunTimes + 1 運行次數(shù) If Not (Abs(xm - x2) Step And Abs(ym - y2) Step) Or CircleRunTimes = 1 Then 非第一次運行時,判斷是否到了終點 If f
32、m = 0 And ym - circleYo = 0 Then 動點在圓心的東北方向 Call PulseDirXYZ(x, 1) ElseIf xm - circleXo = 0 Then 動點在圓心的西北方向 Call PulseDirXYZ(y, 1) ElseIf xm - circleXo = 0 And ym - circleYo = 0 And ym - circleYo = 0 Then Call PulseDirXYZ(y, -1) ElseIf xm - circleXo = 0 Then Call PulseDirXYZ(x, 1) ElseIf xm - circle
33、Xo = 0 And ym - circleYo = 0 Then Call PulseDirXYZ(y, 1) Else Call PulseDirXYZ(x, -1) End If End If PictureXY.Line (xm + absXo + Xo, ym + absYo + Yo)-(xm1 + absXo + Xo, ym1 + absYo + Yo), vbGreen Picturexyz.Line (-(xm + absXo + Xo) + (ym + absYo + Yo) * 0.7071, -(ym + absYo + Yo) * 0.7071 + (zm + ab
34、sZo + Zo)-(-(xm1 + absXo + Xo) + (ym1 + absYo + Yo) * 0.7071, -(ym1 + absYo + Yo) * 0.7071 + (zm + absZo + Zo), vbGreen absXo等為機床坐標(biāo)原點在PictureXY控件中的位置,Xo等為工件坐標(biāo)原點 Else NCircleTimer.Enabled = False x1 = x2 / Multiple: y1 = y2 / Multiple: z1 = z2 / Multiple 下一次插補的起點為當(dāng)前終點 x2 = x1: y2 = y1: z2 = z1 circle
35、I = 0: circleJ = 0 End IfEnd SubPrivate Sub PopupCls_Click() MenuCls_ClickEnd SubPrivate Sub PopupPause_Click() MenuPause_ClickEnd SubPrivate Sub PopupRun_Click() MenuRun_ClickEnd SubPrivate Sub PopupSetup_Click() MenuSetup_ClickEnd SubPrivate Sub PopupStop_Click() MenuStop_ClickEnd SubPrivate Sub S
36、CircleTimer_Timer() 順圓弧插補 xm = xm1: ym = ym1: zm = zm1 把上次的動點值賦給當(dāng)前動點 fm = (xm - circleXo) 2 + (ym - circleYo) 2 - circleI 2 - circleJ 2 偏差判別式 CircleRunTimes = CircleRunTimes + 1 運行次數(shù) If Not (Abs(xm - x2) Step And Abs(ym - y2) Step) Or CircleRunTimes = 1 Then 非第一次運行時,判斷是否到了終點 If fm = 0 And ym - circl
37、eYo = 0 Then 動點在圓心的東北方向 Call PulseDirXYZ(y, 1) ElseIf xm - circleXo = 0 Then 動點在圓心的西北方向 Call PulseDirXYZ(x, -1) ElseIf xm - circleXo = 0 And ym - circleYo = 0 And ym - circleYo = 0 Then Call PulseDirXYZ(x, -1) ElseIf xm - circleXo = 0 Then Call PulseDirXYZ(y, -1) ElseIf xm - circleXo = 0 And ym - ci
38、rcleYo = 0 Then Call PulseDirXYZ(z, -1) Else Call PulseDirXYZ(z, 1) End If If Not (Abs(xm - x2) Step And Abs(ym - y2) = 0 Then 判斷動點與直線位置關(guān)系 If x2 - x1 0 And y2 - y1 = 0 Then 終點在起點的東北方向 Call PulseDirXYZ(x, 1) ElseIf x2 - x1 = 0 Then 終點在起點的西北方向 Call PulseDirXYZ(x, -1) ElseIf x2 - x1 0 And y2 - y1 = 0 A
39、nd y2 - y1 0 Then Call PulseDirXYZ(y, 1) ElseIf x2 - x1 0 Then Call PulseDirXYZ(y, 1) ElseIf x2 - x1 = 0 And y2 - y1 0 Then Call PulseDirXYZ(y, -1) Else Call PulseDirXYZ(y, -1) End If End If If g0123 = G00 Then PictureXY.Line (xm + absXo + Xo, ym + absYo + Yo)-(xm1 + absXo + Xo, ym1 + absYo + Yo), v
40、bBlue 畫平面圖 Picturexyz.Line (-xm + ym * 0.7071, -ym * 0.7071 + zm)-(-xm1 + ym1 * 0.7071, -ym1 * 0.7071 + zm1), vbBlue 畫平面圖 Else PictureXY.Line (xm + absXo + Xo, ym + absYo + Yo)-(xm1 + absXo + Xo, ym1 + absYo + Yo), vbGreen 畫平面圖 Picturexyz.Line (-xm + ym * 0.7071, -ym * 0.7071 + zm)-(-xm1 + ym1 * 0.7
41、071, -ym1 * 0.7071 + zm1), vbGreen 畫平面圖 Else End If Else LineTimer.Enabled = False x1 = x2 / Multiple: y1 = y2 / Multiple: z1 = z2 / Multiple x2 = x1: y2 = y1: z2 = z1 End IfEnd SubPrivate Sub MenuNew_Click() 新建菜單 CodeEditFrame.Caption = 新文件 CodeEditText = End SubPrivate Sub MenuOpen_Click() 翻開菜單 On
42、 Error GoTo OpenError 防止出錯:1、按取消,2、文件不存在。 CommonDialog1.DialogTitle = 翻開文件 CommonDialog1.Filter = NC文件(*.nc)|*.nc|所有文件(*.*)|*.* CommonDialog1.ShowOpen Dim opfile As String Open CommonDialog1.FileName For Input As #1 CodeEditText = Do While Not EOF(1) Input #1, opfile CodeEditText = CodeEditText & op
43、file & vbCrLf Loop Close #1 CodeEditFrame.Caption = CommonDialog1.FileName 借frame控件保存路徑,節(jié)省一個量變。OpenError:End SubPrivate Sub MenuSave_Click() 保存菜單 Dim sfile As String sfile = CodeEditFrame.Caption If sfile = 新文件 Or sfile = 程序代碼編輯 Then 假設(shè)為新文件那么另存為 MenuSaveAs_Click Else Open sfile For Output As #1 Prin
44、t #1, CodeEditText Close #1 End IfEnd SubPrivate Sub MenuSaveAs_Click() 另存為菜單 On Error GoTo SaveAsError 防止按取消出錯 CommonDialog1.DialogTitle = 文件另存為 CommonDialog1.Filter = NC文件(*.nc)|*.nc|所有文件(*.*)|*.* CommonDialog1.ShowOpen Open CommonDialog1.FileName For Output As #1 Print #1, CodeEditText Close #1 C
45、odeEditFrame.Caption = CommonDialog1.FileNameSaveAsError:End SubPrivate Sub MenuExit_Click() 退出菜單 EndEnd SubPrivate Sub MenuSetup_Click() 參數(shù)設(shè)置菜單 mainform.Enabled = False Setupform.Visible = TrueEnd SubPrivate Sub MenuCls_Click() 圖清屏菜單 PictureXY.Cls TextPulseX = 0: TextPulseY = 0: TextPulseZ = 0 Text
46、DirX = 0: TextDirY = 0: TextDirZ = 0 TextAxis = 停: TextFluid = 關(guān) TextAxisSpeed = 默認: TextOnsetSpeed = 默認 TextXC = 0: TextYC = 0: TextZC = 0 TextX = 0: TextY = 0: TextZ = 0: RunStateList.Clear xlabel.Caption = : Ylabel.Caption = : Olabel.Caption = xyz_x.Caption = : xyz_y.Caption = : xyz_z.Caption = :
47、 XYZ_O.Caption = End SubPrivate Sub MenuRun_Click() 運行菜單 Dim i As Integer, j As Integer, k As Integer Call drawing Call CodeToRunState flagStop = False x1 = 0: y1 = 0: z1 = 0 x2 = 0: y2 = 0: z2 = 0 g0123 = Xo = Setupform.TextXC * Multiple: Yo = Setupform.TextYC * Multiple: Zo = Setupform.TextZC * Mu
48、ltiple TextXC = Setupform.TextXC: TextYC = Setupform.TextYC: TextZC = Setupform.TextZC For k = 0 To RunStateList.ListCount - 1 RunStateList.ListIndex = k 列表中實時顯示當(dāng)前運行語句 Dim word() As String word = Split(RunStateList.List(k), ) flagChangeXYZ = False circleI = 0: circleJ = 0 For i = 0 To UBound(word) 第
49、一次讀坐標(biāo)指令和速度指令 Select Case Mid(word(i), 1, 1) Case x, X x2 = Val(Mid(word(i), 2) flagChangeXYZ = True XYZ坐標(biāo)值改變 Case y, Y y2 = Val(Mid(word(i), 2) flagChangeXYZ = True Case z, Z z2 = Val(Mid(word(i), 2) flagChangeXYZ = True Case i, I circleI = Val(Mid(word(i), 2) Case j, J circleJ = Val(Mid(word(i), 2)
50、 Case f, F Call F(Val(Mid(word(i), 2) Case s, S Call S(Val(Mid(word(i), 2) End Select Next i CoefInPic = 50 Step = Setupform.TextStep * Setupform.TextMultiple * CoefInPic 頻沖當(dāng)量 Multiple = Setupform.TextMultiple * CoefInPic 圖形放大倍數(shù) x1 = x1 * Multiple: y1 = y1 * Multiple: z1 = z1 * Multiple 起點 x2 = x2 *
51、 Multiple: y2 = y2 * Multiple: z2 = z2 * Multiple 終點 For i = 0 To UBound(word) 第二次讀非插補指令 Select Case word(i) Case g54, G54 Call G54 Case g90, G90 Call G90 Case g92, G92 Call G92(x2 / Multiple, -y2 / Multiple, z2 / Multiple) x2 = 0: y2 = 0: z2 = 0 Case m03, M03, m3, M3 Call M03 Case m05, M05, m5, M5
52、Call M05 Case m08, M08, m8, M8 Call M08 Case m09, M09, m9, M9 Call M09 Case m30, M30 Call M30 End Select Next i For i = 0 To UBound(word) 第三次讀插補指令(包括快速定位) Select Case word(i) Case g00, G00, g0, G0 Call G00 GoTo DidG0123 Case g01, G01, g1, G1 Call G01 GoTo DidG0123 Case g02, G02, g2, G2 Call G02 GoTo
53、 DidG0123 Case g03, G03, g3, G3 Call G03 GoTo DidG0123 End Select Next i If flagChangeXYZ = True Then If g0123 = G00 Then Call G00 ElseIf g0123 = G01 Then Call G01 ElseIf g0123 = G02 Then Call G02 ElseIf g0123 = G03 Then Call G03 End If End IfDidG0123: Do While LineTimer.Enabled = True Or NCircleTim
54、er.Enabled = True Or SCircleTimer.Enabled = True DoEvents Loop If flagStop = True Then Exit Sub Next k End SubPrivate Sub MenuPause_Click() 暫停/繼續(xù)菜單 If LineTimer.Enabled = True Then If LineTimer.Interval = 0 Then LineTimer.Interval = 15 Else LineTimer.Interval = 0 End If ElseIf NCircleTimer.Enabled =
55、 True Then If NCircleTimer.Interval = 0 Then NCircleTimer.Interval = 15 Else NCircleTimer.Interval = 0 End If ElseIf SCircleTimer.Enabled = True Then If SCircleTimer.Interval = 0 Then SCircleTimer.Interval = 15 Else SCircleTimer.Interval = 0 End If End IfEnd SubPrivate Sub MenuStop_Click() 停止菜單 Line
56、Timer.Enabled = False NCircleTimer.Enabled = False SCircleTimer.Enabled = False flagStop = TrueEnd SubPrivate Sub MenuDesigner_Click() 軟件信息菜單End SubPrivate Function CodeToRunState() 讀入程序代碼 If CodeEditText = Then MsgBox 請載入NC文件! Else Dim TextLine() As String Dim i As Integer, j As Integer Dim c As In
57、teger TextLine = Split(CodeEditText, vbCrLf) 將程序代碼分行存入數(shù)組 RunStateList.Clear For i = 0 To UBound(TextLine) j = 2 Do While j = 65 And c = 97 And c = 122) Then 判斷英文字母 If Mid(TextLine(i), j - 1, 1) Then 英文字母前沒有空格那么加空格 TextLine(i) = Mid(TextLine(i), 1, j - 1) & & Mid(TextLine(i), j) End If End If j = j +
58、 1 Loop RunStateList.AddItem TextLine(i) Next i End IfEnd FunctionPrivate Function G00() 點快速定位 g0123 = G00 記錄執(zhí)行過G00 xm1 = x1: ym1 = y1: zm1 = z1 下一動點 LineTimer.Interval = 1 快速 LineTimer.Enabled = TrueEnd FunctionPrivate Function G01() 直線插補 g0123 = G01 記錄執(zhí)行過G01 xm1 = x1: ym1 = y1: zm1 = z1 下一動點 LineTimer.Interval = 15 常速 LineTimer.Enabled = TrueEnd FunctionPrivate Function G02() 順時針方向圓弧插補 g0123 = G02 記錄執(zhí)行過G02 xm1 = x1: ym1 = y1: zm1 = z1 下一動點 circleI = circleI * Multiple: circleJ = circleJ * Multiple 圓心指向起
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 招標(biāo)文件評審記錄跟蹤查詢
- 九年級道德與法治上冊 第二單元 感受祖國的心跳 第四課 城鄉(xiāng)直通車 第3框 城鄉(xiāng)統(tǒng)籌教案 人民版
- 2024-2025學(xué)年新教材高中生物 第1章 遺傳因子的發(fā)現(xiàn) 第1節(jié) 第1課時 一對相對性狀的雜交實驗過程和解釋教案 新人教版必修第二冊
- 安徽省滁州二中高中信息技術(shù)《5.1認識信息資源的管理》教案 新人教版必修
- 廣東省2024-2025年高中物理 學(xué)業(yè)水平測試沖A 第6章 機械能和能源教案(含解析)
- 2023七年級英語下冊 Unit 3 How do you get to school Section B 第5課時(3a-3b)教案 (新版)人教新目標(biāo)版
- 2023六年級數(shù)學(xué)下冊 第四單元 圓柱和圓錐4.8 估算小麥堆的質(zhì)量教案 冀教版
- 自建房修建及安全合同(2篇)
- 人教版血管課件
- 第六講 變換句型寫一寫(看圖寫話教學(xué))-一年級語文上冊(統(tǒng)編版·2024秋)
- 小班繪本故事《我的門》
- 公司企業(yè)保密知識培訓(xùn)(精品推薦)
- 220KV輸電線路工程施工組織設(shè)計
- 高爾斯華綏《品質(zhì)》
- 稻瘟病及其研究成果
- 生物質(zhì)炭化技術(shù)
- 物理化學(xué):第二章 熱力學(xué)第二定律
- 纖維素酶發(fā)酵工藝與應(yīng)用
- YZP系列冶金及起重用變頻調(diào)速三相異步電動機
- 《中國音樂分類》PPT課件
- 第7章墨水中的流變特性及流變調(diào)節(jié)劑
評論
0/150
提交評論