《机床数控技术》课程设计说明书.doc

上传人:爱问知识人 文档编号:3259630 上传时间:2019-08-06 格式:DOC 页数:34 大小:573.53KB
返回 下载 相关 举报
《机床数控技术》课程设计说明书.doc_第1页
第1页 / 共34页
《机床数控技术》课程设计说明书.doc_第2页
第2页 / 共34页
《机床数控技术》课程设计说明书.doc_第3页
第3页 / 共34页
《机床数控技术》课程设计说明书.doc_第4页
第4页 / 共34页
《机床数控技术》课程设计说明书.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《《机床数控技术》课程设计说明书.doc》由会员分享,可在线阅读,更多相关《《机床数控技术》课程设计说明书.doc(34页珍藏版)》请在三一文库上搜索。

1、机床数控技术课程设计说明书 班级:0507105 学号:050710521 姓名: 指导教师: 时间:2011年1月 地点:明故宫校区计算中心目 录 一、简要说明 3 二、设计目的 3 三、设计要求 3 四、设计任务 3 五、设计过程 4 5.1 逐点比较法圆弧插补 4 5.1.1 逐点比较法圆弧插补原理及运算过程 4 5.1.2 流程图设计 6 5.1.3 变量说明及简单的程序实现 8 5.2 DDA法直线插补 9 5.2.1 DDA法直线插补原理及运算过程 9 5.2.2 流程图设计 11 5.2.3 变量说明及简单的程序实现 12 六、设计总结 14 附录A 程序运行结果 15附录B 源

2、程序代码 18参考文献 33一、简要说明 插补 (Interpolation) 在数控机床中,刀具不能严格地按照要求加工的曲线运动,只能用折线轨迹逼近所要加工的曲线。 插补(interpolation)定义:机床数控系统依照一定方法确定刀具运动轨迹的过程。也可以说,已知曲线上的某些数据,按照某种算法计算已知点之间的中间点的方法,也称为“数据点的密化”。数控装置根据输入的零件程序的信息,将程序段所描述的曲线的起点、终点之间的空间进行数据密化,从而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。 插补计算就是数控装置根据输入的基本数据,通过计算,把工件轮廓的形状描述出来,边计算边根据计算结

3、果向各坐标发出进给脉冲,对应每个脉冲,机床在响应的坐标方向上移动一个脉冲当量的距离,从而将工件加工出所需要轮廓的形状。 插补的原理和算法很多,根据数控系统输出到伺服驱动装置的信号的不同,插补方法可归纳为基准脉冲插补和数据采样插补两种类型。二、设计目的(1) 了解连续轨迹控制数控系统的组成原理。(2) 了解逐点比较法和DDA法插补直线和圆弧的基本原理。(3) 掌握逐点比较法和DDA法插补的软件实现基础。三、设计要求(1) 具有数据输入界面,如起点、终点、圆心、半径及插补步长等;(2) 具有插补过程的动态显示功能,如单步插补、连续插补;(3) 适当的编程语言,详细的程序设计流程图,变量说明、源程序

4、;(4) 插补的步长可调。四、设计任务 PC41 逐点比较法插补第4-1象限逆圆弧 DL3 DDA法插补第三象限直线五、设计过程5.1 逐点比较法圆弧插补5.1.1 逐点比较法圆弧插补原理及运算过程 逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。每进给一步都要完成四个工作节拍:偏差判断、坐标进给,偏差计算、终点判别。 设要加工图3-1所示的第一象限逆时针走向的圆弧AB,半径为R,以圆点为圆心,起点坐标为A(,),在xy坐标平面第一象限中,点的加工偏差有以下3种情况。若加工点正好落在圆弧上,则下式成立,即 若加工点落在圆弧外侧

5、,则,即 若加工点落在圆弧内侧,则,即将上面各式分别改写为下列形式,即 (在圆弧上) (在圆弧外侧) (在圆弧内侧)取加工偏差判别函数为 若点在圆弧外侧或圆弧上,则满足的条件时,向轴发出一负向运动的进给脉冲;若点在圆弧内测,即满足条件的条件时,则向轴发出一正向运动的进给脉冲。为了简化偏差判别式的运算,仍用递推法来推算下一步新的加工偏差。设加工点在圆弧外侧或圆弧上,则加工偏差为 故轴必须向负方向进给一步,移动到新的加工点,其加工偏差为 (5-1)设加工点在圆弧的内测,则。那么y轴须向正向进给一步,移到新的加工点,其加工偏差为 (5-2)同理,插补第一象限顺时针圆弧时,偏差判别函数为 (5-3)当

6、(5-4) 而插补其他象限的圆弧时,可采用坐标变换法统一于第一象限的逆圆弧插补公式,都按第一象限逆圆弧进行插补计算,而进给脉冲的方向则由实际象限决定。插补四个象限的顺、逆圆弧时偏差符号和进给方向可用下面简图表示。插补四个象限的顺、逆圆弧时偏差符号和进给方向如下图。 F0顺圆逆圆F0 Y顺圆逆圆逆圆逆圆顺圆顺圆F0F0F0F0F0F0F0F0F0F0F0F0F0F0 X 图5-2 逐点比较法插补不同象限顺、逆圆弧的偏差符号和进给方向图5-3 圆弧过象限 另外,逐点比较法插补圆弧时,相邻圆弧插补方法不同,计算方法也不同。要完成过象限的功能,首先应判别何时过象限。过象限有一显著特点,就是过象限时刻正

7、好是圆弧与坐标轴相交的时刻,因此在两个坐标值中必有一个为零,判断是否过象限只要检查是否有坐标值为零即可。通过该点后,变换插补运算再进行计算。5.1.2 流程图设计综上所述,逐点比较法圆弧插补的全过程,每走一步都要进行以下四个节拍:第一节拍偏差判别:判断刀具当前位置相对于给定的轮廓的偏差情况,以此决定刀具移动的方向;第二节拍坐标进给:根据偏差判断结果,控制刀具相对于工件轮廓进给一步,即向给定的轮廓靠拢,减小偏差;第三节拍偏差计算:由于刀具进给已经改变了位置,因此应计算出刀具当前位置的新偏差,为下次判别做准备;第四节拍终点判别:判别刀具是否已到达被加工轮廓的终点。若已经到达终点,则停止插补;若还未

8、到达终点则继续插补。如此不断重复上述四个节拍就可以加工出所要加工的轮廓。 由此便可设计出第4-1象限逆圆弧逐点比较法插补流程图。 运算中F寄存偏差值为;x和y分别寄存x和y动点的坐标值,开始分别存放和;E为寄存终点判别值:。起始YNNY 初始化 x0x,y0y 0F,NE NYF0 ?+Y向走一步X向走一步F0 ?+Y向走一步+X向走一步F+2y+1F y+1yF2x+1F x1xF+2x+1F x+1xF+2y+1F y+1yE1EN E=0 ?Y0 ?Y结束5.1.3 变量说明及简单的程序实现 根据上面的分析及设计流程图的基本思想,现采用VC+语言对其进行具体的程序实现。最终设计的界面如下

9、图: 该程序运行时首先要输入插补圆弧插补方向,然后再选择适当的象限,输入起点和终点X、Y坐标,圆心对终点的增量坐标以及插补步长,再点击“实际轮廓”按钮显示原始的加工轮廓,点击“插补轨迹”按钮,显示插补拟合的轨迹,若需要继续进行下一次模拟,则可以点击“重新开始”按钮,继续输入下一组数据进行模拟,点击“退出程序”则退出界面。有关控件设置及相关变量说明如下表所示。 程序界面控件设置以及相关变量说明: 控件ID 对应变量 相关说明 IDC_RADIO1 插补方向为顺时针 IDC_RADIO2 插补方向为逆时针 IDC_COMBO1 选择插补起始点象限 IDC_COMBO2 选择插补结束点象限 IDC_

10、EDIT1 x0 起点横坐标 IDC_EDIT2 y0 起点纵坐标 IDC_EDIT3 xe 终点横坐标 IDC_EDIT4 ye 终点纵坐标 IDC_EDIT5 dx 圆心对终点横坐标增量 IDC_EDIT6 b “插补步长” IDC_BUTTON1 “实际轮廓” IDC_BUTTON2 “重新开始” IDC_BUTTON3 “连续插补” IDC_BUTTON4 “单步插补” IDCANCEL 退出程序 IDC_STATIC_DRAW 显示图形的窗口 注:软件运行情况及源程序见附录5.2 DDA法直线插补5.2.1 DDA法直线插补原理及运算过程在X-Y平面上对直线OA进行插补,如图5-4所

11、示,直线的起点在原点O(0,0),终点为A(xe, ye),设进给速度V是均匀的,直线OA的长度为L,则有 其中Vx、Vy表示动点在X和Y方向的移动速度,k为比例系数。由式可得 在时间内,X和Y方向上的移动距离微小增量、应为 将式代入得 因此,懂点从原点走向终点的过程,可以看作是各坐标每经过一个单位时间间隔分别以增量、同时累加的结果。设经过m次累加后,X和Y方向分别都到达终点,则 取,则有 式变为 由式可知,即 因为累加次数m必须是整数,所有比例系数k一定为小数。选取k时主要考虑、应不大于1,以保证坐标轴上每次分配的进给脉冲不超过一个单位步距,即由式得 另外,、的最大容许值受寄存器位数n的限制

12、,最大值为,所以由式得 ,即一般取则有上式说明DDA法直线插补的整个过程要经过次累加才能到达直线的终点。以上仅讨论了DDA法插补第一象限直线的原理和计算公式,插补其它象限的直线时,一般将终点坐标取绝对值,这样,它们的插补计算公式与第一象限时一样,而脉冲进给方向总是直线终点坐标绝对值增加的方向。5.2.2 流程图设计采用DDA法插补时,累计器清零,被积函数寄存器分别寄存和;插补开始后,每来一个累加脉冲,被积函数寄存器里的坐标值在相应的累加器中累加一次,累加后的溢出作为驱动相应坐标轴的进给脉冲和,而余数仍寄存在累加器中。当累加脉冲数等于以脉冲当量为最小单位的终点坐标,表明刀具运行到终点,停止插补运

13、算。用软件实现DDA法直线插补时,在内存中设立几个存储单元,分别存放及其累加值和及其累加值,在每次插补运算循环过程中进行以下求和运算: 。用运算结果溢出的脉冲和来控制机床进给,就可走出所需的直线轨迹。根据以上讨论便可设计出DDA法插补第三象限直线的程序流程图。 Mm1结束M=0吗? 初始化xeXe, yeYe累计次数mM, Xe,Ye清零XeXe+XeYeYe+YeX向走一步Xe有溢出吗?Ye有溢出吗?YNYY向走一步NNY 图5-5 DDA法插补第三象限直线的程序流程图5.2.3 变量说明及简单的程序实现采用VC+设计界面如下图。程序运行时首先输入象限,输入起点和终点X、Y坐标以及插补步长,

14、再点击“连续”“单步”按钮显示原始的加工轮廓和插补轨迹,点击“重设”按钮,继续输入下一组数据进行模拟,点击“取消”则退出界面。 有关控件设置及相关变量说明如下表所示。 控件ID 对应变量 相关说明 IDC_RADIO 选择插补象限 IDC_EDIT1 x0 起点横坐标 IDC_EDIT2 y0 起点纵坐标 IDC_EDIT3 xe 终点横坐标 IDC_EDIT4 ye 终点纵坐标 IDC_EDIT5 b 插补步长 IDC_BUTTON1 “连续” IDC_BUTTON3 “单步” IDC_BUTTON2 “重设” IDCANCEL “取消” IDC_STATIC_DRAW 显示图形的窗口 注:

15、软件运行情况及源程序见附录6、 设计总结本次设计采用了一种用计算机来模拟数控插补的方法,在充分利用VC设计语言简单直观的基础上,使数控插补原理的实现更加形象化。通过这次课程设计,使我对插补原理以及数控机床的工作原理有了更深一层的认识,同时通过借助VC+语言来完成设计,也对VC+的编程思想与编程方法有了进一步的了解。通过这次课程设计,不仅提高了我们综合运用所学知识发现、分析、解决实际问题的能力,同时也很好的锻炼了我们的思维能力与实践能力。虽然只有短短的一个星期,但却可以学到很多的东西。既巩固了以前所学的专业知识,又学到了一些书本上根本就没有的东西。做好一份课程设计,首先要有一个清晰的思路和一个完

16、整的设计步骤。通过查阅各方面的文献与资料,来不断完善设计的内容,使其更加完整。在设计程序时,不能妄想一次就将整个程序设计好,要反复修改,不断优化。做到有条不紊,这样出现错误时会让自己更方便地检查。另外,做一件事时要专心、细致,尤其是要有耐心。设计过程好比人成长的过程,常有一些不如意,也常会遇见一些挫折与困难,但困难并不可怕,可怕的是面对困难时没有去正视它解决它的勇气与热情。只要充满信心,坚持不懈的走下去,那点困难绝不是前方道路上的绊脚石,而是通往成功之峰的阶梯。 回望这一周的历程,看着桌上厚厚的一沓草稿纸和一旁摞得高高的参考书,一种成功的喜悦的心情油然而生。一分耕耘一分收获。虽然在此过程中苦多

17、于甜,但正是这些无处不在的“苦”充实了自己,历练了性格,增长了人生阅历。也许并没有做到最好,但是毕竟努力去做了。课设虽已结束,但这个过程中所体现出的那种严谨的分析、解决问题的思想,以及周到细密的处事步骤与方法,对自己以后的学习和生活都大有裨益!附录A 程序运行结果.逐点比较法插补第4-1象限逆圆弧 运行结果: 第一组数据:起点坐标(3,-6),终点坐标(2,8),横坐标增量dx=0,步长b=1,运行结果如下: 第二组数据,改变步长:起点坐标(7,-5),终点坐标(3,5),横坐标增量dx=0,步长b=2,运行结果如下: .DDA法插补第3象限直线 运行结果: 第一组数据:起点坐标(-2,-1)

18、,终点坐标(-9,-7),步长b=1,运行结果如下: 第二组数据,改变步长:起点坐标(-1,-2),终点坐标(-9,-8),步长b=2。 附录B 源程序代码.逐点比较法插补第4-1象限逆圆弧/ PCDlg.cpp : implementation file/#include stdafx.h#include PC.h#include PCDlg.h#include math.h#define M 17 int m_Radio;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#end

19、if/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA / ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV

20、support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_M

21、ESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPCDlg dialogCPCDlg:CPCDlg(CWnd* pParent /*=NULL*/): CDialog(CPCDlg:IDD, pParent)/AFX_DATA_INIT(CPCDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ Note that LoadIco

22、n does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CPCDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CPCDlg)DDX_Control(pDX, IDC_BUTTON3, m_button3);DDX_Control(pDX, IDC_COMBO2, m_Combo2);DDX_Control(pDX, IDC_COMBO1

23、, m_Combo1);DDX_Control(pDX, IDC_BUTTON2, m_button2);DDX_Control(pDX, IDC_BUTTON1, m_button1);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CPCDlg, CDialog)/AFX_MSG_MAP(CPCDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_RADIO1, OnRadio1)ON_BN_CLICKED(IDC_RADIO2, OnRadio2)ON_CBN_SELCHANGE(

24、IDC_COMBO1, OnSelchangeCombo1)ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CPCDlg message handlersBOOL CPCDlg:OnInitDialog()CDialog:OnInitDialog(); / Add Ab

25、out. menu item to system menu. / IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatical

26、ly/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to a controlvoid CPCDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) =

27、IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using the document/view model,/ this is automatically done for you by the framework.void CPCDlg

28、:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width

29、() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2; / Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();CWnd* p=GetDlgItem(IDC_STATIC_DRAW); /得到IDC_STATIC的句柄 CDC* pDC=p-GetDC(); /根据句柄得到dc p-Invalidate(); p-UpdateWindow(); CRect rc; /得到dc的客户区域,并创建画刷填充这个区域p-GetClientRect(&rc); C

30、Brush brush; brush.CreateSolidBrush(RGB(255,255,255); pDC-FillRect(&rc,&brush); CRgn rgn; /设置dc的裁减区域为客户区域,因为STATIC并不具有真正的dc,而是其父窗口的dc,所以用裁减来避免画到客户区域外面去rgn.CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom); pDC-SelectClipRgn(&rgn);int xCenter=(rc.left+rc.right)/2,yCenter=(rc.top+rc.bottom)/2;/画坐标轴pDC-

31、MoveTo(xCenter,yCenter-200);pDC-LineTo(xCenter,yCenter+200);pDC-MoveTo(xCenter-200,yCenter); pDC-LineTo(xCenter+200,yCenter); pDC-TextOut(xCenter-14,yCenter-17,O);char *s20;s0=-10,s1=-9,s2=-8,s3=-7,s4=-6,s5=-5,s6=-4,s7=-3,s8=-2,s9=-1,s10=O,s11=1,s12=2,s13=3,s14=4,s15=5,s16=6,s17=7,s18=8,s19=9;for(in

32、t t=0;tTextOut(xCenter+(t-9)*M,yCenter-6,);pDC-TextOut(xCenter+(t-9)*M,yCenter+3,st+1);pDC-TextOut(xCenter-4,yCenter-9-(t-9)*M,-);pDC-TextOut(xCenter+5,yCenter-9-(t-9)*M,st+1);/ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CPCDlg:OnQueryDra

33、gIcon()return (HCURSOR) m_hIcon;void CPCDlg:draw1(int j,int k,int l,int m,int h,int n) /对应原始输入按钮 CWnd* p=GetDlgItem(IDC_STATIC_DRAW); CDC* pDC=p-GetDC(); p-Invalidate(); p-UpdateWindow(); CRect rc; p-GetClientRect(&rc); CBrush brush; brush.CreateSolidBrush(RGB(255,255,255); pDC-FillRect(&rc,&brush);

34、 CRgn rgn; rgn.CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom); pDC-SelectClipRgn(&rgn); int x1,y1,x2,y2,xx,b;x1=j*M;y1=-k*M;x2=l*M;y2=-m*M;xx=h*M;b=n*M;double xc,yc;int xCenter=(rc.left+rc.right)/2,yCenter=(rc.top+rc.bottom)/2;pDC-MoveTo(xCenter,yCenter-200);pDC-LineTo(xCenter,yCenter+200);pDC-Mov

35、eTo(xCenter-200,yCenter); pDC-LineTo(xCenter+200,yCenter); pDC-TextOut(xCenter-14,yCenter-17,O);char *s20;s0=-10,s1=-9,s2=-8,s3=-7,s4=-6,s5=-5,s6=-4,s7=-3,s8=-2,s9=-1,s10=O,s11=1,s12=2,s13=3,s14=4,s15=5,s16=6,s17=7,s18=8,s19=9;for(int t=0;tTextOut(xCenter+(t-9)*M,yCenter-6,);pDC-TextOut(xCenter+(t-9

36、)*M,yCenter+3,st+1);pDC-TextOut(xCenter-4,yCenter-9-(t-9)*M,-);pDC-TextOut(xCenter+5,yCenter-9-(t-9)*M,st+1);xc=x2+xx; /绘出实际轮廓yc=(y1+y2)/2.0-(x2-x1)*1.0*(xx+(x2-x1)/2.0)/(y2-y1);double L=(xc-x1)*(xc-x1)+(yc-y1)*(yc-y1),R=sqrt(L);double Ax=xCenter+xc-R,Ay=yCenter+yc-R,Bx=xCenter+xc+R,By=yCenter+yc+R; CPen pen,*pOldPen; /1个像素,红色 pen.CreatePen(PS_SOLID,1,RGB(255,0,0); pOldPen=pDC-SelectObject(&pen);CRect rc1(Ax,Ay,Bx,By);pDC-Arc(Ax,Ay,Bx,By,xCenter+x1,yCenter+y1,xCenter+x2,yCenter

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1