广东工业大学数控课程设计报告书.docx
- 文档编号:26324811
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:24
- 大小:281.79KB
广东工业大学数控课程设计报告书.docx
《广东工业大学数控课程设计报告书.docx》由会员分享,可在线阅读,更多相关《广东工业大学数控课程设计报告书.docx(24页珍藏版)》请在冰豆网上搜索。
广东工业大学数控课程设计报告书
广东工业大学“数控技术”课程设计任务书
题目名称
针对非圆曲线的CAM软件开发
学生学院
机电工程学院
专业班级
机械设计制造及其自动化/微电子
姓名
学号
一、课程设计的内容
用计算机高级编程语言(如VB,VC++等)来实现非圆曲线的计算机辅助制造(CAM)软件的开发,针对不同的非圆曲线,可任选
(1)直线逼近(如等间距法、等弦长法、等误差法等)、或
(2)圆弧逼近的方法产生节点。
要求在满足允许误差的前提下,使得逼近的直线段或圆弧段的数量最少(即最优解),根据加工曲线轮廓自动生成刀具中心轨迹,自动生成加工NC代码,并能模拟实际加工走刀过程。
二、课程设计的要求与数据
具体的要求如下:
(1)列出一般的直线或圆弧逼近的算法(流程图)。
(2)列出改进的直线或圆弧逼近的算法(流程图)——即优化算法。
比较改进前与改进后的两种算法结果。
(3)针对给定的某一由非圆曲线所构成的平面轮廓,根据指定的走刀方向、起刀点,自动生成CNC代码。
(4)有刀具自动补偿功能,根据给定的补偿量和进给方向自动计算刀具中心轨迹,有过切报警功能。
(5)在屏幕上显示该非圆曲线所构成的平面轮廓。
根据给定的进给速度能模拟加工过程,并在屏幕上留下刀具所走中心轨迹。
一、概述……………………………………………………2
二、凸轮机构的发展概况…………………………………………3
三、课程设计任务………………………………………………3
四、软件设计………………………………………………7
1、程序设计语言的选择……………………………………7
2、程序算法的简述…………………………………………7
3、设计的流程图……………………………………………7
4、设计过程………………………………………………7
5、调试结果和界面…………………………………………15
五、总结……………………………………………………16
附:
参考资料…………………………………………………17
一、概述:
首先介绍了凸轮机构的特点和在国内外目前的应用发展情况,介绍了凸轮仿真设计的系统的主要设计任务,包括在编程时所采用的曲线的类型及对函数式的分析情况。
接着,介绍软件程序设计的各个过程,包括算法说明、流程图介绍。
还介绍了软件测试结果。
最后,对这次设计过程的心得体会。
SummaryoftheContents:
Introducecamorganizationpresentdevelopmentathomeandabroadatfirst,introducecammaindesigntaskofsystemthatemulationdesign,includingthetypesofthecurvesadoptedandsituationofanalysisonfunctiontypewhileprogramming.Then,introduceeachcoursethatthesoftwaredesignsprogram,includingthealgorithmisstated,flowchartintroduction.Havealsointroducedthetestresultofthesoftware.Finally,thegainsindepthofcomprehensiontothisdesignprocess.
二、凸轮机构的发展概况
凸轮机构是一个具有曲线轮廓或凹槽的构件.凸轮通常作等速转动,但也有做往复摆动或移动的.被凸轮直接推动的构件称为推杆.凸轮机构就是又凸轮,推杆和机架三个主要构件所组成的高副机构.凸轮的最大优点是:
只要适当地设计出凸轮的轮廓曲线,就可以使推杆得到各种预期的运动规律,而且机构简单紧凑.
凸轮机构是间歇运动的常用机构之一,广泛用于轻工机械、纺织机械、包装机械、印刷机械、内燃机等各种自动机械中。
凸轮机构之所以能在各种自动机械中获得广泛的应用,除了它的最大优点外,还因为它兼有传动、导引及控制机构的各种功能。
当凸轮机构用于传动机构时,可以产生复杂的运动规律,包括变速范围较大的非等速运动,以及暂时停留或各种步进运动;凸轮机构也适宜于用作导引机构,使工作部件产生复杂的轨迹或平面运动;当凸轮机构用作控制机构时,可以控制执行机构的自动工作循环。
人类对凸轮机构的认识由来已久,但直到十九世纪末,对凸轮机构还未曾有过系统地研究。
随着工业化的发展,对高效的自动机械的需求大大增加,需要改善内燃机配气机构的工作性能,所以直到二十世纪初,凸轮机构的研究才开始受到重视。
在二十世纪四十年代以后,由于内燃机转速增加,引起故障增多,才开始对配气凸轮机构进行深入研究,并从经验设计过渡到有理论根据的运动学与动力学分析。
现代机械日益向高速发展,凸轮机构的运动速度也愈来愈高。
因此,高速凸轮的设计及其动力学问题的研究已引起普通重视,提出了许多适于在高速条件下采用的推杆运动规律,以及一些新型的凸轮机构。
另一方面,随着计算机的发展,凸轮机构的计算机辅助设计和制造已获得普遍地应用,从而提高了设计和加工的速度及质量,这也为凸轮机构的更广泛应用创造了条件。
三、课程设计任务
(1)平面凸轮的数控加工程序的编制
设有凸轮如图1所示。
凸轮转角t与
从动件位移s的关系即凸轮轮廓的展成平面
图如图2所示。
要求分析凸轮的曲线规律,设计一个软件
图1
能够用于平面凸轮的参数化绘图和生成数控加工的代码。
即:
1.有一个凸轮设计的友好界面;图1
2.能够按照用户要求生成凸轮的曲线
轮廓,对于非圆几何形状可采用直线或圆
弧逼近的方法生成曲线;
3.能够生成数控代码;
图2
凸轮设计中涉及的有关参数可自行设定,或参考图2中的参数。
(2)曲线的类型及函数式的分析
所谓推杆的运动规律,是指推杆在运动时,其位移s速度v和加速度a随时间t的变化的规律.又因为凸轮一般为等速运动,即其转角&与与时间成正比,所以推杆的运动规律更常表示为推杆的运动参数随凸轮转角&变化的规律.例如图2就是推杆位移随凸轮转角变化的运动线图.
下面分析各种设计凸轮的数学表达式:
首先,采用《机械原理》中的一般凸轮设计的几种运动方程式,并对此作了修改:
1、多项式运动规律
(1-1)
式中
为凸轮的转角;s为凸轮从动件位移;
、
、
、…为待定系数,可以利用边界条件等来确定。
而常用的有以下几种多项式运动规律。
(1)一次多项式运动规律(速度为常数)
设取边界条件为
在起点处
,
.
在终点处
,
.
则由式(1-2)可得
,
,故从动件推程的运动方程为
,回程时h取负值。
(2)二次多项式运动规律(加速度为常数)
等加速运动方程:
等减速运动方程:
由于等加速等减速的曲线图形都是由两部分组成,而为方便曲线的分类,固对其进行修改。
其中原等加等减加速度函数为:
“
”和“
”。
两段曲线的范围分别为h/2,δo/2,,以h/2,δo/2,代入原式中,即可得到求出单独等加速或等减速的函数式。
由于采用的h值是相对的,所以回程时,只把h取负值即可。
2、三角函数运动规律
(1)余弦加速度运动规律(简谐运动规律)从动件的加速度
余弦规律变化,其运动方程为
(2)正弦加速度运动规律(摆线运动规律)从动件的加速度按正弦规律变化,其运动方程为
其中,等速运动:
极大的冲击;等加速、等减速:
冲击较大;余弦加速度运动:
冲击力较小;正弦加速度运动:
没冲击。
由于凸轮的曲线函数还有很多,如五项式、高次方、谐波等,而且由于凸轮的具体运用场合不同,如对心直推,偏置直动推杆盘状凸轮机构,摆动推杆,平底推杆等。
这些情况不在考虑的范围内,同时也忽略了对设计完成的凸轮的冲击力。
二、软件设计
1、程序设计语言的选择
目前流行的开发工具有C++Builder、VC、VB和Delphi,每一种开发语言都其特点。
在这次程序设计中,我选择了VisualBasic(VB)程序开发工具。
因为其设计语言简单易用,在编程系统中引入了面向对象的机制,提供了一种可视界面的设计方法。
用户可直接使用窗体和控件设计应用程序界面,极大地提高了应用程序开发的效率。
在程序中,我采用了多个应用窗口依次询问的方法,逐步完成凸轮的仿真设计。
每个窗体按照不同的功能而划分为:
登陆界面,基本参数选择界面,主窗体,NC加工窗体,还有帮助界面。
2、程序算法的简述
数控系统一般只有直线和圆弧插补的功能,对于非圆曲线轮廓,只有用直线和圆弧去逼近它,“节点”就是逼近线段与非圆曲线的交点。
一个已知曲线方程的节点数主要取决于所用逼近线段形状、曲线方程的特征以及允许的逼近误差。
在本程序中,由于时间的关系,我采用的逼近方法是直线逼近方法,简单易编程,容易检查出错误。
虽然会在某些线段中会产生较大的误差,但由于每段逼近线段的长度较小,因此,产生的误差都在允许的范围之内。
但是,也由于这个原因,使节点过多,这是无法避免的。
3、设计的流程图
初步构想界面确定确定逼近算法模块编写程序调制
4、设计过程
(1)程序流程图
(2)主要程序分析
1、初始坐标系绘制
PrivateSubcmdOK_Click()'坐标初始化
Dimc1AsDouble,c2AsDouble,cAsDouble,aAsInteger
IfIsNumeric(TxtRise1.Text)AndIsNumeric(Txtr.Text)AndIsNumeric(TxtNum.Text)Then'判断输入的R,H,N是否是数字
m1=TxtNum.Text:
m2=Txtr.Text:
m3=TxtRise1.Text
TxtNum.Enabled=False:
Txtr.Enabled=False:
TxtRise1.Enabled=False
Form1.Labfun.Caption=""
Ifm1>=1Andm2>0Andm3>=0Then
a=Val(TxtNum):
c1=Val(Txtr):
c2=Val(TxtRise1)
c=1.2*(c1+c2)
Form1.Label15.Caption="Y":
Form1.Label12.Caption="0":
Form1.Lbls.Caption=c2
Form1.Label13.Caption="s":
Form1.Label14.Caption="δ":
Form1.Label11.Caption="X"
Form1.Label3.Caption="90":
Form1.Label4.Caption="0":
Form1.Label8.Caption="180"
Form1.Label9.Caption="270":
Form1.Label10.Caption="360"
'绘制PicView的坐标
Form1.PicView.Scale(-c,c)-(c,-c)
Form1.PicView.Line(0,-1.2*(c1+c2))-(0,1.2*(c1+c2)),RGB(0,0,255)
Form1.PicView.Line(-1.2*(c1+c2),0)-(1.2*(c1+c2),0),RGB(0,0,255)
Fori=1To10
Form1.PicView.Line(0+i*((c1+c2)/10),0)-(0+i*((c1+c2)/10),c/50),RGB(0,0,255)
Form1.PicView.Line(0-i*((c1+c2)/10),0)-(0-i*((c1+c2)/10),c/50),RGB(0,0,255)
Form1.PicView.Line(0,0+i*((c1+c2)/10))-(c/30,0+i*((c1+c2)/10)),RGB(0,0,255)
Form1.PicView.Line(0,0-i*((c1+c2)/10))-(c/30,0-i*((c1+c2)/10)),RGB(0,0,255)
Nexti
'考虑升程和曲线段数的输入值的两种情况
'一,当升程为>0和曲线段数为>1时
Ifc2>0Anda>1Then
Form1.Cmbsel.Enabled=True
Form1.PicView1.ScaleHeight=-1.2*c2
Form1.PicView1.ScaleTop=c2
'绘制PicView1的坐标
Form1.PicView1.Line(0,0)-(360,0),RGB(0,0,0)
Fori=1To4
Form1.PicView1.Line(0,0+i*(c2/4))-(5,0+i*(c2/4)),RGB(0,0,0)
Nexti
Form1.PicView1.Line(0,0)-(0,c2),RGB(0,0,0)
Fori=1To8
Form1.PicView1.Line(0+i*(360/8),0)-(0+i*(360/8),c2/24),RGB(0,0,0)
Nexti
Else
'二,当升程为<0或曲线段数为<1时
Form1.Cmbsel.Text="休程"
Form1.Labfun.Caption="r="&Val(Txtr)
Form1.Cmbsel.Enabled=False:
Form1.CmdOK.Enabled=True
Form1.Numend.Enabled=False:
Form1.Numh.Enabled=False:
Form1.Numstr.Enabled=False
Form1.PicView1.ScaleHeight=-12
Form1.PicView1.ScaleTop=10
Form1.CmdOK.Enabled=False
MsgBox"请检查输入的凸轮参数是否准确"
Fori=1To36
Form1.PicView1.Line(0+i*(360/36),0)-(0+i*(360/36),0.3),RGB(0,0,0)
Nexti
EndIf
Form1.CountAll.Caption=TxtNum.Text:
Form1.CountNow.Caption=1
cn=1:
tch=0:
sch=Val(TxtRise1):
wide=0:
high=0
Form1.PicView.DrawStyle=2'绘制两个虚线圆
Form1.PicView.Circle(0,0),Val(Txtr),RGB(250,0,255)
Form1.PicView.Circle(0,0),Val(Txtr)+Val(TxtRise1),RGB(250,0,255)
Form1.PicView.DrawStyle=0
CmdOK.Enabled=False
Form1.Numstr.Enabled=False:
Form1.Numend.Enabled=False:
Form1.Numh.Enabled=False
Else
MsgBox("请正确输入正确的参数")
EndIf
Else
MsgBox("请正确输入数字")
EndIf
Form1.Label1.Caption="基圆半径R为:
"&m2
Form1.Label2.Caption="升程H为:
"&m3
Dialog1.Hide
EndSub
PrivateSubEnd_Click()
a=MsgBox("真的退出吗?
",vbOKCancel,"退出")
Ifa=vbOKThenEnd
EndSub
PrivateSubForm_Load()
EndSub
2、凸轮轮廓曲线的主程序:
先判断输入值是否是数字,接着判断曲线的终止角度是否大于起始角度。
当输入最后一段时,系统自动生成最终的参数,并且判断是否在360度之内,自动连接曲线成封闭轮廓曲线。
PrivateSubcmdOK_Click()
IfIsNumeric(Dialog1.Txtr.Text)AndIsNumeric(Dialog1.TxtRise1)AndIsNumeric(Dialog1.TxtNum.Text)_
AndIsNumeric(Numstr)AndIsNumeric(Numend)AndIsNumeric(Numh)Then'检查Text的内容是否为数字
str=Val(Numstr):
end1=Val(Numend):
h=Val(Numh)
a1=Numstr:
a2=Numend:
a3=Numh:
r=Val(Dialog1.Txtr):
IfVal(Numend)>Val(Numstr)AndVal(Numend)<=360AndVal(Numstr)<360Then'检查终止角度(end1)是否大于初
IfVal(Dialog1.TxtRise1)=0OrVal(Dialog1.TxtNum)=1Then
'如果升程H=0或曲线段数N=1
Callforend:
Callcase0:
CmdOK.Enabled=False
Else
IfVal(Numh)<=Val(Dialog1.TxtRise1)AndVal(Numh)>=0Andcn=1And_
Val(Numend)<360Then
Callcaseall
ElseIfhigh+h<=Val(Dialog1.TxtRise1)Andhigh+h>=0Andcn>1And_
Val(Numend)<360AndNumend.Enabled=TrueOrVal(Numend)=360_
AndNumend.Enabled=FalseThen
Callcaseall
ElseIfVal(Numend)=360AndNumend.Enabled=TrueThen
MsgBox"范围出错!
"
Numend.SetFocus
Else
MsgBox"范围出错!
"
Numh.SetFocus
EndIf
EndIf
Else
MsgBox("范围出错!
")
CmdOK.Enabled=True
Numend.SetFocus
EndIf
Else
MsgBox("输入为空或有非法字符,请重新输入!
")
'如果输入的起始角度和终止角度不是数字,则出现警告
Numend.SetFocus
EndIf
EndSub
3、函数式生成曲线的程序:
以正弦曲线为例,先定义数组pcx(low),pcy(low)下标范围,每次取0.1个单位角度,每次在picview上绘制一小段直线,直至结束为止。
并且判断是否为休程,假如为休程时,则生成圆弧的NC加工代码;否则,直接生成直线的NC加工代码。
每次绘制逼近线段时,其开始都是以上一次的逼近线段的终点为起点的,因此能够保证曲线顺利的过度连接。
Subcase3()
low=10*Val(Numstr)
Fori=0To(end1-str)Step0.1
X=i
Y=h*((i/(end1-str))-Sin(2*P*i/(end1-str))/(2*P))
PicView1.PSet(X,Y),RGB(0,0,220)
pcx(low)=(r+(high+Y))*Sin((wide+i)*P/180)
pcy(low)=(r+(high+Y))*Cos((wide+i)*P/180)
PicView.PSet(pcx(low),pcy(low)),RGB(0,0,220)
low=low+1
Nexti
IfVal(Numh)=0Then
CallNCyh
Else
List1.AddItema1&"~"&a2&"h="&a3&""&"正弦加速度运动"
CallNCzx
EndIf
EndSub
4、直线逼近加工代码:
每一段逼近线段的角度为1度,也就是说每一次加工1度的逼近线段,并且判断前一段是否为圆弧。
SubNCzx()
i=str*10+1
List2.AddItem"G01"&"X"&Format$(pcx(str*10+1),"##0.000")&_
"Y"&Format$(pcy(str*10+1),"##0.000")'绝对坐标编程
List3.AddItem"G01"&"X"&Format$(pcx(str*10+1)-_
pcx(str*10),"##0.000")&"Y"&Format$(pcy(str*10+1)-pcy(str*10),"##0.000")'相对坐标编程
j=j+1
Fori=str*10+2Toend1*10-1
List2.AddItem"X"&Format$(pcx(i),"##0.000")&_
"Y"&Format$(pcy(i),"##0.000")
List3.AddItem"X"&Format$(pcx(i)-pcx(i-1),"##0.000")&_
"Y"&Format$(pcy(i)-pcy(i-1),"##0.000")
j=j+1
Nexti
List2.AddItem"X"&Format$((Val(Dialog1.Txtr)+high+h)*_
Cos((90-Val(Numend))*P/180),"##
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 广东工业大学 数控 课程设计 报告书