数控课程设计.docx

上传人:b****3 文档编号:10248298 上传时间:2023-05-24 格式:DOCX 页数:29 大小:190KB
下载 相关 举报
数控课程设计.docx_第1页
第1页 / 共29页
数控课程设计.docx_第2页
第2页 / 共29页
数控课程设计.docx_第3页
第3页 / 共29页
数控课程设计.docx_第4页
第4页 / 共29页
数控课程设计.docx_第5页
第5页 / 共29页
数控课程设计.docx_第6页
第6页 / 共29页
数控课程设计.docx_第7页
第7页 / 共29页
数控课程设计.docx_第8页
第8页 / 共29页
数控课程设计.docx_第9页
第9页 / 共29页
数控课程设计.docx_第10页
第10页 / 共29页
数控课程设计.docx_第11页
第11页 / 共29页
数控课程设计.docx_第12页
第12页 / 共29页
数控课程设计.docx_第13页
第13页 / 共29页
数控课程设计.docx_第14页
第14页 / 共29页
数控课程设计.docx_第15页
第15页 / 共29页
数控课程设计.docx_第16页
第16页 / 共29页
数控课程设计.docx_第17页
第17页 / 共29页
数控课程设计.docx_第18页
第18页 / 共29页
数控课程设计.docx_第19页
第19页 / 共29页
数控课程设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数控课程设计.docx

《数控课程设计.docx》由会员分享,可在线阅读,更多相关《数控课程设计.docx(29页珍藏版)》请在冰点文库上搜索。

数控课程设计.docx

数控课程设计

课程设计

 

课程名称数控技术课程设计

题目名称_数控中非圆曲线逼近的算法实现

学生学院__机电工程学院

专业班级机械设计制造及其自动化           

学号

学生姓名

指导教师_

成绩评定

教师签名

 

2012年07月05日

广东工业大学数控技术课程设计任务书

题目名称

数控中非圆曲线逼近的算法实现

学生学院

机电工程学院

专业班级

机械设计制造及其自动化2009级3班

姓名

学号

一、课程设计的内容

用计算机高级编程语言(如VB,VC++等)来实现非圆曲线的逼近,可任选

(1)直线逼近(如等间距法、等弦长法、等误差法等)、或

(2)圆弧逼近。

要求在满足允许误差的前提下,使得逼近的直线段或圆弧段的数量最少(即最优解),根据加工曲线轮廓自动生成刀具中心轨迹,自动生成加工NC代码。

二、课程设计的要求与数据

具体的要求如下:

(1)列出一般的直线或圆弧逼近的算法(流程图)。

(2)列出改进的直线或圆弧逼近的算法(流程图)——即优化算法。

比较改进前与改进后的两种算法结果。

(3)针对给定的某一由非圆曲线所构成的平面轮廓,根据指定的走刀方向、起刀点,自动生成CNC代码。

(4)有刀具自动补偿功能,根据给定的补偿量和进给方向自动计算刀具中心轨迹,有过切报警功能。

(5)在屏幕上显示该非圆曲线所构成的平面轮廓。

根据给定的进给速度能模拟加工过程,并在屏幕上留下刀具所走中心轨迹。

非圆曲线选择(根据组员最大最小学号选择,选择方法:

若本组学号最小的同学学号为xxxxxxa,学号最大的同学学号为yyyyyyb,取p=a%8+1,q=b%8+1,若q==p,则q=p+1;则该组选择的非圆曲线组合为第p组和第q组。

注:

’%’是取余运算):

1:

渐开线凸轮;

2:

双曲线

3:

椭圆曲线

4:

正弦线

5:

星形线

6:

心脏线

7:

抛物线

8:

外摆线

三、课程设计应完成的工作

每组学生应在规定时间内,独立完成所选题目。

运用VB或其它编程语言,编写计算机软件在WINDOWS实现数控装置的计算机仿真。

要求清楚地分析问题、提出算法、确定人机界面、列出流程图,最后用程序验证,完成软件测试,并且提交程序说明书。

要求用编写计算机软件的方法解决典型非圆曲线的CAM问题。

可以任选用自己熟悉的一种编程语言,要求清楚地分析问题、提出算法、列出流程图,最后用程序验证,并且提交程序说明书。

四、课程设计进程安排

序号

设计各阶段内容

地点

起止日期

1

1、布置任务,领取课程设计任务书,了解课程设计的目的、内容和要求;了解课程设计的步骤;

2、理解本课程设计题目的具体内容要求,根据各自不同情况选择题目;

3:

了解和掌握有关软件开发的知识,如VB编程、VC编程、软件工程、软件开发的常用技巧及注意事项;

4:

调查研究,收集资料,查阅文献。

学生对所选题目进行论证及确定设计方案,

学生宿舍

18周

2

1:

掌握数控结构设计要求,具体技术指标和计算要求;进行软件设计;

2:

进行数控系统和算法的软件编程与开发,初步实现系统的基本功能

学生宿舍

19周

3

1:

通过多个实例来验证和改进系统功能,完善软件界面

2:

对所开发的软件程序进行标识和说明

3:

按要求的格式编制课程设计说明书

4:

课程设计答辩

学生宿舍

20周

 

五、应收集的资料及主要参考文献

1《机床设计手册》第三分册

2廖效果.数字控制机床.武汉:

华中理工大学出版社.1992.9

3廖效果.数控技术.武汉:

湖北科学技术出版社.2000.7

4刘又午.数字控制机床.北京:

机械工业出版社

5龚浦泉.机床电气控制.重庆:

重庆大学出版社

6谭浩强.Basic语言结构化程序设计教程.北京:

中国科学技术出版社.1990

7杨林,李继良.VisualBasic编程高手.北京:

北京大学出版社.2000

8一组专用凸轮的计算机辅助设计.机械工程师1998,(4):

p58-59

9凸轮曲线的快速画法.机械工程师1998,(6):

p22-23

10平面凸轮机构CAD系统的研究与开发.机械设计与制造2000,(5):

p12-13

11圆柱非圆曲线槽凸轮的数控加工.制造技术与机床2000,(8):

p34

12圆柱凸轮的参数化设计及数控加工.精密制造及自动化2001,11:

p28

13参数化凸轮轮廓转换及NC代码自动生成.机床与液压2001,6,p29~31

 

发出任务书日期:

2012年5月28日

计划完成日期:

2012年7月6日

指导教师签名:

基层教学单位责任人签章:

主管院长签章:

 

摘要

基于VisualBasic6.0编程软件平台,使用直线逼近算法实现设计模拟椭圆曲线和星形线曲线两种非圆曲线轮廓的加工过程。

根据所编的等间距算法和等误差算法的流程图,初步使用等间距法来实现直线逼近两种非圆曲线的过程,然后使用节点数较少的等误差法来优化直线逼近非圆曲线的过程。

利用VisualBasic6.0编程语言,根据指定的走刀方向包括顺时针和逆时针,指定的走刀点,实现非圆曲线的模拟加工过程,根据刀具补偿量和进给方向在屏幕上留下刀具所走中心轨迹,根据软件计算出的点坐标能够自动生出CNC代码,并能够保存在电脑里面。

关键词:

直线逼近,VisualBasic6.0,非圆曲线,编程

 

1前言………………………………………………………………………………1

2非圆曲线逼近的关键……………………………………………………………1

2.1算法的选择…………………………………………………………………1

2.2算法实现的关键……………………………………………………………1

3非圆曲线逼近的算法实现………………………………………………………1

3.1算法的流程图………………………………………………………………1

3.2算法的解析…………………………………………………………………4

4软件开发与运行…………………………………………………………………7

4.1系统界面……………………………………………………………………7

4.2软件运行……………………………………………………………………8

4.3运行分析……………………………………………………………………9

5总结………………………………………………………………………………9

参考文献……………………………………………………………………………11

附录…………………………………………………………………………………12

1前言

数控机床是一种依靠数字化的信息来实现自动控制的高度自动化机床,它具有高效率、加工精度高和加工质量稳定等优点,这使得数控机床在机械制造业中得到了日益广泛的应用。

当前我国的经济型数控机床,一般只具有直线插补和圆弧插补功能,并不具备抛物线、椭圆等非圆曲线的插补功能。

因此,当我们需要数控加工非圆曲线的轮廓时,就必须用直线或圆弧段去逼近非圆曲线。

对非圆曲线的逼近有直线逼近、圆弧逼近,分别可由G01、G02、G03完成加工,其中直线逼近较为简单,但逼近节点数多,导致数控程序往往过多,而圆弧逼近具有高效性,但计算过于复杂。

直线逼近的方法有等间距直线逼近、等弦长直线逼近和等误差直线逼近,圆弧逼近的方法有曲率圆法、三点圆法和相切圆法。

对于一个已知曲线,它的节点数主要取决于所用逼近线段的形状(直线段还是圆弧段)、曲线方程的特性和允许的逼近误差。

2非圆曲线逼近的关键

2.1算法的选择

对非圆曲线进行逼近,有不同的实现方法,包括直线逼近和圆弧逼近。

方法不同,最终得到的节点数也有所不同,因此选择好的一个算法对提高加工的效率和降低加工成本有着重要的作用。

在这次课程设计中,我们选择的算法是等间距直线逼近,并用等误差直线逼近作为优化算法。

2.2算法实现的关键

算法实现需要求出曲线的节点,而要求曲线的节点得先求出直线段与所逼近的曲线之间的最大逼近误差,而最大逼近误差的计算点就在曲线上某一点的切线斜率与直线段斜率相等的切点处,故关键问题是求出该切点。

一旦求出了该切点,就可以求出逼近时的最大误差,用于与允许误差作比较。

另外,由于此次课程设计是对任意非圆曲线进行逼近,因此求导数也成了一个关键的问题。

3非圆曲线逼近的算法实现

3.1算法的流程图

N

Y

N

Y

图1等间距直线逼近的流程

w<误差?

开始

给定曲线起点,终点,步长s,系数a,b,允许误差v

s=s+0.001

过起点作与切线平行的直线,求出直线与曲线的交点,则另一交点(x

(1),y

(1))为插补点,用直线连接起点与插补点

将插补点(X

(1),Y

(1))设为下一直线段的起点

到达终点?

结束

设定起点坐标(X(0),Y(0))

求临时插补点(X

(2),Y

(2)),

其中X

(2)=X(0)+s,Y

(2)=f(X

(2)),以此点为切点作曲线切线,并计算起点至切线的距离w

N

Y

N

Y

图2等误差直线逼近的流程图

3.2算法的解析

3.2.1等间距直线逼近

等间距直线逼近是最简单的方法,已知椭圆方程

,给定第一点(x(0),y(0)),间距步长Δx=0.1,求出

,将

代入

即可求得一系列

即为每个线段的终点坐标,并以该坐标值编制直线程序段(图3)。

图3等间距直线逼近

根据M(x(0),y(0))、N(x

(1),y

(1))两节点的坐标可求得如图3所示的逼近误差,方法如下:

MN方程:

y=kx+c,则直线MN的斜率为

(3-1)

将M(x(0),y(0))代入MN方程:

y=kx+c,求得

c=y(0)-kx(0)(3-2)

利用椭圆参数方程x=aCos(i),y=bSin(i),求出椭圆曲线上的切线斜率为k的切点坐标(x

(2),y

(2)),对参数方程进行求导得切点对应的参数弧度为

(3-3)

从而求出(x

(2),y

(2))。

联立式(3-1)、(3-2)、(3-3)求出逼近误差为

(3-4)

如果计算出来的逼近误差w小于或等于输入的允许误差v,则满足误差要求,即可进行直线逼近;否则令Δx为原来的一半,且返回重新计算逼近误差再次比较,直到满足误差要求为止。

等间距直线逼近的流程图如图1所示,星形线的等间距直线逼近算法与椭圆计算方法相同,参考椭圆计算过程即可。

3.2.2等误差直线逼近

等间距直线逼近虽然计算简单,但由于取定值Δx应保证曲线曲率最大处的逼近误差小于允许值,所以程序可能过多。

因此,在选择优化算法时,我们采用的是等误差直线逼近的节点计算法,而且对于曲率变化较大的曲线,用等误差法求得的节点数最少,从而输出的NC代码也大大减少,等误差算法计算如下:

等误差直线去逼近曲线,就是使所有逼近线段的误差

相等,如图4。

图4等误差直线逼近

椭圆参数方程为x=aCos(i),y=bSin(i),A点坐标(x(0),y(0)),T点坐标(x

(1),y

(1)),B点坐标(x

(2),y

(2))。

(1)确定所有逼近线段的误差

的圆方程,即以起点A(x(0),y(0))为圆心,

为半径作圆;

(2)确定等误差圆与曲线公切线PT的斜率k:

以A点为起点,利用参数方程x=aCos(i),y=bSin(i),增大弧度i从而使横坐标变大。

从而得到下一个点T坐标(x

(1),y

(1)),弧度i增大的步长为Δi=0.001*π。

对椭圆方程进行求导,利用T点坐标求出曲线切线PT斜率k:

(3-5)

PT直线方程为y=kx+c,代入点T求得:

c=y

(1)-kx

(1)(3-6)

联立2式(3-5)、(3-6)和点A(x(0),y(0))求得A点到直线PT距离:

(3-7)

比较距离w与等误差圆半径

是否相等,若相等,则直线PT为等误差圆与曲线两者的公切线;若w<

则返回以上算法令Δi增大一倍重新计算距离w直到w=

;若w>

则返回以上算法令Δi变为原来一半重新计算距离w直到w=

(3)求B点坐标(x

(2),y

(2))。

使AB弦的斜率为k,即使AB平行PT,设AB的方程为y-y(0)=k(x-x(0)),联立式(3-5)公切线PT的斜率k和椭圆方程

可求得:

(3-8)

其中

进而求出y

(2)=k(x

(2)-x(0))+y(0)(3-9)

(5)按以上步骤顺次求得其他各节点坐标。

星形线等误差逼近算法与椭圆相似,参考椭圆计算方法即可求得。

 

4软件开发与运行

4.1系统界面

本次课程设计使用VisualBasic6.0软件,设计了两个窗口为一体的可执行程序,其中主界面可选择所需加工的非圆曲线函数、走刀方向、刀补、起刀点、NC代码坐标以及相关的加工参数,具有等间距直线逼近和等误差直线逼近两种逼近方法,并且对这两种方法进行比较分析。

通过点击“生成NC代码”按钮,可以进入图6的生成NC代码的窗口,可以对NC代码进行保存,可以返回主界面,也可以退出该程序。

图5主界面

图6生成NC代码窗口

4.2软件运行

以椭圆内轮廓加工、顺时针走刀方向为例说明等间距算法和等误差算法直线逼近非圆曲线的刀具轨迹,并比较两者的节点数和生成NC代码程序的长度,设允许误差为0.01,选择项和输入参数如图7所示。

图7加工参数的选择与输入

单击“绘原图”、“等间距逼近”按钮,运行结果的刀具轨迹如图8所示,等间距逼近所用的线段数为5920,生成的NC代码如图9所示。

图8等间距逼近的刀具轨迹图9等间距逼近的NC代码

单击“绘原图”、“等误差逼近”按钮,运行结果的刀具轨迹如图10所示,等误差逼近所用的线段数为666,生成的NC代码如图11所示。

图10等误差逼近的刀具轨迹图11等误差逼近的NC代码

4.3运行分析

从以上运行结果可以看出,非圆曲线的等间距直线逼近算法虽然简单,但逼近处理后的直线段较多,从经济效益上讲,此方法较差。

而由等误差直线逼近处理后,可以得到相对较少的直线段,经济效益高。

5总结

这次的课程设计,在刚开始做之前,我们组的每个人都感到了压力,因为毕竟这次是要利用VB或VC编程语言结合数控技术课程内容来完成课程设计,而且时间也并不充足。

在刚开始接触题目时候,没有丝毫的头绪,借住前人的成果,理解前人所做的东西,来逐步摸清我们课程设计真正所要做的工作。

课堂上老师讲直线逼近非圆曲线的数学处理时大概讲了三种的方法:

等间距、等弦长和等误差,在我们理解了三种方法之后,确定使用等间距为初步算法,等误差为优化算法,因为等间距计算简单,但程序过多,而等误差计算复杂,但程序和节点数都相对少。

确定算法之后,我们遇到的问题是如何地在VisualBasic6.0编程软件平台去实现直线逼近椭圆和星形线,VB编程语言我们大致都弄懂,但是具体操作还是不明白。

一开始我们使用椭圆和星形线的参数方程进行数学处理,实现过程很容易,而且不用分每一个象限去讨论,但是又遇到了另一个问题,使用参数方程计算出来的逼近误差太大了,远大于日常所要求的加工误差,所以还是以失败告终。

通过查阅高数知识和数控技术课本还有其他的一些参考资料,借住高数知识所提供的数学方法,我们使用标准方程去进行数学处理,虽然要考虑每一个象限,程序也由此变得繁琐,但是最终还是实现了我们之前的设想,计算出来的逼近误差最终可以变到0.01甚至更小。

有了等间距直线逼近的成功基础,在做等误差算法直线逼近的时候,只需理解好等误差数学计算的方法即可完成逼近,也通过比较,等误差法确实比等间距法所走的步数少一倍以上,符合了我们之前的设想。

通过这次的课程设计,把VB语言和数控仿真结合起来,加深了对非圆曲线加工的算法及其实现过程的理解,也提高了我们查阅资料和独自解决问题的能力,在遇到问题时候,我们组成员的互相讨论,迸发出来的学习激情,也提高了我们课程设计的积极性,给我们不仅带来了知识的增长和能力的提高,而且带来了更多的乐趣。

 

参考文献

[1]廖效果.数字控制机床[M].武汉:

华中理工大学出版社,1992.9.

[2]廖效果.数控技术[M].武汉:

湖北科学技术出版社,2000.7.

[3]刘又午.数字控制机床[M].北京:

机械工业出版社.

[4]龚浦泉.机床电气控制[M].重庆:

重庆大学出版社.

[5]谭浩强.Basic语言结构化程序设计教程[M].北京:

中国科学技术出版社,1990.

[6]杨林,李继良.VisualBasic编程高手[M].北京:

北京大学出版社,2000.

[7]一组专用凸轮的计算机辅助设计[J].机械工程师,1998,(4):

58-59.

[8]凸轮曲线的快速画法[J].机械工程师,1998,(6):

22-23.

[9]平面凸轮机构CAD系统的研究与开发[J].机械设计与制造,2000,(5):

12-13.

[10]圆柱非圆曲线槽凸轮的数控加工[J].制造技术与机床,2000,(8):

34.

[11]圆柱凸轮的参数化设计及数控加工[J].精密制造及自动化,2001,11:

28.

[12]参数化凸轮轮廓转换及NC代码自动生成[J].机床与液压,2001,6,29-31.

 

附录VB主要源程序

DimdaoluAsInteger,daobuAsInteger

DimX(5)AsDouble,Y(5)AsDouble

DimqidaoxAsSingle,qidaoyAsSingle,qidaozAsSingle

DimquxianAsInteger,piAsDouble,zuobiaoAsInteger‘定义变量

PrivateSubCommand1_Click()

Picture1.Cls

Text8.Text=""

Text9.Text=""

EndSub‘清屏绘图区域

PrivateSubCommand2_Click()‘绘制坐标系

Picture1.DrawStyle=vbSolid

Picture1.DrawWidth=1

Picture1.Scale(-50,50)-(50,-50)

Picture1.Line(-50,0)-(50,0)

Picture1.Line-(48,2)

Picture1.Line(50,0)-(48,-2)

Picture1.Print"X"

Picture1.Line(0,-50)-(0,50)

Picture1.Line-(-2,48)

Picture1.Line(0,50)-(2,48)

Picture1.Print"Y"

Picture1.CurrentX=2

Picture1.CurrentY=-2

Picture1.Print"O"

pi=3.1415926

Picture1.CurrentX=a

Picture1.CurrentY=0

Ifquxian=1Then

a=Val(Text1.Text)

b=Val(Text2.Text)

Fori=0To2*piStep0.001‘点命令绘制非圆曲线原图

Picture1.PSet(a*Cos(i),b*Sin(i))

Next

EndIf

Ifquxian=2Then

a=Val(Text1.Text)

Fori=0To2*piStep0.001

Picture1.PSet(a*Cos(i)^3,a*Sin(i)^3)

Next

EndIf

EndSub

PrivateSubCommand3_Click()‘等间距直线逼近

s=0.1

pi=3.1415926

o=4

a=Val(Text1.Text)‘输入加工参数

b=Val(Text2.Text)

v=Val(Text3.Text)

n=Val(Text4.Text)

F=Val(Text5.Text)

r=Val(Text6.Text)

qidaox=Val(Text10.Text)

qidaoy=Val(Text11.Text)

qidaoz=Val(Text12.Text)

d=Val(Text13.Text)

Picture1.DrawStyle=vbDash

Picture1.DrawWidth=1

Ifquxian=1Then‘画椭圆

Ifdaolu=1Then‘顺时针走刀方向

Ifdaobu=1Then

e=1

a=a+r

b=b+r

EndIf

Ifdaobu=2Then

e=2

a=a-r

b=b-r

EndIf

X(0)=a

Y(0)=0

Picture1.PSet(qidaox,qidaoy),vbRed

Picture1.Line-(X(0),Y(0)),vbRed

Picture1.DrawStyle=vbSolid

Picture1.PSet(X(0),Y(0)),vbRed

p=Format(X(0),"##0.00")

q=Format(Y(0),"##0.00")

Ifzuobiao=1Then

Form2.Text1.Text="N1G90G17G00G4"&e&"D01"&"Z30M03S"&n&vbCrLf

Form2.Text1.Text=Form2.Text1.Text&"N2X"&p&"Y"&q&vbCrLf

Form2.Text1.Text=Form2.Text1.Text&"N3Z-"&d&vbCrLf

Else

Form2.Text1.Text="N1G91G17G00G4"&e&"D01"&"Z30M03S"&n&vbCrLf

Form2.Text1.Text=Form2.Text1.Text&"N2X"&p&"Y"&q&vbCrLf

Form2.Text1.Text=Form2.Text1.Text&"N3Z-"&d+30&vbCrLf

EndIf

line1:

DoWhileX(0)>=(-a+0.0001)

X

(1)=X(0)-s

Y

(1)=-(b*Sqr(Abs(a^2-X

(1)^2)))/a

IfX

(1)<>X(0)AndY

(1)<>Y(0)Then

k=(Y

(1)-Y(0))/(X

(1)-X(0))

Ifk>0Then

j=Atn(-b/(a*k))

EndIf

Ifk<0Then

j=Atn(-b/

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

当前位置:首页 > 总结汇报 > 学习总结

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

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