机械原理课程设计实例详解(包括源程序)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机械原理课程设计说明书课题名称:新型窗户启闭装置
学院:机电工程学院
专业:机械电子工程
班级:09级01班
小组成员:
指导老师:
课题工作时间:2011.9.1至2011.9.10
前言
机械原理课程设计是使学生较全面、系统巩固和加深机械原理课程的基本原理和方法的重要环节,是培养学生“初步具有确定机械运动方案,分析和设计机械的能力”及“开发创新能力”的一种手段。

其目的是:
1) 以机械系统运动方案设计与拟定为结合点,把机械原理课程中分散于各章的理论和方法融会贯通起来,进一步巩固和加深学生所学的理论知识。

2) 使学生能受到拟定机械运动方案的训练,具有初步的机构选型与组合和确定运动方案的能力。

3) 使学生在了解机械运动的变换与传递及力传递的过程中,对机械的运动、动力分析与设计有一个较完整的概念。

4) 进一步提高学生运算、运用流行软件编写应用程序和技术资料的能力。

5) 通过编写说明书,培养学生表达、归纳、总结和独立思考与分析的能力。

要达到课程设计的目的,必须配以课程设计的具体任务:按照选定的机械总功能要求,分解成分功能,进行机构的选型与组合;设计该机械系统的几种运动方案,对各运动方案进行对比和选择;对选定方案中的机构——连杆机构、凸轮机构、齿轮机构,其他常用机构,组合机构等进行运动分析与参数设计;通过计算机编程,将机构运动循环图在计算机屏幕上动态地显示出来,并给出相应的运动参数值。

机械原理课程设计的主要方法,是采用解析法建立求解问题的数学模型,在此基础上应用目前流行的可视化编程语言(如:VB)编写求解程序,显示所设计机构的运动图形、运动参数值及机构仿真。

摘要:本次课程设计运用解析法建立了所设计的六杆机构的运动特性数学模型,利用Matlab运动仿真求出各铰接点和杆件的运动变化情况。

然后基于Visual Basic程序设计运动仿真,绘出相应铰接点运动特性曲线,并将用解析法基于Matlab环境下运行的结果与Visual Basic程序设计仿真运动值进行比较。


而对此次设计的可行性进行了验证。

另外,基于Visual Basic在进行三维实体模型设计的局限性,我们还运用Solidworks对机构进行了三维实体模型设计,并进行了仿真运动。

由于时间有限,设计中仅运用Cosmosmotion对机构进行了仿真运动及动画制作,而为对机构中各零件进行轨迹跟踪,以及对零件的速度、加速度、作用力、反作用力、力矩以及有限元进行分析。

关键字:平面六杆机构;解析算法;Visual Basic;Matlab;Solidworks;三维建模;运动仿真
Abstract :The curriculum design using established analytical method designed six kinematic characteristics of the mathematical model, calculated using Matlab simulation exercise and the hinge point of the exercise bar changes. Then based on Visual Basic programming motion simulation, draw the corresponding hinge point motion curve, and the analytic method is based on the results of running under Matlab environment with the Visual Basic programming simulation exercise values. And thus the feasibility of the design were verified. In addition, the Visual Basic-based three-dimensional solid model during the design limitations, we use Solidworks for the institutions of the three-dimensional solid model design and simulation exercise. Due to time constraints, we only use Cosmosmotion simulation exercise for institutions and animation, but not in all parts of the body trajectory tracking, as well as parts of the velocity, acceleration, force, reaction force, torque and finite elementanalysis.
Key words:Planar six-bar linkage; resolution algorithm; Visual Basic; Matlab; Solidworks; three-dimensional modeling; motion simulation
目录
第一章综述 (5)
1.1设计题目及目的 (5)
1.2设计内容介绍 (5)
1.3设计机构 (6)
第二章机械系统方案的拟定与运用 (7)
2.1机械系统方案的分析,比较与拟定 (7)
2.1.1 方案一 (7)
2.1.2方案二 (8)
2.1.3方案三 (10)
2.2所选方案的实际运用 (11)
第三章运动分析 (12)
3.1 问题的提出 (12)
3.2 初步分析 (12)
3.2.1约束的分析 (12)
3.2.2运动形式的分析 (13)
3.2.3解析法分析总体思路 (13)
3.3建立机构运动数学模型并分析 (13)
3.3.1建立数学模型 (13)
3.3.2位置分析 (14)
3.3.3速度分析 (17)
3.3.4角速度分析 (18)
3.3.5角加速度分析 (19)
3.3.6 Matlab环境下程序源代码 (19)
第四章动画仿真的制作 (19)
4.1概述 (19)
4.2 Solidworks三维实体模型设计 (20)
4.2.1 Solidworks简介 (20)
4.2.2动画制作原理 (20)
4.2.3动画制作简要过程 (20)
4.3 Visual basic 程序设计 (23)
4.3.1概述 (23)
4.3.2 VB动画制作原理 (24)
4.3.3 程序框架 (24)
4.3.4 界面设计和控件属性设置 (25)
4.3.5 运行结 (26)
4.3.6 程序源代码 (27)
第五章体会小结 (27)
参考文献 (28)
附录 (29)
附录一 VB程序源代码 (29)
附录二 Matlab运动分析程序源代码 (40)
第一章综述
1.1设计题目及目的
设计题目:实用窗户启闭装置
机械原理课程设计的主要目的是为学生在完成课堂教学基本内容后提供一个较完整的从事机械设计初步实践的机会。

1.2设计内容介绍
我们所设计的实用窗户启闭装置所选用的为六杆机构,其功能可以做到使窗户运动时所占空间较小,并且获得有利的传动角,使窗户全开可以从室内擦拭窗户玻璃的两面,全闭时可以完全挡住风雨侵袭。

实用窗户启闭装置使用原理为:当用手推动窗户时通过连杆带动固定导杆上的滑块上下运动,从而使得窗户可以从零度开启到九十度,达到全闭和全开。

并且窗户开启时稳定性很好,不会在风雨等其它事故发生时窗户瞬间关闭而造成事故。

体现出安全、简便、节约空间、方便实用等优点。

1.3设计机构
原动机的运动形式的选择:多杆机构
相对于四杆机构而言,使用多杆机构可以达到以下这些目的:
1.可以获得较小的运动空间
2.取得有利的传动角
3.可以获得较大的机械利益
4.改变从动件的运动特性
5.实现机构从动件带停歇的运动
6.扩大机构从动件的行程
7.使机构从动件的行程可调
8.实现特定要求下的平面引导
第二章机械系统方案的拟定与运用
2.1机械系统方案的分析,比较与拟定
2.1.1 方案一
图2-1
自由度的计算:
=--=-=
323*32*41
F N Ph Pl
该窗户是由简单的四杆机构组成,设计制造比较简单,但其性能有较大是的局限性。

该窗户启闭机构用的是曲柄滑块机构,DOF=1,有一个原动件,采用手动的推拉来实现窗户的关闭,该机构有确定的运动。

下面我们来分析该窗户启闭
器的具体优缺点。

优点:
①能满足窗户启闭的要求,当窗户全开,可以从室内擦拭玻璃窗的两面;
②窗户全关挡住风雨侵蚀,操作机构占据的空间位置小。

缺点:
①但存在很严重的缺陷,当窗户在全开的位置,机构的传动角为0度,窗户启闭均不方便。

综上所述,此方案基本合理但不属于最佳方案,因此不采取此方案。

2.1.2方案二
图2-2
自由度的计算:
=--=-=
F N Ph Pl
323*52*71
该窗户是由六杆杆机构组成且D处运用了两齿轮的齿轮啮合传动(特别说明:a处的手柄一段连着齿轮而齿轮是可以绕着固定铆钉转动的。

),设计制造较复杂,对精度的要求比较高,对材料的强度也有较高要求。

该窗户启闭机构可以
拆分成两个基本结构,即曲柄滑块机构和四杆机构,该窗户启闭器机构DOF=1,有一个原动件,采用手上下摇动手柄来实现窗户的关闭,该机构有确定的运动。

当杆1(窗框)与杆6(窗槛)重合时窗户关闭,杆1与杆6垂直时窗户全开。

下面我们来分析该窗户启闭器的具体优缺点。

优点:
①能满足窗户启闭的要求,当窗户全开,可以从室内擦拭玻璃窗的两面;
②窗户全关挡住风雨侵蚀,操作机构占据的空间位置不大;
③而且摇动手柄来实现窗户的开闭,方便而且操作简单;
④在窗户的全开位置,可以较好解决此时机构传动角为0度的问题。

缺点;
①D处齿轮啮合传动所受的阻力很大,对材料强度要求很高;
②机构较复杂对精度要求较高;
③成本比较高,且部分关键部位容易损坏。

综上所述,此方案不适应大范围推广,故不采取此方案。

2.1.3方案三
图2-3
自由度的计算:
=--=-=
323*52*71
F N Ph Pl
该窗户由简单的六杆机构组成,巧妙的将杆1和杆4通过转动副与滑块5连接在一起,与方案二比较省掉一个滑块使结构相对简单许多,运动形式也变得直观,对材料和精度没特别的要求,只需要满足(AF+AB<EC+CB)。

该窗户启闭机构可以拆分成两个基本结构,即曲柄滑块机构和四杆机构,该窗户启闭器机构DOF=1,有一个原动件,则有确定的运动。

杆2(窗框)向下转动时,关闭时即窗户关闭时滑块向上滑动,当窗户完全关闭时,即杆2和杆6(窗槛)重合。

当窗户全开时两杆垂直,此时滑块向下滑到极限位置(此位置有一挡板)。

下面我们来分析该窗户启闭器的具体优缺点。

优点:
①能满足窗户启闭的要求,当窗户全开,可以从室内擦拭玻璃窗的两面;
②窗户全关挡住风雨侵蚀,操作机构占据的空间位置较小;
③结构简单,运动形式直观,对材料没有特殊要求,即成本较低。

④不存在受力很大的点,不易损坏,耐用。

⑤在窗户的全开位置,可以较好解决此时机构传动角为0度的问题。

缺点:
①开闭窗户时要用手来直接进行推拉,不太方便;
综上所述,该方案无明显缺点,而且成本低,结构较简单,但是能满足使用的要求,有市场价值。

所以我们采取这套方案,后续将对此方案进行详细的分析与研究。

2.2所选方案的实际运用
经过查阅有关市场上的各种窗户结构的资料和实地的考察,我们周围就存在运用了这种机械方案的产品,这种窗户一般运用在学校,机关,办公楼等人多需要保持良好透气的场所。

该窗户可以根据个人的需求控制窗户开合的程度,不必担心因为起风而导致窗户自动关闭,同时这种窗户还可以在一定程度上防止风和雨水倒灌进屋子。

很适用于人多,缺乏管理的公共场合。

第三章运动分析
3.1 问题的提出
图3-1
如图3-1,已知各杆长参数为,L2=25,L3=60,L4=80,L5=75,L6=80,L7=105,
π之间。

试分析摇杆L7以角速度w1绕原点O旋转,且转动角1ϕ范围在0至/4
各铰接点和各杆件的运动特性。

3.2 初步分析
3.2.1约束的分析
由于机构能完全闭合,即摇杆L7可转动到与y轴重合。

所以杆长间有约束L2+L3+L5=L4+L6;
3.2.2运动形式的分析
① 滑块AB 沿机架在竖直方向上下平动;
② OD 杆以角速度w1绕原点O 转动;
③ CD 杆在以角速度w2转动同时,还在竖直方向上平动;
④ BC 杆在以角速度w3绕B 点转动同时,还在竖直方向上平动;
⑤ AE 杆在以角速度w4绕A 点转动同时,还在竖直方向上平动;
3.2.3解析法分析总体思路
在用解析法对机构进行运动特性分析时,应首先建立机构的位置方程,然后将其对时间求一次,二次导数,即可得机构的速度方程和加速度方程。

3.3建立机构运动数学模型并分析
3.3.1建立数学模型
如图3-1所示,为方便起见,取以O 点为原点,y 轴与机架L2共线的直角坐标系。

各杆规定一个矢量指向,且分别以x 轴和y 轴正向为基准,为各杆件取角位移如图。

则各杆件分别构成AEO 和AEDCB 两个封闭的矢量多边形,其封闭矢量方程分别为:
分别向x 和y 轴投影,得代数方程:
5471
71541cos sin cos sin l l l l l ϕϕϕϕ==+
542336142
54613342sin cos cos sin cos sin sin cos l l l l l l l l l ϕϕϕϕϕϕϕϕ++=++=- (1-1)
3.3.2位置分析
据(1-1)可求得:
71
45
sin arccos l l ϕϕ=
为求3ϕ,将(1-2) 改写为: 422335461
42335461sin cos sin cos cos sin cos sin l l l l l l l l l ϕϕϕϕϕϕϕϕ=++-=--
两边平方后相加整理得:
33sin cos 0C ϕϕA +B +=
式中
()
()
()()3546132546122222235645614254612cos sin 2sin cos 2sin 2sin cos l l l l l l l C l l l l l l l l l l ϕϕϕϕϕϕϕϕA =-+B =+-=+++-+-+-

3tan 2x ϕ= ,则
()322sin 1x
x ϕ=+,()()232
1cos 1x x ϕ-=+。

式(1-4) 可化为二次方程:
()()220C x x C B --A -B +=
解得:
32arctan ϕ=
同理,为求2ϕ,将 (1-2) 改写为:
334261254
33425461cos sin cos sin sin cos cos sin l l l l l l l l l ϕϕϕϕϕϕϕϕ=+--=++
两边平方后相加整理得:
22sin cos 0D E F ϕϕ++=
式中
()
()
461254463
2222456356142cos sin 2sin 2sin D l l l l E l l F l l l l l l ϕϕϕϕϕ=--==++-+-
可求得: 22222arctan D D F F ϕ-±+E -=E -
求得2ϕ,3ϕ,4ϕ后,即可求得各铰接点的位置方程及实时位置坐标,表示如下:
C 点:
(),x y C C C 33sin x C l ϕ= 33cos y y C l B ϕ=+
图3-2
A 点:
(),x y A A A 0x A = 17154cos sin y l l l ϕϕA ==
B 点:
(),x y B B B 0x B =
1271542cos sin y l l l l l ϕϕB =+=++
图3-3
D 点:
(),x y D D D ()671sin x D l l ϕ=+ ()671cos y D l l ϕ=+
图3-4
E 点:
(),x y E E E 71sin x E l ϕ= 71cos y E l ϕ=
图3-5
3.3.3速度分析
由前面分析可得
1271542cos sin y l l l l l ϕϕB =+=++,
而11w t ϕ=•,而4ϕ又可由和1ϕ和相应已知长度的杆长表示,即By 是关于t 的函数。

所以,据此写出相应程源代码后在Matlab 中运行后得:
111(1/2)222217**()(7**()*())/(5*(1(7*())/5))L w sin L w cos si dBy V n L L n d s t i b L ϕϕϕϕ-==-- 且生成速度时间图如下所示:
图3-6
3.3.4角速度分析
已知11w t ϕ=•,
且由上面分析已知
22222arctan D D F F ϕ-±+E -=E -,
22232arctan C C ϕA ±A +B -=B -,
同理,如Vb 求解过程,知2ϕ,3ϕ也分别是关于时间t 的函数。

将其分别
对时间t 求一次导数得:
1122()df d w dt dt ϕϕ=
= , 2233()df d w dt dt ϕϕ=
=,
3.3.5角加速度分析 同理,将2ϕ,3ϕ分别对时间t 求二次导数得:
22dw a dt = 3
3dw a dt =
据此写出相应程源代码在Matlab 环境下运行即可得出相应结果
3.3.6 Matlab 环境下程源代码
见附录二
第四章 动画仿真的制作
4.1概述
本次课程设计中,我们先用解析法建立了所设计的六杆机构的运动特性数学模型,利用Matlab 运动仿真求出各铰接点和杆件的运动变化情况。

然后基于VB 运动仿真,绘出相应铰接点运动特性曲线,并将用解析法基于Matlab 环境下运行的结果与VB 仿真运动值进行比较。

进而对此次设计的可行性进行了验证。

另外,基于VB 在进行三维实体模型设计的局限性,我们还运用Solidworks
对机构进行了三维实体模型设计,并进行了仿真运动。

(由于时间有限,我们仅运用cosmosmotion对机构进行了仿真运动及动画制作,而未能对机构中各零件进行轨迹跟踪,以及对零件的速度、加速度、作用力、反作用力、力矩以及有限元进行分析)
4.2 Solidworks三维实体模型设计
4.2.1 Solidworks简介
Solidworks是美国Solidworks公司开发的一款基于特征的三维CAD软件,具有参数话设计功能。

Solidworks功能强大,易学易用,利用它可以快捷、方便地按自己的设计思想绘制出草图及三维实体模型。

在设计过程中,可以运用特征、尺寸及约束功能准确的制作模型,并绘制出详细的工程图。

根据各零件间的相互装配关系,可以快速实现零部件的装配。

插件中提供了运动学分析工具、动力学分析工具及有限元分析工具,可以方便地堆所设计的零部件进行后续的相应分析,完成总体设计任务。

4.2.2动画制作原理
在Solidworks中先进入零件设计模块设计对机构的各零件进行三维实体模型设计,再进入装配体设计模块对已经设计的各零件进行装配。

最后在动画向导中对装配体给定马达和运动方式后进行动画设计并保存。

4.2.3动画制作简要过程
步骤1 绘制零件草图
图4-1 步骤2 拉伸生成零件三维实体
图4-2 步骤3 对绘制的各零件进行装配
图4-3
步骤4 设置约束和相应参数,进行渲染,完成装配
图4-4
步骤5 加载马达,对装配体进行动画设计
图4-5
步骤6 把动画存储为avi格式,完成动画设计
图4-6
4.3 Visual basic 程序设计
4.3.1概述
Visual Basic作为一种易学易用的可视化编程工具,提供了丰富的图形处理功能,在动画设计方面有其独到的一面。

此次课程设计主要基于时钟(Timer)控件,结合VB 提供的图形处理功能和其它控件,制作出窗户启闭装置的运动动
画以及绘制窗户的运动轨迹。

4.3.2 VB动画制作原理
动画由两个基本部分组成:一是物体相对于屏幕的运动,即屏幕级动画;二是物体内部的运动,即相对符号的动画。

制作动画的原理就是在窗体上显示一幅图形,紧接着清除它,再显示第二幅图形,如此交替下去,只要两相邻图片显示的时间间隔足够短(每秒钟24以上幅图形),利用人眼的视觉效应,就可以产生动画效果。

VB实现动画的原理也如此,通过时钟(Timer)控件的Interval属性来控制两相邻图片显示的时间间隔,不要求编程人员详细了解图形如何再现和清除,这些工作由VB提供的指令来做,这样就使VB实现动画很方便,编程也很简捷。

4.3.3 程序框架
图4-7
4.3.4 界面设计和控件属性设置
(1)界面设计如图4-8所示
图4-8
(2)各个控件的属性设置如表1所示
表1
对象Name属性Caption属性其他属性与说明
窗体From1 窗户启闭装置主窗体
框架1Frame1 控制面板装载命令按钮
框架2Frame2 手动装载滚动条
框架3Frame3 运动轨迹装载图形框2命令按钮1Command1 自动机构自行运动
命令按钮2Command2 手动手动控制
命令按钮3Command3 暂停停止运动
命令按钮4Command4 退出退出窗体
命令按钮5Command5 返回返回上一窗体
命令按钮6Command6 轨迹画运动轨迹
图像框1Image1 装载手形图片
续表1
对象Name属性Caption属性其他属性与说明
图像框2Image2 装载手形图片
图形框1P1 绘制机构简图
图形框2P2 绘制运动轨迹
标签1Label1 开
标签2Label2 关
标签3Label3 窗户启闭装置
标签4Label4 设计说明
时钟1Timer1 Interval=35
时钟2Timer2 Interval=1 垂直滚动条1VScroll1 Max=45 Min=0
4.3.5 运行结
(1)运动仿真如图4-9
图4-9
(2)运动轨迹分析如图4-10
图4-10
4.3.6 程序源代码
见附录
第五章体会小结
在此次课程设计过程中,从开始设计的简单四杆机构的健身器材到最后确定这个实用窗户启闭装置,从中学到了很多东西。

从刚开始对课程设计什么都不懂到学到一些基础,并且完成所设计的课程内容,一步步做到最后。

虽然这个过程中遇到了不少困难,但是在小组成员的讨论下,把自己能解决的问题弄清楚搞明白,与老师交流我们的设计,对指导老师所提出的问题及不足之处进行完善修改。

在设计这种实用窗户启闭装置过程中,完成了对机构的运动分析,各杆件的位置、速度、加速的分析及计算。

通过对一些软件的学习应用把所设计的装置的运动形式表现出来,Visual Basic、Pro/Engineer、AutoCAD、Math Type等的
运用,完成此次设计的图形。

对于这次的课程设计,有些地方做的可能还不够好,但是学到了经验,在不同的方案中我们没能做到最好却得到了不一样的体会,有失败有成功,把理论用到实际的设计中来,收获了了喜悦和成果。

大家一起共同努力,也学到团队合作的力量,把每个人不同的想法结合起来就能得到一些很不错的经验。

虽然不能够做到最好,把所设计的装置所有的问题都很好的解决,但是每一件事都有其不足之处,那就需要我们认真的去发现改进,把做得到的做好,不会的要去了解学习,可以向其他人学习请教,取长补短,时时刻刻去学习知识并在实践中学以致用,还要有团队意识,这样我们才能把事情做的更好。

相信通过这次的课程设计之后,大家都会有自己的体会,都是在学习中成长进步。

参考文献
[1] 孙桓,陈作模,葛文杰.机械原理[M].7版北京:高等教育出版社,2006
[2] 师忠秀,王继荣.机械原理课程设计[M].北京:机械工业出版社,2003
[3] 陈明锐.Visual Basic程序设计及应用教程[M].北京:高等教育出版社,2008
[4] 王洪欣.机械原理课程上机与设计[M].南京:东南大学出版社,2005
[5] 肖荣.基于VB 时钟控件的动画制作方法.凯里学院学报,2007 年12 月.第
25卷.第6期
附录
附录一 VB程序源代码
Option Explicit
Dim t!, tt!, w!, i!, ii!, k%, a1!, a2!, a3!, q!, s!, h!, n, flag!
Dim XA, YA, XB, YB, XC, YC, XD, YD, XE, YE, XF, YF
Dim XA2, YA2, XB2, YB2, XC2, YC2, XD2, YD2, XE2, YE2, XF2, YF2 Dim OE, DE, CD, BC, AB, OD, OB, AE, BD, DF
Dim XFF, YFF, XDD, YDD, XCC, YCC
Const PI = 3.1415926
Const Explanation As String = " 窗户启闭装置设计说明" & _
vbCrLf & " 此装置由六杆机构组成,主要" & _
vbCrLf & "特点是可以取得有利的传动角。

窗" & _
vbCrLf & "户全开,可从室内擦拭窗玻璃两面;" & _
vbCrLf & "窗户全关,可完全挡住风雨侵袭。

" & _
vbCrLf & "操作机构占据空间位置小。

"
Private Sub Command1_Click() '自动按钮
P1.Cls
VScroll1.Enabled = False
Timer1.Enabled = True
Timer1.Interval = 35
End Sub
Private Sub Command2_Click() '手动按钮
VScroll1.Enabled = True
Timer1.Enabled = False
If t = 0 Then
VScroll1.Value = 22
Else
h = t: VScroll1.Value = 45 - h
End If
End Sub
Private Sub Command3_Click() '暂停按钮
Timer1.Enabled = False
End Sub
Private Sub Command4_Click() '退出按钮
End
End Sub
Private Sub Command5_Click()
Unload Me
Form2.Show
End Sub
Private Sub Command6_Click()
Timer2.Enabled = True
Timer2.Interval = 1
P2.Cls
tt = -0.1
XF2 = OD - DF
YF2 = 0
XD2 = OD 'FDC点初始化
YD2 = 0
XC2 = OD + CD
YC2 = 0
P2.DrawWidth = 3
P2.Line (XF2, YF2)-(XD2, YD2), RGB(255, 255, 0)
P2.Line (XD2, YD2)-(XC2, YC2), RGB(255, 255, 0) P2.ForeColor = vbRed
P2.DrawWidth = 1.5
P2.FontSize = 15
P2.Line (-500, 6600)-(200, 6600)
P2.CurrentX = 400
P2.CurrentY = 6700
P2.Print "F点"
P2.ForeColor = vbGreen
P2.Line (-500, 6200)-(200, 6200)
P2.CurrentX = 400
P2.CurrentY = 6300
P2.Print "D点"
P2.ForeColor = vbBlue
P2.Line (-500, 5800)-(200, 5800)
P2.CurrentX = 400
P2.CurrentY = 5900
P2.Print "C点"
P2.ForeColor = vbBlack
P2.CurrentX = 200
P2.CurrentY = 350
P2.Print "全关位置"
End Sub
Private Sub Form_Load()
Form1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.BackColor = RGB(90, 90, 90)
Frame1.BackColor = RGB(90, 90, 90)
Frame2.BackColor = RGB(90, 90, 90)
P1.BackColor = RGB(90, 90, 90)
P2.BackColor = RGB(90, 90, 90)
Frame3.BackColor = RGB(90, 90, 90)
Label4.Caption = Explanation
Dim w, h
k = 18
AB = 25 * k
BC = 60 * k
CD = 80 * k
DE = 80 * k
OE = 105 * k
AE = 75 * k
DF = 220 * k
OD = OE + DE
w = P1.ScaleWidth
h = P1.ScaleHeight
P1.Scale (-w * 2 / 7, 6 * h / 7)-(w * 5 / 7, -1 * h / 7) w = P2.ScaleWidth
h = P2.ScaleHeight
P2.Scale (-0.12 * w, 0.95 * h)-(0.88 * w, -0.05 * h) VScroll1.Enabled = False
Image1.Visible = False
Timer1.Enabled = True
Timer1.Interval = 35
Timer2.Enabled = False
t = 15
flag = t 'Form1加载时显示图形
s = 0.5
End Sub
Private Sub Timer1_Timer()
If t = 0 Then s = 0.5
t = t + s
i = PI * t / 180
P1.Cls
ComputePoint (i)
With Image1
.Visible = True
.Left = XF - 500
.Top = YF - 300
End With
DrawLines
If t = 45 Then s = -0.5
If t - flag = 0.5 Then
Timer1.Enabled = False
flag = -5
End If
End Sub
Private Sub Timer2_Timer()
tt = tt + 0.1
ii = PI * tt / 180
XFF = XF2
YFF = YF2
XDD = XD2 '分别装入上一次的FDC点的坐标YDD = YD2
XCC = XC2
YCC = YC2
ComputeCDF
DrawLocus
If tt > 45 Then
Timer2.Enabled = False
P2.DrawWidth = 3
P2.Line (XF2, YF2)-(XD2, YD2), RGB(255, 255, 0)
P2.Line (XD2, YD2)-(XC2, YC2), RGB(255, 255, 0)
P2.DrawWidth = 1.5
P2.ForeColor = vbBlack
P2.CurrentX = XF2 + 200
P2.CurrentY = YF2 + 350
P2.Print "全开位置"
End If
End Sub
Public Sub DrawLines()
Dim R, m%, x1, x2, y2, BIAS
R = 140 '半圆圈半径
BIAS = 6 * k
n = PI - i - a3
P1.DrawWidth = 1.5
y2 = 120 * Tan(PI / 3)
P1.Line (0, -60)-(-120, -60 - y2)
P1.Line (0, -60)-(120, -60 - y2)
P1.Line (-270, -60 - y2)-(270, -60 - y2)
x2 = -340
For m = 0 To 4 Step 1
m = m + 1
x2 = x2 + 10 * k
P1.Line (x2, -60 - y2)-(x2 - BIAS, -60 - y2 - BIAS) '原点处机架
Next m
x1 = OE + AE - 120 * k
P1.Line (x1, -6 * k)-(x1 + 170 * k, -6 * k)
For m = 0 To 30 Step 1
m = m + 1
x1 = x1 + 10 * k
P1.Line (x1, -6 * k)-(x1 - BIAS, -6 * k - BIAS) '滑块处机架
Next m
P1.Line ((XA + XB) / 2 - 25 * k, 4 * k)-((XA + XB) / 2 + 25 * k, -4 * k), vbGreen, BF '滑块
P1.FillStyle = 0
P1.FillColor = vbWhite
P1.Line (0, 0)-((OE - R) * XE / OE, (OE - R) * YE / OE), vbBlue
'OE
P1.Circle (0, 0), 60
'O处圆圈
P1.Line ((OE + R) * XE / OE, (OE + R) * YE / OE)-(XD, YD), vbBlue 'ED
P1.Line (XE, YE)-(XA, YA), vbBlue
'EA
P1.FillStyle = 1
P1.Circle (XE, YE), R, vbBlue, i, i + PI
'E处半圆圈
P1.Line (XB, YB)-(XC, YC), vbBlue
'BC
P1.Line (XC, YC)-(XD + R * Cos(n), YD - R * Sin(n)), vbBlue
'CD
P1.Line (XD - R * Cos(n), YD + R * Sin(n))-(XF, YF), vbBlue
'DF
P1.Circle (XD, YD), R, vbBlue, 0, PI - n 'D处半圆圈
If n > 0.0001 Then
P1.Circle (XD, YD), R, vbBlue, 2 * PI - n, 2 * PI
End If
P1.FillStyle = 0
P1.Circle (XE, YE), 60 'E 处圆圈
P1.Circle (XA, YA), 60 'A 处圆圈
P1.Circle (XB, YB), 60 'B 处圆圈
P1.Circle (XC, YC), 60 'C 处圆圈
P1.Circle (XD, YD), 60
P1.FontSize = 15
P1.CurrentX = -300: P1.CurrentY = 200
P1.Print "O"
P1.CurrentX = XA - 70: P1.CurrentY = YA - 200
P1.Print "A"
P1.CurrentX = XB - 70: P1.CurrentY = YB - 200
P1.Print "B"
P1.CurrentX = XC + 200: P1.CurrentY = YC + 200
P1.Print "C"
P1.CurrentX = XD + 200: P1.CurrentY = YD + 280
P1.Print "D"
P1.CurrentX = XE - 300: P1.CurrentY = YE + 300
P1.Print "E"
P1.CurrentX = XF - 200: P1.CurrentY = YF + 200
P1.Print "F"
End Sub
Public Sub ComputePoint(i As Single)
OD = OE + DE
XE = OE * Cos(i)
YE = OE * Sin(i)
XD = OD * Cos(i)
YD = OD * Sin(i)
XA = XE + Sqr(AE ^ 2 - YE ^ 2)
YA = 0
OB = XA + AB
XB = OB
YB = 0
BD = Sqr(OD ^ 2 + OB ^ 2 - 2 * OD * OB * Cos(i))
a1 = Arcsin(Sin(i) * OD / BD) 'a1为BD与OB的夹角
a2 = Arccos((BD ^ 2 + BC ^ 2 - CD ^ 2) / (2 * BD * BC)) 'a2为BD 与BC的夹角
q = PI - a1 - a2 'q为BC与X轴夹角
XC = XB + BC * Cos(q)
YC = BC * Sin(q)
XF = XC - (XC - XD) * (CD + DF) / CD
YF = (YD - YC) * (CD + DF) / CD + YC
a3 = Arccos((OD ^ 2 + CD ^ 2 - OB ^ 2 - BC ^ 2 + 2 * OB * BC *
Cos(PI - q)) / (2 * OD * CD)) 'a3为OD与DC夹角
End Sub
Public Function ComputeCDF()
OD = OE + DE
XE2 = OE * Cos(ii)
YE2 = OE * Sin(ii)
XD2 = OD * Cos(ii)
YD2 = OD * Sin(ii)
XA2 = XE2 + Sqr(AE ^ 2 - YE2 ^ 2)
YA2 = 0
OB = XA2 + AB
XB2 = OB
YB2 = 0
BD = Sqr(OD ^ 2 + OB ^ 2 - 2 * OD * OB * Cos(ii))
a1 = Arcsin(Sin(ii) * OD / BD) 'a1为BD与OB的夹角
a2 = Arccos((BD ^ 2 + BC ^ 2 - CD ^ 2) / (2 * BD * BC)) 'a2为BD 与BC的夹角
q = PI - a1 - a2 'q为BC与X轴夹角
XC2 = XB2 + BC * Cos(q)
YC2 = BC * Sin(q)
XF2 = XC2 - (XC2 - XD2) * (CD + DF) / CD
YF2 = (YD2 - YC2) * (CD + DF) / CD + YC2
End Function
Public Function Arccos(X As Double) As Double '反余弦函数
If X >= -1 And X < -0.5 Then Arccos = Atn(Sqr(1 - X * X) / X) + 4 * Atn(1)
If X >= -0.5 And X <= 0.5 Then Arccos = -Atn(X / Sqr(1 - X * X)) + 2 * Atn(1)
If X > 0.5 And X <= 1 Then Arccos = Atn(Sqr(1 - X * X) / X) End Function
Public Function Arcsin(X As Double) As Double '反正弦函数
If X >= -1 And X < -0.5 Then Arcsin = -Atn(Sqr(1 - X * X) / X) - 2 * Atn(1)
If X >= -0.5 And X <= 0.5 Then Arcsin = Atn(X / Sqr(1 - X * X))
If X > 0.5 And X <= 1 Then Arcsin = -Atn(Sqr(1 - X * X) / X) + 2 *
Atn(1)
End Function
Private Sub VScroll1_Change()
h = 45 - VScroll1.Value
i = PI * h / 180
P1.Cls
ComputePoint (i)
With Image1
.Visible = True
.Left = XF - 500
.Top = YF - 300
End With
DrawLines
End Sub
Public Function DrawLocus()
P2.DrawWidth = 1.5
P2.CurrentX = XFF
P2.CurrentY = YFF
P2.Line (XFF, YFF)-(XF2, YF2), vbRed
P2.CurrentX = XDD
P2.CurrentY = YDD
P2.Line (XDD, YDD)-(XD2, YD2), vbGreen
P2.CurrentX = XCC
P2.CurrentY = YCC
P2.Line (XCC, YCC)-(XC2, YC2), vbBlue End Function
附录二 Matlab运动分析程源代码
L3=60;L5=75;L7=105;L2=25;L4=80;L6=80;
w=20/180*pi;
fi=[0:0.1:45]/180*pi;
t=fi./w;
f4=acos(L7*sin(fi)./L5);
A=-2*L3*(cos(f4).*L5+sin(fi).*L6);
B=2*L3*(L2+sin(f4).*L5-cos(fi).*L6);
C=L2^2+L3^2+L5^2+L6^2-L4^2+2*L5*sin(fi-f4).*L6+2*L2*(sin(f4).*L5-cos (fi).*L6);
f3=2*atan((A+sqrt(A.^2+B.^2-C.^2))./(B-C));
D=2*L4*(cos(fi).*L6-L2-sin(f4).*L5);
E=2*L4*sin(fi).*L6;
F=L4^2+L5^2+L6^2-L3^2+2*L5*sin(fi-f4).*L6;
f2=2*atan((D+sqrt(D.^2+E.^2-F.^2))./(E-F));
x=sin(f3).*L3;
y=cos(f3).*L3+cos(fi).*L7+sin(f4).*L5+L2;
%plot(x,y)
By=cos(fi).*L7+cos(f4).*L5+L2;
%plot(t,By)
Dx=sin(fi).*(L6+L7);
Dy=cos(fi).*(L6+L7);
%plot(Dx,Dy)
Ex=sin(fi).*L7;
Ey=cos(fi).*L7;
%plot(Ex,Ey)
syms t1
By='cos(w*t1)*L7+sin(acos(L7*sin(w*t1)/L5))*L5+L2';
vB=diff(By,'t1')
fun=@(f) - L7*w*sin(f) - (L7^2*w*cos(f)*sin(f))/(L5*(1 - (L7^2*sin(f)^2)/L5^2)^(1/2));
for i=1:length(fi)
vb(i)=fun(fi(i));
end
%plot(t,vb)
Form加载初始化。

相关文档
最新文档