數(shù)控計算機仿真課程設計最終版(VB)_第1頁
數(shù)控計算機仿真課程設計最終版(VB)_第2頁
數(shù)控計算機仿真課程設計最終版(VB)_第3頁
數(shù)控計算機仿真課程設計最終版(VB)_第4頁
數(shù)控計算機仿真課程設計最終版(VB)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

加工軌跡圖:圖1工件平面圖M08 M09代碼及其N112G1Z-1.加工軌跡圖:圖1工件平面圖M08 M09代碼及其N112G1Z-1.N126X10.廣東工業(yè)大學課程設計任務書題目名稱數(shù)控系統(tǒng)的計算機仿真實現(xiàn)學生學院機電工程學院專業(yè)班級機械設計制造及其自動化姓名(學號)—、課程設計的內容對于給定的一段NC代碼,用VB或其他高級語言編寫程序解釋、插補,在PC機上仿真數(shù)控裝置,進行圖形描繪、坐標值顯示、步進電機控制模擬顯示及信號輸出、冷卻液和主軸開關量控制模擬顯示及信號輸出。二、課程設計的要求與數(shù)據(jù)具體要求如下:(1)NC代碼中包含的代碼類型有:G90G54(G92)G00G01G02G03M03M05M30O0000N114Y15.0N128G0Z50.N106G0G90G54X10.Y20.M03M08N118G2X15.Y13.09J7.5N130M5M09N108Z50.N120X20.Y15.I-5.0J5.59N110Z10.N122G1Y20.0(2)、要求根據(jù)NC代碼屏幕模擬加工過程,圖形顯示位置,示,輔助功能狀態(tài)顯示(冷卻液和主軸開關量控制模擬顯示)。N136M30標值顯(3)、PCO0000N114Y15.0N128G0Z50.N106G0G90G54X10.Y20.M03M08N118G2X15.Y13.09J7.5N130M5M09N108Z50.N120X20.Y15.I-5.0J5.59N110Z10.N122G1Y20.0(2)、要求根據(jù)NC代碼屏幕模擬加工過程,圖形顯示位置,示,輔助功能狀態(tài)顯示(冷卻液和主軸開關量控制模擬顯示)。N136M30標值顯(3)、PC機模擬加工過程中,要求有實時的驅動三軸步進電機的控制信號、控制冷卻液和主軸轉動的開關圖2加工仿真示意圖量輸出控制信號。假設信號從計算機并行打印口的數(shù)據(jù)信號線輸出,端口地址為0x378。并行口數(shù)據(jù)線分配如下(低電平有效):表一并行口數(shù)據(jù)線信號定義數(shù)據(jù)線信號D0D1D2D3D4D5D6D7定義PulseXDirXPulseYDirYPulseZDirZ主軸控制信號冷卻液控制信號三、課程設計應完成的工作每個學生應在規(guī)定時間內,獨立完成所選題目。運用VB編程語言,編寫計算機軟件在WINDOWS實現(xiàn)數(shù)控裝置的計算機仿真。要求清楚地分析問題、提出算法、確定人機界面、列出流程圖,最后用程序驗證,完成軟件測試,并且提交程序說明書。對選擇典型零件編程題目的學生,要求用編寫計算機軟件的方法解決數(shù)控過程的一個問題。可以任選用本人熟悉的一種編程語言,要求清楚地分析問題、提出算法、列出流程圖,最后用程序驗證,并且提交程序說明書。1?摘要從工程的角度來看,仿真就是通過對系統(tǒng)模型的實驗去研究一個已有的或設計中的系統(tǒng),分析復雜的動態(tài)對象,仿真是一種有效的方法,可以減少風險,縮短設計和制造的周期并節(jié)約投資。計算機仿真就是借助計算機,利用系統(tǒng)模型對實際系統(tǒng)進行實驗研究的過程。它隨著計算機技術的發(fā)展而迅速地發(fā)展,在仿真中它有越來越重要的地位。計算機仿真技術的發(fā)展趨勢主要表現(xiàn)在兩個方面:應用領域的擴大和仿真計算機的智能化。計算機仿真技術不僅在傳統(tǒng)的工程技術領域(航空、航天、化工等方面)繼續(xù)發(fā)展,而且擴大到社會經(jīng)濟、生物等許多非工程領域,此外,并行處理、人工智能、知識庫和專家系統(tǒng)等技術的發(fā)展正影響著仿真計算機的發(fā)展。數(shù)控加工仿真利用計算機來模擬實際的加工過程,是驗證數(shù)控加工程序的可靠性和預測切削過程的有力工具,以減少工件的試切,提高生產(chǎn)效率。仿真軟件界面友好,基本實現(xiàn)了設計任務的要求,通過本軟件可以知道在仿真加工刀具的坐標、各軸的工作情況以及輔助電機(冷卻液的控制情況)本仿真程序應用的是脈沖插補算法。在仿真過程中應用了兩種插補方法:直線插補,圓弧插補(包括順時方向插補和逆時方向插補)。本仿真程序可以實現(xiàn)如下指令的判別和執(zhí)行:G01,G02,G03,G04,G05,M05,M08,M09,M03,M30.在應用時,編程者只要按照本應用程序的要求輸入程序,即可以實現(xiàn)所要求的加工過程的仿真過程。本程序能夠判斷所輸入的程序的正確性,可以對程序進行編輯。本軟件可以從平面和軸測兩個視圖同時觀察仿真過程。算法及原理插補模塊:CNC仿真系統(tǒng)的插補主要包括直線插補和圓弧插補。由于設計要求簡易數(shù)控機床,因此采取脈沖增量插補(逐點比較法插補)。逐點比較法是脈沖增量算法最典型的代表,是一種最早的插補算法,該法的原理:CNC細工在控制的過程中,能逐點地計算和判別運動軌跡與給定軌跡的偏差,并根據(jù)偏差控制進給軸向給定輪廓靠近,縮小偏差,使加工輪廓逼近給定輪廓。逐點比較法使以折線來逼近直線或圓弧曲線的,它與規(guī)定的直線或圓弧之間的最大誤差不超過一個脈沖當量Pulse,因此,只要將脈沖當量取得夠小,就可達到加工精度的要求。2.1直線插補模塊:2.1.1直線插補偏差計算公式

"Xm+1二Xm+1_Ym+1=Ym當K1>K當K1>K時,應向+Y方向走步。走后新坐標為:.Xm+1二XmYm+1=Ym+1按上述公式循環(huán)判斷下去,直到Xm=Xe,Ym=Ye到達終點,停止插補,程序結束。2.1.2、終點判斷的方法設置變量CountN減法計數(shù)器,在加工之前存入終點坐標值Xe、Ye,X或Y坐標每進給一步時,就在計數(shù)器中、減去1,直到為零,停止插補,到達終點。2.1.3其它象限的直線插補計算其它象限其實與第一象限或關于原心對稱或關于X軸對稱,所以,只要作符合上的化,程序實現(xiàn)非常方便。X象限直線偏差符號和進給方向圖2圖3直線插補流程圖2.1.5直線插補源代碼(見附錄)2.2圓弧插補模塊2.2.1圓弧插補偏差計算公式

以第一象限逆圓為例介紹插補公式如圖7所示,要加工圓弧AB,設圓弧的圓心在原點,并已知圓弧的起點A(Xo,Yo),終點B(Xe,Ye),圓弧半徑為R。加工動點M(Xm,Ym),圖4第一象限逆圓弧它到圓心的距離為Rm。圖4第一象限逆圓弧當動點M在圓上有:Xm2+Ym2_R2二0當動點M在圓內有:Xm2+Ym2_R2<0當動點M在圓外有:Xm2+Ym2_R2>0因此,可定義圓弧偏差判別公式如下:F=R2一R2=X2+Y2-R2TOC\o"1-5"\h\zm m m m若Fm-0,應沿-X軸方向進給一步,到M+1點,其坐標值為\o"CurrentDocument"X 二X -1其坐標值為圖5逆圓插補示意m+1 圖5逆圓插補示意Y 二Y\o"CurrentDocument"m+1 m若Fm<0,沿+丫軸方向進一步,到M+1點,坐標值為:X二Xm+1 mY二Y+1m+1 m2.2.2終點判斷的方法在繪圖的過程中,不斷地比較動點與終點的距離,當其距離小于脈沖當量時,在誤差允許的范圍達到終點。2.2.3其它象限的圓弧插補計算如圖5所示,其它象限的圓弧或關于X軸對稱、或關于X軸對稱、或關于原心對稱,完全可以按第一象限逆圓偏差公式進行計算,所不同的是將進給方向改變。2.2.4、圓弧插補流程圖:圖6圓弧插補流程圖3.2.5圓弧插補源代碼(見附錄)2.3時鐘控制插補流程圖

圖7時鐘控制插補流程圖2.4讀指令模塊在CNC數(shù)控仿真系統(tǒng)里面,對程序窗口中的NC代碼逐個字符讀入,并判斷。設一指針對代碼字符串進行移位操作。但此字符為”G””M”,則調用讀數(shù)字子過程將數(shù)字讀入并保存在定義的指令寄存器中。繼續(xù)讀取字符,當為”X””Y”“Z””1”“J”是同樣操作,并作適當判斷,根據(jù)指令寄存器中的指令調用相應的插補子過程。程序流程圖如下:Nc代碼指針取取字符I T其他字符“G”?調讀數(shù)字子過程“X”?指令寄存器 —其他指令G01畫直線 N指針結束?'—.結束圖8讀指令模塊程序流程圖3、程序源代碼附錄設計小結數(shù)控課程設計是機電專業(yè)的一個重要的實踐性環(huán)節(jié),是對所學《數(shù)控技術》課程和其它有關課程知識和技能的一次綜合性練習,旨在使我們的知識得以鞏固、充實、系統(tǒng)化,并進一步擴展。課程設計是培養(yǎng)我們理論聯(lián)系實際、解決生產(chǎn)實際問題的良好機會。通過對數(shù)控銑床典型部件的設計和零件編程的具體問題的解決,不僅使我們對CAD/CAM仿真軟件有了更深刻的了解,還是我們編程能力有了很大的提高。通過這次的設計,使我們更加明白知識的聯(lián)貫性、融合性、全面性以及交錯性的重要所在,這也是設計目的所在。我們應該持有自我增值、自我發(fā)展的人生觀。要領悟“學海無邊苦作舟”的真諦。力爭上游。參考文獻1《機床設計手冊》第三分冊2廖效果.數(shù)字控制機床.武漢:華中理工大學出版社.1992.93廖效果?數(shù)控技術.武漢:湖北科學技術出版社.2000.74劉又午.數(shù)字控制機床.北京:機械工業(yè)出版社5龔浦泉?機床電氣控制?重慶:重慶大學出版社6譚浩強.Basic語言結構化程序設計教程.北京:中國科學技術出版社.19907楊林,李繼良.VisualBasic編程高手.北京:北京大學出版社.20008一組專用凸輪的計算機輔助設計.機械工程師1998,(4):p58-599凸輪曲線的快速畫法.機械工程師1998,(6):p22-2310平面凸輪機構CAD系統(tǒng)的研究與開發(fā).機械設計與制造2000,(5):p12-1311圓柱非圓曲線槽凸輪的數(shù)控加工?制造技術與機床2000,(8):p3412圓柱凸輪的參數(shù)化設計及數(shù)控加工.精密制造及自動化2001,11:p2813參數(shù)化凸輪輪廓轉換及NC代碼自動生成.機床與液壓2001,6,p29~31程序代碼.DimXAsDouble,YAsDouble,zAsDouble'X,Y,Z起點坐標DimXAsDouble,YAsDouble,zAsDoubleDimx1AsDouble,y1AsDouble,z1AsDouble'X,Y,Z冬點坐標DimgorderAsString,morderAsString,ornumberAsInteger'GM指旨令DimmovorderAsString,conorderlAsString,conorder2AsString '移動,控制令DimcbstypeAsInteger '移動指令類型DimxpointAsDouble,ypointAsDouble'軸測圖坐標DimxppAsDouble,yppAsDouble,zppAsDouble'平面圖坐標DimcentiAsDouble,centjAsDouble'圓心相對起點坐標PublicgetxAsDouble,getyAsDouble,getzAsDouble 'get參數(shù)設置PublicbeiAsInteger'圖形放大倍數(shù)DimstrAsString '讀入NC代碼DimprglineAsInteger'運行行數(shù)DimreadnumAsIntegerDimmmAsDouble '積分插補累加數(shù)DimfmAsDouble '比較插補FMDimplAsDouble '脈沖當量DimStepdlAsIntegerDimxmAsDouble,ymAsDouble,zmAsDouble'動點X,Y,ZDimmxAsDouble,myAsDouble,mzAsInteger '積分插補數(shù)DimpauseconAsInteger '暫??刂艱imxx()AsDouble,yy()AsDouble,zz() As Double'保存XYZ值DimxxO() As Double, yyO() As Double, zzO() As DoubleDimxfO() As Double, yfO() As Double, zfO() As DoubleDimxf1() As Double, yf1() As Double, zf1() As DoubleDimmovrouAsIntegerDimmousexAsDouble,mouseyAsSingle'PrivateDeclareSubDIO_OutputByteLib""d:/dio.dll"(ByValAddressAsInteger,ByValDataOutAsInteger)'PrivateDeclareFunctionDIO_InputByteLib""dio.dll"(ByValAddressAsInteger)AsInteger'并行口輸入輸出函數(shù)PrivateSubCommand3_Click()Ifpausecon=1Then '當暫停時為繼續(xù)Timerl.Interval=1Timer2.Interval=1pausecon=0ElseIfText1.Text二""ThenMsgBox"請加載NC程序",vbOKOnly,"加載失敗"ExitSubElseReDimxx(0),yy(0),zz(0)AsDoubleReDimxx0(0),yy0(0),zz0(0)AsDoubleReDimxfO(O)AsDouble,yfO(O)AsDouble,zfO(O)AsDoubleReDimxf1(0)AsDouble,yf1(0)AsDouble,zf1(0)AsDoublestr二Textl.TextX=0:Y=0:z=60x1=0:y1=0:z1=60xpoint二0:ypoint二0gorder=morder=movorder="""":conorderl="""":conorder2=cbstype=0centi二0:centj二0readnum=0prgline=0num=0linez.Visible=Truelinep.Visible=TrueLetbei=2.5Calldrawxyzpl=plt.Textpl=pl*2Fori=0To4Step2outdata(i).Text二1NextiFori=1To7Step2outdata(i).Text二0Nextioutdata(6).Text二0zhuzt.Text二"關'lengzt.Text二"關'Timerl.Enabled=TrueEndIfEndIfEndSubPrivateSubComnew_Click()DimfsoAsNewFileSystemObjectDimmyfileAsTextStreamSetmyfile=fso.CreateTextFile("filetext.txt",True)myfile.Write(Textl.Text)myfile.CloseMsgBox("創(chuàng)建成功!")EndSubPrivateSubComdele_Click()fso.DeleteFile("filetext.txt")MsgBox("刪除成功!")Text1.Text二""EndSubPrivateSubCompau_Click()Timer2.Interval=0Timerl.Interval=0pausecon=1EndSubPrivateSubComshezhi_Click()Form2.ShowEndSubPrivateSubComstop_Click()Timerl.Enabled=FalseTimer2.Enabled=Falselinep.Clslinez.ClsTextl.SelStart二0EndSubPrivateSubDir1_Change()File1.Path=Dir1.PathEndSubPrivateSubDrive1_Change()Dir1.Path=Drive1.DriveEndSubPrivateSubFile1_Click()Label1.Caption二"TheNClist:"&"("&Filel.Path&"\"&Filel.FileName&")"EndSubPrivateSubFile1_DblClick()DimstrTmpAsStringPath=Filel.Path&"\"&Filel.FileNameOpenPathForInputAs#1Textl.Text二""DoWhileNotE0F(1)Input#1,strTmpstrTmp=strTmp&vbCrLfText1.Text二Text1.Text&strTmpLoopClose#1EndSub'畫坐標Subdrawxyz()'斜二軸測圖坐標linez.Scale(-700/bei,700/bei)-(600/bei,-600/bei)linez.Line(0,0)-(0,650/bei),QBColor(5)linez.Line(0,650/bei)-(-10/bei,620/bei),QBColor(13)linez.Line(0,650/bei)-(10/bei,620/bei),QBColor(13)linez.Line(0,0)-(-650/bei,0),QBColor(13)linez.Line(-650/bei,0)-(-620/bei,10/bei),QBColor(13)linez.Line(-650/bei,0)-(-620/bei,-10/bei),QBColor(13)linez.Line(0,0)-(650/bei*0.7071,-650/bei*0.7071),QBColor(13)linez.Line(650/bei*0.7071,-650/bei*0.7071)-(620/bei*0.7071,-640/bei0.7071),QBColor(13)linez.Line(650/bei*0.7071,-650/bei*0.7071)-(640/bei*0.7071,-620/bei0.7071),QBColor(13)xLab.Caption二"X":yLab.Caption二"Y":zLab.Caption二"Z":olab.Caption二"0"linez.PSet(0,600)'X-Y平面圖坐標linep.Scale(-600/bei,600/bei)-(600/bei,-600/bei)linep.Line(0,550/bei)-(0,-550/bei),QBColor(13)linep.Line(10/bei,520/bei)-(0,550/bei),QBColor(13)linep.Line(-10/bei,520/bei)-(0,550/bei),QBColor(13)linep.Line(-550/bei,0)-(550/bei,0),QBColor(13)linep.Line(550/bei,0)-(520/bei,10/bei),QBColor(13)linep.Line(550/bei,0)-(520/bei,-10/bei),QBColor(13)pxLab.Caption二"X":pyLab.Caption二"Y":poLab.Caption二"0"linep.PSet(0,0)EndSub'讀入NC代碼PrivateSubTimerl_Timer()OnErrorResumeNextDimsAsString,msAsString,eroAsStringIfMid(str,1,1)<>"%"Thenero="沒有開始符,結束符"&"%":GoToerrsy'檢查有無開始符〃%〃Do '循環(huán)讀入一行s=Mid(str,readnum+1,1)If(s="g"Ors="G")Thengorder=Dogorder=gorder+sreadnum=readnum+1s=Mid(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48))SelectCase(gorder)Case"g00","G00","g0","G0"movorder="G00" '移動指令為"G00"Case"g01","G01","g1","G1"movorder="G01"Case〃g02〃,〃G02〃,〃g2〃,〃G2〃movorder="G02"c 〃CC〃 〃八CC〃 〃C〃 〃八c〃Caseg03, G03,g3,G3movorder="G03"Case"g54","G54"Case"g90","G90"CaseElse〃八 〃 r\rpero= G....:GoToerrsyEndSelectExitSubEndIf'讀入M代碼If(s="m"Ors="M")Thenmorder=Domorder=morder+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48))SelectCase(morder)Case"m03","M03","m3","M3"conorder1="M03"Case"m05","M05","m5","M5"conorder1="M05"Case"m08","M08","m8","M8"conorder2="M08"Case"m09","M09","m9","M9"conorder2="M09"Case"m30","M30"CaseElseero="M...."GoToerrsyEndSelectExitSubEndIf'讀入XIf(s=""x"Ors=""X")Then〃〃ms=Doms=ms+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48)_OrAsc(s)=46OrAsc(s)=45OrAsc(s)=43)IfMid$(ms,2,9)=""""Thenero=""X...."":GoToerrsyx1=Val(Mid$(ms,2,9))ExitSubEndIf'讀入YIf(s=""y"Ors=""Y")Then〃〃ms=Doms=ms+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48)_OrAsc(s)=46OrAsc(s)=45OrAsc(s)=43)IfMid$(ms,2,9)=""""Thenero=""Y...."":GoToerrsyy1=Val(Mid$(ms,2,9))ExitSubEndIf'讀入zIf(s=""z"Ors=""Z")Then〃〃ms=Doms=ms+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48)_OrAsc(s)=46OrAsc(s)=45OrAsc(s)=43)IfMid$(ms,2,9)=""""Thenero=""Z...."":GoToerrsyz1=Val(Mid$(ms,2,9))ExitSubEndIf'讀入IIf(s=""i"Ors=""I")Then〃〃ms=Doms=ms+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48)_OrAsc(s)=46OrAsc(s)=45OrAsc(s)=43)IfMid$(ms,2,9)=""""Thenero=""I...."":GoToerrsycenti二Val(Mid$(ms,2,9))ExitSubEndIf'讀入JIf(s二""j"Ors二""J")Then〃〃ms=Doms=ms+sreadnum=readnum+1s=Mid$(str,readnum+1,1)LoopWhile((Asc(s)<=57AndAsc(s)>=48)OrAsc(s)=46OrAsc(s)=45)IfMid$(ms,2,9)=""""Thenero=""J...."":GoToerrsycentj二Val(Mid$(ms,2,9))IfAbs(Sqr((X-centi-x1)"2+_(Y-centj-yl)"2)-Sqr(centi"2+centj"2))>=0.1Thenero=""終點不在圓弧上"GoToerrsyEndIfExitSubEndIfreadnum=readnum+1LoopUntil(Asc(s)=10)'當讀到回車鍵時退出循環(huán)Textl.SelStart=readnum-1 '當讀入行數(shù)小于9時箭頭向下移If(Asc(s)=10)Then'If(X<>x1OrY<>y1)Then'保存XYZIJG'xx(num)=x1:yy(num)=y1:zz(num)=z1:ii(num)=centi:jj(num)=centj'gg(num)=movordernum=num+1EndIfprgline=prgline+1Timerl.Enabled=FalseCalldegorder '讀到回車鍵轉入G指令判斷ExitSuberrsy:MsgBox"第"&prgline+1&"行有錯"&ero,,"出錯"'出錯提示Timerl.Enabled=False'停止讀數(shù)ExitSubEndSub'插補PrivateSubTimer2_Timer()DimrrAsDoubleDimcx,cy,czAsIntegerDimfangx,fangy,fangzAsIntegerDimqbcAsIntegerStaticrunnumAsIntegerIfX=xlAndY=ylAndz=zlThenCalldemorder '終點等于起點時調用M指令判斷Timer2.Enabled=FalseTimerl.Enabled=TrueExitSubEndIfrunnum=runnum+1'插補次力口一Ifrunnum=1Then '第一次時判定移動指令SelectCase(cbstype)Case0 '移動指令為GOOqbc=15cx=Abs(xl-X)*10:cy=Abs(y1-Y)*10:cz=Abs(zl-z)*10Ifx1>=XThenfangx=1outdata(1).Text=0 '0表示正方向Elsefangx=-1outdata(1).Text二1EndIfIfy1>=YThenfangy=1outdata(3).Text二0Else:fangy=-1outdata(3).Text二1EndIfIfz1>=zThenfangz=1outdata(5).Text二0Else:fangz=-1outdata(5).Text二1EndIf'調用直線插'調用直線插補Case1 '移動指令為G01qbc=14cx=Abs(x1-X)*10:cy=Abs(y1-Y)*10:cz=Abs(z1-z)*10Ifx1>=XThen

fangx=1'0表示正方向outdata(l).Text二'0表示正方向Elsefangx=-1outdata(l).Text二1EndIfIfy1>=YThenfangy=1outdata(3).Text二0Elsefangy=-1outdata(3).Text二1EndIfIfz1>=zThenfangz=1outdata(5).Text二0Elsefangz=-1Elsefangz=-1outdata(5).Text二1EndIfCalllinesub(cx,cy,cz,fangx,fangy,Case2 '移動指令為G02qbc=14rr=Sqr(centi"2+centj'2)Callscirsub(rr*10,qbc)Case3'移動指令為qbc=14rr=Sqr(centi"2+centj'2)Callycirsub(rr*10,qbc)'調用順圓插補G03'調用逆圓插補fangz,qbc) '調用直線插補EndSelectEndIf'//////////////////////////////////////////////////////////////////////////////////////////////no.lIfrunnum=2Then '當?shù)诙握{用時并行口X,Y,Z脈沖跳為1Fori=0To5Step2outdata(i)=1Nextirunnum=0EndIf'////////////////////////////////////////////////////////////////////////////////////////////2'prtaddress=&H378 '并行口輸出'Fori=0To7'dataoutvale=dataoutvale+outdata(i)*2"i'Nexti'DI0_OutputByteprtaddress,dataoutvaleIfSqr((x1*10-xpp)"2+(y1*10-ypp)"2+(z1*10-zpp)"2)<plThenIfzpp<0Then '插補完成判斷l(xiāng)inez.Line(xpoint,ypoint-zpp)-(xpoint,ypoint),QBColor(qbc)EndIfX=x1:Y=y1:z=z1:fm=0Fori=0To5Step2 '插補完成X,Y,Z脈沖跳為1outdata(i)=1Nextirunnum=0Calldemorder'prtaddress=&H378'Fori=0To7'并行口輸出'dataoutvale=dataoutvale+outdata(i)*2"i'Nexti'DI0_OutputByteprtaddress,dataoutvale'調用輸出函數(shù)Timer2.Enabled=FalseTimerl.Enabled=TrueExitSubEndIf'停止插補'繼續(xù)讀數(shù)EndSub'判定M指令Subdemorder()SelectCaseconorder1Case"M03"outdata(6).Text二1zhuzt.Text二"開"'1表示開Case"M05"outdata(6).Text二00表示關zhuzt.Text二"關"EndSelectSelectCaseconorder2Case"M08"outdata(7).Text二1lengzt.Text二"開"Case"M09"outdata(7).Text二0lengzt.Text二"關"EndSelectEndSub'判定G指令Subdegorder()DimiAsIntegerSelectCasemovorderCase"G00"cbstype=0xm=0:ym=0:zm=0mx=0:my=0:mz=0mm=0DoWhile(mm<Abs(xl-X)Ormm<Abs(yl-Y)Ormm<Abs(zl-z))i=i+1mm=2"iLoopTimer2.Enabled=True '插補開始Case"G01"cbstype=1xm=0:ym=0:zm=0mx=0:my=0:mz=0mm=0DoWhile(mm<Abs(x1-X)Ormm<Abs(y1-Y)Ormm<Abs(z1-z))i=i+1mm=2"iLoopTimer2.Enabled=True '插補開始Case"G02"cbstype=2fm=0xm=centi*10:ym=centj*10:zm=z*10Timer2.Enabled=TrueCase"G03"cbstype=3fm=0xm=centi*10:ym=centj*10:zm=z*10Timer2.Enabled=TrueCaseElse '沒有G指令時停止插補,繼續(xù)讀數(shù)Timer2.Enabled=FalseTimerl.Enabled=TrueEndSelectEndSubPrivateSubTimer3_Timer()Label21=Time$EndSub'逆圓插補PrivateSubycirsub(rrAsDouble,qbcAsInteger)Dimxtemp,ytemp,ztempAsDoubleDimxppt,yppt,zpptAsDoubleDimxpointtemp,ypointtempAsDoublextemp=xm:ytemp=ym:ztemp=zmIfX=x1AndY=y1ThenExitSubIffm>=0ThenIfxm>=0ThenIfym>=0Thenxm=xm—ploutdata(0).Text二0Elseym=ym+ploutdata(2).Text二0EndIfElseIfym>=0Thenym=ym—ploutdata(2).Text二0Elsexm=xm+ploutdata(0).Text二0EndIfEndIfElseIfxm>=0ThenIfym>=0Thenym=ym+ploutdata(2).Text二0Elsexm=xm+ploutdata(0).Text二0EndIfElseIfym>=0Thenxm=xm—ploutdata(0).Text二0Elseym=ym-ploutdata(2).Text二0EndIfEndIfEndIfIfxtemp=xmAndytemp=ymAndztemp=zmThenExitSubxpp=xm-(centi-X)*10:ypp=ym-(centj-Y)*10:zpp=zmxppt二xtemp-(centi-X)*10:yppt二ytemp-(centj-Y)*10:zppt二ztemp'平面圖坐標Ifzpp<=0ThenReDimPreservexx(UBound(xx)+1),yy(UBound(yy)+1),zz(UBound(zz)+1)AsDoublexx(UBound(xx))=xpp:yy(UBound(yy))=ypp:zz(UBound(zz))=zppReDimPreservexx0(UBound(xx0)+1),yy0(UBound(yy0)+1),zz0(UBound(zz0)+1)AsDoublexx0(UBound(xx0))=xpp:yy0(UBound(yy0))=ypp:zz0(UBound(zz0))=0EndIfxpoint=-xpp+ypp*0.7071 '軸測變換ypoint二-ypp*0.7071+zppxpointtemp=-xppt+yppt*0.7071ypointtemp=-yppt*0.7071+zpptxcText.Text二xpp/10:ycText.Text二ypp/10:zcText.Text二zpp/10'工件坐標linep.Line-(xpp,ypp),QBColor(qbc) '畫平面圖linez.Line(xpointtemp,ypointtemp)-(xpoint,ypoint),QBColor(qbc)Ifzpp<0Thenlinez.Line(xpointtemp,ypointtemp-zppt)-(xpoint,ypoint-zpp),QBColor(qbc-1)EndIffm=xm"2+ym"2-rr"2EndSub'順圓插補PrivateSubscirsub(rrAsDouble,qbcAsInteger)

Dimxtemp,ytemp,ztempAsDoubleDimxppt,yppt,zpptAsDoubleDimxpointtemp,ypointtempAsDoublextemp=xm:ytemp=ym:ztemp=zmIfX=x1AndY=y1ThenExitSubIffm>=0ThenIfxm>=0ThenIfym>=0Thenym=ym-pl'0表示正方向T表示負方向'0表示正方向T表示負方向outdata(3).Text二1Elsexm=xm—ploutdata(0).Text二0outdata(1).Text二1EndIfElseIfym>=0Thenxm=xm+ploutdata(0).Text二0outdata(1).Text二0Elseym=ym+ploutdata(2).Text二0outdata(3).Text二0EndIfEndIfElseIfxm>=0ThenIfym>=0Thenxm=xm+ploutdata(0).Text二0outdata(1).Text二0Elseym=ym-ploutdata(2).Text二0outdata(3).Text二1EndIfElseIfym>=0Thenym=ym+ploutdata(2).Text二0outdata(3).Text二0Elsexm=xm—ploutdata(0).Text二0outdata(1).Text二1EndIfEndIfEndIfIfxtemp=xmAndytemp=ymAndztemp=zmThenExitSubxppt二xtemp—(centi-X)*10:yppt二ytemp—(centj-Y)*10:zppt二ztempxpp=xm—(centi-X)*10:ypp=ym—(centj-Y)*10:zpp=zmIfzpp<=0ThenReDimPreservexx(UBound(xx)+1),yy(UBound(yy)+1),zz(UBound(zz)+1)AsDoublexx(UBound(xx))=xpp:yy(UBound(yy))=ypp:zz(UBound(zz))=zppReDimPreservexxO(UBound(xxO)+1),yyO(UBound(yyO)+1),zzO(UBound(zzO)+1)AsDoublexxO(UBound(xxO))=xpp:yyO(UBound(yyO))=ypp:zzO(UBound(zzO))

溫馨提示

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

評論

0/150

提交評論