ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:233.74KB ,
资源ID:9364014      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-9364014.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(东南大学MFC课程设计报告模板.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

东南大学MFC课程设计报告模板.docx

1、东南大学MFC课程设计报告模板MFC课程设计报告简易数控车床模拟姓名: 学号: 指导教师:院系: 日期: 2013.10.10Simple CNC Lathe ImitationAbstract: This procedure can be used to draw a simple image of part made by CNC lathe.G01,G02,G03 code can be used. It can save code and image, so that it is able to be an assistance procedure to learn how to us

2、e a CNClathe.Keywords: Drawing, CNC lathe, G code 第一章绪论1.1引言数控车床(CNC Lathe)是机械工业中最常用的机床之一,能够加工各种各样的回转体零件。数控车床是将数控系统和普通车床结合在一起的发明,在当今工业领域有广泛的应用。 以FANUC车床为例,通过向数控系统输入G代码,可以实现零件的加工。东南大学机械工程及其自动化专业的学生在工培中心使用了此种车床。然而,在使用程序之前,输入程序者如果输入了没有语法错误的G代码,却可能损伤刀具,这不仅会损坏车床,还会造成安全事故,所以,学生们需要一款能够检验G代码的程序。 本报告将会就目前的程序

3、进度做出说明。1.2 编程思路 通过使用对话框来获取G代码的各项数据,储存到文档类中,再由视图类输出到屏幕上。 经分析,程序逻辑并不复杂,而难点在于如何存储各项数据以及利用各项数据画图。1.3 设计目标和设计任务 目标:设计一款能够识别G代码并作出相应零件图形的软件,还能够进行语法检查和动画模拟,方便学生使用。 任务:分成以下几个部分,G代码读取存储,绘图,语法检查,动画模拟。第二章 程序设计2.1 毛坯件初始化 首先,要进行动画演示,首先需要一个毛坯件。 使用模态对话框获取毛坯件的大小,即毛坯件的直径和长度。 具体代码见附录。2.2 G代码对话框 要记录G代码,首先要定义数据类型。因为G代码

4、是由一连串的指令构成,如果采用简单的数组的话,势必会造成困难,在此采用结构体数组的形式记录G代码指令。 结构体如下:struct code CString name;/G代码种类 float x; float z; float f; float u; float r; float p; float q; float u2; float w; int kind;/kind=0,不执行,只显示内容;kind=1,执行,并记录内容;kind=2,循环条件 ;至此,G代码所需要的各种数据已全部包含在这个结构体数组中,因此,只需要输入各项数据即可。采用下拉式组合框的形式选择代码种类,创建子对话框来输入数

5、据。举例如下: UpdateData(true); if(m_selection.GetCurSel()=0) CDialogO dlg0; if(dlg0.DoModal()=IDOK) CodeNow.name= ; CodeNow.x=0; CodeNow.z=0; CodeNow.f=0; CodeNow.u=0; CodeNow.r=0; CodeNow.p=0; CodeNow.q=0; CodeNow.u2=0; CodeNow.w=0; CodeNow.kind=0; CodeNow.name=dlg0.m_edito; CodeNow.kind=0; SetDlgItemTe

6、xt(IDC_INSTRUCTION,文件名); SetDlgItemText(IDC_CODENOW,CodeNow.name); CodeNow记录当前结构体的数据当前数据通过添加到列表框的方式进行编辑,添加函数如下:void CGCode:OnButtonadd() / TODO: Add your control notification handler code here UpdateData(true); int nIndex=m_list.AddString(CodeNow.name); code cd; cd.name=CodeNow.name; cd.x=CodeNow.x;

7、 cd.z=CodeNow.z; cd.f=CodeNow.f; cd.u=CodeNow.u; cd.r=CodeNow.r; cd.p=CodeNow.p; cd.q=CodeNow.q; cd.u2=CodeNow.u2; cd.w=CodeNow.w; cd.kind=CodeNow.kind; m_list.SetItemDataPtr(nIndex,new code(cd); pDoc-m_index+;删除函数如下: int nIndex=m_list.GetCurSel(); if(nIndex!=LB_ERR) delete(code* )m_list.GetItemData

8、Ptr(nIndex); m_list.DeleteString(nIndex); SetDlgItemText(IDC_INSTRUCTION,当前无说明!); SetDlgItemText(IDC_CODENOW,当前无代码!); else MessageBox(没有选择代码或操作失败!); pDoc-m_index-;之后则要通过文档类指针将这些已经序列化的值储存起来,如下: code* pc; for(int i=0;im_index;i+) pc=(code* )m_list.GetItemDataPtr(i); pDoc-gcodei.name=pc-name; pDoc-gcod

9、ei.x=pc-x; pDoc-gcodei.z=pc-z; pDoc-gcodei.f=pc-f; pDoc-gcodei.u=pc-u; pDoc-gcodei.r=pc-r; pDoc-gcodei.p=pc-p; pDoc-gcodei.q=pc-q; pDoc-gcodei.u2=pc-u2; pDoc-gcodei.w=pc-w; pDoc-gcodei.kind=pc-kind; CClientDC dc(pView);绘图采用先判断代码种类,再进行画图的方式,以G01代码为例:for(int i=0;im_index;i+) if(pDoc-gcodei.name=G01) p

10、DC-MoveTo(ptu); pDC-LineTo(400-pDoc-gcodei.x,200-pDoc-gcodei.z); ptu.x=400-pDoc-gcodei.x; ptu.y=200-pDoc-gcodei.z; pDC-MoveTo(ptd); pDC-LineTo(400-pDoc-gcodei.x,200+pDoc-gcodei.z); ptd.x=400-pDoc-gcodei.x; ptd.y=200+pDoc-gcodei.z; 至此,G代码储存以及画图都已经完成。2.3 检查以及动画 通过对于代码的判断可实现语法检查。 动画的实现则通过循环延迟绘图来实现,通过每5

11、00毫秒更新视图的方式实现动画。2.4 帮助 为了方便学习,应该将各种代码写成索引。第三章 程序测试3.1 测试数据G01 X15 Z15G02 X30 Z30 R15G03 X45 Z45 R153.2 运行情况分析通过代码输入,储存,可以记录G代码,如图2-1;画出零件,如图2-2;程序使用界面如图2-3;图2-1图2-2图2-3第四章 总结4.1 设计小结 这款软件的设计思路清晰,但是实施起来比较困难。在设计中遇到了很多问题,比如变量太多,函数复杂,画图数据变化问题,都是值得思考的问题。程序编写没有达到预期目的,即没有完成检查和动画功能,但是G代码绘图部分已有其功能,可以满足数控车床初学

12、者的需要。我相信如果今后花费更多的时间就能够做出来。4.2 心得体会通过这次设计程序,我学到了如何整理思路去设计一个新的程序。更加熟练掌握了各项控件的使用和对话框的使用,并且对于文档类有了更深的理解。虽然动画部分没有完成,但是为以后的设计指明了方向。以后我会继续设计此程序,争取完成。4.3 参考资料Visual C+ 程序设计与应用教程/马石安,魏文平编著.北京:清华大学出版社,2007.94.4 致谢 感谢窦建平老师和同学们给予我的指导。第五章 附录5.1 调试截图此处错误是忽略头文件所致5.2 代码毛坯件void CBlank:OnOK() / TODO: Add extra valida

13、tion here UpdateData(true); CCNCLatheView *pView=(CCNCLatheView*)(CFrameWnd*)AfxGetMainWnd()-GetActiveView(); CCNCLatheDoc * pDoc= pView-GetDocument(); CClientDC dc(pView); pDoc-m_blength=m_length; pDoc-m_bdiameter=m_diameter; CBrush* BrushOld,BrushNew; BrushNew.CreateSolidBrush(RGB(192,192,192); Br

14、ushOld=dc.SelectObject(&BrushNew); dc.Rectangle(100,100-m_diameter/2,100+m_length,100+m_diameter/2); dc.SelectObject(BrushOld); BrushNew.DeleteObject(); CDialog:OnOK();对话框类代码#include stdafx.h#include CNCLathe.h#include GCode.h#include DialogO.h#include DialogS.h#include DialogT.h#include DialogG01.h

15、#include DialogG71.h#include DialogT.h#include DialogG03.h#include DialogG02.h#include CNCLatheView.h#include CNCLatheDoc.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CGCode dialogCGCode:CGCode(CWnd* pParent /*=NULL*/) : CDialog(CGCode:IDD, pParent) /AFX_

16、DATA_INIT(CGCode) /AFX_DATA_INIT CodeNow.name= ; CodeNow.x=0; CodeNow.z=0; CodeNow.f=0; CodeNow.u=0; CodeNow.r=0; CodeNow.p=0; CodeNow.q=0; CodeNow.u2=0; CodeNow.w=0; CodeNow.kind=0; m_pParent=(CCNCLatheView*)pParent; pView=(CCNCLatheView*)(CFrameWnd*)AfxGetMainWnd()-GetActiveView(); pDoc= pView-Get

17、Document(); ptu.x=400; ptu.y=200; ptd.x=400; ptd.y=200;/ CGCode message handlersvoid CGCode:OnButtonadd() / TODO: Add your control notification handler code here UpdateData(true); int nIndex=m_list.AddString(CodeNow.name); code cd; cd.name=CodeNow.name; cd.x=CodeNow.x; cd.z=CodeNow.z; cd.f=CodeNow.f

18、; cd.u=CodeNow.u; cd.r=CodeNow.r; cd.p=CodeNow.p; cd.q=CodeNow.q; cd.u2=CodeNow.u2; cd.w=CodeNow.w; cd.kind=CodeNow.kind; m_list.SetItemDataPtr(nIndex,new code(cd); pDoc-m_index+;void CGCode:OnButtondelete() / TODO: Add your control notification handler code here int nIndex=m_list.GetCurSel(); if(nI

19、ndex!=LB_ERR) delete(code* )m_list.GetItemDataPtr(nIndex); m_list.DeleteString(nIndex); SetDlgItemText(IDC_INSTRUCTION,当前无说明!); SetDlgItemText(IDC_CODENOW,当前无代码!); else MessageBox(没有选择代码或操作失败!); pDoc-m_index-;void CGCode:OnOK() / TODO: Add extra validation here code* pc; for(int i=0;im_index;i+) pc=

20、(code* )m_list.GetItemDataPtr(i); pDoc-gcodei.name=pc-name; pDoc-gcodei.x=pc-x; pDoc-gcodei.z=pc-z; pDoc-gcodei.f=pc-f; pDoc-gcodei.u=pc-u; pDoc-gcodei.r=pc-r; pDoc-gcodei.p=pc-p; pDoc-gcodei.q=pc-q; pDoc-gcodei.u2=pc-u2; pDoc-gcodei.w=pc-w; pDoc-gcodei.kind=pc-kind; CClientDC dc(pView); for(i=0;im_

21、index;i+) if(pDoc-gcodei.name=G01) dc.MoveTo(ptu); dc.LineTo(400-pDoc-gcodei.x,200-pDoc-gcodei.z); ptu.x=400-pDoc-gcodei.x; ptu.y=200-pDoc-gcodei.z; dc.MoveTo(ptd); dc.LineTo(400-pDoc-gcodei.x,200+pDoc-gcodei.z); ptd.x=400-pDoc-gcodei.x; ptd.y=200+pDoc-gcodei.z; if(pDoc-gcodei.name=G02) dc.AngleArc(

22、ptu.x,ptu.y-pDoc-gcodei.r,pDoc-gcodei.r,270,360); CPen* PenOld,PenNew; PenOld=(CPen*)dc.SelectStockObject(BLACK_PEN); PenNew.CreateStockObject(WHITE_PEN); dc.SelectObject(&PenNew); dc.AngleArc(ptu.x,ptu.y-pDoc-gcodei.r,pDoc-gcodei.r,270,270); dc.SelectObject(PenOld); ptu.x=400-pDoc-gcodei.x; ptu.y=2

23、00-pDoc-gcodei.z; dc.MoveTo(ptd);/dc.SelectStockObject(BLACK_PEN); dc.AngleArc(ptd.x,ptd.y+pDoc-gcodei.r,pDoc-gcodei.r,90,90); ptd.x=400-pDoc-gcodei.x; ptd.y=200+pDoc-gcodei.z; if(pDoc-gcodei.name=G03) dc.AngleArc(ptu.x-pDoc-gcodei.r,ptu.y,pDoc-gcodei.r,0,90); CPen* PenOld,PenNew; ptu.x=400-pDoc-gco

24、dei.x; ptu.y=200-pDoc-gcodei.z; dc.MoveTo(ptd); dc.AngleArc(ptd.x-pDoc-gcodei.r,ptd.y,pDoc-gcodei.r,0,360); PenOld=(CPen*)dc.SelectStockObject(BLACK_PEN); PenNew.CreateStockObject(WHITE_PEN); dc.SelectObject(&PenNew); dc.AngleArc(ptd.x-pDoc-gcodei.r,ptd.y,pDoc-gcodei.r,0,270); dc.SelectObject(PenOld

25、); ptd.x=400-pDoc-gcodei.x; ptd.y=200+pDoc-gcodei.z; CDialog:OnOK();void CGCode:OnCancel() / TODO: Add extra cleanup here if(m_pParent!=NULL) CWnd:ShowWindow(SW_HIDE); CDialog:OnCancel();绘图代码void CCNCLatheView:OnDraw(CDC* pDC) CCNCLatheDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw

26、code for native data here CBrush* BrushOld,BrushNew; BrushNew.CreateSolidBrush(RGB(192,192,192); BrushOld=pDC-SelectObject(&BrushNew); pDC-Rectangle(100,100-pDoc-m_bdiameter,100+pDoc-m_blength,100+pDoc-m_bdiameter); pDC-SelectObject(BrushOld); BrushNew.DeleteObject(); CPoint ptu,ptd; ptu.x=400; ptu.

27、y=200; ptd.x=400; ptd.y=200;for(int i=0;im_index;i+) if(pDoc-gcodei.name=G01) pDC-MoveTo(ptu); pDC-LineTo(400-pDoc-gcodei.x,200-pDoc-gcodei.z); ptu.x=400-pDoc-gcodei.x; ptu.y=200-pDoc-gcodei.z; pDC-MoveTo(ptd); pDC-LineTo(400-pDoc-gcodei.x,200+pDoc-gcodei.z); ptd.x=400-pDoc-gcodei.x; ptd.y=200+pDoc-gcodei.z; if(pDoc-gcodei.name=G02) pDC-AngleArc(ptu.x,ptu.y-pDoc-gcodei.r,pDoc-gcodei.r,270,360); CPen* PenOld,PenNew; PenOld=(CPen*)pDC-SelectStockObject(BLACK_PEN); PenNew.CreateStockObject(WHITE_PEN);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2