逐點比較法插補(bǔ)VC程序設(shè)計_第1頁
逐點比較法插補(bǔ)VC程序設(shè)計_第2頁
逐點比較法插補(bǔ)VC程序設(shè)計_第3頁
逐點比較法插補(bǔ)VC程序設(shè)計_第4頁
逐點比較法插補(bǔ)VC程序設(shè)計_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

法插補(bǔ)原理VC程序設(shè)計一ByO.z.逐點比較法插補(bǔ)原理VC程序設(shè)計背景數(shù)控機(jī)床在加工曲線時,用折線逼近所要加工的曲線。而確定刀具或繪圖筆的過程就稱為插補(bǔ),數(shù)控系統(tǒng)中完成插補(bǔ)工作的部分裝置稱為插補(bǔ)器。常用的脈沖增量插補(bǔ)方法是逐點比較法。所謂逐點比較法插補(bǔ),就是刀具或繪圖筆每走一步都要和給定軌跡上的坐標(biāo)一步的進(jìn)給方向。如果原來在給定軌跡的下方,下一步就向給定軌跡的上方走,如果原來在給定軌跡的里面,下一步就向給定軌跡的外面走……如此,走一步,看一看,比較一次,決定下一步走向,以便逼近給定軌跡,即形成逐點比較插補(bǔ)。逐點比較法是以階梯折線來逼近直線或者圓弧等曲線的,它與規(guī)定的加工直線或圓弧之間的最大誤差為一個脈沖當(dāng)量,因此只要把脈沖當(dāng)量(第走一步的距離即步長)取得足夠小,就可達(dá)到加工精度的要求。原理與算法(一)逐點比較法直線插補(bǔ)不同象限直線插補(bǔ)的偏差符號及坐標(biāo)進(jìn)給方向如圖1所示。

法插補(bǔ)原理VC程序設(shè)計—ByO.z.圖1偏差符號與進(jìn)給方向的關(guān)由圖1可以推導(dǎo)得出,4個象限直線插補(bǔ)的偏差計算公式和坐標(biāo)進(jìn)給方向,詳見表1,該表中4個象限的終點坐標(biāo)值取絕對值代入計算式中的和。表1直線插補(bǔ)的進(jìn)給方向及偏差計算公式所在象限進(jìn)給方向所在象限進(jìn)給方向偏差計算一、四—、^三所在象限進(jìn)給方向偏差計算、——三、四在計算機(jī)內(nèi)存中開辟6個單元XE、YE、NXY、FM、XOY和ZF,分別存放終點橫坐標(biāo)、終點縱坐標(biāo)、總步數(shù)、加工點偏差、直線所在象限值和走步方向標(biāo)志。這里,, 等于1、2、3、4分別代表第一、第二、第三、第四象限, 的值可由終點坐標(biāo)的正、負(fù)符號來確定, 的初值為0,ZF=1、2、3、4分別代表、 、 、走步方向。程序流程如圖2所示。2直線插補(bǔ)程序流程二)逐點比較法圓弧插補(bǔ)圖3 4個象限圓弧插補(bǔ)的對稱關(guān)各象限圓弧插補(bǔ)的偏差符號與進(jìn)給方向如圖3所示,用SR和NR分別表示順圓弧和逆圓弧,并且用SRpSR2、SR3、SR4和NR]、NR2、NR3、NR4圖3 4個象限圓弧插補(bǔ)的對稱關(guān)法插補(bǔ)原理VC程序設(shè)計—ByO.z.在計算機(jī)內(nèi)存中開辟8個單元X0、YO、NXY、FM、RNS、XM、YM和ZF,分別存放起點的橫坐標(biāo)、起點的縱坐標(biāo)、總步數(shù)、加工點偏差、圓弧種類值RNS、、 和走步方向標(biāo)志。這里,RNS等于1、2、3、4和5、6、7、8分別代表SR]、SR2、SR3、SR4和NRpNR2、NR3、NR4,RNS的值可由起點和終點的坐標(biāo)的正、負(fù)符號來確定,的初值為0,和的初值為和,ZF=1、2、3、4分別表示、 、 、走步方向。程序流程圖如圖4所示。圖44象限圓弧插補(bǔ)程序流程圖程序設(shè)計開發(fā)環(huán)境:VisualStudio2010,Windows8建立的項目:VC++MFCApplicationSingleDocument(一)全局變量intAXIS=600:坐標(biāo)軸半軸長像素數(shù)(映射到真實長度600*0.1mm=6cm)intAXIS_SCALE:坐標(biāo)軸最大刻度,通過菜單項修改intS_LEN:單位長度像素數(shù)(=AXIS/AXIS_SCALE)intsx,sy:直線插補(bǔ)用到的平移系數(shù)(二)對話框設(shè)置4個Edit框,連接變量m_x1、m_y1、m_x2、m_y2用于存儲輸入的坐標(biāo)值。默認(rèn)值m_x1=10,m_y1=0,m_x2=0,m_y2=10。(三)菜單CaptionIDFunction建立坐標(biāo)系

法插補(bǔ)原理VC程序設(shè)計—ByO.z.坐標(biāo)系樣式標(biāo)準(zhǔn)大?。?0*20)ID_AXES_OOnAxesO()樣式1(15*15)ID_AXES_AOnAxesA()樣式2(12*12)ID_AXES_BOnAxesB()樣式3(10*10)ID_AXES_COnAxesC()樣式4(30*30)ID_AXES_HOnAxesH()樣式5(50*50)ID_AXES_IOnAxesI()樣式6(60*60)ID_AXES_JOnAxesJ()清空ID_EDIT_CLCOnEditClc()插補(bǔ)類型直線插補(bǔ)ID_EDIT_LINEOnEditLine()圓弧插補(bǔ)IDEDITROUNDOnEditRound()說明:同時創(chuàng)建了三個右鍵菜單與“清空”、“直線插補(bǔ)”、“圓弧插補(bǔ)”同ID。(四)部分代碼〃繪制坐標(biāo)系voidCChabuDrawView::DrawAxes(void){CClientDCpDC(this);〃窗口映射,單位像素長度為0.1mm,坐標(biāo)軸x向右為正,y軸向上為正pDC.SetMapMode(MM_LOMETRIC);CRectRecto;GetClientRect(&Recto);pDC.SetViewport0rg(Recto.Width()/2,Recto.Height()/2);〃繪制坐標(biāo)軸pDC.MoveTo(-AXIS,0);pDC.LineTo(AXIS,O);法插補(bǔ)原理VC程序設(shè)計一ByO.z.pDC.MoveTo(0,-AXIS);pDC.LineTo(0,AXIS);〃繪制網(wǎng)格線for(inti=—AXIS;i<=AXIS;i+=S_LEN){if(i){pDC.MoveTo(i,—AXIS);pDC.LineTo(i,AXIS);pDC.MoveTo(—AXIS,i);pDC.LineTo(AXIS,i);}}〃標(biāo)注坐標(biāo)CStringstr;str.Format(_T("%d"),0);pDC.TextOutW(-8,15,str);str.Format(_T("%d"),-AXIS_SCALE);pDC.Text0utW(-AXIS-30,15,str);pDC.TextOutW(-25,-AXIS+15,str);str.Format(_T("%d"),AXIS_SCALE);pDC.Text0utW(AXIST5,15,str);pDC.Text0utW(T5,AXIS+15,str);}〃畫"點”函數(shù)(走步控制程序)voidCChabuDrawView::DrawPoint(intx,inty){inthalf_s_len=S_LEN/2;〃坐標(biāo)變換x=x*S_LEN;y=y*S_LEN;intx1=x-half_s_len;inty1=y+half_s_len;intx2=x+half_s_len;inty2=y-halfslen;法插補(bǔ)原理VC程序設(shè)計—ByO.z.x1+=sx*S_LEN;x2+=sx*S_LEN;y1+=sy*S_LEN;y2+=sy*S_LEN;〃繪制矩形CBrushbrush;brush.CreateSolidBrush(RGB(255,0,255));CPenpen;pen.CreatePen(PS_S0LID,1,RGB(255,0,255));CClientDCdc(this);dc.SelectObject(&pen);dc.SelectObject(&brush);dc.SetMapMode(MM_LOMETRIC);CRectRecto;GetClientRect(&Recto);dc.SetViewportOrg(Recto.Width()/2,Recto.Height()/2);dc.Rectangle(x1,y1,x2,y2);}〃通過坐標(biāo)平移實現(xiàn)任意兩點間直線繪制voidCChabuDrawView::cb_line(intx1,inty1,intx2,inty2){sx=x1;sy=y1;cb_line_std(x2-sx,y2-sy);sx=0;sy=0;}〃以原點為起點畫線voidCChabuDrawView::cb_line_std(intxo,intyo){intfm=0,xe=abs(xo),ye=abs(yo),xoy;intx=0,y=0;DrawPoint(x,y);intnxy=abs(xo)+abs(yo);〃判斷象限法插補(bǔ)原理VC程序設(shè)計一ByO.z.if(xo>=0)xoy=yo>0?1:4;elsexoy=yo>0?2:3;〃通過繪制方形模擬刀具進(jìn)給for(inti=nxy;nxy>0;nxy—){if(fm>=0){fm-=ye;if(xoy==l||xoy==4)DrawPoint(++x,y);elseDrawPoint(一x,y);}else{fm+=xe;if(xoy==1||xoy==2)DrawPoint(x,++y);elseDrawPoint(x,—y);}}}〃畫圓voidCChabuDrawView::cb_round_std(intx1,inty1,intx2,inty2){sx=0;sy=0;intfm=0,xm=abs(x1),ym=abs(y1),rns;intnxy=abs(x2-x1)+abs(y2-y1);intx=x1,y=y1;DrawPoint(x,y);〃判斷圓弧類型if(x2>x1){

法插補(bǔ)原理VC程序設(shè)計一ByO.z.法插補(bǔ)原理VC程序設(shè)計一ByO.z.ym——;if(rns==l||rns==6)DrawPoint(x,—y);elseDrawPoint(x,++y);elsefm=fm+2*xm+1;xm++;if(rns==1||rns==8)DrawPoint(++x,y);elseDrawPoint(一x,y

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論