首页 计算机辅助设计VB设计凸轮轮廓曲线机械原理课程设计

计算机辅助设计VB设计凸轮轮廓曲线机械原理课程设计

举报
开通vip

计算机辅助设计VB设计凸轮轮廓曲线机械原理课程设计 课程设计报告 课程设计题目:计算机辅助设计基于Visual Basic6.0设计凸轮轮廓曲线 学生姓名:席翔 专 业:机械工程及其自动化 班 级:机械1101班 指导教师:刘衍平 2013年 07 月 0 1日 计算机辅助设计VB设计凸轮轮廓曲线(本人课程设计现整理包括界面和代码,为其他做相关设计的同学提供参考) 一、前言:凸轮机构是工程中用于实现机械化和自动化的一种重要驱动和控制机构,凸轮机构结构简单、紧凑,但能在实现控制功能的同时传递较大的功率。因此,凸轮机构在生产中具有无可替...

计算机辅助设计VB设计凸轮轮廓曲线机械原理课程设计
课程设计 报告 软件系统测试报告下载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 到此就全部结束了,若想要源文件可与作者联系!
本文档为【计算机辅助设计VB设计凸轮轮廓曲线机械原理课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
金水文库
鑫淼网络科技有限公司主要经营:PPT设计 、课件制作,软文策划、合同简历设计、计划书策划案、各类模板等。公司秉着用户至上的原则服务好每一位客户
格式:doc
大小:2MB
软件:Word
页数:31
分类:企业经营
上传时间:2019-02-02
浏览量:11