《vb6.0数控课程设计说明书(共25页).doc》由会员分享,可在线阅读,更多相关《vb6.0数控课程设计说明书(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上2014 年 7 月 3 日目 录 摘要.21. 概 述.2 1.1 课程设计的目的2 1.2 课程设计的任务和要求22. 课题分析.3 2.1 DXF文件.3 2.1.1 DXF文件结构.32.1.2 DXF文件的读取.4 2.2 几何元素的排序.4 2.3 CNC程序生成.53. 算法说明.6 3.1 程序主流程图6 3.2 提取直线和圆弧信息6 3.3 几何信息排序算法6 3.4 图形显示6 3.5 生成NC程序代码74. 软件开发及运行.8 4.1 系统界面.8 4.2 功能设置.9 4.3 操作运行.10 4.4 结果及分析.12结 论.12参考文献.13附
2、 录 程序代码.14摘 要数控加工仿真利用计算机来模拟实际的加工过程,是验证数控加工程序的可靠性和预测切削过程的有力工具,以减少工件的试切,减少安全风险,降低成本,提高生产效率。计算机仿真技术的发展趋势主要表现在两个方面:应用领域的扩大和仿真计算机的智能化。计算机仿真技术不仅在传统的工程技术领域(航空、航天、化工等方面)继续发展,而且扩大到社会经济、生物等许多非工程领域,此外,并行处理、人工智能、知识库和专家系统等技术的发展正影响着仿真计算机的发展。本文介绍了Visual Basic 6.0为开发工具,通过提取AutoCAD中生成的DXF图形几何信息,经过工艺干预,自动生成数控机床加工用的NC
3、程序,同时实现了NC 程序的仿真功能。1. 概 述1.1 课程设计的目的数控机床课程设计是机电专业教学活动的一个重要的实践性环节,是对学生所学数控机床课程和其它有关课程知识和技能的一次综合性练习,旨在使之巩固、充实、系统化,并得到进一步扩展。课程设计是培养学生理论联系实际、解决生产实际问题的机会。通过对数控铣床典型部件的结构设计、典型零件编程或数控装置的计算机仿真,使学生对数控机床的结构原理、编程方法处理实际问题的一般步骤和具体技巧、数控装置设计及使用得到训练,提高运用所学专业知识分析问题和解决问题的能力。1.2 课程设计的任务和要求 用计算机高级编程语言(如VB,VC+等)来实现:由任意的C
4、AD软件(如AutoCAD,Pro/E、UG、Solid works等)所生成的二维绘图DXF文件(限定DXF文件中的几何元素只有直线和圆弧)到CNC代码的自动生成(亦即仿真数控自动编程系统)。具体的要求如下:(1)从DFX文件中提取几何信息(只提取直线与圆弧的信息);(2)在屏幕上显示所提取得到的二维几何图形。(3)将提取得几何元素的进行排序(由程序来实现);(4)针对指定的走刀方向、起刀点,自动生成数控平面铣削(或数控线切割)的CNC代码。2. 课题分析2.1 DXF文件DXF(Drawing Exchange File)文件是各用绘图、制图软件通用的格式文件,它能使资源共享,避免重复劳动
5、。 它是一种ASCII文本文件,它包含对应的DWG文件的全部信息。不同类型的计算机(如PC及其兼容机与SUN工作站具体不同的CPU用总线)哪怕是用同一版本的文件,其DWG文件也是不可交换的. DXF类型文件克服这一缺点, ,其内部为ASCII码,这样不同类型的计算机可通过交换DXF文件来达到交换图形的目的,由于DXF文件可读性好,用户可方便地对它进行修改,编程,达到从外部图形进行编辑,修改的目的。2.1.1 DXF文件结构DXF文件有两种格式:ASC码文本格式和二进制格式。前者可以用记事本打开,简单易读,后者存储效率高2。DXF文件最小组成是组(GROUP),一个DXF文件由多个组组成。每个组
6、在DXF文件中占两行。第一行是组码(GROUP CODE),它是一个整数;第二行是组值(GROUP VALUE),它的数据类型取决于组码的数值。例如X坐标的组码为10,Y坐标的组码为20,Z坐标的组码为30。一个DXF文件分为多个节(SECTION),每个节均由多个组(GROUP)组成。每个节均由一个组值为字符串“SECTION”的0组开始,后跟组值为表示段名的字符串的2组,其后为组成该节的各个组,最后以组值为字符串“ENDSEC”的0组表示该节结束。所有节都结束后,在DXF文件的最后是组值为字符串EOF(END OF FILE)的0组作为文件的结束标志。一个完整的DXF文件由以下七个节(SE
7、CTION)组成:A 标题(HEADER)节:包括与图形相关联的变量的设置,例如图形节最大、最小X坐标和最大、最小Y坐标($LIMMIN,$LIMMAX),点显示模式($PDMODE),点尺寸($PDSIZE)等。其中的每一个变量都通过组码 9 给出变量名,并由其后的组码提供变量值。B 类(CLASSES)节:类节保存由应用程序定义的类,而该类的实例则出现在块节(BLOCKS)、实体节(ENTITIES)和对象节(OBJECTS)中。C 表(TABLE)节:包含命名项的定义,存放一系列表。包括线型(LTYPE)表、层(LAYER)表、文本字样(STYLE)表、视(VIEW)表、用户坐标系统(U
8、SC)表、视窗配制(VPORT)表、尺寸标注式样(DIMSTYLE)表、应用标识(APPID)表。D 块(BLOCK)节:存放块定义的实体。对图形中每个块引用,在块节中都必需有一个条目与之对应。E 实体(ENTITIES)节:存放图形实体,其中包括块插入实体。DXF图形文件中的所有图元(包括点、线、面、插入块,注记文字等实体)都将在ENTITIES节定义。F 实体(OBJECTS)节:存储非图形对象。G 预览图像(THUMBNAILIMAGE)节:只有当预览图像被保存在DXF文件中时该节才存在。2.1.2 DXF文件的读取(1)描述直线段的信息为:AcDbLine10 11直线段起点的X值 直
9、线段终点的X值20 12直线段起点的Y值 直线段终点的Y值30 13直线段起点的Z值 直线段终点的Z值(2)描述圆的信息为:AcDbCircle10 30圆心的X值 圆心的Z值20 40圆心的Y值 圆的半径R值(3)描述圆弧的信息为:AcDbCircle10 40圆心的X值 圆的半径R值20 50圆心的Y值 圆弧的起始角30 60圆心的Z值 圆弧的终止角2.2 几何元素的排序排序是指以DXF文件包含的第一个几何元素的起点为起点,依次将连接的各个几何元素排序的过程。 由于在AutoCAD上画图并不需要按首尾相接的方式画,故在DXF文件提取到的几何信息必须经过预排序才便于后面的针对落刀点、走刀方向
10、的排序实现。 预排序的基本思路是四步循环: (1)依次比较各个几何元素的端点,直到找到一个点与参照几何元素的终点重合; (2) 将这一点作为该几何元素的起点,其另一点则必然作为终点; (3) 将该几何元素的序号与参照几何元素下一元素的序号互调; (4) 令该几何元素作为参照几何元素。2.3 CNC程序生成 对照DXF文件的特征信息与NC程序中准备功能指令,由于本设计要求DXF文件的几何信息只有直线和圆弧。可知:AcDbLine 对应 G01AcDbCircle 对应 G02或G03由此可编制一个完整的NC代码生成,由DXF文件内容直接转换为NC程序。当然,在程序中需要人机交换来确定以下内容:零
11、件加工的起始点,确定G00的坐标;圆或圆弧的加工方向,确定G02或G03。3. 算法说明3.1 程序主流程图 下图为程序的主流程图:3.2 提取直线和圆弧信息3.3 几何信息排序算法 几何信息的排序主要是找到直线或圆弧首尾相连的点,即下一几何体的起点和前几何体的起点共点,考虑到计算误差,只要两点的距离小于0.00001就可以满足了,然后按顺序排列,加上标号。如果第一条起点和最后一条终点不满足共点,即可判断图形不闭合,并提醒用户。排序过程如下:先找出与原点最近的一点,并标这条线为1,再找出一点与第一条终点距离小于0.00001的点,并标这条线为2,如此类推,直到直线和圆弧的总数等于ab为止。并把
12、它们显示在坐标值窗口中。3.4 图形显示 显示图形即是按原图信息重新把图形画出来,VB中画直线和圆弧的命令命令分别为Line和Circle,前面再加上对象名。本软件中,对象为Picture,先将坐标原点定在Picture1的中心位置。然后依次再读取保存下来的几何信息,直线用Picture1.Line命令,并将原坐标值乘以比例系数。圆弧用Picture1.Circle 命令,同样将坐标值乘以比例系数。3.5生成NC程序代码先生成预置寄存G92,载入原点偏置,主轴正转M03,再用G90绝对坐标编程,用G17选择XY为加工平面,用G00将刀具快速移动到1号线条的起点,然后判断直线则用G01、顺圆用G
13、02,逆圆用G03线条终点坐标值(是原值,不是乘以比例系数后的值),然后同样对下一条线条处理,直至全部(共ab条)完成。再用G00将刀具移回原位。最后用M02结束程序。开始设定基本参数是否直线?输出直线代码顺圆?输出顺圆弧代码输出逆圆弧代码结束Next4. 软件开发及运行4.1 系统界面系统主界面如图4-1所示: 图4-1 主界面系统界面如4-2所示:4-2 系统界面4-3设计要求界面4.2 功能操作“进入系统界面”“读取DXF”按钮读入DXF文件。 “图形显示”按钮读入DXF文件后显示图形,只有显示图形以后才可以选择加工方向。 “逆时针方向加工”“顺时针方向加工”按钮选择加工的方向。 “保存
14、NC代码”按钮可以把NC代码保存为文档文件。 “上”“下”“左”“右”“放大”“缩小”用来更好的观察视图。 “清屏”把代码显示窗体和图形显示窗体清零,等待下次输入。 “退出”退出系统。4.3 操作运行 1. 首先双击运行软件,进入系统界面,用默认的加工参数运行(当然也可以改为实际所需要的参数),点击“读取DXF文件”按钮,在弹出的对话框中找到要打开的文件,如图4-5所示:图4-5 2. 在系统界面点击“图形显示”按钮显示图形,可以通过“上”“下”“左”“右”“放大”“缩小”来更好的观察视图;这时再点击“逆时针方向加工”或“顺时针方向加工”,在NC代码显示框中就可以看到选定图形所生成的NC代码,
15、如图46所示: 图 463. 点击“保存CNC代码”,然后按照弹出的保存对话框,找到要保存文件的路径,输入文件名,单击“保存”就可以保存自动生成的代码了,如图47所示: 图 476.点击“清屏”按钮可以删除图形窗口和生成NC代码窗口中的内容,再点击“读取DXF文件”按钮可以重新输入新的图形。7.点击“退出”按钮退出程序。4.4 结果及分析保存下来的代码如下:G92 X0 Y0 Z0N10 G90 G17 G42 M03 LFN20 G00 X0 Y0 LFN30 G01 X0 Y90 LFN40 G02 X90 Y0 R90 LFN50 G01 X0 Y0 LFN60 G00 G40 X0 Y
16、0 LFN70 M02 LF 生成的CNC代码与手工编程相一致,验证了程序的准确性结 论通过本次课程设计,对所学数控技术课程、VB课程以及其它相关课程的知识和技能进行一次综合性练习,使这些知识巩固、充实、系统化,并得到进一步的扩展。这次用VB对简单的DXF文件由二维图形生成CNC代码使我的编程能力有了一定的提高。通过查阅资料和请教同学,从不会到慢慢了解到可以写简单的程序,这个过程使我了解了很多的知识。培养我们理论联系实际、解决生产实际问题的机会。使我们对数控机床的加工原理、编程方法以及处理实际问题的一般步骤和具体技巧得到训练,提高运用所学专业知识分析问题和解决问题的能力。在做课程设计的过程中,
17、不仅使我增长了知识、学到了新的东西,也使我看到了自己的不足。这次经历一定会使我不断进取,努力改正自己的不足,学到更多知识,真正掌握本领,为以后的工作和继续深造打下扎实的基础。参考文献1数控技术. 廖效果主编.-武汉.湖北科学技术出版社,2000.52新编Visual Basic程序设计教程. 江志文主编. 广州.中山大学出版社.2005.23Basic语言结构化程序设计教程. 谭浩强主编. 北京. 中国科学技术出版社.19904 Visual Basic编程高手. 杨林李继良主编. 北京. 北京大学出版社. 2000附 录(程序代码)主界面Private Sub Command1_Click(
18、)Form2.ShowForm1.HideEnd SubPrivate Sub Command2_Click()s = MsgBox(退出吗?, vbOKCancel + vbQuestion, 提示信息)If s = vbOK Then EndEnd SubPrivate Sub Command3_Click()Form3.ShowEnd SubPrivate Sub Command4_Click()Form4.ShowEnd Sub系统界面Option Base 1Dim X1!(), Y1!(), X2!(), Y2!(), X3!(), Y3!(), R!(), afa!(), bta
19、!()Dim Str1() As StringDim Ord1%, Ord2%, Ord3%Dim dxfText() As VariantDim xVew!, yVew!, yMin!, xMin!, xMax!, yMax, Xm!, Ym!, Hh!Dim fx As BooleanDim flag As BooleanDim n As LongDim a As LongDim b As LongDim c As LongConst pi = 3.Public Sub Redraw()For i = 1 To cIf Str1(i) = CIRCLE ThenPicture1.Circl
20、e (X3(i), Y3(i), R(i)End IfIf Str1(i) = ARC ThenPicture1.Circle (X3(i), Y3(i), R(i), , afa(i), bta(i)End IfIf Str1(i) = LINE ThenPicture1.Line (X1(i), Y1(i)-(X2(i), Y2(i), vbBlueEnd IfNext iEnd SubPrivate Sub Form_Load()Picture1.Width = 4200Picture1.Height = Picture1.WidthPicture1.Scale (-100, 100)-
21、(100, -100)shunshizhen.Enabled = Falseshowpic.Enabled = Falsenishizhen.Enabled = FalseEnd SubPrivate Sub openfile_Click()读取DXF文件Dim a As LongDim b As LongCommonDialog1.Filter = dxf文件(*.dxf)|*.dxf|文本文件(*.txt)|*.txt|全部文件(*.*)|*.*CommonDialog1.DialogTitle = 打开文件CommonDialog1.ShowOpenIf Len(CommonDialog
22、1.FileName) = 0 Then Exit SubOpen CommonDialog1.FileName For Input As #1Dim i As Longi = 1While Not EOF(1) ReDim Preserve dxfText(i) Line Input #1, dxfText(i) If dxfText(i) = ENTITIES Then Text1.Text = Text1.Text + dxfText(i) + l + vbCrLf a = i i = i + 1 While Not EOF(1) ReDim Preserve dxfText(i) Li
23、ne Input #1, dxfText(i) Text1.Text = Text1.Text + dxfText(i) + l + vbCrLf If dxfText(i) = ENDSEC Then b = i GoTo L1 End If i = i + 1 DoEvents WendL1: End IfWendn = b - aClose #1 Me.CommonDialog1.FileName = Call Xinxishowpic.Enabled = Trueshunshizhen.Enabled = Falsenishizhen.Enabled = FalseEnd SubFun
24、ction fileSaveAndClose(code1 As String) As Boolean Dim temp As Variant Dim i As Integer CommonDialog1.Filter = 文本文件(*.nc)|*.nc Me.CommonDialog1.ShowSave If Me.CommonDialog1.FileName Then temp = Split(code1, vbCrLf) Debug.Print code1 Open Me.CommonDialog1.FileName For Output As #2 For i = 0 To UBound
25、(temp) Print #2, temp(i) Next Close #2 End If End FunctionPrivate Sub savenc_Click()Me.fileSaveAndClose (Text7.Text)End SubPrivate Sub up_Click()Picture1.ClsPicture1.ScaleTop = Picture1.ScaleTop - 20Call RedrawEnd SubPrivate Sub down_Click()Picture1.ClsPicture1.ScaleTop = Picture1.ScaleTop + 20Call
26、RedrawEnd SubPrivate Sub left_Click()Picture1.ClsPicture1.ScaleLeft = Picture1.ScaleLeft + 20Call RedrawEnd SubPrivate Sub right_Click()Picture1.ClsPicture1.ScaleLeft = Picture1.ScaleLeft - 20Call RedrawEnd SubPrivate Sub bigger_Click()Picture1.ClsPicture1.ScaleHeight = Picture1.ScaleHeight * 0.Pict
27、ure1.ScaleWidth = Picture1.ScaleWidth * 0.Picture1.ScaleTop = Picture1.ScaleTop * 0.Picture1.ScaleLeft = Picture1.ScaleLeft * 0.Call RedrawEnd SubPrivate Sub smaller_Click()Picture1.ClsPicture1.ScaleHeight = Picture1.ScaleHeight * 1.Picture1.ScaleWidth = Picture1.ScaleWidth * 1.Picture1.ScaleTop = P
28、icture1.ScaleTop * 1.Picture1.ScaleLeft = Picture1.ScaleLeft * 1.Call RedrawEnd SubPrivate Sub shunshizhen_Click()顺时针排序,生成顺时针加工程序If Text6.Text = ThenMsgBox 请指定起刀点ElseIf Text8.Text = ThenMsgBox 请指定起刀点ElseEnd IfShunpaixuEnd SubPrivate Sub nishizhen_Click()逆时针排序,生成逆时针加工程序If Text6.Text = ThenMsgBox 请指定起
29、刀点ElseIf Text8.Text = ThenMsgBox 请指定起刀点ElseEnd IfNipaixuEnd SubPrivate Sub showpic_Click()绘图Dim i As IntegerPicture1.ClsPicture1.Line (0, 0)-(0, 20), vbRedPicture1.Line (0, 0)-(20, 0), vbRedCall XinxiCall Redrawshunshizhen.Enabled = Truenishizhen.Enabled = TrueEnd SubPrivate Sub Clean_Click()Picture
30、1.ClsText7 = End SubPrivate Sub exit_Click()EndEnd SubPublic Sub Xinxi()曲线信息的筛选c = 1For j = 1 To nReDim Preserve X1(c)ReDim Preserve Y1(c)ReDim Preserve X2(c)ReDim Preserve Y2(c)ReDim Preserve X3(c)ReDim Preserve Y3(c)ReDim Preserve R(c)ReDim Preserve afa(c)ReDim Preserve bta(c)ReDim Preserve Str1(c
31、)If dxfText(j) = ENDSEC Then Exit SubIf dxfText(j) = CIRCLE Then X3(c) = Round(dxfText(j + 12), 3) Y3(c) = Round(dxfText(j + 14), 3) R(c) = Round(dxfText(j + 18), 3) X1(c) = X2(c) X2(c) = X1(c) Y1(c) = Y2(c) Y2(c) = Y1(c) Str1(c) = CIRCLE c = c + 1 GoTo JP4 End IfIf dxfText(j) = ARC Then X3(c) = Rou
32、nd(dxfText(j + 12), 3) Y3(c) = Round(dxfText(j + 14), 3) R(c) = Round(dxfText(j + 18), 3) afa(c) = dxfText(j + 22) / 180 * pi bta(c) = dxfText(j + 24) / 180 * pi X1(c) = Round(X3(c) + R(c) * Cos(afa(c), 3) X2(c) = Round(X3(c) + R(c) * Cos(bta(c), 3) Y1(c) = Round(Y3(c) + R(c) * Sin(afa(c), 3) Y2(c)
33、= Round(Y3(c) + R(c) * Sin(bta(c), 3) Str1(c) = ARC c = c + 1 GoTo JP4 End IfIf dxfText(j) = LINE Then X1(c) = Round(dxfText(j + 12), 3) Y1(c) = Round(dxfText(j + 14), 3) X2(c) = Round(dxfText(j + 18), 3) Y2(c) = Round(dxfText(j + 20), 3) Str1(c) = LINE c = c + 1 GoTo JP4 End IfJP4: Next jxVew = X1(
34、1)yVew = Y1(1)yMin = Y1(1)xMin = X1(1)xMax = X1(1)yMax = Y1(1)For j = 1 To cIf X1(j) - xMin = 0 And Y1(j) - yMin = 0 ThenxMin = X1(j)yMin = Y1(j)End IfIf X2(j) - xMin = 0 And Y2(j) - yMin = 0 And Y1(j) - yMax = 0 ThenxMax = X1(j)yMax = Y1(j)End IfIf X2(j) - xMax = 0 And Y2(j) - yMax = 0 ThenxMax = X
35、2(j)yMax = Y2(j)End IfNext jxVew = xMax - xMinyVew = yMax - yMinEnd SubPublic Sub NFangxiang()逆时针方向的判断Dim X1m!, Y1m!, X2m!, Y2m!, t%, afa, btaFor i = 1 To c If Abs(X1(i) - xMin) 10 -2 And Abs(Y1(i) - yMin) 10 -2 Then X1m = X2(i) Y1m = Y2(i) t = i Ord1 = i Exit For End If If Abs(X2(i) - xMin) 10 -2 A
36、nd Abs(Y2(i) - yMin) 10 -2 Then X1m = X1(i) Y1m = Y1(i) t = i Ord1 = i Exit For End If Next iFor i = 1 To c If Abs(X1(i) - xMin) 10 -2 And Abs(Y1(i) - yMin) 10 -2 Then If i = t Then GoTo LPf X2m = X2(i) Y2m = Y2(i) Ord2 = i Exit For End If If Abs(X2(i) - xMin) 10 -2 And Abs(Y2(i) - yMin) 10 -2 Then
37、If i = t Then GoTo LPf X2m = X1(i) Y2m = Y1(i) Ord2 = i Exit For End IfLPf: Next iIf Abs(Y1m - yMin) 0.001 Thenafa = 0ElseIf Abs(Y2m - yMin) bta ThenXm = X2mYm = Y2mOrd3 = Ord2ElseXm = X1mYm = Y1mOrd3 = Ord1End IfPicture1.Line (xMin, yMin)-(Xm, Ym), vbRedEnd SubPublic Sub SFangxiang()顺时针方向的判断Dim X1m
38、!, Y1m!, X2m!, Y2m!, t%, afa, btaFor i = 1 To c If Abs(X1(i) - xMin) 10 -2 And Abs(Y1(i) - yMin) 10 -2 Then X1m = X2(i) Y1m = Y2(i) t = i Ord1 = i Exit For End If If Abs(X2(i) - xMin) 10 -2 And Abs(Y2(i) - yMin) 10 -2 Then X1m = X1(i) Y1m = Y1(i) t = i Ord1 = i Exit For End If Next iFor i = 1 To c I
39、f Abs(X1(i) - xMin) 10 -2 And Abs(Y1(i) - yMin) 10 -2 Then If i = t Then GoTo LPf X2m = X2(i) Y2m = Y2(i) Ord2 = i Exit For End If If Abs(X2(i) - xMin) 10 -2 And Abs(Y2(i) - yMin) 10 -2 Then If i = t Then GoTo LPf X2m = X1(i) Y2m = Y1(i) Ord2 = i Exit For End IfLPf: Next iIf Abs(Y1m - yMin) 0.001 Thenafa = 0ElseIf Abs(Y2m - yMin) 0.001 Thenbta = 0Elseafa = Atn(X1m - xMin) / (Y1m - yMin) + 2 * Atn(1)bta = Atn(X2m - xMin) / (Y2m - yMin) + 2 * Atn(1) If afa 0 Then afa = pi - afa End If If bta 0 Then bta = pi - bta
限制150内