logo资料库

VC++铰链四杆机构运动仿真编程示例-.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
VC++铰链四杆机构运动仿真编程示例
(基于单文档模式的程序实现)
1.位移分析
2.速度分析
3.加速度分析
VC++铰链四杆机构运动仿真编程示例 (基于单文档模式的程序实现) 一. 铰链四杆机构的运动分析原理 l 如图 1 所示铰链四杆机构。已知各杆长 l 1 l , , 2 3 , ,原动件的位置角1, 其角速度1 为 l 4 常数,且以逆时针方向为正。 求解程序:首先建立机构的位置方程式,求出给定1 时的构件 2、3 的位置角 2 3 , 。 将位置方程分别对时间 t 求导一次、二次,得速度方程式和加速度方程式,并求得各构件的 角速度 2 3 1.位移分析 , 和角加速度 2 3, 。 vM y r2 B φ1 φ l1 A ω1 为建立机构的位置方程式,首先画出各构件的 矢量指向(如图 1 所示)。以 x 轴正向沿逆时针方 , 及2 ,由矢量封闭 , 向画出各杆的转角    4 2 回路 ABCD 写出矢量方程    , 1 3 l 1 l 2 l 4 l 3 将上述矢量方程写成坐标方程 M θ2 v l2 l θ4 φ2 l4 C l3 D φ3 x    l 1 l 1 cos sin  1  1   l l 2 2 cos sin  2  2   4 l l 4 cos   4 sin l   4 l 3 cos  3 3 sin  3 (3-1) 图 1 铰链四杆机构运动分析模型 上述方程的待求量为 2 3 , 。由于该方程为 2 3 , 的非线性方程,为方便起见,在图 1 中加辅助矢量 BD ,即 l,。在封闭矢量回路 ABD 中 及 解得: l  1  l  1 cos sin  1  1   l l cos sin     l l 4 4 l 1   l l 4 cos sin  4  4 l 2 1  l  arctan  l       2 4     l l 4 4 2 ll 41 sin  4 cos  4 cos(   4 1 sin l   1 cos l   1 1 1 )    在封闭矢量回路 BCD 中 l 2   l l 3 及 解得 l  2  l  2 cos sin  2  2   l l cos sin     l l 3 3 cos sin  3  3       cos( tan l 2 2  3  )   sin cos l l   2     2  l  2 ll 3 sin 3 cos l l 3 l 2 3  3  3 (3-2) (3-3) (3-4) 注意:按正切函数求其角度时,应根据函数中分子、分母的正负号判断所在象限后决定。
= cos( ) 3  而 按 余 弦 函 数 求 其 角 度 时 , 如 上 式 中 由 cos( cos( BD 线之上;当用 cos( 2.速度分析 )  3 ,故有两个解。当用 cos( )  3 时为另一解,即 C 点位于 BD 线之下(图 1 中未示出)。 ) 3  的 值 求 3 时 , 由 于 ) 3  时为图 3-3 中所示的解,即 C 点在 将式(3-1)对 t 求导,注意到 d  1 d t   1 d,  2 d t   2 d,  3 d t   3 ,得    sin l        2 1 1 3 3 3 cos l       1 1 3 sin cos   l  sin cos   l l l 1 2 2 1 2 2 2 3 3 (3-5) 为求解方便起见,采用坐标旋转方法。例如求2 时,可将式(3-5)中第一式的3 项 消去,即将坐标系假想按逆时针方向旋转3 ,此时该公式中各转角应加上(-3 ),即可消 去3 。按此法求得2 、3 的公式 )    2      3    sin( l     1 1 1 3 sin( ) l    3 2 sin( l     1 1 1 2 ) sin( l    2 2 3 3 ) 3.加速度分析 将式(3-5)对时间 t 求导,并注意到 d  1 d t  0 , d  2 d t   2 , d  3 d t   3 ,得       l       1 2 l       2 1 cos sin sin cos cos sin     l l 2 2 2 2 l l 1 1 2 2 2 2 2 1 2 1 2 2 2 2 l   l       3 3     3 3 cos sin sin cos   l l 3 3 3 3 3 3 2 3 2 3 同样采用坐标旋转法,可求得2 、3    2       3    1  2 1 cos( 2 ) l l         2 3 1 3 sin( l   3 2 ) l l l         2 2 3 2 1 sin( l   2 2 2    cos( ) cos( cos( 2 2 2 2 1 2 3     ) ) ) l 2 3 3 1 3 3 3 (3-6) (3-7) (3-8)
二. 编程步骤 1. 项目类型选择 MFC AppWizard(exe),项目名取为“FourBar”,在 location 中指定一个工作 路径用于放置程序文件。 2. 在程序向导的第 1 步选择建立一个基于单文档的应用程序,点击“Finish”结束向导。 3. 点击菜单项“Insert → Resource”,插入一个对话框资源,这个对话框将来作为铰链四 杆机构的参数输入窗口。 4. 在参数输入对话框上右键点击,弹出属性对话框,设定其 ID 号为 IDD_PARAMETER, 设定其标题 Caption 为“参数输入对话框”。然后在对话框上添加控件如下图所示,为每一 个控件指定 ID 号。
为各个编辑框控件指定控件的 ID 号: AB 杆长:IDC_AB_INPUT; BC 杆长:IDC_BC_INPUT; CD 杆长:IDC_CD_INPUT; AD 杆长:IDC_AD_INPUT。 5. 为对话框添加一个类:在对话框的空白区域处双击鼠标,弹出 ClassWizard 窗口,在添加 一个新类对话框中点击 OK 按钮,将新类命名为 CParameterDlg,其余选择默认值,点击 OK 按钮确定。
6. 为对话框中的控件添加相应的成员变量:点击菜单“View →ClassWizard”,点击“Member Variables”标签项,为对话框中的控件添加对应的成员变量如下图所示。 7. 在资源视图(ResourceView)中双击打开主菜单资源 IDR_MAINFRAME,添加顶层菜单 项“输入”,弹出菜单项“铰链四杆机构参数”,并如图设置 ID 号及标题等。
8. 点击菜单“View →ClassWizard” 为菜单项命令添加消息映射函数。在 Class name 中选 择“CFourBarView”类,目标 ID 号中选择“ID_INPUT_SIZE”,在“Messages”中选择 “Command”,双击,弹出“添加成员函数”对话框,点击“OK”,确认函数名为“OnInputSize”。 9. 四杆机构参数包括:各杆长尺寸 ab,bc,cd,ad,曲柄位置角φ1、连杆位置角φ2、摇杆 位置角φ3、机架倾角θ4。 在 CFourBarView 类中定义铰链四杆机构相关的成员变量如下: public: //定义与铰链四杆机构相关的数据与变量 double ab; double bc; double cd; double ad;
double sita4; double angle1; double angle2; double angle3; 10. 初始化四杆机构的参数:在 CFourBarView 类的构造函数 CFourBarView ( )中添加初始化 代码: CFourBarView::CFourBarView() { // TODO: add construction code here ab=300; bc=600; cd=600; ad=500; sita4=0; angle1=45; angle2=0; angle3=0; } 11. 在 OnInputSize()函数中输入下面的代码: //从四杆机构输入对话框中得到四杆机构各参数值 void CFourBarView::OnInputSize() { // TODO: Add your command handler code here //显示四杆机构输入对话框 CParameterDlg FourbarDlg; //定义 CParameterDlg 类的一个对象 //初始化四杆机构参数输入对话框 FourbarDlg.m_ab=ab; FourbarDlg.m_bc=bc; FourbarDlg.m_cd=cd; FourbarDlg.m_ad=ad; //从四杆机构参数输入对话框中得到用户输入的各杆长尺寸 if(FourbarDlg.DoModal()==IDOK) { ab=FourbarDlg.m_ab; bc=FourbarDlg.m_bc; cd=FourbarDlg.m_cd; ad=FourbarDlg.m_ad; } //调用 OnDraw 函数按照用户输入的参数重新绘制四杆机构 Invalidate(TRUE); } 12. 在 FourBarView.cpp 前面加上 CParameterDlg 类的头文件及科学计算的头文件: #include "FourBarDoc.h"
#include "FourBarView.h" #include "ParameterDlg.h" #include "math.h" 此时编译运行,可以从菜单项中调出凸轮参数输入对话框,并把用户输入的数据保存在 C FourBarView 类中已经定义好的成员变量里面。 14. 在 CCFourBarView 类的成员函数 OnDraw 中计算并画四杆机构。 void CFourBarView::OnDraw(CDC* pDC) { CFourBarDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //设置显示区域,及原点位置 CRect rectClient; GetClientRect(rectClient); pDC->SetMapMode(MM_ISOTROPIC); pDC->SetWindowExt(1500,1500); pDC->SetViewportExt(rectClient.right,-rectClient.bottom);// 设置视口范围 pDC->SetViewportOrg(rectClient.right/2-100,rectClient.bottom/2+50); // 设 置 视 口 原 // 设置 MM_ANISOTROPIC 映射模式 // 设置窗口范围 // 获得当前窗口的客户区大小 点 double pi=3.1415926; // 定义圆周率π double bx,by,cx,cy; double L, fai, aa, bb; angle1=angle1*pi/180; //将角度值转化为弧度值 sita4=sita4*pi/180; //铰链 B、C 点的坐标 //定义中间变量 L = sqrt(ab * ab + ad * ad - 2 * ab * ad * cos(angle1 - sita4*pi/180)); fai = atan((ad * sin(sita4) - ab * sin(angle1)) / (ad * cos(sita4) - ab * cos(angle1))); aa = (bc * bc - L * L - cd * cd) / (2 * L * cd); angle3 = acos(aa) + fai; bb = (L * sin(fai) + cd * sin(angle3)) / (L * cos(fai) + cd * cos(angle3)); angle2 = atan(bb); if (bb < 0) { angle2 = angle2 + pi; } bx = ab * cos(angle1); by = ab * sin(angle1); cx = bx + bc * cos(angle2); cy = by + bc * sin(angle2);
分享到:
收藏