课程设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
课程设计
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目:计算机辅助设计基于Visual Basic6.0设计凸轮轮廓曲线
学生姓名:席翔
专 业:机械工程及其自动化
班 级:机械1101班
指导教师:刘衍平
2013年 07 月 0 1日
计算机辅助设计VB设计凸轮轮廓曲线(本人课程设计现整理包括界面和代码,为其他做相关设计的同学提供参考)
一、前言:凸轮机构是工程中用于实现机械化和自动化的一种重要驱动和控制机构,凸轮机构结构简单、紧凑,但能在实现控制功能的同时传递较大的功率。因此,凸轮机构在生产中具有无可替代的优越性,尤其在高速度、高精度传动与分度机构及引导机构中,更有突出的
优点。本文通过凸轮机构运动参数理论计算,建立凸轮机构数学模型,利用Visual Basic 实
现面向对象化的编程。首先,查找有关凸轮机构运动参数理论计算的书籍和资料,了解凸轮机构设计的方法,建立凸轮机构参数数学模型。然后,在Visual Basic 6.0 软件中,对凸轮机构参数设计进行编程,通过VB 编程画出凸轮机构的位移曲线、速度曲线、加速度曲线及凸轮轮廓曲线,并将VB 源程序打包成可执行程序。
二、背景:凸轮机构是工程中用于实现机械化和自动化的一种重要驱动和控制机构,在轻工、纺织、食品、医药、印刷、
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
零件制造、交通运输等领域运行的工作机械中获得广泛应用。
为了提高产品的质量和生产率,对机械设备的性能指标提出更高的要求,就凸轮机构而言,
必须进一步提高其设计水平,在解析法的基础上开展计算机辅助设计的研究和推广应用。
凸轮机构结构简单、紧凑,但能在实现控制功能的同时传递较大的功率。因此,凸轮
机构在生产中具有无可替代的优越性,尤其在高速度、高精度传动与分度机构及引导机构
中,更有突出的优点。
三、我国情况:近十多年来,我国无论是在凸轮机构的理论和应用研究,还是在凸轮机构的产品开发和制造方面,都已取得了很大的进步,就理论研究方面而言,已达到了世界先进水平。在凸轮机构制造方面,与发达国家相比,还有一定的差距。究其原因,一方面,我国的机械制造业的总体水平不高,缺乏精密的关键设备, 自主研制和改造的设备其精度、刚度和可靠性都比较差,在材质、热处理和工艺等方面还存在不少问题;另一方面,从研究单位
到企业在制造方面所投入的财力和人力远远不足,也未引起有关部门的重视。如果这方面
再不下大力气,我国的凸轮机构的研究水平还将长期落后于世界先进水平。
四、凸轮机构运动参数:图2-1 所示为一对心直动推杆盘形凸轮机构。图中,以凸轮的回转轴心O 为圆心,以凸轮的最小半径0 r 为半径所作的圆称为基圆, 0 r 称为基圆半径。图示凸轮的轮廓由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 变化
的规律。
五、解析法:用作图法设计凸轮廓线,概念清晰,简便易行;但误差大,效率低。对于精度要求较高且结果复杂的凸轮廓线,通常采用解析法设计。尤其是近年来随着计算机与数控加工技术的发展,解析法在凸轮廓线的设计中已得到了广泛的应用。用解析法设计凸轮廓线的关键问题是将凸轮廓线
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示为数学方程,这一过程称为建立数学模型。
用解析法设计一直动滚子从动件盘形凸轮机构。已知凸轮以等角速度ω 逆时针方向转
动,凸轮基圆半径r0,滚子半径r,导向和凸轮轴心间的相对位置及偏距e,从动件的运动规律
s s( )。(1) 理论廓线方程过凸轮的回转中心O 建立直角坐标系XOY,如图2-9 所示,设推程开始时从动件滚子中心处于B0 点,B0 即为凸轮理论廓线的起始点。当凸轮逆时针转过角时,应用反转法,假设凸轮不动,则从动件与导路一起沿 方向反转δ 角,处于B 位置。设对应此过程滚子中心按已知的运动规律产生的位移为s=s。由作图法可知此时滚子中心点B 即为凸轮理论廓线上的点。B 点在坐标系中的表达式为:
六、VB简介:Visual Basic(简称VB)是面向对象可视化的程序设计语言,具有良好的交互式界面。
它使用起来操作方便、简单易懂,即使用户从来没有接触过编程,但只要会使用Windows
操作系统,就可以很快学会怎样使用Visual Basic 去开发一个简单但功能完整的Windows
应用程序[13]-[17]。
传统的程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过
程中看不到界面的实际效果,只有在运行程序时才能观察到。如果对界面的效果不满意,
就必须回到程序中重新设计,这往往需要反复多次,从而大大降低了编程效率。
VB 采用了可视化的程序设计方法,利用系统提供的大量可视化控件,可以直接绘制用
户图形界面,并可直观、动态地调整界面,不必再用大量程序代码来描述界面元素的外观
和位置,从而克服了传统编辑模式,提高了编程效率。用Visual Basic 开发程序,就好比
盖房子,系统提供的可视化控件好比盖房子用的砖和瓦等原料,通过合理的搭配组合,可
以方便地构造出所需的应用程序。
VB 综合运用了Basic 语言和可视化设计工具,巧妙地将Windows 应用程序编程的复杂
性封装起来,既没有牺牲Windows 应用程序的特点,又提供了编程的简易性。
Visual Basic 的程序开发过程基本可分为八个步骤:
① 在VB 中创建一个新的工程;
② 建立应用程序窗体(即用户界面);
③ 在窗体中绘制所需的控制对象;
④ 设置窗体和控件的属性;
⑤ 为需要响应用户操作的对象编写事件过程(即编程);
⑥ 运行及调试应用程序;
⑦ 保存工程;
⑧ 编译工程,生生成可执行的应用程序。
七、界面设计:说到程序当然要考虑两个方面的因素,第一就是代码,第二就是界面,我们力求界面友好,程序清晰客观。下面是界面部分:
(1)首先双击运行程序出现如下界面:
(2)针对查看3-4题目及位移线图:
(3)根据题中数据进行参数设置:
(4)第一步:按比例画位移线图、基圆和偏距圆,并标明各运动角:
(5)第二步:延长从动件,与偏距圆相切,以此为始点在偏距圆上做出各运动角:
(6)第三步:将推程运动角和回程运动角分成若干等份,画等分线与偏距圆交点的切线,与基圆相交:
(7)第四步:延长各切线,延长线段长度与位移线图对应等分线段长度相等:
(8)第五步:顺次光滑连接各点,得凸轮理论轮廓曲线:
(9)第六步:以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线:
(10)第七步:可以进行动画演示:
八、代码设计:
Form1的代码:
Option Explicit
Private Sub Command1_Click()
Form2.Show
End Sub
Private Sub Command2_Click()
Form1.Hide
End Sub
Form2的代码:
Option Explicit
Private Sub Command1_Click()
Form2.Hide
End Sub
Frm等分的代码:
Private Sub Command1_Click()
i等分DT0 = Val(frm等分.Text1.Text)
i等分DT2 = Val(frm等分.Text2.Text)
Unload Me
End Sub
Frm对心设计的代码:
Option Explicit
Private Sub cmdFifth_Click()
Dim i As Integer
Text1.Text = "5.以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线。。"
mainfrm.Picture1.DrawWidth = 1
For i = 0 To 360 Step 10
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))
For i = 1 To 360 Step 1
'If i = 0 Then
mainfrm.Picture1.Line -(FactPXY(i, 1), FactPXY(i, 2)), &H80FF&
Next
End Sub
Private Sub cmdSixth_Click()
Unload Me
End Sub
Private Sub Command_Click()
mainfrm.init1
Text1.Text = "1.按比例画位移线图和基圆,并标明各运动角。"
First0_step
First_Step
End Sub
Private Sub Command2_Click()
Dim i As Integer
Text1.Text = "2.将推程运动角和回程运动角分成若干等份。"
If i等分DT0 <> 0 Then
For i = 1 To i等分DT0
Unload mainfrm.lin等分DT0(i)
Unload mainfrm.lin基圆DT0(i)
Unload mainfrm.lin凸轮DT0(i)
Next
End If
If i等分DT2 <> 0 Then
For i = 1 To i等分DT2
Unload mainfrm.lin等分DT2(i)
Unload mainfrm.lin基圆DT2(i)
Unload mainfrm.lin凸轮DT2(i)
Next
End If
frm等分.Show vbModal
If i等分DT0 * i等分DT2 = 0 Then Exit Sub
Second_Step
End Sub
Private Sub Command3_Click()
Text1.Text = "3.延长基圆上各等分线,延长线段长度与位移线图对应等分线段长度相等。"
Third_Step
End Sub
Private Sub Command4_Click()
If r1 = 0 Then
Text1.Text = "4.顺次光滑连接各点,得凸轮轮廓。"
mainfrm.Picture1.DrawWidth = 3
Else
Text1.Text = "4.顺次光滑连接各点,得凸轮理论轮廓曲线。"
mainfrm.Picture1.DrawWidth = 1
End If
Forth_step
End Sub
Public Sub First0_step()
Dim i As Integer
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
For i = 1 To 360
If i = 1 Then mainfrm.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&
End Sub
Public Sub First_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
End Sub
Public Sub Second_Step()
Dim j As Integer
Dim i As Integer
For i = 1 To i等分DT0
Load mainfrm.lin等分DT0(i)
Load mainfrm.lin基圆DT0(i)
Load mainfrm.lin凸轮DT0(i)
Next
For i = 1 To i等分DT2
Load mainfrm.lin等分DT2(i)
Load mainfrm.lin基圆DT2(i)
Load mainfrm.lin凸轮DT2(i)
Next
j = δ0 / i等分DT0
For i = 1 To i等分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
Next i
j = δ2 / i等分DT2
For i = 1 To i等分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
Next i
End Sub
Public Sub Third_Step()
mainfrm.Timer2.Enabled = True
End Sub
Public Sub Forth_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
End Sub
Frm偏置设计的代码:
Option Explicit
Private Sub cmdSixth_Click()
Dim i As Integer
Text1.Text = "6.以理论轮廓线上各点为圆心,以滚子半径为半径作圆,所得包络线为凸轮实际轮廓曲线。"
mainfrm.Picture1.DrawWidth = 1
For i = 0 To 360 Step 10
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))
For i = 1 To 360 Step 1
mainfrm.Picture1.Line -(FactPXY(i, 1), FactPXY(i, 2)), &H80FF&
Next
End Sub
Private Sub Command_Click()
Text1.Text = "1.按比例画位移线图、基圆和偏距圆,并标明各运动角。"
First0_step
End Sub
Private Sub Command1_Click()
Text1.Text = "2.延长从动件,与偏距圆相切,以此为始点在偏距圆上作出各运动角。"
First_Step
End Sub
Private Sub Command2_Click()
Dim i As Integer
Text1.Text = "3.将推程运动角和回程运动角分成若干等份,画等分线与偏距圆交点的切线,与基圆相交。"
If i等分DT0 <> 0 Then
For i = 1 To i等分DT0
Unload mainfrm.lin等分DT0(i)
Unload mainfrm.lin基圆DT0(i)
Unload mainfrm.lin凸轮DT0(i)
Next
End If
If i等分DT2 <> 0 Then
For i = 1 To i等分DT2
Unload mainfrm.lin等分DT2(i)
Unload mainfrm.lin基圆DT2(i)
Unload mainfrm.lin凸轮DT2(i)
Next
End If
frm等分.Show vbModal
If i等分DT0 * i等分DT2 = 0 Then Exit Sub
Second_Step
End Sub
Private Sub Command3_Click()
Text1.Text = "4.延长各切线,延长线段长度与位移线图对应等分线段长度相等。"
Third_Step
End Sub
Private Sub Command4_Click()
If r1 = 0 Then
Text1.Text = "5.顺次光滑连接各点,得凸轮轮廓。"
mainfrm.Picture1.DrawWidth = 3
Else
Text1.Text = "5.顺次光滑连接各点,得凸轮理论轮廓曲线。"
mainfrm.Picture1.DrawWidth = 1
End If
Forth_step
End Sub
Public Sub First0_step()
Dim i As Integer
mainfrm.Picture1.Cls
'画回转中心
mainfrm.Picture1.DrawWidth = 1
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
For i = 1 To 360
If i = 1 Then mainfrm.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&
End Sub
Public Sub First_Step()
mainfrm.Picture1.DrawWidth = 2
mainfrm.Picture1.Line (PointXY(0, 1), PointXY(0, 2))-(偏距圆XY(0, 1), 偏距圆XY(0, 2)), &HFFFF00
mainfrm.Picture1.DrawWidth = 1
mainfrm.Picture1.Line (x0, y0)-(偏距圆XY(0, 1), 偏距圆XY(0, 2)), &HFFFF00
mainfrm.Picture1.Line (x0, y0)-(偏距圆XY(δ0, 1), 偏距圆XY(δ0, 2)), &HFFFF00
mainfrm.Picture1.Line (x0, y0)-(偏距圆XY(δ0 + δ1, 1), 偏距圆XY(δ0 + δ1, 2)), &HFFFF00
mainfrm.Picture1.Line (x0, y0)-(偏距圆XY(δ0 + δ1 + δ2, 1), 偏距圆XY(δ0 + δ1 + δ2, 2)), &HFFFF00
End Sub
Public Sub Second_Step()
Dim j As Integer
Dim i As Integer
For i = 1 To i等分DT0
Load mainfrm.lin等分DT0(i)
Load mainfrm.lin基圆DT0(i)
Load mainfrm.lin凸轮DT0(i)
Next
For i = 1 To i等分DT2
Load mainfrm.lin等分DT2(i)
Load mainfrm.lin基圆DT2(i)
Load mainfrm.lin凸轮DT2(i)
Next
j = δ0 / i等分DT0
For i = 1 To i等分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.Picture1.Line (x0, y0)-(偏距圆XY(i * j, 1), 偏距圆XY(i * j, 2)), &HFFFFFF
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
Next i
j = δ2 / i等分DT2
For i = 1 To i等分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.Picture1.Line (x0, y0)-(偏距圆XY(δ0 + δ1 + (i - 1) * j, 1), _
偏距圆XY(δ0 + δ1 + (i - 1) * j, 2)), &HFFFFFF
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
Next i
mainfrm.Picture1.Line (偏距圆XY(δ0 + δ1 + δ2, 1), 偏距圆XY(δ0 + δ1 + δ2, 2)) _
-(基圆XY(δ0 + δ1 + δ2, 1), 基圆XY(δ0 + δ1 + δ2, 2)), &HFFFFFF
End Sub
Public Sub Third_Step()
mainfrm.Timer2.Enabled = True
End Sub
Public Sub Forth_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
End Sub
Frm设置的代码:
Option Explicit
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub cmd确定_Click()
r0 = txt_r0
h = txt_h
δ0 = txt_δ0
δ1 = txt_δ1
δ2 = txt_δ2
δ3 = txt_δ3
r1 = txt_r1
e = txt_e
If δ0 + δ1 + δ2 + δ3 <> 360 Then
MsgBox "给定的四个运动角之和应为360度"
txt_δ3 = 360 - δ0 - δ1 - δ2
txt_δ3.SetFocus
End If
Call mainfrm.init1
End Sub
Private Sub Form_Load()
txt_r0 = r0
txt_h = h
txt_δ0 = δ0
txt_δ1 = δ1
txt_δ2 = δ2
txt_δ3 = δ3
txt_r1 = r1
txt_e = e
End Sub
Frm凸轮设计的代码:
Option Explicit
Dim ii As Integer
Dim jj As Integer
Dim δ As Single
Public Sub cmdReset_Click()
Call init1
End Sub
Private Sub cmd继续_Click()
Dim i As Integer
If δ = 0 Then
Line1.Visible = False
Line2.Visible = False
Line3.Visible = False
Line4.Visible = False
Line5.Visible = False
Lineh1.Visible = False
Lineh2.Visible = False
Label1.Visible = False
Label2.Visible = False
Label3.Visible = False
Label4.Visible = False
lab_h.Visible = False
If i等分DT0 <> 0 Then
For i = 1 To i等分DT0
lin凸轮DT0(i).Visible = False
lin基圆DT0(i).Visible = False
lin等分DT0(i).Visible = False
Next
End If
If i等分DT2 <> 0 Then
For i = 1 To i等分DT2
lin凸轮DT2(i).Visible = False
lin基圆DT2(i).Visible = False
lin等分DT2(i).Visible = False
Next
End If
End If
cmd继续.Caption = "暂停"
If Timer1.Enabled Then cmd继续.Caption = "继续"
Timer1.Enabled = Not Timer1.Enabled
End Sub
Private Sub cmd设计_Click()
Dim i As Integer
'Cls
Call init1
' If i等分DT0 <> 0 Then
' For i = 1 To i等分DT0
' lin凸轮DT0(i).Visible = False
' lin基圆DT0(i).Visible = False
' lin等分DT0(i).Visible = False
' Next
' End If
'
' If i等分DT2 <> 0 Then
' For i = 1 To i等分DT2
' lin凸轮DT2(i).Visible = False
' lin基圆DT2(i).Visible = False
' lin等分DT2(i).Visible = False
' Next
' End If
If e = 0 Then
If r1 = 0 Then frm对心设计.cmdFifth.Enabled = False
frm对心设计.Show
Else
If r1 = 0 Then frm偏置设计.cmdSixth.Enabled = False
frm偏置设计.Show
End If
End Sub
Private Sub cmd设置_Click()
frm设置.Show
End Sub
Private Sub cmd退出_Click()
End
End Sub
Private Sub Command1_Click()
Form1.Show
End Sub
Private Sub Form_Load()
'Me.Height = 8000
'Me.Width = 8000
'Picture1.DrawWidth = 1
Call init1
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Timer1_Timer()
Dim i As Integer
Picture1.Cls
'画基圆和回转中心
Picture1.DrawWidth = 1
Picture1.Circle (x0, y0), r0, &HFF&
Picture1.Circle (x0, y0), 10, &HFFFF&
'画凸轮
For i = 0 To 360 Step 1
'理论轮廓
CurrentXY(1) = PointXY(i, 1) - x0
CurrentXY(2) = PointXY(i, 2) - y0
PointXY(i, 1) = CurrentXY(1) * Cosδθ - CurrentXY(2) * sinδθ + x0
PointXY(i, 2) = CurrentXY(1) * sinδθ + CurrentXY(2) * Cosδθ + y0
Picture1.DrawWidth = 1
If i = 0 Then
Picture1.PSet (PointXY(i, 1), PointXY(i, 2))
Else
Picture1.Line (PointXY(i - 1, 1), PointXY(i - 1, 2))-(PointXY(i, 1), PointXY(i, 2)), &H80FF&
'Picture1.Line -(PointXY(i, 1), PointXY(i, 2)), &H80FF&
End If
If ((i = 0) Or (i = δ0) Or (i = δ0 + δ1) Or (i = δ0 + δ1 + δ2)) Then
Picture1.Line (x0, y0)-(PointXY(i, 1), PointXY(i, 2)), &HFF00FF
End If
'实际轮廓
Picture1.DrawWidth = 3
CurrentXY(1) = FactPXY(i, 1) - x0
CurrentXY(2) = FactPXY(i, 2) - y0
FactPXY(i, 1) = CurrentXY(1) * Cosδθ - CurrentXY(2) * sinδθ + x0
FactPXY(i, 2) = CurrentXY(1) * sinδθ + CurrentXY(2) * Cosδθ + y0
If i = 0 Then
Picture1.PSet (FactPXY(i, 1), FactPXY(i, 2))
Else
Picture1.Line (FactPXY(i - 1, 1), FactPXY(i - 1, 2))-(FactPXY(i, 1), FactPXY(i, 2)), &H80FF&
End If
Next
'画从动件
δ = δ + δθ
lin从动件.Y1 = PointXY(δ, 2) + L
lin从动件.Y2 = PointXY(δ, 2)
lin从动件.X1 = PointXY(δ, 1)
lin从动件.X2 = PointXY(δ, 1)
'滚子
If r1 <> 0 Then
Picture1.Circle (lin从动件.X2, lin从动件.Y2), r1, &HFFFF&
Picture1.Circle (lin从动件.X2, lin从动件.Y2), r1, &HFFFF&
Picture1.Circle (lin从动件.X2, lin从动件.Y2), 5, &HFFFF00
End If
'画位移线图
For i = 1 To 360
If i = 1 Then Picture1.PSet (O(1), O(2)), &HFF& '
Picture1.DrawWidth = 3
Picture1.Line -(XY(i, 1), XY(i, 2)), &HFF&
Picture1.DrawWidth = 1
Next
Select Case δ
Case δ0
Picture1.Line (lin从动件.X2, lin从动件.Y2)-(XY(δ, 1), XY(δ, 2)), &HFF00FF
Timer1.Enabled = False
Line1.Visible = True: Line2.Visible = True
Label1.Visible = True
Lineh1.Visible = True
Lineh2.Visible = True
lab_h.Visible = True
cmd继续.Caption = "继续"
Case (δ0 + δ1)
Picture1.Line (lin从动件.X2, lin从动件.Y2)-(XY(δ, 1), XY(δ, 2)), &HFF00FF
Timer1.Enabled = False
Line3.Visible = True
Label2.Visible = True
cmd继续.Caption = "继续"
Case (δ0 + δ1 + δ2)
Picture1.Line (lin从动件.X2, lin从动件.Y2)-(XY(δ, 1), XY(δ, 2)), &HFF00FF
Timer1.Enabled = False
Line4.Visible = True
Label3.Visible = True
cmd继续.Caption = "继续"
Case 360
Picture1.Line (lin从动件.X2, lin从动件.Y2)-(XY(0, 1), XY(0, 2)), &HFF00FF
Timer1.Enabled = False
Line5.Visible = True
Label4.Visible = True
δ = 0
cmd继续.Caption = "动画演示"
End Select
End Sub
Private Sub Timer2_Timer()
If ii < i等分DT0 Then
ii = ii + 1
lin等分DT0(ii).BorderColor = &HFFFF&
lin等分DT0(ii).BorderWidth = 2
lin凸轮DT0(ii).BorderColor = &HFFFF&
lin凸轮DT0(ii).BorderWidth = 2
lin凸轮DT0(ii).Visible = True
Timer2.Enabled = False
End If
If ii = i等分DT0 And jj < i等分DT2 Then
jj = jj + 1
lin等分DT2(jj).BorderColor = &HFFFF&
lin等分DT2(jj).BorderWidth = 2
lin凸轮DT2(jj).BorderColor = &HFFFF&
lin凸轮DT2(jj).BorderWidth = 2
lin凸轮DT2(jj).Visible = True
Timer2.Enabled = False
End If
If jj = i等分DT2 Then
End If
End Sub
Private Sub Timer3_Timer()
δ = δ + 1
If δ = 1 Then Picture1.Line (PointXY(0, 1), PointXY(0, 2))-(PointXY(δ, 1), PointXY(δ, 2)), &H80FF&
Picture1.Line -(PointXY(δ, 1), PointXY(δ, 2)), &H80FF&
If δ = 360 Then
Timer3.Enabled = False
frm对心设计.Enabled = True
frm偏置设计.Enabled = True
cmd设置.Enabled = True
cmdReset.Enabled = True
cmd继续.Enabled = True
cmd设计.Enabled = True
δ = 0
End If
End Sub
Public Sub init1()
Dim i As Integer
Picture1.Cls
ii = 0: jj = 0
δ = 0
Line1.Visible = False
Line2.Visible = False
Line3.Visible = False
Line4.Visible = False
Line5.Visible = False
Lineh1.Visible = False
Lineh2.Visible = False
Label1.Visible = False
Label2.Visible = False
Label3.Visible = False
Label4.Visible = False
lab_h.Visible = False
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
If i等分DT0 <> 0 Then
For i = 1 To i等分DT0
Unload lin凸轮DT0(i)
Unload lin基圆DT0(i)
Unload lin等分DT0(i)
Next
End If
i等分DT0 = 0
If i等分DT2 <> 0 Then
For i = 1 To i等分DT2
Unload lin凸轮DT2(i)
Unload lin基圆DT2(i)
Unload lin等分DT2(i)
Next
End If
i等分DT2 = 0
sinδθ = Sin(δθ * PI / 180)
Cosδθ = Cos(δθ * PI / 180)
Picture1.Cls
'画回转中心
Picture1.DrawWidth = 1
x0 = 230: y0 = 300
Picture1.Circle (x0, y0), 10, &HFFFF&
'画基圆
Picture1.Circle (x0, y0), r0, &HFF&
'画凸轮
Call 计算凸轮轮廓上点
Picture1.DrawWidth = 1
For i = 0 To 360
Picture1.Line -(PointXY(i, 1), PointXY(i, 2)), &H80FF&
Next
Picture1.DrawWidth = 3
For i = 0 To 360
Picture1.Line -(FactPXY(i, 1), FactPXY(i, 2)), &H80FF&
Next
'Picture1.DrawWidth = 1
'画从动件
lin从动件.Y1 = PointXY(0, 2) + L
lin从动件.Y2 = PointXY(0, 2)
lin从动件.X1 = PointXY(0, 1)
lin从动件.X2 = PointXY(0, 1)
Shape1.Left = lin从动件.X1 - 35
Shape2.Left = lin从动件.X1 + 10
'Picture1.FillStyle = 0
'Picture1.FillColor = &HFFFF&
If r1 <> 0 Then
Picture1.Circle (lin从动件.X2, lin从动件.Y2), r1, &HFFFF&
Picture1.Circle (lin从动件.X2, lin从动件.Y2), r1, &HFFFF&
Picture1.Circle (lin从动件.X2, lin从动件.Y2), 5, &HFFFF00
End If
'画坐标轴
linX.Y1 = PointXY(0, 2): linX.Y2 = PointXY(0, 2)
linY.Y1 = PointXY(0, 2): linY.Y2 = PointXY(0, 2) + 200
'O(1) = linX.X1: O(2) = linX.Y1
Label0.Top = O(2) - 10
lab_t.Top = O(2) + 30
For i = 0 To 360
Picture1.DrawWidth = 3
If i = 0 Then Picture1.PSet (O(1), O(2)), &HFF& '
Picture1.Line -(XY(i, 1), XY(i, 2)), &HFF&
'Picture1.DrawWidth = 1
Next
Line1.X1 = O(1): Line1.Y1 = O(2)
Line1.X2 = O(1): Line1.Y2 = O(2) - 40
Line2.X1 = XY(δ0, 1): Line2.Y1 = XY(δ0, 2)
Line2.X2 = XY(δ0, 1): Line2.Y2 = O(2) - 40
Label1.Top = O(2) - 10
Label1.Left = (Line1.X2 + Line2.X2) / 2 - 20
Line3.X1 = XY(δ0 + δ1, 1): Line3.Y1 = XY(δ0 + δ1, 2)
Line3.X2 = XY(δ0 + δ1, 1): Line3.Y2 = O(2) - 40
Label2.Top = O(2) - 10
Label2.Left = (Line2.X2 + Line3.X2) / 2 - 20
Line4.X1 = XY(δ0 + δ1 + δ2, 1): Line4.Y1 = XY(δ0 + δ1 + δ2, 2)
Line4.X2 = XY(δ0 + δ1 + δ2, 1): Line4.Y2 = O(2) - 40
Label3.Top = O(2) - 10
Label3.Left = (Line3.X2 + Line4.X2) / 2 - 20
Line5.X1 = XY(360, 1): Line5.Y1 = XY(360, 2)
Line5.X2 = XY(360, 1): Line5.Y2 = O(2) - 40
Label4.Top = O(2) - 10
Label4.Left = (Line4.X2 + Line5.X2) / 2 - 20
lab_h.Left = O(1) - 20: lab_h.Top = (O(2) + XY(δ0, 2)) / 2 + 10
Lineh1.X1 = O(1) - 30: Lineh1.Y1 = XY(δ0, 2)
Lineh1.X2 = XY(δ0, 1): Lineh1.Y2 = XY(δ0, 2)
Lineh2.X1 = O(1) - 30: Lineh2.Y1 = O(2)
Lineh2.X2 = O(1): Lineh2.Y2 = O(2)
End Sub
公用模块:
Option Explicit
Public Const PI = 3.1416
Public r0 As Single '基圆半径
Public x0 As Single, y0 As Single '圆心位置
Public h As Integer '升程
Public δ0 As Integer
Public δ1 As Integer
Public δ2 As Integer
Public δ3 As Integer
Public e As Single '偏心距
Public r1 As Single '滚子半径
Public L As Integer '从动件长度
Public DeltaSita As Single '角度递增值
Public δθ As Single '角度递增值
Public Cosδθ As Single
Public sinδθ As Single
Public CurrentXY(1 To 2) As Single '当前点的坐标
Public PointXY(360, 2) As Single '凸轮理论轮廓上点的坐标
Public FactPXY(360, 2) As Single '凸轮实际轮廓上点的坐标
Public XY(360, 2) As Single '位移线图上点的坐标
Public 基圆XY(360, 2) As Single '基圆上点的坐标
Public 偏距圆XY(360, 2) As Single '基圆上点的坐标
Public O(1 To 2) As Integer '坐标轴原点
Public i等分DT0 As Integer
Public i等分DT2 As Integer
Public Sub 计算凸轮轮廓上点()
Dim Sita As Double
Dim s As Single '位移
'Dim r As Single '凸轮曲率半径
Dim i As Integer
Dim s0 As Single
Dim δ As Single
Dim dx_DT As Single 'dx/dδ
Dim dy_DT As Single 'dy/dδ
Dim sinθ As Single
Dim cosθ As Single
s0 = Sqr(r0 ^ 2 - e ^ 2)
'偏距圆上点
For i = 0 To 360
δ = i * PI / 180
偏距圆XY(i, 1) = x0 + e * Cos(-δ)
偏距圆XY(i, 2) = y0 + e * Sin(-δ)
Next
'基圆上点
For i = 0 To 360
δ = i * PI / 180
基圆XY(i, 1) = 偏距圆XY(i, 1) + s0 * Sin(δ)
基圆XY(i, 2) = 偏距圆XY(i, 2) + s0 * Cos(δ)
Next
'凸轮上点
For i = 0 To 360
δ = i * PI / 180
'推程等加速等减速;回程简谐运动
Select Case i
Case 0 To δ0
s = h * i / δ0
dx_DT = Sin(δ) * (h / δ0 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (h / δ0 - e) - (s0 + s) * Sin(δ)
Case (δ0) To (δ0 + δ1)
s = h
dx_DT = Sin(δ) * (-e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1) To (δ0 + δ1 + δ2 / 2)
s = h - 2 * h * (i - δ0 - δ1) ^ 2 / δ2 ^ 2
dx_DT = Sin(δ) * (-4 * h * (i - δ0 - δ1) / δ2 ^ 2 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-4 * h * (i - δ0 - δ1) / δ2 ^ 2 - e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1 + δ2 / 2) To (δ0 + δ1 + δ2)
s = 2 * h - 4 * h * (CSng(i) - δ0 - δ1) / δ2 + 2 * h * ((CSng(i) - δ0 - δ1) / δ2) ^ 2
dx_DT = Sin(δ) * (4 * h * (CSng(i) - δ0 - δ1 - δ2) / δ2 ^ 2 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (4 * h * (CSng(i) - δ0 - δ1 - δ2) / δ2 ^ 2 - e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1 + δ2) To 360
s = 0
dx_DT = Sin(δ) * (-e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-e) - (s0 + s) * Sin(δ)
End Select
'理论轮廓上点
PointXY(i, 1) = x0 + (s0 + s) * Sin(δ) + e * Cos(δ)
PointXY(i, 2) = y0 + (s0 + s) * Cos(δ) - e * Sin(δ)
'实际轮廓上点
sinθ = dx_DT / Sqr(dx_DT ^ 2 + dy_DT ^ 2)
cosθ = -dy_DT / Sqr(dx_DT ^ 2 + dy_DT ^ 2)
FactPXY(i, 1) = PointXY(i, 1) - r1 * cosθ
FactPXY(i, 2) = PointXY(i, 2) - r1 * sinθ
'计算线图上点坐标
O(1) = mainfrm.linX.X1: O(2) = PointXY(0, 2)
XY(i, 1) = O(1) + i: XY(i, 2) = O(2) + s
Next
End Sub
主模块:
Option Explicit
'***************************************
'
' 凸轮机构演示动画
'
' 席翔 2013年7月2日
'
'****************************************
'Option Base 1
Public mainfrm As frm凸轮设计
Sub Main()
r0 = 100
δ0 = 100
δ1 = 60
δ2 = 100
δ3 = 100
h = 90
L = 300
δθ = 10
r1 = 15
e = 30
Set mainfrm = New frm凸轮设计
mainfrm.Show
End Sub
到此就全部结束了,若想要源文件可与作者联系!