基于matlab GUI的平面四杆机构的运动分析
基于matlab的四杆机构运动分析

基于matlab的四杆机构运动分析一、四杆机构基本概念四杆机构是一种通过变换连杆长度,改变机构运动形态的机械系统。
四杆机构通常由固定连杆、推动连杆、连接杆和工作连杆四个连杆组成,其中固定连杆和推动连杆固定不动,连接杆和工作连杆则沿固定轴线的方向做平动或旋转运动。
四杆机构的基本构造如下图所示:四杆机构的四个连杆的长度和构造参数,以及驱动机构的运动决定了机构的运动特性。
在进行四杆机构运动分析时,需要通过求解运动学关系式和动力学方程,得到连杆的运动规律和力学特性。
二、四杆机构运动学分析1.运动学基本方程四杆机构的运动学分析基本方程是连杆长度变化的定理,即:l₁²+l₂²-2l₁l₂cosθ₂=l₃²+l₄²-2l₃l₄cosθ₄其中,l₁,l₂分别为固定连杆和推动连杆长度;l₃,l₄分别为连接杆和工作连杆长度;θ₂,θ₄分别为推动连杆和工作连杆的夹角。
2.运动学求解方法根据四杆机构运动学基本方程,可以求解机构中任意连杆的角度和位置,从而分析机构运动规律。
在matlab程序中,运动分析可以采用分析法或图解法。
分析法通常采用向量法或坐标法,即将四杆机构中各连杆和运动副的运动量表示为向量或坐标,然后根据连杆长度变化的定理,求解四个未知角度θ₁、θ₂、θ₃、θ₄。
图解法则先通过画图确定机构的运动规律,在图上求解连杆的角度。
比如可以采用伯格(Bourgeois)图法或恰普利恩(Chaplygin)图法等。
四杆机构动力学分析基本方程包括平衡方程和力平衡方程。
平衡方程:当四杆机构处于平衡状态时,连杆的受力关系可以表示为:ΣF=0其中ΣF为各连杆受力的合力。
ΣF=m×a其中,m为每个连杆的质量,a为连杆的加速度。
四杆机构动力学求解方法以matlab为工具,可借助matlab的求解器完成求解。
具体可以利用matlab的优化工具箱、控制工具箱和系统动态学工具箱等,来实现机构模型的动态模拟、仿真和优化设计。
基于MATLAB的平面四连杆机构运动学分析

一、课程设计内容及要求:1.对连杆机构运动工作原理及运动参数有一定理解2.掌握MATLAB基本命令3.了解MATLAB编程的基本知识,并能编写简单M文件4.了解MATLAB图形界面设计的基本知识5.课程设计说明书:应阐述整个课程设计内容,要突出重点和特色,图文并茂,文字通畅。
应有目录、摘要及关键词、正文、参考文献等内容,字数一般不少于6000字。
二、主要参考资料有关复杂刀具参数计算及结构设计、机械制造工艺与设备的手册与图册。
三、课程设计进度安排指导教师(签名):时间:教研室主任(签名):时间:院长(签名):时间:目录1平面连杆机构的运动分析 (1)1.1机构运动分析的任务、目的和方法 (1)1.2机构的工作原理 (1)1.3机构的数学模型的建立 (1)1.3.1建立机构的闭环矢量位置方程 (1)1.3.2求解方法 (2)2 基于MATLAB程序设计 (4)2.1程序流程图 (4)2.2 M文件编写 (6)2.3程序运行结果输出 (7)3基于MATLAB图形界面设计 (11)3.1界面设计 (11)3.2代码设计 (12)4 小结 (17)参考文献 (18)1 平面连杆机构的运动分析1.1 机构运动分析的任务、目的和方法曲柄摇杆机构是平面连杆机构中最基本的由转动副组成的四杆机构,它可以用来实现转动和摆动之间运动形式的转换或传递动力。
对四杆机构进行运动分析的意义是:在机构尺寸参数已知的情况下,假定主动件(曲柄)做匀速转动,撇开力的作用,仅从运动几何关系上分析从动件(连杆、摇杆)的角位移、角速度、角加速度等运动参数的变化情况。
还可以根据机构闭环矢量方程计算从动件的位移偏差。
上述这些内容,无论是设计新的机械,还是为了了解现有机械的运动性能,都是十分必要的,而且它还是研究机械运动性能和动力性能提供必要的依据。
机构运动分析的方法很多,主要有图解法和解析法。
当需要简捷直观地了解机构的某个或某几个位置的运动特性时,采用图解法比较方便,而且精度也能满足实际问题的要求。
基于matlab的平面四杆机构动态仿真

基于matlab的平⾯四杆机构动态仿真摘要:本⽂基于matlab 强⼤的数值计算功能,借助fsolve 函数,建⽴了⼀个平⾯四杆机构模型,并对此进⾏运动仿真,为平⾯四杆机构的尺⼨优化设计和运动分析提供了⼀条简单实⽤的捷径。
关键词:平⾯四杆机构 matlab fsolve 函数1 背景介绍平⾯四连杆机构是⼯程应⽤中使⽤⼴泛的机械结构。
如果知道相应尺⼨下杆件的运动轨迹,速度⼤⼩,对整个机构的优化设计有重要作⽤。
Matlab 具有强⼤的科学计算机数据处理能⼒,出⾊的图形处理功能,且程序语⾔简单。
基于以上叙述,本⽂⾸先设计了平⾯四杆机构的各连杆参数,然后在matlab 环境下运⽤⽜顿-⾟普顿算法,使⽤fsolve 函数快速实现了运动仿真并以图形的形式将其运动情况显⽰了出来。
2 平⾯四杆机构的运动仿真2.1 ⽤matlab 进⾏⾓位移分析平⾯四杆机构如右图所⽰,4l 为机架,1l 为摇杆,2l 为连杆,3l 为摆杆,设杆长分别为20,mm50mm 35mm,60mm.,摇杆与机架夹⾓1?θ=,连杆与⽔平线夹⾓2δθ=,摇杆与机架夹⾓3ψθ=,且初始⾓度00o ?=,1θ⾓速度为10/rad s ω=。
则可将问题转化为,已知1θ的运动状态,求23,θθ。
由铰链四杆机构复向量坐标,可以写出⾓位移⽅程3121243j j j l e l e l l e θθθ+=+将上式展开,整理的1231122433223112233(,)cos cos cos (,)sin sin sin f l l l l f l l l θθθθθθθθθθ=+--=+-??由上式可知,在1θ给定的情况下建⽴了⼀个⼆元⽅程,通过matlab 联⽴⽅程组可求解出23,θθ。
2.1 ⽤matlab 进⾏⾓速度分析⽤matlab 进⾏速度分析对上式进⾏求导并整理成矩阵形式为1211223312233113sin()sin()sin()cos()cos()cos()l l l l l l θθθθθθθθθ-??-=-运动仿真的实现为了求得23,θθ,可调⽤matlabf 中fsolve 函数。
基于matlab的连杆机构设计

基于matlab的连杆机构设计————————————————————————————————作者: ————————————————————————————————日期:目录1平面连杆机构的运动分析 (1)1.2 机构的工作原理 (1)1.3机构的数学模型的建立 (1)1.3.1建立机构的闭环矢量位置方程...................................................11.3.2求解方法.....................................................................22基于MATLAB程序设计 (4)2.1 程序流程图 (4)2.2 M文件编写 (6)2.3程序运行结果输出 (7)3 基于MATLAB图形界面设计 (11)3.1界面设计……………………………………………………………………………………………113.2代码设计……………………………………………………………………………………………124 小结 (17)参考文献 (18)1平面连杆机构的运动分析1.1 机构运动分析的任务、目的和方法曲柄摇杆机构是平面连杆机构中最基本的由转动副组成的四杆机构,它可以用来实现转动和摆动之间运动形式的转换或传递动力。
对四杆机构进行运动分析的意义是:在机构尺寸参数已知的情况下,假定主动件(曲柄)做匀速转动,撇开力的作用,仅从运动几何关系上分析从动件(连杆、摇杆)的角位移、角速度、角加速度等运动参数的变化情况。
还可以根据机构闭环矢量方程计算从动件的位移偏差。
上述这些内容,无论是设计新的机械,还是为了了解现有机械的运动性能,都是十分必要的,而且它还是研究机械运动性能和动力性能提供必要的依据。
机构运动分析的方法很多,主要有图解法和解析法。
当需要简捷直观地了解机构的某个或某几个位置的运动特性时,采用图解法比较方便,而且精度也能满足实际问题的要求。
基于MATLAB的平面连杆机构运动分析及动画毕业论文

基于MATLAB的平面连杆机构运动分析及动画摘要建立了平面机构运动分析的数学模型,利用MATLAB进行了编程并设计了计算交互界面进而求解,为解析法的复杂计算提供了便利的方法,此方法也同样适用于复杂平面机构的运动分析,并为以后机构运动分析的通用软件的设计提供了基础。
建立了平面四杆机构运动分析的数学模型,以MATLAB 程序设计语言为平台,将参数化设计与交互式相结合,设计了平面四杆机构仿真软件,该软件具有方便用户的良好界面,并给出界面设计程序,从而使机构分析更加方便、快捷、直观和形象。
设计者只需输入参数就可得到仿真结果,再将运行结果与设计要求相比较,对怎样修改设计做出决策,它为四杆机构设计提供了一种实用的软件与方法。
以一种平面六连杆为例建立了平面多连杆机构的运动分析数学模型,应用MATLAB 软件进行了优化设计和仿真分析,为机构优化设计提供了一种高效、直观的仿真手段,提高了对平面多连杆机构的分析设计能力。
同时,也为其他机构的仿真设计提供了借鉴。
关键词:解析法,平面连杆机构,MATLAB,运动分析,运动仿真Based on the MATLAB Planar Linkage Mechanism MotionAnalysis and AnimationABSTRACTThis article established the kinematical mathematic model of the planar mechanism ,which is programmed and solved with designing the mutual interface of the calculation by MATLAB.This convenient method is provided for the complicated calculation of the analysis and also applicable to the kinematical analysis of the complex planar mechanism.A mathematical model of motion analysis was established in planar four- linkage ,and emulational software was developed. The software adopted MATLAB as a design language. It combined parametric design with interactive design and had good interfacefor user. Thus,it was faster and more convenient to analyse linkage. The emulational result was obtained as soon as input parameters was imported and the devisers can make decision-making of modification by the comparing emulational result with design demand. It provides an applied software and method for linkage.This paper took a planar six-linkage mechanism as a example to set up the mathematics model of planar multi-linkage mechanisms, and made the optimization design and simulation by the MATLAB software. It gave a efficiently and directly method to optimization design of mechanisms, and improved the ability of analyzing and designing the planar multi-linkage mechanisms. At the same time, it also provides a use for reference to the design and simulation for other mechanisms.KEY WORDS: analysis, planar linkage mechanisms, MATLAB, kinematical analysis, kinematical simulation目录1.1 平面连杆机构的研究意义 (1)1.2 平面连杆机构的研究现状 (1)1.3 MATLAB软件介绍 (2)1.3.1 MATLAB简介 (2)1.3.2 MATLAB软件的特点 (4)1.3.3 用MATLAB处理工程问题优缺点 (5)第2章平面机构运动分析的复数矢量解 (6)第3章平面四杆机构运动分析 (8)3.1 铰链四杆机构曲柄存在条件 (8)3.2 平面四杆机构的位移分析 (9)3.3 平面四杆机构的速度分析 (14)3.4 平面四杆机构的加速度分析 (15)第4章基于MATLAB的平面四杆机构运动分析 (17)4.1 基于MATLAB的平面四杆机构运动参数输入界面 (17)4.2 基于MATLAB的平面四杆机构运动参数计算 (21)4.3 基于MATLAB的平面四杆机构运动分析界面 (24)4.4 基于MATLAB的平面四杆机构运动仿真 (26)4.5 基于MATLAB的平面四杆机构运动参数清空及退出 (30)第5章平面六杆机构运动分析 (32)5.1 构建平面六杆机构数学模型 (32)5.2 平面六杆机构的运动分析 (33)5.2.1 曲柄导杆机构的运动分析 (33)5.2.2 摆动滑块机构的运动分析 (36)第6章基于MATLAB的平面六杆机构运动分析 (39)6.1 基于MATLAB的平面六杆机构运动参数输入界面 (39)6.2 基于MATLAB的平面六杆机构运动参数计算 (45)6.3 基于MATLAB的平面六杆机构运动分析界面 (49)6.4 基于MATLAB的平面六杆机构运动仿真 (52)6.5 基于MATLAB的平面六杆机构运动参数清空及退出 (56)结论 (57)参考文献 (59)第1章前言1.1 平面连杆机构的研究意义机构运动分析是不考虑引起机构运动的外力的影响,而仅从几何角度出发,根据已知的原动件的运动规律(通常假设为匀速运动),确定机构其它构件上各点的位移、速度、加速度,或构件的角位移、角速度、角加速度等运动参数。
基于MATLAB的四杆机构运动分析

石河子大学毕业设计(论文)题目:基于MATLAB的四杆机构运动分析与动画模拟系统院(系):机械电气工程学院专业:机械设计制造及其自动化学号: 2002071189姓名: 娄元建指导教师:葛建兵完成日期:二零零六年五月基于MATLAB的四杆机构运动分析与动画模拟系统[摘要] 本文介绍MATLAB开发机构运动分析和动画模拟系统的方法,并且利用MATLAB软件实现平面四杆机构的运动仿真。
以MATLAB程序设计语言为平台,将参数化设计与交互式相结合,设计出四杆机构仿真系统,能够实现四杆机构的参数化设计,并且能够进行机构的速度和加速度分析。
系统具有方便用户的良好界面,并给出界面设计程序,从而使机构分析更加方便、快捷、直观和形象,设计者只需输几参数就可得到仿真结果,为平面四杆机构的设计与分析提供一条便捷的途径。
[关键词] 机构;运动分析;动画模拟;仿真;参数化;MATLABAbstract:The kinematical analysis and animation method of the mechanism using MATLAB was discussed in the paper , and the kinematic simulation of planar four-bar mechanism with software MATLAB . And emulational system was developed , the system adopted Matlab as a design , It combined parametic design with interactive design and had good interface for user , that can realize parametic design of four-bar mechanism , also to make real speed and acceleration of mechanism 。
基于MATLAB的四连杆机构运动分析

Abstract: In or der t o supply SD cards for low end embedded pr oducts, this paper pr esent s a design based on t he A RM 7 pr o cessor S 3C 44B 0X and taking W 86L 388D contr ol chip o f SD card as the co re . In this pa per , the har dw ar e circuit has been designed and the SD car d contr ol agr eement has been analy zed, the cor r esponding soft war e desig n metho d has been g iv en, and the dr iver pr og ra m has been co mpiled . F inally , the v iability of this pr oject has been analy zed thr ough actual testing . Key words: embedded systems; S3C44B0X; SD card; W 86L 388D
Design of SD Card Control System Based on ARM7
ZHANG Yu, ZHANG Yun-sheng, WANG Jian-ping
( Facult y of Inf or mat ion Engin eer ing and A ut omation , Ku nming U niversit y of Science and T echnol og y, K u nming 650051, China)
基于MATLAB的平面四连杆机构运动仿真

12端 点 B运 动分析 .
在 复 数 坐标 系 中 ,端 点 B的位 置 可 表 示 为 B ri,则 =2 ̄ e2
6
』Brn02 I =c2 I 2si O R 2s e o mB=r
速度分别为 :
( 5 ) 一
。
4
2
分 别 对 上 式 求 一 次 、二 次 导 数 ,得 到 B点 的 速 度 、加
[ ] 孙 桓 , 陈作 模 . 械 原 理 [ ] . 京 : 高 等 教 育 出版 社 1 机 M 北
2 0 . 0 6
( 转第 8 下 4页 )
1 00
5 0
>
一
5 0
。
10 0
图 4 交 替 反相 层 叠 下 相 电 压 波形 及 对 应 频谱
1 0. 0 0
lve i v re sa d DTC o rd v p lc t n .I E a so e l n etr n mo r e a p i ai s EE Tr n n i o
[ ] 刘风 君 ,多 电平 逆 变技 术及 其 应 用 [ ] , 京 :机 械 工 业 出 4 M 北
1 00 0 .
8 . 0O
.
5 0 0.
≮ 0
一
S O 0.
一
1 0. 0 0 0
^ 1 j f
1 0 2 0 0. 0. 3 0 400 0. . 500 6 0 . 0。
越
0 20 . 40 . 60 . 80 . 1 0 0.
t / ms
0
~
.
ll1 斟 s2 v t c西 m o2 B j
l 『 Is 一s i I 一 c ].∞ o h1 I l +s c o j
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于matlab GUI的平面四杆机构的运动分析一、目的通过matlab对平面四杆机构进行运动仿真,并以GUI界面方式实现输入输出的参数化,对平面四杆机构进行位置分析、速度分析、加速度分析和静力学分析。
此外,通过动画演示,更加形象直观地观察机构的运动过程。
最后,将程序编译成.exe独立可执行文件,可以在其它没有安装matlab的机器上运行。
二、设计思路通过matlab的GUI功能模块,创建一个图形用户界面,在自动生成的代码框架中对初始化函数和回调函数等进行编辑,建立与控件相关联的程序:控件属性、位置分析、速度分析、加速度分析、静力学分析、动画演示等。
图1是平面四杆机构的示意图,输入角q的运动规律为q=pi/50*t^2+q0,r1、r2是从动角。
对t时刻沿着杆长距离原点A的任意一点进行分析。
注意:输入输出角的单位为度,时间t的取值范围为0:0.05:10,任意点lx的取值范围为0~a1+a2+a3,估算的从动角r1、r2的迭代初始值不能偏离平衡位置太大。
图1、平面四杆机构示意图三、设计流程1、通过GUI模块创建图形用户界面命令方式:在Matlab命令窗口键入>>guide;菜单方式:在Matlab的主窗口中,选择File>New>GUI命令,就会显示GUI的设计模板。
如图1所示。
图2、创建图形界面2、设计图形界面在创建之后的图形界面中插入坐标轴axes,静态文本框static text,编辑文本框edit text,按钮push button等等。
如图所示。
图3、图形界面设计3、编辑回调函数1)位置分析:输入角的函数为:q=pi/50*t^2+q0。
在时间t=0~10s内,每一个时间点估算两个初始从动角,根据牛顿-拉普森迭代得到准确的机构位置。
10s刚好主动角经历了360度,记录每一时刻的位置,便可以动画演示。
2)速度分析:输入角速度为:dq=pi/25*t。
选择杆件上的任意一点(坐标表示为质点沿着杆件到原点A的距离)做分析,正确表达出角速度系数和速度系数,便可以求出质点的速度。
3)加速度分析:输入角加速度为:ddq=pi/25。
正确表达出向心系数和角加速度系数,便可以求出质点的加速度。
4)静力学分析:由虚功原理可知,当广义力Q(V,H)=0(或近似为零)时机构达到平衡,记录该平衡条件下的位置数据。
四、结果演示1、机构杆长条件判断1)不符合杆长条件。
如图4所示。
图4、不符合杆长条件2)符合杆长条件,输出参数。
如图5所示。
图5、符合杆长条件2、机构运动动画演示。
图6、机构动画演示五、生成.exe文件1、安装编译器。
可有多种选择,本机安装的是matlab自带的Lcc-win32;2、设置编译器。
在matlab命令行输入mbuild –setup,选择安装的lcc编译器;3、调用编译器。
输入mcc –m sgjg,这里sgjg为要转成exe的m文件;4、安装<Matlab path>\toolbox\compiler\deploy\win32目录下的MCRInstaller。
MCR是matlab的运行环境,在程序打包时,最好将相应版本的MCR一起打包。
在其它机器上运行exe文件前,首先安装matlab的运行环境MCRInstaller.exe。
六、附录(程序)function varargout = sgjg(varargin)% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @sgjg_OpeningFcn, ...'gui_OutputFcn', @sgjg_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before sgjg is made visible.function sgjg_OpeningFcn(hObject, eventdata, handles, varargin)% Choose default command line output for sgjghandles.output = hObject;handles.gx=[];handles.gy=[];axis(handles.motion);imshow('tt.bmp'); % 机构示意图% Update handles structureguidata(hObject, handles);% --- Outputs from this function are returned to the command line. function varargout = sgjg_OutputFcn(hObject, eventdata, handles) % Get default command line output from handles structurevarargout{1} = handles.output;function a1_Callback(hObject, eventdata, handles)function a1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction a2_Callback(hObject, eventdata, handles)function a2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction a3_Callback(hObject, eventdata, handles)function a3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction a4_Callback(hObject, eventdata, handles)function a4_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction q0_Callback(hObject, eventdata, handles)function q0_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction ftol_Callback(hObject, eventdata, handles)function ftol_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction r1_Callback(hObject, eventdata, handles)function r1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction r2_Callback(hObject, eventdata, handles)function r2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction t_Callback(hObject, eventdata, handles)function t_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction lx_Callback(hObject, eventdata, handles)function lx_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction lx2_Callback(hObject, eventdata, handles)function lx2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction lx3_Callback(hObject, eventdata, handles)function lx3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction H_Callback(hObject, eventdata, handles)function H_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction V_Callback(hObject, eventdata, handles)function V_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Calculation_Callback(hObject, eventdata, handles)% hObject handle to Calculation (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)a1=str2num(get(handles.a1,'String'));a2=str2num(get(handles.a2,'String'));a3=str2num(get(handles.a3,'String'));a4=str2num(get(handles.a4,'String'));q0=str2num(get(handles.q0,'String'));ftol=str2num(get(handles.ftol,'String'));r1=str2num(get(handles.r1,'String'));r2=str2num(get(handles.r2,'String'));V=str2num(get(handles.V,'String'));H=str2num(get(handles.H,'String'));q0=q0*pi/180;r1=r1*pi/180;r2=r2*pi/180;ly1=0;ly2=0;ly3=0;%局部坐标系的第二坐标为0lx1=a1;lx2=a2;lx3=a3;%局部坐标系的第一坐标设一初始值lx=str2num(get(handles.lx,'String'));%杆上选择一个数据分析的质点if (lx<=a1)lx1=lx;elseif (lx>=a1+a2)lx3=lx;elselx2=lx;endgr1=[];gr2=[];gdx1=[];gdx2=[];gdx3=[];gdy1=[];gdy2=[];gdy3=[];gddx1=[];gddx2=[];gddx3=[];gddy1=[];gddy2=[];gddy3=[];k=[a1 a2 a3 a4];lmin=min(k);lmax=max(k);if((lmin+lmax)>(a1+a2+a3+a4)-lmin-lmax)errordlg('不符合杆长条件!','Tip')elsefor t=0:0.05:10k=0;q=pi/50*t^2+q0;f=[a1*cos(q)+a2*cos(r1)+a3*cos(r2)-a4a1*sin(q)+a2*sin(r1)+a3*sin(r2)]';while(norm(f)>ftol)A=[-a2*sin(r1) -a3*sin(r2);a2*cos(r1) a3*cos(r2)]; dr=-A\f;r1=r1+dr(1);r2=r2+dr(2);f=[a1*cos(q)+a2*cos(r1)+a3*cos(r2)-a4a1*sin(q)+a2*sin(r1)+a3*sin(r2)]';k=k+1;%记录迭代次数endxa=0;ya=0;xb=a1*cos(q);yb=a1*sin(q);xc=a1*cos(q)+a2*cos(r1);yc=a1*sin(q)+a2*sin(r1);xd=a1*cos(q)+a2*cos(r1)+a3*cos(r2);yd=a1*sin(q)+a2*sin(r1)+a3*sin(r2);x=[xa xb xc xd]';y=[ya yb yc yd]';handles.gx=[handles.gx x];%记录机构每一时刻的位置,用于动画演示handles.gy=[handles.gy y];%------------------速度分析----------------dq=pi/25*t;w1=1;w2=a1*sin(r2-q)/(a2*sin(r1-r2));w3=a1*sin(r1-q)/(a3*sin(r2-r1));u1=(-lx1*sin(q)-ly1*cos(q))*w1;v1=(lx1*cos(q)-ly1*sin(q))*w1;u2=-a1*sin(q)-(lx2*sin(r1)+ly2*cos(r1))*w2;v2=a1*cos(q)+(lx2*cos(r1)-ly2*sin(r1))*w2;u3=(-lx3*sin(r2)-ly3*cos(r2)+a3*sin(r2))*w3;v3=(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*w3;dx1=u1*dq;dy1=v1*dq; %¹¹¼þ1ÉÏÖʵãµÄËÙ¶Èdx2=u2*dq;dy2=v2*dq;dx3=u3*dq;dy3=v3*dq;%-------------------加速度分析-----------------------ddq=pi/25;dw1=0;dw2=w2*((w3-1)*atan(r2-q)-(w2-w3)*atan(r1-r2));dw3=w3*((w2-1)*atan(r1-q)-(w3-w2)*atan(r2-r1));du1=(-lx1*sin(q)-ly1*cos(q))*dw1+(-lx1*cos(q)+ly1*sin(q))*w1^2;dv1=(lx1*cos(q)-ly1*sin(q))*dw1+(-lx1*sin(q)-ly1*cos(q))*w1^2;du2=-a1*sin(q)*dw1-a1*cos(q)*w1^2-(lx2*sin(r1)+ly2*cos(r1))*dw2-(lx2*cos(r1)-ly2*sin(r1))*w2^2;dv2=a1*cos(q)*dw1-a1*sin(q)*w1^2+(lx2*cos(r1)-ly2*sin(r1))*dw2-(lx2*sin(r1)+ly2*cos(r1))*w2^2;du3=-(lx3*sin(r2)+ly3*cos(r2)-a3*sin(r2))*dw3-(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*w3^2;dv3=(lx3*cos(r2)-ly3*sin(r2)-a3*cos(r2))*dw3-(lx3*sin(r2)+ly3*cos(r2)-a3*sin(r2))*w3^2;ddx1=u1*ddq+du1*dq^2;ddy1=v1*ddq+dv1*dq^2; %杆1上质点的加速度ddx2=u2*ddq+du2*dq^2;ddy2=v2*ddq+dv2*dq^2;ddx3=u3*ddq+du3*dq^2;ddy3=v3*ddq+dv3*dq^2;%--------------------静力学分析----------------------------- Q=a1*(V*cos(q)+H*sin(r2)*sin(q-r1)/sin(r1-r2));if Q<ftolqe=q;re1=r1;re2=r2;endgr1=[gr1 r1];gr2=[gr2 r2];%记录机构每一时刻的位置、速度、加速度 gdx1=[gdx1 dx1];gdx2=[gdx2 dx2];gdx3=[gdx3 dx3];gdy1=[gdy1 dy1];gdy2=[gdy2 dy2];gdy3=[gdy3 dy3];gddx1=[gddx1 ddx1];gddx2=[gddx2 ddx2];gddx3=[gddx3 ddx3]; gddy1=[gddy1 ddy1];gddy2=[gddy2 ddy2];gddy3=[gddy3 ddy3];endt=str2num(get(handles.t,'String'));n=20*t+1;r1=gr1(n);r2=gr2(n);r1=r1*180/pi;r2=r2*180/pi;qe=qe*180/pi;re1=re1*180/pi;re2=re2*180/pi;dx1=gdx1(n);dx2=gdx2(n);dx3=gdx3(n);dy1=gdy1(n);dy2=gdy2(n);dy3=gdy3(n);ddx1=gddx1(n);ddx2=gddx2(n);ddx3=gddx3(n);ddy1=gddy1(n);ddy2=gddy2(n);ddy3=gddy3(n);set(handles.dispr1,'String',num2str(r1));set(handles.dispr2,'String',num2str(r2));if (lx<=a1)set(handles.dispdx,'String',num2str(dx1));set(handles.dispdy,'String',num2str(dy1));set(handles.dispddx,'String',num2str(ddx1));set(handles.dispddy,'String',num2str(ddy1));elseif (lx>=a1+a2)set(handles.dispdx,'String',num2str(dx3));set(handles.dispdy,'String',num2str(dy3));set(handles.dispddx,'String',num2str(ddx3));set(handles.dispddy,'String',num2str(ddy3));elseset(handles.dispdx,'String',num2str(dx2));set(handles.dispdy,'String',num2str(dy2));set(handles.dispddx,'String',num2str(ddx2));set(handles.dispddy,'String',num2str(ddy2));endset(handles.dispre1,'String',num2str(qe));set(handles.dispqe,'String',num2str(re1));set(handles.dispre2,'String',num2str(re2));endguidata(hObject, handles);% --- Executes on button press in Show.function Show_Callback(hObject, eventdata, handles)i=1;n=length(handles.gx);while 1h=plot(handles.motion,handles.gx(:,i),handles.gy(:,i)); a1=str2num(get(handles.a1,'String'));a2=str2num(get(handles.a2,'String'));a3=str2num(get(handles.a3,'String'));a4=str2num(get(handles.a4,'String'));axis([-a1-2 a1+a4 -a1-2 a3+2]);set(h,'EraseMode','normal','LineWidth',5)set(gcf,'DoubleBuffer','on')drawnow;i=i+1;if i>ni=1;endend% --- Executes on button press in close.function close_Callback(hObject, eventdata, handles)close。