南航数控机床课程设计说明Word格式文档下载.docx
- 文档编号:13509011
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:47
- 大小:177.28KB
南航数控机床课程设计说明Word格式文档下载.docx
《南航数控机床课程设计说明Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南航数控机床课程设计说明Word格式文档下载.docx(47页珍藏版)》请在冰豆网上搜索。
具有数据输入框,具有插补过程动态显示功能,插补步长可调。
二.编程语言
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);
SetViewportOrg((rc.left+rc.right)/2,rc.bottom-150);
在图形控件上画坐标轴:
MoveTo(-150,0);
LineTo(150,0);
MoveTo(0,-150);
LineTo(0,150);
在图形控件上输出原点、x轴、y轴符号:
TextOut(-10,-20,"
o"
);
TextOut(150,0,"
x"
TextOut(-5,-150,"
y"
单步直线插补程序:
if(m_line==0)//选择直线插补
{
pdc->
MoveTo(10*m_alx,-10*m_aly);
//画出需要插补的直线
LineTo(10*m_blx,-10*m_bly);
if((m_alx<
m_blx)&
&
(m_aly>
m_bly)&
(m_alx>
=0)&
(m_aly<
=0))
//判别输入的直线在第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;
//计算横坐标
SelectObject(newCPen(PS_SOLID,0,RGB(255,0,0)));
//改变插补线段的颜色,此处选择红色
LineTo(x,y);
//画直线
F=F-m_bc*(abs(m_bly)-abs(m_aly));
//重新计算偏差判别函数,并结束判断
}
else//偏差判别函数小于0,y方向进给
{
NY=NY+1;
//-y方向进给一次
//进给次数累加器加1
y=y+10*m_bc;
//计算纵坐标
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;
}
OnTimer(UINTnIDEvent)//定时器1函数,调用OnButton1()函数,定时器关闭如上所述
OnButton1();
方案2:
通过循环体,一次实现插补轨迹的显示
程序各行的含义同单步插补程序
if(m_line==0)
{
{
x=10*m_alx+10*NX*m_bc;
while(m>
0)//通过while循环一次实现插补轨迹显示
if(F>
=0)
{
F=F-m_bc*(abs(m_bly)-abs(m_aly));
else
F=F+m_bc*(abs(m_blx)-abs(m_alx));
}
m=m-1;
AfxMessageBox(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数控机床 课程设计 说明