<span id="plx27"><var id="plx27"></var></span>
<dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>
  • 歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
    裝配圖網(wǎng)
    ImageVerifierCode 換一換
    首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

    南航數(shù)控機(jī)床課程設(shè)計(jì)說明

    • 資源ID:46404375       資源大?。?span id="hjqdujk" class="font-tahoma">921.50KB        全文頁數(shù):36頁
    • 資源格式: DOC        下載積分:30積分
    快捷下載 游客一鍵下載
    會員登錄下載
    微信登錄下載
    三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
    二維碼
    微信掃一掃登錄
    下載資源需要30積分
    郵箱/手機(jī):
    溫馨提示:
    用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
    支付方式: 支付寶    微信支付   
    驗(yàn)證碼:   換一換

     
    賬號:
    密碼:
    驗(yàn)證碼:   換一換
      忘記密碼?
        
    友情提示
    2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
    3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
    4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
    5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

    南航數(shù)控機(jī)床課程設(shè)計(jì)說明

    機(jī)床數(shù)控技術(shù)及應(yīng)用課程設(shè)計(jì)說明書時間:2011年12月15日目錄一 課程設(shè)計(jì)要求少 1、1L-*<1J、55555555555555555555555555552二 .編程言"11U 1L-* *_1 II5555555555555555555555555555552插補(bǔ)界面說明4 H 1 1 丿丨 1 1 1 1 Mx LJ y -4,2四逐點(diǎn)比較法直線插補(bǔ)流程圖及算法2五.DDA法圓弧插補(bǔ)插補(bǔ)流程圖及算法7六.其他程序說明,,,15七.心得體會1*1 J 1 1)16附錄5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 51732.3.課程設(shè)計(jì)要求1.直線插補(bǔ)要求:用逐點(diǎn)比較法插補(bǔ)第4象限的直線;圓弧插補(bǔ)要求:用 DDA法插補(bǔ)1-4象限的順圓??; 界面設(shè)計(jì)要求:具有數(shù)據(jù)輸入框,具有插補(bǔ)過程動態(tài)顯示功能,插補(bǔ)步長可調(diào)。.編程語言Visual C+三插補(bǔ)界面說明插補(bǔ)界面具有逐點(diǎn)比較法插補(bǔ)直線數(shù)據(jù)輸入?yún)^(qū),DDA法插補(bǔ)1-4象限順圓弧的數(shù)據(jù)輸入?yún)^(qū),兩者公用的步長輸入?yún)^(qū),圖形顯示區(qū)域,四個按鈕實(shí)現(xiàn)插補(bǔ)過程的單步、連續(xù)顯示、圖形的清除, 插補(bǔ)界面的退出,以及必要的文字說明。界面設(shè)計(jì)所用到的控件有:1個圖像控件,用來顯示輸出圖形; 13個編輯框,用來輸入插補(bǔ)直線與圓 弧所必要的數(shù)據(jù);2個單選框,用來選擇直線插補(bǔ)和圓弧插補(bǔ);4個按鈕,用來控制插補(bǔ)、清除、退出界面;若干個靜態(tài)文本,進(jìn)行相應(yīng)地文字說明。各控件名稱及對應(yīng)的關(guān)聯(lián)變量名稱: 按鈕控件 按鈕控件 按鈕控件 按鈕控件單選框控件 單選框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 編輯框控件 圖形控件: 若1, IDC_BUTT0N1, m_danbu,實(shí)現(xiàn)單步插補(bǔ)功能按鈕;2, IDC_BUTT0N2, m_qin gchu ,實(shí)現(xiàn)清除功能按鈕;3, IDC_BUTT0N3, m_lia nxu,實(shí)現(xiàn)連續(xù)插補(bǔ)功能按鈕;4, IDC_BUTT0N4, m_tuichu,實(shí)現(xiàn)退出界面功能按鈕;1,IDC_RADIO1, m_line,其屬性選擇 GROUP選擇直線插補(bǔ);2,IDC_RADIO2,選擇圓弧插補(bǔ);1, IDC_EDIT1, m_alx2, IDC_EDIT2, m_aly3, IDC_EDIT3, m_blx4, IDC_EDIT4, m_bly5, IDC_EDIT5, m_aax6, IDC_EDIT6, m_aay7, IDC_EDIT7, m_bax8, IDC_EDIT8, m_bay9, IDC_EDIT9, m_ox10, IDC_EDIT10, m_oy11, IDC_EDIT11, m_r12, IDC_EDIT12, m_n13, IDC_EDIT13, m_bc,輸入直線起點(diǎn)橫坐標(biāo);,輸入直線起點(diǎn)縱坐標(biāo);,輸入直線終點(diǎn)橫坐標(biāo);,輸入直線終點(diǎn)縱坐標(biāo);,輸入圓弧起點(diǎn)橫坐標(biāo);,輸入圓弧起點(diǎn)縱坐標(biāo);,輸入圓弧終點(diǎn)橫坐標(biāo);,輸入圓弧終點(diǎn)縱坐標(biāo);,輸入圓心橫坐標(biāo);,輸入圓心縱坐標(biāo);,輸入圓弧半徑值;,輸入累加器位數(shù);,輸入插補(bǔ)步長;IDC_PRINTAREA實(shí)現(xiàn)圖形輸出功能;F靜態(tài)文本控件,IDC_STATIC,作為相關(guān)文字說明。四逐點(diǎn)比較法直線插補(bǔ)流程圖及算法1)偏差判別公式的推導(dǎo)設(shè)直線的起點(diǎn)坐標(biāo)為(x1,y1),終點(diǎn)坐標(biāo)為(x2,y2),直線上的任意一個動點(diǎn)為 (x,y),插補(bǔ)的 步長為b,則偏差判別函數(shù)F=(x2-x1)*y-(y2-y1)*x對位于第四象限的直線,有:當(dāng)F>=0時,向+x方向進(jìn)給一個脈沖當(dāng)量,此時x(i+1)=xi+b ,則有F(i+1)=Fi-(y2-y1)*b當(dāng)F< 0時,向-y方向進(jìn)給一個脈沖當(dāng)量,此時y(j+i)=yj-b ,則有F(j+1)=Fj+(x2-x1)*b終點(diǎn)判別器E用來判別脈沖次數(shù),每進(jìn)給一次E減1,直到其值為0時插補(bǔ)過程結(jié)束,E值由下面公式所得:E=(x2-x1)+(y1-y2)/ b2)直線插補(bǔ)流程圖:開始x1 >=0,y1>=0,x2>0,y2<0初始化:E=(x2-x1)+(y1-y2),F=0,x=x1,y=y1E=0-Y方向走一步F=F+b*(x2-x1),y=y-bF>=0+X方向走一步F=F-b*(y2-y1),x=x+bE=E-1輸岀直線不在第四象限結(jié)束3)單步插補(bǔ)直線實(shí)現(xiàn)程序及變量說明定義靜態(tài)變量static,變量類型為double型,在每次單擊按鈕控件執(zhí)行程序后,該變量的值始終存在 可以實(shí)現(xiàn)對插補(bǔ)次數(shù)的計(jì)算和判別。static double NX=0, NY=0 , N=0 , m , x , y , F=0;Nx, yi_blx10NX為+x方向的進(jìn)給次數(shù)累加,用于橫坐標(biāo)計(jì)算;NY為-y方向進(jìn)給次數(shù)累加,用于縱坐標(biāo)計(jì)算;為x ,y兩個方向的累加次數(shù),用于和終點(diǎn)判別器比較;m為終點(diǎn)判別器,用來判斷插補(bǔ)是否結(jié)束;用來存放插補(bǔ)過程中動點(diǎn)坐標(biāo);F為偏差判別函數(shù)。在插補(bǔ)程序中使用的變量名與流程圖中變量的對應(yīng)關(guān)系為:m_alx對應(yīng)x1,m_aly對應(yīng)y1,對應(yīng)x2, m_bly對應(yīng)y2, m_bc對應(yīng)b, m對應(yīng)E。變量賦的初值為:mine = 0, m_alx = 0.0, m_aly = 0.0, m_blx = 4.0,m_bly = -4.0, m_bc = 1.0。插補(bǔ)程序中的一些說明:因?yàn)檩敵龅膱D形坐標(biāo)數(shù)值為像素點(diǎn),在圖形中顯示很小,所以在下述的程序中將輸出的數(shù)值擴(kuò)大 倍,可以在圖形控件上更清晰地顯示圖形,其值本身并不具有實(shí)際的意義。禾U用UpdateData(true)函數(shù)實(shí)現(xiàn)獲取輸入的參數(shù)值。設(shè)置圖形顯示區(qū)域:CStatic*pWnd=(CStatic*)GetDlgltem(IDC_PRINTAREA);CDC*pdc=pWnd->GetDC();CRect rc;pWnd->GetClie ntRect(&rc);CRgn rgn;rgn. CreateRectRg n(rc.l eft+1,rc.top+7,rc.right-2,rc.bottom-2);pdc->SelectClipRg n(&rgn);pdc->SetViewportOrg(rc.left+rc.right)/2,rc.bottom-150);在圖形控件上畫坐標(biāo)軸:pdc->MoveTo(-150,0);pdc->Li neTo(150,0);pdc->MoveTo(0,-150);pdc->Li neTo(0,150);在圖形控件上輸出原點(diǎn)、x軸、y軸符號:pdc->TextOut(-10,-20,"o");pdc->TextOut(150,0,"x"); pdc->TextOut(-5,-150,"y");單步直線插補(bǔ)程序:if (m_li ne=0)選擇直線插補(bǔ) pdc->MoveTo(10*m_alx,-10*m_aly);畫出需要插補(bǔ)的直線pdc->Li neTo(10*m_blx,-10*m_bly);if(m_alx<m_blx )&&(m_aly>m_bly)&&(m_alx>=0)&&(m_aly<=0)/判別輸入的直線在第4象限,如果不在,結(jié)束程序并提示輸入第4象限的直線x=10*m_alx+10*NX*m_bc;/ 計(jì)算動態(tài)坐標(biāo)y=-10*m_aly+10*NY*m_bc;4#m=(abs(m_blx)_abs(m_alx)+(abs(m_bly)_abs(m_aly)/(m_bc)_N;II終點(diǎn)判別器計(jì)算II終點(diǎn)判別器不為0,執(zhí)行插補(bǔ),否則結(jié)束if(m>0)if(F>=0)偏差判別函數(shù)大于 0, x方向進(jìn)給 elseNX=NX+1;N=N+1;pdc->MoveTo(x,y);x=x+10*m_bc;+x方向進(jìn)給一次進(jìn)給次數(shù)累加器加1將坐標(biāo)移到直線起點(diǎn) II計(jì)算橫坐標(biāo)pdc->SelectObject (new CPe n(PS_SOLID,0,RGB(255,0,0);II改變插補(bǔ)線段的顏色,此處選擇紅色pdc->Li neTo(x,y);畫直線F=F-m_bc*(abs(m_bly)-abs(m_aly);II重新計(jì)算偏差判別函數(shù),并結(jié)束判斷偏差判別函數(shù)小于 0, y方向進(jìn)給NY=NY+1;N=N+1;pdc->MoveTo(x,y);y=y+10*m_bc;II-y方向進(jìn)給一次 進(jìn)給次數(shù)累加器加1 將坐標(biāo)移到直線起點(diǎn) II計(jì)算縱坐標(biāo)pdc->SelectObject (new CPe n(PS_SOLID,0,RGB(255,0,0);II改變插補(bǔ)線段的顏色,此處選擇紅色pdc->Li neTo(x,y);畫直線F=F+m_bc*(abs(m_blx)-abs(m_alx);重新計(jì)算偏差判別函數(shù),并結(jié)束判斷I*此段函數(shù)用于連續(xù)插補(bǔ)m=m-1;if(m=0)KillTimer(1);/終點(diǎn)判別器減1如果終點(diǎn)判別器為0,關(guān)閉定時器1,連續(xù)插補(bǔ)結(jié)束I*此段函數(shù)用于連續(xù)插補(bǔ)else提示輸入的直線不在給定的象限AfxMessageBox("請輸入位于第四象限的點(diǎn) ”);4)連續(xù)插補(bǔ)直線的實(shí)現(xiàn)方案1:通過定時器實(shí)現(xiàn)逐段顯示插補(bǔ)軌跡void CMyDlg:O nButto n3()SetTimer(1,500,NULL);II選擇定時器1,定時時間500ms; -75void CMyDlg:OnTimer(UINT nIDEvent)/定時器1函數(shù),調(diào)用 OnButton1()函數(shù),定時器關(guān)閉如上所述On Butto n1();方案2:通過循環(huán)體,一次實(shí)現(xiàn)插補(bǔ)軌跡的顯示程序各行的含義同單步插補(bǔ)程序if (m_li ne=0)pdc->MoveTo(10*m_alx,-10*m_aly);pdc->Li neTo(10*m_blx,-10*m_bly);if(m_alx<m_blx )&&(m_aly>m_bly)&&(m_alx>=0)&&(m_aly<=0)x=10*m_alx+10*NX*m_bc;y=-10*m_aly+10*NY*m_bc;m=(abs(m_blx)_abs(m_alx)+(abs(m_bly)_abs(m_aly)/(m_bc)_N;pdc->MoveTo(x,y);while(m>0)通過while循環(huán)一次實(shí)現(xiàn)插補(bǔ)軌跡顯示if(F>=0)F=F-m_bc*(abs(m_bly)-abs(m_aly);x=x+10*m_bc;elseF=F+m_bc*(abs(m_blx)-abs(m_alx);y=y+10*m_bc;pdc->L in eTo(x,y);m=m-1;AfxMessageBox("連續(xù)插補(bǔ)結(jié)束”);五.DDA法圓弧插補(bǔ)插補(bǔ)流程圖及算法1)圓弧插補(bǔ)示意圖插補(bǔ)1-4象限的順圓,要分成兩段圓弧來實(shí)現(xiàn),分別為第1象限順圓弧和第 4象限順圓弧。圓弧插補(bǔ)通過半加載實(shí)現(xiàn),即積分累加器Jrx, Jry中存放寄存器最大容量的一半。假設(shè)圓弧起點(diǎn)坐標(biāo)(x1,y1),終點(diǎn)坐標(biāo)(x2,y2),根據(jù)DDA法插補(bǔ)圓弧的要求,x軸被積函數(shù)寄存器 Jvx存放y1, y軸被積函數(shù)寄存器 Jvy存 放x1。DDA法插補(bǔ)第1象限順圓插補(bǔ)器示意圖:DDA法插補(bǔ)第4象限順圓插補(bǔ)器示意圖:NYNm=(xO+r) x1+y1+(x0+r)x2+|y2|)/bNNYY1-xO+Tx*bY1NNYYNYNX=X+XeY=Y-M;Ey=Ey-1;Ty=Ty+1;y=y-b; n=n-1;m=r1=(x1-x0)A2+(y1-y0)A2 r2=(x2-xO)#+(y2-yO)A2,T=1Xe=y1-Ty*b; NEx=(r+xO-x1)/b;Ey=y1/b;Nm=m-Tx-Ty-T1x-T1yNx1;x=x+b;n=n-1;mNY仁 Y1-M1;Ey=Ey-1;T1y=T1y+1;y=y-bT-T-1流程圖中變量說明: 靜態(tài)變量:YX1=X1+XeX1=X1-M1;EEx-( i+規(guī)-x2)/b;Ey=|y2|/b;N=Ex+Ey,x=(i+x0)y=0;Mi n J1_Xe= T1y*b;Ye=r+T1x*b;結(jié)束m:圓弧插補(bǔ)終點(diǎn)判別器; T:圓弧插補(bǔ)象限標(biāo)志位, T=1,插補(bǔ)第1象限圓弧,T=0插補(bǔ)第4象限圓 ??;Ex, Ey,x,y方向終點(diǎn)判別器;n第1象限圓弧終點(diǎn)判別器;x,y動態(tài)點(diǎn)坐標(biāo)值; Xe, Ye,分別為 x、y軸被積函數(shù)寄存器; X,Y為第1象限x、y軸積分累加器,X1,Y1分別為第4象限x、y軸積分累 加器;Tx,Ty為第1象限x、y軸插補(bǔ)計(jì)數(shù)器,T1x,T1y為第4象限x、y軸插補(bǔ)計(jì)數(shù)器。全局變量:M,M1存放寄存器最大存儲容量。3)單步插補(bǔ)圓弧實(shí)現(xiàn)程序及變量說明部分變量說明如上,插補(bǔ)程序中與流程圖中的變量對應(yīng)關(guān)系為:m_aax對應(yīng)x1 , m_aay對應(yīng)y1, m_bax對應(yīng)x2, m_bay對應(yīng)y2, m_ox對應(yīng)x0, m_oy對應(yīng)yO,m_r對應(yīng)r, m_n對應(yīng)n,m_bc對應(yīng)b。變量賦 予的初值為:m_aax = 0.0, m_aay = 5.0, m_bax = 0.0, m_bay = -5.0, m_ox = 0.0,m_oy = 0.0,m_r = 5.0,m_n = 3.0, m_bc = 1.0, n=1,X=0, X仁0,Y=0,丫仁0,Tx=0,T1x=0, Ty=0, T1y=0, T=1, M=1,M1=1。未列出的變量不賦初值。/判斷圓心位置,如果不在 x軸上結(jié)束程序程序?yàn)椋篿f(m_oy=0) if(fabs(m_bax)_fabs(m_ox)*(fabs(m_bax)_fabs(m_ox)+(fabs(m_bay)_fabs(m_oy)*(fabs(m_bay)_fabs( m_oy)=(fabs(m_aax)-fabs(m_ox)*(fabs(m_aax)-fabs(m_ox)+(fabs(m_aay)-fabs(m_oy)*(fabs(m_aay)-fabs( m_oy)判斷圓弧起點(diǎn)和終點(diǎn)到圓心的位置是否相等,若不等,結(jié)束程序/判斷圓弧輸入的半徑是否與求得的想的,若不等,結(jié)束程序if(sqrt(fabs(m_aax)-fabs(m_ox)*(fabs(m_aax)-fabs(m_ox)+(fabs(m_aay)-fabs(m_oy)*(fabs(m_aay)-fabs(m_ oy)=m_r)if(m_aax>=0&&m _aay>=0&&m _bax>=0&&m _bay<=0)判斷圓弧是否在1-4象限,若不在,結(jié)束程序pdc->Arc(10*(m_ox-m_r),10*(-m_oy-m_r),10*(m_ox+m_r),10*(m_r-m_oy),10*(m_bax),10*(-m_bay), 10*(m_aax),10*(-m_aay);畫給定的圓弧m=(abs(m_ox+m_r)-abs(m_aax)+abs(m_aay)+(abs(m_ox+m_r)-abs(m_bax)+abs(m_bay)/m_bc-Tx- Ty-T1x-T1y;if(n >0)Xe=m_aay-Ty*m_bc;Ye=m_aax-m_ox+Tx*m_bc;Ex=(abs(m_r+m_ox)-abs(m_aax)/m_bc-Tx;Ey=abs(m_aay)/m_bc-Ty;x=10*m_aax+10*Tx*m_bc;y=-10*m_aay+10*Ty*m_bc;n=Ex+Ey;if(N= =0)for(i nt i=0;i<m _n ;i+)M=M*2;/計(jì)算插補(bǔ)圓弧的終點(diǎn)判別器值/n>0插補(bǔ)第1象限的圓弧,若n=0,插補(bǔ)第4象限圓弧/x,y軸被積函數(shù)寄存器計(jì)算/X,y軸終點(diǎn)判別器計(jì)算/計(jì)算插補(bǔ)過程動點(diǎn)坐標(biāo)(x,y)插補(bǔ)第1象限終點(diǎn)判別器計(jì)算/N用來標(biāo)志寄存器最大容量計(jì)算,一次有效根據(jù)輸入的寄存器位數(shù),計(jì)算容量!19!1#X=M/2;Y=M/2;/積分累加器計(jì)算,半加載方式!1#N=N+1;pdc->MoveTo(x,y); if(Ex>0)X=X+Xe;/畫插補(bǔ)線段的起點(diǎn)/x向終點(diǎn)判別器判斷,Ex-O,x向插補(bǔ)結(jié)束計(jì)算x積分累加器if(X>=M)X=X-M;/判斷積分累加器是否溢出,未溢出轉(zhuǎn)到下一步/x積分累加器溢出取其余數(shù)xs=1;/標(biāo)志x向進(jìn)給一次Ex=Ex-1;/x終點(diǎn)判別器減1Tx=Tx+1;/計(jì)算x向插補(bǔ)次數(shù)x=x+10*m_bc;/計(jì)算進(jìn)給后x坐標(biāo)值n=n-1;第1象限圓弧終點(diǎn)判別器 1m=m-1;完整圓弧終點(diǎn)判別器減 1if(Ey>0)Y=Y+Ye;/y向終點(diǎn)判別器判斷,Ey-0,y向插補(bǔ)結(jié)束/計(jì)算y積分累加器if(Y>=M)Y=Y-M;/判斷積分累加器是否溢出,未溢出轉(zhuǎn)到下一步/y積分累加器溢出取其余數(shù)ys=1;/標(biāo)志y向進(jìn)給一次Ey=Ey-1;/y終點(diǎn)判別器減1Ty=Ty+1;/計(jì)算y向插補(bǔ)次數(shù)y=y+10*m_bc;/計(jì)算進(jìn)給后y坐標(biāo)值n=n-1; m=m-1;/第1象限圓弧終點(diǎn)判別器 1完整圓弧終點(diǎn)判別器減 1pdc->SelectObject (new CPe n(PS_SOLID,0,RGB(255,0,0);/選擇插補(bǔ)直線的顏色,此處選紅色pdc->Li neTo(x,y);/ 畫直線/*插補(bǔ)第4象限的圓弧,程序語句含義同上/*elseXe=0+T1y*m_bc;Ye=abs(m_r)-T1x*m_bc;Ex=(abs(m_r+m_ox)-abs(m_bax)/m_bc-T1x;Ey=abs(m_bay)/m_bc-T1y;x=10*(m_r+m_ox)-10*T1x*m_bc;y=10*T1y*m_bc;if(N1= =0)for(i nt j=O;j<m_ n;j+)M1= M1*2;X1= M1/2;丫仁 M1/2;2= N1 + 1;pdc->MoveTo(x,y);if(Ex>0)X仁 X1+Xe;if(X1>=M1)X仁 X1-M1;xs=1;Ex=Ex-1;T1x=T1x+1;x=x-10*m_bc;m=m-1;if(Ey>0)丫仁 Y1+Ye;if(Y1>=M1)Y1= Y1-M1;ys=1;Ey=Ey-1;T1y=T1y+1;y=y+10*m_bc;m=m-1;pdc->SelectObject (new CPe n(PS_SOLID,0,RGB(255,0,0); pdc->L in eTo(x,y);if(m=0)此段函數(shù)用于連續(xù)插補(bǔ)圓弧時終點(diǎn)判斷 KillTimer(l);elseAfxMessageBox("請輸入1-4象限的圓"); elseAfxMessageBox("請輸入正確的半徑值"); elseAfxMessageBox("請輸入位于同一圓上的坐標(biāo)點(diǎn)”);elseAfxMessageBox("請輸入符合要求的圓心位置”);4)連續(xù)插補(bǔ)圓弧的實(shí)現(xiàn)程序方案1:通過定時器實(shí)現(xiàn)逐段顯示插補(bǔ)軌跡。void CMyDlg:O nButto n3()SetTimer(1,500,NULL);/ 選擇定時器 1,定時時間 500ms;void CMyDlg:OnTimer(UINT nIDEvent)/定時器1函數(shù),調(diào)用 OnButton1()函數(shù),定時器關(guān)閉如上所述On Butto n1();方案2:通過循環(huán)體,一次實(shí)現(xiàn)插補(bǔ)軌跡的顯示。程序語句含義同單步插補(bǔ)程序。if(mine= =1)if(m_oy=0)if(fabs(m_bax)_fabs(m_ox)*(fabs(m_bax)_fabs(m_ox)+(fabs(m_bay)_fabs(m_oy)*(fabs(m _bay)-fabs(m_oy)=(fabs(m_aax)-fabs(m_ox)*(fabs(m_aax)-fabs(m_ox)+(fabs(m_aay)-fabs(m_oy)*(f abs(m_aay)_fabs(m_oy) if(sqrt(fabs(m_aax)-fabs(m_ox)*(fabs(m_aax)-fabs(m_ox)+(fabs(m_aay)-fabs(m_oy)* (fabs(m_aay)-fabs(m_oy)=m_r)if(m_aax>=0&&m _aay>=0&&m _bax>=0&&m _bay<=0) pdc->Arc(10*(m_ox-m_r),10*(-m_oy-m_r),10*(m_ox+m_r),10*(m_r-m_oy),10*(m_bax), 10*(-m_bay),10*(m_aax),10*(-m_aay);m=(abs(m_ox+m_r)-abs(m_aax)+abs(m_aay)+(abs(m_ox+m_r)-abs(m_bax)+abs(m_bay)/m_bc; while(m>0)if(T= =1)/T=1插補(bǔ)第1象限的圓弧,T=0插補(bǔ)第四象限的圓弧Ex=(abs(m_r+m_ox)-abs(m_aax)/m_bc;Ey=abs(m_aay)/m_bc;n=Ex+Ey;x=10*m_aax;y=_10*m_aay; pdc_>MoveTo(x,y); for(i nt i=0;i<m _n ;i+) M=M*2; X=M/2; Y=M/2; while( n>0)Xe=m_aay-Ty*m_bc;Ye=m_aax-m_ox+Tx*m_bc;if(Ex>0)X=X+Xe;if(X>=M)X=X-M;xs=1;Ex=Ex-1;Tx=Tx+1;x=x+10*m_bc;n=n-1;m=m-1;if(Ey>0)Y=Y+Ye;if(Y>=M)Y=Y-M;ys=1;Ey=Ey-1;Ty=Ty+1;y=y+10*m_bc;n=n-1;m=m-1;pdc->L in eTo(x,y);T=T-1;/第1象限圓弧插補(bǔ)結(jié)束elseEx=(abs(m_r+m_ox)-abs(m_bax)/m_bc;Ey=abs(m_bay)/m_bc;N=Ex+Ey;x=10*(m_r+m_ox);y=0;pdc_>MoveTo(x,y);for(i nt j=O;j<m_ n;j+)M1= M1*2;X1= M1/2;丫仁 M1/2;while(N>0)Xe=0+T1y*m_bc;Ye=abs(m_r)-T1x*m_bc;if(Ex>0)X仁 X1+Xe;if(X1>=M1)X仁 X1-M1;xs=1;Ex=Ex-1;T1x=T1x+1;x=x-10*m_bc;m=m-1;N=N-1;if(Ey>0)丫仁 Y1+Ye;if(Y1>=M1)丫仁Y1-M1;ys=1;Ey=Ey-1;T1y=T1y+1;y=y+10*m_bc;m=m-1;N=N-1;pdc->L in eTo(x,y);if(m=O)AfxMessageBox("連續(xù)插補(bǔ)圓弧結(jié)束");elseAfxMessageBox("請輸入1-4象限的圓”);elseAfxMessageBox("請輸入正確的半徑值 ”);elseAfxMessageBox("請輸入位于同一圓上的坐標(biāo)點(diǎn)”);elseAfxMessageBox("請輸入符合要求的圓心位置”);六.其他程序說明1)清除按鈕功能程序每次按下該按鈕時,將定義的所有變量賦予初值。void CMyDlg:O nButto n2()N=0;N1=0;NX=0;NY=0;x=0;y=0;E=0; F=0;m=0; n=1; X=0;X 仁 0;Y=0;Y 仁 0;Xe=0;Ye=0;Ex=0;Ey=0; xs=0;ys=0;Tx=0;T1x=0;Ty=0;T1y=0;M=1;M1=1;T=1;In validate();2)退出按鈕功能程序每次按下該按鈕時,程序提示退出界面。void CMyDlg:O nButto n4()if(MessageBox("確認(rèn)退出插補(bǔ)程序",”請確認(rèn)退出 ”,MB_ICONQUESTION|MB_OKCANCEL)=IDOK) PostMessage(WM_QUIT);16七.心得體會機(jī)床數(shù)控技術(shù)及應(yīng)用課程設(shè)計(jì)是對我們所學(xué)課程機(jī)床數(shù)控技術(shù)及應(yīng)用中知識的應(yīng)用,用到的 主要知識是插補(bǔ)原理和插補(bǔ)方法。本次課程設(shè)計(jì)與我們以前做過的課程設(shè)計(jì)存在明顯的不同,以往的課程 設(shè)計(jì)主要工作是計(jì)算與手工畫圖,而這次的課程設(shè)計(jì)是對原理的應(yīng)用。作為實(shí)現(xiàn)插補(bǔ)過程的實(shí)現(xiàn)手段,對 編程語言知識的要求較高,完全通過軟件編程實(shí)現(xiàn),即“1%的工作是插補(bǔ),99%的工作是界面的設(shè)計(jì)和程序編寫”。這次課程設(shè)計(jì),我從開始準(zhǔn)備到完全做完,一共花了三天多的時間,每天從早晨八點(diǎn)到晚上十一點(diǎn), 除了中間去上課之外,其余時間一直都在教研室里做課設(shè),不但沒有感覺枯燥,反而覺得很有趣。這次課 設(shè)主要是通過編程語言實(shí)現(xiàn)的,幸運(yùn)的是我們在大一的時候?qū)W習(xí)過Visual C+,而且這個學(xué)期以來自己也一直在用VC對51單片機(jī)進(jìn)行編程,所以對 Visual C+的知識還算熟悉,沒有因?yàn)槿W(xué)習(xí)新的編程語言和 復(fù)習(xí)以往的知識而花費(fèi)時間。雖然如此,但由于對建立MFC應(yīng)用程序的過程了解不夠,沒有搞清楚文檔界面和對話框的區(qū)別,仍然走了寫誤區(qū)。我花了一天的時間去看了與文檔編程相關(guān)的資料,直到晚上才在別 人的提醒下發(fā)現(xiàn)看的資料跟自己需要的不一樣。雖然也從中學(xué)習(xí)到了一些自己所需要的知識,但是絕大多 數(shù)的時間還是浪費(fèi)了。在三天多的時間里,從 MFC知識的學(xué)習(xí),到界面的設(shè)計(jì)、控件的布置,至慷后的函數(shù)添加,自己一步 一個腳印走過來,付出了很大的努力,同時也學(xué)習(xí)到了很多的知識,對插補(bǔ)的原理也進(jìn)一步理解。剛開始,先練習(xí)在控件上畫出圖形,然后就練習(xí)圖形輸出的單步控制。因?yàn)樵趫D書館里沒有找到相關(guān) 的資料,所以就自己慢慢地琢磨,花了很長的時間,也花了很大的功夫,我知道如何編寫插補(bǔ)步驟的程序 對于我來說是沒有問題的,關(guān)鍵的地方就是如何實(shí)現(xiàn)插補(bǔ)軌跡的單步輸出。后來無意中在C+的課本上看見靜態(tài)變量可以實(shí)現(xiàn)每次程序執(zhí)行后數(shù)值不變,我才猛然意識到利用靜態(tài)變量實(shí)現(xiàn)軌跡的單步控制。我先 嘗試著編寫了將一條直線分段輸出的程序,果然可以實(shí)現(xiàn)。之后,就很順利的將直線的插補(bǔ)程序編寫出來,與自己預(yù)想的完全一樣。而從單步控制到連續(xù)插補(bǔ)的實(shí)現(xiàn),只花了不到五分鐘的時間。一條一條語句的編 寫,看著自己一點(diǎn)點(diǎn)的進(jìn)步,心里有種莫名的激動。第二天晚上十點(diǎn)半我將直線插補(bǔ)的兩種方式實(shí)現(xiàn)了。 第三天的時候,我開始編寫圓弧插補(bǔ)的程序。因?yàn)閳A弧插補(bǔ)用DDA法實(shí)現(xiàn),這種插補(bǔ)方法沒有固定的偏差判別函數(shù),所用到的變量數(shù)目也較多,所以我感覺圓弧插補(bǔ)的實(shí)現(xiàn)要比直線繁瑣好多,但是因?yàn)橐呀?jīng)有了 一定的經(jīng)驗(yàn),所以我并沒有擔(dān)心自己別寫不出來。我首先嘗試編寫第1象限的圓弧的插補(bǔ)程序,在這過程中出現(xiàn)了很多的問題, 不是輸不出圖形,就是輸出的軌跡與實(shí)際的插補(bǔ)軌跡不相同。一遍一遍的修改程序,但是大半天的時間過去了,還是沒有什么進(jìn)展。實(shí)在沒有辦法,我就按照自己編寫的程序,一步步往下驗(yàn) 證,將結(jié)果一步步在紙上寫下來,與實(shí)際的插補(bǔ)圖形進(jìn)行比較,看看問題究竟出現(xiàn)在哪。這樣果然有效, 在晚上八點(diǎn)左右的時候,我把第1象限的圓弧單步插補(bǔ)實(shí)現(xiàn)。對程序略加修改之后,不一會兒就實(shí)現(xiàn)了兩個象限的圓弧的單步插補(bǔ)。然而,圓弧的連續(xù)插補(bǔ)并沒有像直線插補(bǔ)那么容易實(shí)現(xiàn)。因?yàn)檫@其中的變量太 多,用到的判別語句很多, 眼睛很容易就看錯了, 一不小心就會把程序?qū)戝e,輸不出正確結(jié)果就很正常了。雖然進(jìn)過一個多小時的修改,但是程序仍然不能實(shí)現(xiàn)功能。晚上回去之后還在一直考慮著這個問題,覺也沒有睡好。第二天清晨在腦子里又把程序理了一遍,居 然發(fā)現(xiàn)了一些問題。早飯后到教研室,花了不到二十分鐘就把程序改好了。當(dāng)插補(bǔ)的一條條線段出現(xiàn)在我 的眼睛里的時候,心里真的是很激動,為自己這些天的努力與付出有一個滿意的結(jié)果而高興。后來在老師的幫助和提醒下,我又花了大概半天的時間將整個程序進(jìn)一步完善,例如可以逐段顯示連 續(xù)插補(bǔ)的軌跡、用不同的顏色顯示插補(bǔ)軌跡、數(shù)據(jù)點(diǎn)賦初值,避免出錯等,這樣輸出的結(jié)果比之前好了很 多。在這次課程設(shè)計(jì)的過程中,我不單單是將課程設(shè)計(jì)給做完了,真的學(xué)習(xí)到了很多的東西,體會到了學(xué) 習(xí)的樂趣,對數(shù)控插補(bǔ)原理的理解更加透徹,能夠更加熟練的使用Visual C+,以后也可以利用 MFC故一些其他的程序。同時,因?yàn)槲覍磉€要深入地學(xué)習(xí)數(shù)控技術(shù),所以這次的經(jīng)歷對自己以后也有很大的幫助,也激發(fā)了我學(xué)習(xí)的興趣。175七.心得體會#5七.心得體會#5附錄1:插補(bǔ)過程完整的程序/數(shù)控機(jī)床技術(shù)及應(yīng)用課程設(shè)計(jì)Dlg.cpp : implementation file#include "stdafx.h"#i nclude "數(shù)控機(jī)床技術(shù)及應(yīng)用課程設(shè)計(jì).h"#i nclude "數(shù)控機(jī)床技術(shù)及應(yīng)用課程設(shè)計(jì)Dlg.h"#in clude "math.h"#ifdef _DEBUG#defi ne new DEBUG_NEW#un def THIS_FILEstatic char THIS_FILE = _FILE_;#en dif/ CAboutDlg dialog used for App Aboutstatic double NX=0,NY=0,N=0,N 仁0,m,x,y,X=0,X 仁0,Y=0,Y 仁0,Xe,Ye,F=0;static double Ex,Ey,xs=0,ys=0,Tx=0,T1x=0,Ty=0,T1y=0,E, n=1,T=1;int M=1,M 1=1;class CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog DataAFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;AFX_DATA/ ClassWizard gen erated virtual fun ctio n overridesAFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExcha nge(CDataExcha nge* pDX); / DDX/DDV support /AFX_VIRTUAL/ Impleme ntati onprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExcha nge(CDataExcha nge* pDX)CDialog:DoDataExcha nge(pDX);AFX_DATA_MAP(CAboutDlg)AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)AFX_MSG_MAP(CAboutDlg)/ No message han dlersAFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg dialogCMyDlg:CMyDlg(CWnd* pPare nt /*=NULL*/):CDialog(CMyDlg:IDD, pPare nt)/AFX_DATA_INIT(CMyDlg)mine = 0;m_alx = 0.0;m_aly = 0.0;m_blx = 4.0;m_bly = -4.0;m_aax = 0.0;m_aay = 5.0;m_bax = 0.0;m_bay = -5.0;m_ox = 0.0;m_oy = 0.0;m_r = 5.0;m_n = 3.0;m_bc = 1.0;/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIco n = AfxGetApp()->Loadlco n(IDR_MAINFRAME);void CMyDlg:DoDataExcha nge(CDataExcha nge* pDX)CDialog:DoDataExcha nge(pDX);AFX_DATA_MAP(CMyDlg)DDX_Co ntrol(pDX, IDC_BUTTON4, m_tuichu);DDX_Co ntrol(pDX, IDC_BUTTON3, m_lia nxu);DDX_C on trol(pDX, IDC_BUTTON2, m_qi ngchu);DDX_Co ntrol(pDX, IDC_BUTTON1, m_da nbu);DDX_Radio(pDX, IDC_RADIO1, m_li ne);DDX_Text(pDX, IDC_EDIT1, m_alx);DDX_Text(pDX, IDC_EDIT2, m_aly);DDX_Text(pDX, IDC_EDIT3, m_blx);DDX_Text(pDX, IDC_EDIT4, m_bly);DDX_Text(pDX, IDC_EDIT5, m_aax);DDX_Text(pDX, IDC_EDIT6, m_aay);DDX_Text(pDX, IDC_EDIT7, m_bax);DDX_Text(pDX, IDC_EDIT8, m_bay);DDX_Text(pDX, IDC_EDIT9, m_ox);DDX_Text(pDX, IDC_EDIT10, m_oy);DDX_Text(pDX, IDC_EDIT11, m_r);DDX_Text(pDX, IDC_EDIT12, m_n);DDX_Text(pDX, IDC_EDIT13, m_bc);AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMyDlg, CDialog)AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, On Butt on1)ON_BN_CLICKED(IDC_BUTTON2, On Butt on2)ON_BN_CLICKED(IDC_BUTTON4, On Butt on4)ON_BN_CLICKED(IDC_BUTTON3, On Butt on3)ON_WM_TIMER()AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg message han dlersBOOL CMyDlg:O nl ni tDialog()CDialog:O nlni tDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system comma nd ran ge.ASSERT(IDM_ABOUTBOX & OxFFFO) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < OxFOOO);CMe nu* pSysMe nu = GetSystemMe nu(FALSE);if (pSysMe nu != NULL)CStri ng strAboutMe nu;strAboutMe nu.LoadStri ng(IDS_ABOUTBOX);if (!strAboutMe nu.IsEmpty()pSysMe nu->Appe ndMe nu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING , IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIco n(m_hlco n, TRUE);/ Set big iconSetIco n(m_hlc on, FALSE);/ Set small icon/ TODO: Add extra in itializatio n herereturn TRUE; / return TRUEuni ess you set the focus to a con trolvoid CMyDlg:O nSysComma nd(UINT nID, LPARAM lParam)if (n ID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:O nSysComma nd( nID, lParam);/ If you add a mini mize butt on to your dialog, you will n eed the code below/ to draw the icon. For MFC applicati ons using the docume nt/view model,/ this is automatically done for you by the framework.void CMyDlg:O nPai nt()if (IsIco ni c()CPaintDC dc(this); / device con text for paintingSen dMessage(WMCONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Cen ter icon in clie nt recta ngleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClie ntRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIc on (x, y, m_hIc on);else21CDialog: OnPain t();/ The system calls this to obtain the cursor to display while the user drags/ the mi ni mized win dow.HCURSOR CMyDlg:O nQueryDraglco n()return (HCURSOR) m_hIco n;void CMyDlg:O nButto n1()/ TODO: Add your con trol no tificati on han dler code here CStatic*pWnd=(CStatic*)GetDlgltem(IDC_PRINTAREA); CDC*pdc=pWnd->GetDC();CRect rc;pWnd->GetClie ntRect(&rc);CRgn rgn;rgn. CreateRectRg n(rc.l eft+1,rc.top+7,rc.right-2,rc.bottom-2); pdc->SelectClipRg n(&rgn);pdc->SetViewportOrg(rc.left+rc.right)/2,rc.bottom-150); pdc->MoveTo(-150,0);pdc->Li neTo(150,0);pdc->MoveTo(0,-150);pdc->Li neTo(0,150);pdc->TextOut(-10,-20,"o");pdc->TextOut(15O,O,"x");pdc->TextOut(-5,-15O,"y");UpdateData(true);if (m_li ne=0) pdc->MoveTo(10*m_alx,-10*m_aly);pdc->Li neTo(10*m_blx,-10*m_bly);if(m_alx<m_blx )&&(m_aly>m_bly) &&(m_alx>=0)&&(m_aly<=0)x=10*m_alx+10*NX*m_bc; y=-10*m_aly+10*NY*m_bc;m=(abs(m_blx)_abs(m_alx)+(abs(m_bly)_abs(m_aly)/(m_bc)_N; if(m>0)if(F>=0)NX=NX+1;N=N+1;pdc->MoveTo

    注意事項(xiàng)

    本文(南航數(shù)控機(jī)床課程設(shè)計(jì)說明)為本站會員(小**)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

    溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




    關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

    copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

    備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


    本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!

    欧美久久久一区二区三区,国产精品亚洲一区二区无码,亚洲国产精品综合久久20声音,亚洲国产精品无码久久久蜜芽
    <span id="plx27"><var id="plx27"></var></span>
    <dfn id="plx27"><var id="plx27"></var></dfn>
  • <span id="plx27"><code id="plx27"><input id="plx27"></input></code></span>
    <menu id="plx27"></menu><menuitem id="plx27"><thead id="plx27"><input id="plx27"></input></thead></menuitem>
  • <label id="plx27"><code id="plx27"></code></label>
    <label id="plx27"><button id="plx27"></button></label>