计算机辅助设计VB设计凸轮轮廓曲线.docx
《计算机辅助设计VB设计凸轮轮廓曲线.docx》由会员分享,可在线阅读,更多相关《计算机辅助设计VB设计凸轮轮廓曲线.docx(40页珍藏版)》请在冰豆网上搜索。
计算机辅助设计VB设计凸轮轮廓曲线
课程设计报告
课程设计题目:
计算机辅助设计基于VisualBasic6.0设计凸轮轮廓曲线
2013年07月01日
计算机辅助设计VB设计凸轮轮廓曲线(本人课程设计现整理包括界面和代码,为其他做相关设计的同学提供参考)
一、前言:
凸轮机构是工程中用于实现机械化和自动化的一种重要驱动和控制机构,凸轮机构结构简单、紧凑,但能在实现控制功能的同时传递较大的功率。
因此,凸轮机构在生产中具有无可替代的优越性,尤其在高速度、高精度传动与分度机构及引导机构中,更有突出的
优点。
本文通过凸轮机构运动参数理论计算,建立凸轮机构数学模型,利用VisualBasic实
现面向对象化的编程。
首先,查找有关凸轮机构运动参数理论计算的书籍和资料,了解凸轮机构设计的方法,建立凸轮机构参数数学模型。
然后,在VisualBasic6.0软件中,对凸轮机构参数设计进行编程,通过VB编程画出凸轮机构的位移曲线、速度曲线、加速度曲线及凸轮轮廓曲线,并将VB源程序打包成可执行程序。
二、背景:
凸轮机构是工程中用于实现机械化和自动化的一种重要驱动和控制机构,在轻工、纺织、食品、医药、印刷、标准零件制造、交通运输等领域运行的工作机械中获得广泛应用。
为了提高产品的质量和生产率,对机械设备的性能指标提出更高的要求,就凸轮机构而言,
必须进一步提高其设计水平,在解析法的基础上开展计算机辅助设计的研究和推广应用。
凸轮机构结构简单、紧凑,但能在实现控制功能的同时传递较大的功率。
因此,凸轮
机构在生产中具有无可替代的优越性,尤其在高速度、高精度传动与分度机构及引导机构
中,更有突出的优点。
三、我国情况:
近十多年来,我国无论是在凸轮机构的理论和应用研究,还是在凸轮机构的产品开发和制造方面,都已取得了很大的进步,就理论研究方面而言,已达到了世界先进水平。
在凸轮机构制造方面,与发达国家相比,还有一定的差距。
究其原因,一方面,我国的机械制造业的总体水平不高,缺乏精密的关键设备,自主研制和改造的设备其精度、刚度和可靠性都比较差,在材质、热处理和工艺等方面还存在不少问题;另一方面,从研究单位
到企业在制造方面所投入的财力和人力远远不足,也未引起有关部门的重视。
如果这方面
再不下大力气,我国的凸轮机构的研究水平还将长期落后于世界先进水平。
四、凸轮机构运动参数:
图2-1所示为一对心直动推杆盘形凸轮机构。
图中,以凸轮的回转轴心O为圆心,以凸轮的最小半径0r为半径所作的圆称为基圆,0r称为基圆半径。
图示凸轮的轮廓由AB、BC、CD及DA四段曲线组成,而且BC、DA两段为圆弧。
凸轮与推杆在点A接触时,推杆处于最低位置。
当凸轮以等角速度逆时针转动时,推杆在凸轮廓线AB段的推动下,将由最低位置A被推到最高位置B,推杆运动的这一过程称为推程,而相应的凸轮转角0称为推程运动角。
凸轮继续转动,推杆与凸轮廓线的BC段接触,由于BC段为以凸轮轴心O为圆心的圆弧,所以推杆将处于最高位置而静止不动,此一过程称为远休,与之相应的凸轮转角01称为远休止角。
而后,当推杆与凸轮廓线的CD段接触时,它又由最高位置回到最低位置,推杆运动的这一过程称为回程,相应的凸轮转角0称为回程运动角。
最后,当推杆与凸轮廓线DA段接触时,由于DA段为以凸轮轴心O为圆心的圆弧,所以推杆将在最低位置静止不动,此一过程称为近休,相应的凸轮转角02称为近休止角。
凸轮再继续转动时,推杆又重复上述过程。
推杆在推程或回程中移动的距离h称为推杆的行程。
所谓推杆的运动规律,是指推杆在运动时,其位移s、速度v和加速度a随时间t变化
的规律。
五、解析法:
用作图法设计凸轮廓线,概念清晰,简便易行;但误差大,效率低。
对于精度要求较高且结果复杂的凸轮廓线,通常采用解析法设计。
尤其是近年来随着计算机与数控加工技术的发展,解析法在凸轮廓线的设计中已得到了广泛的应用。
用解析法设计凸轮廓线的关键问题是将凸轮廓线表示为数学方程,这一过程称为建立数学模型。
用解析法设计一直动滚子从动件盘形凸轮机构。
已知凸轮以等角速度ω逆时针方向转
动,凸轮基圆半径r0,滚子半径r,导向和凸轮轴心间的相对位置及偏距e,从动件的运动规律
ss()。
(1)理论廓线方程过凸轮的回转中心O建立直角坐标系XOY,如图2-9所示,设推程开始时从动件滚子中心处于B0点,B0即为凸轮理论廓线的起始点。
当凸轮逆时针转过角时,应用反转法,假设凸轮不动,则从动件与导路一起沿方向反转δ角,处于B位置。
设对应此过程滚子中心按已知的运动规律产生的位移为s=s。
由作图法可知此时滚子中心点B即为凸轮理论廓线上的点。
B点在坐标系中的表达式为:
六、VB简介:
VisualBasic(简称VB)是面向对象可视化的程序设计语言,具有良好的交互式界面。
它使用起来操作方便、简单易懂,即使用户从来没有接触过编程,但只要会使用Windows
操作系统,就可以很快学会怎样使用VisualBasic去开发一个简单但功能完整的Windows
应用程序[13]-[17]。
传统的程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过
程中看不到界面的实际效果,只有在运行程序时才能观察到。
如果对界面的效果不满意,
就必须回到程序中重新设计,这往往需要反复多次,从而大大降低了编程效率。
VB采用了可视化的程序设计方法,利用系统提供的大量可视化控件,可以直接绘制用
户图形界面,并可直观、动态地调整界面,不必再用大量程序代码来描述界面元素的外观
和位置,从而克服了传统编辑模式,提高了编程效率。
用VisualBasic开发程序,就好比
盖房子,系统提供的可视化控件好比盖房子用的砖和瓦等原料,通过合理的搭配组合,可
以方便地构造出所需的应用程序。
VB综合运用了Basic语言和可视化设计工具,巧妙地将Windows应用程序编程的复杂
性封装起来,既没有牺牲Windows应用程序的特点,又提供了编程的简易性。
VisualBasic的程序开发过程基本可分为八个步骤:
①在VB中创建一个新的工程;
②建立应用程序窗体(即用户界面);
③在窗体中绘制所需的控制对象;
④设置窗体和控件的属性;
⑤为需要响应用户操作的对象编写事件过程(即编程);
⑥运行及调试应用程序;
⑦保存工程;
⑧编译工程,生生成可执行的应用程序。
七、界面设计:
说到程序当然要考虑两个方面的因素,第一就是代码,第二就是界面,我们力求界面友好,程序清晰客观。
下面是界面部分:
(1)首先双击运行程序出现如下界面:
(2)针对查看3-4题目及位移线图:
(3)根据题中数据进行参数设置:
(4)第一步:
按比例画位移线图、基圆和偏距圆,并标明各运动角:
(5)第二步:
延长从动件,与偏距圆相切,以此为始点在偏距圆上做出各运动角:
(6)第三步:
将推程运动角和回程运动角分成若干等份,画等分线与偏距圆交点的切线,与基圆相交:
(7)第四步:
延长各切线,延长线段长度与位移线图对应等分线段长度相等:
(8)第五步:
顺次光滑连接各点,得凸轮理论轮廓曲线:
(9)第六步:
以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线:
(10)第七步:
可以进行动画演示:
八、代码设计:
Form1的代码:
OptionExplicit
PrivateSubCommand1_Click()
Form2.Show
EndSub
PrivateSubCommand2_Click()
Form1.Hide
EndSub
Form2的代码:
OptionExplicit
PrivateSubCommand1_Click()
Form2.Hide
EndSub
Frm等分的代码:
PrivateSubCommand1_Click()
i等分DT0=Val(frm等分.Text1.Text)
i等分DT2=Val(frm等分.Text2.Text)
UnloadMe
EndSub
Frm对心设计的代码:
OptionExplicit
PrivateSubcmdFifth_Click()
DimiAsInteger
Text1.Text="5.以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线。
。
"
mainfrm.Picture1.DrawWidth=1
Fori=0To360Step10
mainfrm.Picture1.Circle(PointXY(i,1),PointXY(i,2)),r1,&HFFFFC0
Next
mainfrm.Picture1.DrawWidth=3
mainfrm.Picture1.PSet(FactPXY(0,1),FactPXY(0,2))
Fori=1To360Step1
'Ifi=0Then
mainfrm.Picture1.Line-(FactPXY(i,1),FactPXY(i,2)),&H80FF&
Next
EndSub
PrivateSubcmdSixth_Click()
UnloadMe
EndSub
PrivateSubCommand_Click()
mainfrm.init1
Text1.Text="1.按比例画位移线图和基圆,并标明各运动角。
"
First0_step
First_Step
EndSub
PrivateSubCommand2_Click()
DimiAsInteger
Text1.Text="2.将推程运动角和回程运动角分成若干等份。
"
Ifi等分DT0<>0Then
Fori=1Toi等分DT0
Unloadmainfrm.lin等分DT0(i)
Unloadmainfrm.lin基圆DT0(i)
Unloadmainfrm.lin凸轮DT0(i)
Next
EndIf
Ifi等分DT2<>0Then
Fori=1Toi等分DT2
Unloadmainfrm.lin等分DT2(i)
Unloadmainfrm.lin基圆DT2(i)
Unloadmainfrm.lin凸轮DT2(i)
Next
EndIf
frm等分.ShowvbModal
Ifi等分DT0*i等分DT2=0ThenExitSub
Second_Step
EndSub
PrivateSubCommand3_Click()
Text1.Text="3.延长基圆上各等分线,延长线段长度与位移线图对应等分线段长度相等。
"
Third_Step
EndSub
PrivateSubCommand4_Click()
Ifr1=0Then
Text1.Text="4.顺次光滑连接各点,得凸轮轮廓。
"
mainfrm.Picture1.DrawWidth=3
Else
Text1.Text="4.顺次光滑连接各点,得凸轮理论轮廓曲线。
"
mainfrm.Picture1.DrawWidth=1
EndIf
Forth_step
EndSub
PublicSubFirst0_step()
DimiAsInteger
mainfrm.Picture1.Cls
'画回转中心
x0=230:
y0=300
mainfrm.Picture1.Circle(x0,y0),10,&HFFFF&
'画坐标轴
mainfrm.linX.Y1=PointXY(0,2):
mainfrm.linX.Y2=PointXY(0,2)
mainfrm.linY.Y1=PointXY(0,2):
mainfrm.linY.Y2=PointXY(0,2)+200
'O
(1)=linX.X1:
O
(2)=linX.Y1
mainfrm.Label0.Top=O
(2)-10
mainfrm.lab_t.Top=O
(2)+30
'画基圆
mainfrm.Picture1.DrawWidth=1
mainfrm.Picture1.Circle(x0,y0),r0,&HFF&
'位移线图
mainfrm.Picture1.DrawWidth=3
Fori=1To360
Ifi=1Thenmainfrm.Picture1.PSet(O
(1),O
(2)),&HFF&'
mainfrm.Picture1.Line-(XY(i,1),XY(i,2)),&HFF&
Next
mainfrm.Line1.Visible=True:
mainfrm.Line2.Visible=True
mainfrm.Label1.Visible=True
mainfrm.Lineh1.Visible=True
mainfrm.lab_h.Visible=True
mainfrm.Lineh2.Visible=True
mainfrm.Line3.Visible=True
mainfrm.Line4.Visible=True
mainfrm.Label3.Visible=True
mainfrm.Line5.Visible=True
mainfrm.Label4.Visible=True
'画偏距圆
mainfrm.Picture1.DrawWidth=1
mainfrm.Picture1.Circle(x0,y0),e,&HFF&
EndSub
PublicSubFirst_Step()
mainfrm.Picture1.Line(x0,y0)-(PointXY(0,1),PointXY(0,2)),&HFFFF00
mainfrm.Picture1.Line(x0,y0)-(PointXY(δ0,1),PointXY(δ0,2)),&HFF00FF
mainfrm.Picture1.Line(x0,y0)-(PointXY(δ0+δ1,1),PointXY(δ0+δ1,2)),&HFF00FF
mainfrm.Picture1.Line(x0,y0)-(PointXY(δ0+δ1+δ2,1),PointXY(δ0+δ1+δ2,2)),&HFF00FF
EndSub
PublicSubSecond_Step()
DimjAsInteger
DimiAsInteger
Fori=1Toi等分DT0
Loadmainfrm.lin等分DT0(i)
Loadmainfrm.lin基圆DT0(i)
Loadmainfrm.lin凸轮DT0(i)
Next
Fori=1Toi等分DT2
Loadmainfrm.lin等分DT2(i)
Loadmainfrm.lin基圆DT2(i)
Loadmainfrm.lin凸轮DT2(i)
Next
j=δ0/i等分DT0
Fori=1Toi等分DT0
mainfrm.lin等分DT0(i).X1=XY(i*j,1)
mainfrm.lin等分DT0(i).X2=XY(i*j,1)
mainfrm.lin等分DT0(i).Y1=XY(i*j,2)
mainfrm.lin等分DT0(i).Y2=mainfrm.linX.Y1
mainfrm.lin等分DT0(i).Visible=True
mainfrm.lin基圆DT0(i).X1=基圆XY(i*j,1)
mainfrm.lin基圆DT0(i).X2=偏距圆XY(i*j,1)
mainfrm.lin基圆DT0(i).Y1=基圆XY(i*j,2)
mainfrm.lin基圆DT0(i).Y2=偏距圆XY(i*j,2)
mainfrm.lin基圆DT0(i).Visible=True
mainfrm.lin凸轮DT0(i).X1=PointXY(i*j,1)
mainfrm.lin凸轮DT0(i).X2=基圆XY(i*j,1)
mainfrm.lin凸轮DT0(i).Y1=PointXY(i*j,2)
mainfrm.lin凸轮DT0(i).Y2=基圆XY(i*j,2)
'lin凸轮DT0(i).Visible=True
Nexti
j=δ2/i等分DT2
Fori=1Toi等分DT2
mainfrm.lin等分DT2(i).X1=XY(δ0+δ1+(i-1)*j,1)
mainfrm.lin等分DT2(i).X2=XY(δ0+δ1+(i-1)*j,1)
mainfrm.lin等分DT2(i).Y1=XY(δ0+δ1+(i-1)*j,2)
mainfrm.lin等分DT2(i).Y2=mainfrm.linX.Y1
mainfrm.lin等分DT2(i).Visible=True
mainfrm.lin基圆DT2(i).X1=基圆XY(δ0+δ1+(i-1)*j,1)
mainfrm.lin基圆DT2(i).X2=偏距圆XY(δ0+δ1+(i-1)*j,1)
mainfrm.lin基圆DT2(i).Y1=基圆XY(δ0+δ1+(i-1)*j,2)
mainfrm.lin基圆DT2(i).Y2=偏距圆XY(δ0+δ1+(i-1)*j,2)
mainfrm.lin基圆DT2(i).Visible=True
mainfrm.lin凸轮DT2(i).X1=PointXY(δ0+δ1+(i-1)*j,1)
mainfrm.lin凸轮DT2(i).X2=基圆XY(δ0+δ1+(i-1)*j,1)
mainfrm.lin凸轮DT2(i).Y1=PointXY(δ0+δ1+(i-1)*j,2)
mainfrm.lin凸轮DT2(i).Y2=基圆XY(δ0+δ1+(i-1)*j,2)
'lin凸轮DT2(i).Visible=True
Nexti
EndSub
PublicSubThird_Step()
mainfrm.Timer2.Enabled=True
EndSub
PublicSubForth_step()
mainfrm.Timer2.Enabled=False
Me.Enabled=False
mainfrm.cmd设置.Enabled=False
mainfrm.cmdReset.Enabled=False
mainfrm.cmd继续.Enabled=False
mainfrm.cmd设计.Enabled=False
mainfrm.Timer3.Enabled=True
EndSub
Frm偏置设计的代码:
OptionExplicit
PrivateSubcmdSixth_Click()
DimiAsInteger
Text1.Text="6.以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线。
"
mainfrm.Picture1.DrawWidth=1
Fori=0To360Step10
mainfrm.Picture1.Circle(PointXY(i,1),PointXY(i,2)),r1,&HFFFFC0
Next
mainfrm.Picture1.DrawWidth=3
mainfrm.Picture1.PSet(FactPXY(0,1),FactPXY(0,2))
Fori=1To360Step1
mainfrm.Picture1.Line-(FactPXY(i,1),FactPXY(i,2)),&H80FF&
Next
EndSub
PrivateSubCommand_Click()
Text1.Text="1.按比例画位移线图、基圆和偏距圆,并标明各运动角。
"
First0_step
EndSub
PrivateSubCommand1_Click()
Text1.Text="2.延长从动件,与偏距圆相切,以此为始点在偏距圆上作出各运动角。
"
First_Step
EndSub
PrivateSubCommand2_Click()
DimiAsInteger
Text1.Text="3.将推程运动角和回程运动角分成若干等份,画等分线与偏距圆交点的切线,与基圆相交。
"
Ifi等分DT0<>0Then
Fori=1Toi等分DT0
Unloadmainfrm.lin等分DT0(i)
Unloadmainfrm.lin基圆DT0(i)
Unloadmainfrm.lin凸轮DT0(i)
Next
EndIf
Ifi等分DT2<>0Then
Fori=1Toi等分DT2
Unloadmainfrm.lin等分DT2(i)
Unloadmainfrm.lin基圆DT2(i)
Unloadmainfrm.lin凸轮DT2(i)
Next
EndIf
frm等分.ShowvbModal
Ifi等分DT0*i等分DT2=0ThenExitSub
Second_Step
EndSub
PrivateSubCommand3_Click()
Text1.Text="4.延长各切线,延长线段长度与位移线图对应等分线段长度相等。
"
Third_Step
EndSub
PrivateSubCommand4_Click()
Ifr1=0Then
Text1.Text="5.顺次光滑连接各点,得凸轮轮廓。
"
mainfrm.Picture1.DrawWidth=3
Else
Text1.Text="5.顺次光滑连接各点,得凸轮理论轮廓曲线。
"
mainfr