南航数控机床课程设计说明.docx
- 文档编号:582291
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:47
- 大小:177.28KB
南航数控机床课程设计说明.docx
《南航数控机床课程设计说明.docx》由会员分享,可在线阅读,更多相关《南航数控机床课程设计说明.docx(47页珍藏版)》请在冰豆网上搜索。
南航数控机床课程设计说明
《机床数控技术及应用》
课程设计说明书
时间:
2011年12月15日
目录
一.课程设计要求…………………………………………………………………………2
二.编程语言………………………………………………………………………………2
三.插补界面说明…………………………………………………………………………2
四.逐点比较法直线插补流程图及算法………………………………………………2
五.DDA法圆弧插补插补流程图及算法………………………………………………7
六.其他程序说明…………………………………………………………………………15
七.心得体会………………………………………………………………………………16
附录…………………………………………………………………………………………17
一.课程设计要求
1.直线插补要求:
用逐点比较法插补第4象限的直线;
2.圆弧插补要求:
用DDA法插补1-4象限的顺圆弧;
3.界面设计要求:
具有数据输入框,具有插补过程动态显示功能,插补步长可调。
二.编程语言
VisualC++
三.插补界面说明
插补界面具有逐点比较法插补直线数据输入区,DDA法插补1-4象限顺圆弧的数据输入区,两者公用的步长输入区,图形显示区域,四个按钮实现插补过程的单步、连续显示、图形的清除,
插补界面的退出,以及必要的文字说明。
界面设计所用到的控件有:
1个图像控件,用来显示输出图形;13个编辑框,用来输入插补直线与圆弧所必要的数据;2个单选框,用来选择直线插补和圆弧插补;4个按钮,用来控制插补、清除、退出界面;若干个静态文本,进行相应地文字说明。
各控件名称及对应的关联变量名称:
按钮控件1,IDC_BUTTON1,m_danbu,实现单步插补功能按钮;
按钮控件2,IDC_BUTTON2,m_qingchu,实现清除功能按钮;
按钮控件3,IDC_BUTTON3,m_lianxu,实现连续插补功能按钮;
按钮控件4,IDC_BUTTON4,m_tuichu,实现退出界面功能按钮;
单选框控件1,IDC_RADIO1,m_line,其属性选择GROUP,选择直线插补;
单选框控件2,IDC_RADIO2,选择圆弧插补;
编辑框控件1,IDC_EDIT1,m_alx,输入直线起点横坐标;
编辑框控件2,IDC_EDIT2,m_aly,输入直线起点纵坐标;
编辑框控件3,IDC_EDIT3,m_blx,输入直线终点横坐标;
编辑框控件4,IDC_EDIT4,m_bly,输入直线终点纵坐标;
编辑框控件5,IDC_EDIT5,m_aax,输入圆弧起点横坐标;
编辑框控件6,IDC_EDIT6,m_aay,输入圆弧起点纵坐标;
编辑框控件7,IDC_EDIT7,m_bax,输入圆弧终点横坐标;
编辑框控件8,IDC_EDIT8,m_bay,输入圆弧终点纵坐标;
编辑框控件9,IDC_EDIT9,m_ox,输入圆心横坐标;
编辑框控件10,IDC_EDIT10,m_oy,输入圆心纵坐标;
编辑框控件11,IDC_EDIT11,m_r,输入圆弧半径值;
编辑框控件12,IDC_EDIT12,m_n,输入累加器位数;
编辑框控件13,IDC_EDIT13,m_bc,输入插补步长;
图形控件:
IDC_PRINTAREA,实现图形输出功能;
若干静态文本控件,IDC_STATIC,作为相关文字说明。
四.逐点比较法直线插补流程图及算法
1)偏差判别公式的推导
设直线的起点坐标为(x1,y1),终点坐标为(x2,y2),直线上的任意一个动点为(x,y),插补的
步长为b,则偏差判别函数
F=(x2-x1)*y-(y2-y1)*x
对位于第四象限的直线,有:
当F>=0时,向+x方向进给一个脉冲当量,此时x(i+1)=xi+b,则有
F(i+1)=Fi-(y2-y1)*b
当F<0时,向-y方向进给一个脉冲当量,此时y(j+1)=yj-b,则有
F(j+1)=Fj+(x2-x1)*b
终点判别器E用来判别脉冲次数,每进给一次E减1,直到其值为0时插补过程结束,E值由下面公式所得:
E=((x2-x1)+(y1-y2))/b
2)
直线插补流程图:
3)单步插补直线实现程序及变量说明
定义静态变量static,变量类型为double型,在每次单击按钮控件执行程序后,该变量的值始终存在
可以实现对插补次数的计算和判别。
staticdoubleNX=0,NY=0,N=0,m,x,y,F=0;
NX为+x方向的进给次数累加,用于横坐标计算;NY为-y方向进给次数累加,用于纵坐标计算;N为x,y两个方向的累加次数,用于和终点判别器比较;m为终点判别器,用来判断插补是否结束;x,y用来存放插补过程中动点坐标;F为偏差判别函数。
在插补程序中使用的变量名与流程图中变量的对应关系为:
m_alx对应x1,m_aly对应y1,m_blx对应x2,m_bly对应y2,m_bc对应b,m对应E。
变量赋的初值为:
m_line=0,m_alx=0.0,m_aly=0.0,m_blx=4.0,m_bly=-4.0,m_bc=1.0。
插补程序中的一些说明:
因为输出的图形坐标数值为像素点,在图形中显示很小,所以在下述的程序中将输出的数值扩大10
倍,可以在图形控件上更清晰地显示图形,其值本身并不具有实际的意义。
利用UpdateData(true)函数实现获取输入的参数值。
设置图形显示区域:
CStatic*pWnd=(CStatic*)GetDlgItem(IDC_PRINTAREA);
CDC*pdc=pWnd->GetDC();
CRectrc;
pWnd->GetClientRect(&rc);
CRgnrgn;
rgn.CreateRectRgn(rc.left+1,rc.top+7,rc.right-2,rc.bottom-2);
pdc->SelectClipRgn(&rgn);
pdc->SetViewportOrg((rc.left+rc.right)/2,rc.bottom-150);
在图形控件上画坐标轴:
pdc->MoveTo(-150,0);
pdc->LineTo(150,0);
pdc->MoveTo(0,-150);
pdc->LineTo(0,150);
在图形控件上输出原点、x轴、y轴符号:
pdc->TextOut(-10,-20,"o");
pdc->TextOut(150,0,"x");
pdc->TextOut(-5,-150,"y");
单步直线插补程序:
if(m_line==0)//选择直线插补
{
pdc->MoveTo(10*m_alx,-10*m_aly);//画出需要插补的直线
pdc->LineTo(10*m_blx,-10*m_bly);
if((m_alx
//判别输入的直线在第4象限,如果不在,结束程序并提示输入第4象限的直线
{
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)//终点判别器不为0,执行插补,否则结束
{
if(F>=0)//偏差判别函数大于0,x方向进给
{
NX=NX+1;//+x方向进给一次
N=N+1;//进给次数累加器加1
pdc->MoveTo(x,y);//将坐标移到直线起点
x=x+10*m_bc;//计算横坐标
pdc->SelectObject(newCPen(PS_SOLID,0,RGB(255,0,0)));
//改变插补线段的颜色,此处选择红色
pdc->LineTo(x,y);//画直线
F=F-m_bc*(abs(m_bly)-abs(m_aly));//重新计算偏差判别函数,并结束判断
}
else//偏差判别函数小于0,y方向进给
{
NY=NY+1;//-y方向进给一次
N=N+1;//进给次数累加器加1
pdc->MoveTo(x,y);//将坐标移到直线起点
y=y+10*m_bc;//计算纵坐标
pdc->SelectObject(newCPen(PS_SOLID,0,RGB(255,0,0)));
//改变插补线段的颜色,此处选择红色
pdc->LineTo(x,y);//画直线
F=F+m_bc*(abs(m_blx)-abs(m_alx));//重新计算偏差判别函数,并结束判断
}
/*此段函数用于连续插补
m=m-1;//终点判别器减1
if(m==0)//如果终点判别器为0,关闭定时器1,连续插补结束
{
KillTimer
(1);
}
/*此段函数用于连续插补
}
}
else//提示输入的直线不在给定的象限
AfxMessageBox("请输入位于第四象限的点");
}
4)连续插补直线的实现
方案1:
通过定时器实现逐段显示插补轨迹
voidCMyDlg:
:
OnButton3()
{
SetTimer(1,500,NULL);//选择定时器1,定时时间500ms;
}
voidCMyDlg:
:
OnTimer(UINTnIDEvent)//定时器1函数,调用OnButton1()函数,定时器关闭如上所述
{
OnButton1();
}
方案2:
通过循环体,一次实现插补轨迹的显示
程序各行的含义同单步插补程序
if(m_line==0)
{
pdc->MoveTo(10*m_alx,-10*m_aly);
pdc->LineTo(10*m_blx,-10*m_bly);
if((m_alx
{
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循环一次实现插补轨迹显示
{
if(F>=0)
{
F=F-m_bc*(abs(m_bly)-abs(m_aly));
x=x+10*m_bc;
}
else
{
F=F+m_bc*(abs(m_blx)-abs(m_alx));
y=y+10*m_bc;
}
pdc->LineTo(x,y);
m=m-1;
}
AfxMessageBox(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数控机床 课程设计 说明
![提示](https://static.bdocx.com/images/bang_tan.gif)