基于matlab的GUI设计——机械原理教学演示系统
利用Matlab的图形用户界面(GUI)功能,设计并实现实验主界面

(1)利用Matlab的图形用户界面(GUI)功能,设计并实现实验主界面;(2) 实现在“符号计算”图形用户界面中的各项符号计算功能,如实现Matlab的求极限、求导、求不定积分与定积分、级数求和、方程组的符号求解、常微分方程的符号求解等符号计算;(3) 利用Matlab的二维、三维绘图功能,实现图形用户界面(GUI)中的部分符号计算的可视化,即给出符号计算实例的同时实现该实例的图形化描述。
如下图给出了一个简单的GUI界面,学生可以参考如下图设计出自己的GUI界面。
程序如下:hf=figure('Position',[200,200,700,500],...'Name','信计08(2)班阿卜杜热黑木20080803417', ...'NumberTitle','off','MenuBar','none');uicontrol(hf,'Style','Frame','Position',[0,0.15,0.45,1],...'Units','normalized','Back',[0,1,1]);COMM1=['n=str2num(get(he1,''String''));', ...%求导连接'b=sym(get(he7,''String''));',...'dec=diff(b,n);', ...'set(he8,''string'',char(dec));'];COMM2=['a=str2num(get(he2,''String''));', ...%求极限连接'f=sym(get(he7,''String''));',...'lim=limit(f,a);', ...'set(he8,''string'',char(lim));'];COMM3=['g=sym(get(he7,''String''));',... %不定积分连接'int_1=int(g);', ...'set(he8,''string'',char(int_1));'];COMM4=['a=str2num(get(he3,''String''));', ... %级数求和连接'b=str2num(get(he5,''String''));', ...'f=sym(get(he7,''String''));',...'sum_1=symsum(f,a,b);', ...'set(he8,''string'',char(sum_1));'];COMM5=['a=str2num(get(he4,''String''));', ... %定积分连接'b=str2num(get(he6,''String''));', ...'f=sym(get(he7,''String''));',...'int_2=int(f,a,b);', ...'set(he8,''string'',char(int_2));'];COMM6=['f=get(he7,''String'');',...'dsolve_1=dsolve(f,''x'');', ...'set(he8,''string'',char(dsolve_1));'];COMM7=['f=get(he7,''String'');',...'ezplot(f);'];COMM8=['g=get(he8,''String'');',...'ezplot(g);'];uicontrol(hf,'Style','Push','Position',[0.02,0.9,0.11,0.06],...'String','求导','Units','normalized','Call',COMM1); uicontrol(hf,'Style','Text','Position',[0.17,0.85,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','阶数','Back',[0,1,1]);he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.9,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.72,0.13,0.06],...'String','求极限','Units','normalized','Call',COMM2);uicontrol(hf,'Style','Text','Position',[0.17,0.67,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','极限点','Back',[0,1,1]);he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.72,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.58,0.13,0.06],...'String','不定积分','Units','normalized','Call',COMM3);uicontrol(hf,'Style','Push','Position',[0.02,0.45,0.13,0.06],...'String','级数求和','Units','normalized','Call',COMM4);uicontrol(hf,'Style','Text','Position',[0.31,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he5=uicontrol(hf,'Style','Edit','Position',[0.38,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he3=uicontrol(hf,'Style','Edit','Position',[0.24,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.32,0.13,0.06],...'String','求定积分','Units','normalized','Call',COMM5);uicontrol(hf,'Style','Text','Position',[0.31,0.31,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he6=uicontrol(hf,'Style','Edit','Position',[0.38,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.3,0.08,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he4=uicontrol(hf,'Style','Edit','Position',[0.24,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.2,0.16,0.06],...'String','解微分方程','Units','normalized','Call',COMM6);uicontrol(hf,'Style','text','Position',[0.48,0.9,0.13,0.06],...'String','原函数','Units','normalized');he7=uicontrol(hf,'Style','edit','Position',[0.65,0.9,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','text','Position',[0.48,0.77,0.13,0.06],...'String','结果函数','Units','normalized');he8=uicontrol(hf,'Style','text','Position',[0.65,0.77,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);h_axes=axes('position',[0.55,0.2,0.4,0.5]);uicontrol(hf,'Style','push','Position',[0.58,0.02,0.13,0.06],...'String','初始绘图','Units','normalized','call',COMM7);uicontrol(hf,'Style','push','Position',[0.80,0.02,0.13,0.06],...'String','结果绘图','Units','normalized','call',COMM8);uicontrol(hf,'Style','Push','Position',[0.02,0.02,0.08,0.06],...'String','退出','Units','normalized','Call', 'close');。
基于matlabgui课程设计

基于matlabgui课程设计一、课程目标知识目标:1. 学生能理解MATLAB GUI设计的基本原理,掌握相关函数和编程技巧。
2. 学生能运用MATLAB GUI设计出符合课程要求的数据处理和分析界面。
3. 学生了解MATLAB在工程领域的应用,以及GUI在数据可视化、交互式操作等方面的优势。
技能目标:1. 学生能独立完成MATLAB GUI界面的设计和编程,实现数据处理、图像显示等功能。
2. 学生能通过MATLAB GUI设计,实现与用户的有效交互,提高数据处理和分析的效率。
3. 学生具备解决实际问题时,运用MATLAB GUI进行数据分析和处理的能力。
情感态度价值观目标:1. 培养学生主动探究、勇于创新的科学精神,激发学生对编程和工程领域的兴趣。
2. 培养学生团队协作、共同解决问题的能力,提高沟通与表达的自信心。
3. 增强学生对我国科技发展的自豪感,认识到科技对国家和社会发展的贡献。
课程性质:本课程为选修课,以实践为主,结合理论教学,培养学生的动手能力和实际应用能力。
学生特点:学生具备一定的MATLAB基础,对编程和工程领域有一定兴趣,喜欢探索新知识。
教学要求:结合课本内容,注重实践操作,引导学生主动探究,关注学生的个体差异,提高教学效果。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本课程教学内容主要包括以下几部分:1. MATLAB GUI设计原理:介绍MATLAB GUI设计的基本概念、组成元素和设计流程,使学生了解GUI设计的基本框架。
2. MATLAB GUI编程基础:讲解MATLAB GUI编程的相关函数和语法,包括 GUIDE 工具的使用,使学生掌握GUI编程的基本技巧。
3. 数据处理与分析界面设计:结合课本内容,教授如何使用MATLAB GUI设计数据处理和分析界面,涵盖数据输入、处理、显示和保存等功能。
4. 实践项目:安排多个实践项目,让学生动手设计和实现不同的数据处理和分析界面,提高学生的实际操作能力。
Matlab技术GUI设计方法

Matlab技术GUI设计方法Matlab是一种强大的数学软件,广泛应用于科学计算、数据分析和可视化等领域。
在使用Matlab进行数据处理和算法开发时,GUI(Graphical User Interface,图形用户界面)常常是必不可少的工具。
本文将介绍一些Matlab技术GUI设计方法,帮助读者快速掌握GUI设计的基本原理和实现技巧。
一、GUI设计的基本原理1. 用户需求分析在设计GUI之前,首先需要明确用户的需求。
这包括用户需要处理的数据类型、使用的功能和界面布局等。
通过与用户交流和需求分析,可以明确GUI的设计目标,为后续的设计工作提供指导。
2. 界面布局设计界面布局是GUI设计的基础,决定了用户与软件交互的方式。
在设计界面布局时,可以使用Matlab提供的GUI设计工具来快速设计界面,也可以采用编程的方式来实现自定义的界面布局。
无论是使用哪种方式,都需要考虑界面的美观性和易用性。
3. 功能模块设计功能模块是GUI设计的核心,决定了用户可以通过界面进行的操作。
在设计功能模块时,可以使用Matlab提供的各种函数和工具箱来实现数据处理、算法运算等功能。
同时,还可以根据用户的需求,添加自定义的功能模块,提高GUI的灵活性和扩展性。
4. 事件响应设计事件响应是GUI设计中的重要部分,用于实现用户和软件之间的交互。
在Matlab中,可以通过编写回调函数来实现事件的响应。
回调函数是Matlab中的一种特殊函数,用于处理用户的输入和界面的变化。
通过编写适当的回调函数,可以使GUI实现与用户的实时交互,并根据用户的操作进行相应的数据处理和算法运算。
二、GUI设计的实现技巧1. 使用Matlab提供的GUI设计工具Matlab提供了一系列的GUI设计工具,如GUIDE(GUI Design Environment)、App Designer等。
这些工具提供了丰富的界面组件和布局选项,可以帮助用户快速设计GUI界面。
机械原理matlab课程设计

机械原理matlab课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握机械原理的基本概念、理论和方法;技能目标要求学生能够运用MATLAB软件进行机械系统仿真和分析;情感态度价值观目标要求学生培养创新意识、团队合作精神和自主学习能力。
通过本课程的学习,学生将能够:1.描述和解释机械原理的基本概念和理论。
2.使用MATLAB软件进行机械系统仿真和分析。
3.提出问题、解决问题并开展创新设计。
4.能够进行团队合作,共同完成项目任务。
二、教学内容教学内容将根据课程目标进行选择和,确保内容的科学性和系统性。
教学大纲将明确教学内容的安排和进度,指出教材的章节和列举内容。
主要内容包括:1.机械原理的基本概念和理论,包括力学、动力学、运动学等方面。
2.MATLAB软件的基本操作和功能,包括矩阵运算、绘图、编程等。
3.机械系统仿真的方法和技巧,包括模型建立、参数调整、结果分析等。
4.机械系统设计案例分析,包括机器人的运动控制、机构的优化设计等。
三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法。
包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解和演示,向学生传授基本概念和理论知识。
2.讨论法:学生进行小组讨论,促进学生之间的交流和思维碰撞。
3.案例分析法:通过分析实际案例,引导学生运用所学知识解决实际问题。
4.实验法:安排实验课程,让学生亲自动手进行实验操作和数据分析。
四、教学资源为了支持教学内容和教学方法的实施,将选择和准备适当的教学资源。
包括教材、参考书、多媒体资料和实验设备等。
1.教材:选择权威、实用的教材,作为学生学习的主要参考资料。
2.参考书:推荐一些相关的参考书籍,供学生深入学习和拓展知识。
3.多媒体资料:制作精美的PPT、教学视频等多媒体资料,增强课堂教学的趣味性和效果。
4.实验设备:准备必要的实验设备,让学生能够进行实际操作和验证。
基于MATLAB_GUI信号与系统教学软件设计_毕业设计论文

基于MATLAB_GUI信号与系统教学软件设计_毕业设计论⽂基于MATLAB_GUI信号与系统教学软件设计⽬录1 引⾔ (2)1.1论⽂写作背景 (2)1.2研究问题的提出 (2)1.3研究问题的解决⽅案 (3)2 MATLAB软件简介 (3)2.1 MATLAB发展过程 (3)2.2 MATLAB⼊门及其结构 (4)2.3 MATLAB在信号与系统中的应⽤ (5)3 信号与系统知识结构 (5)3.1信号与系统课程简介 (5)3.2基于教学软件中有关信号与系统的知识结构 (6)3.2.1 信号的频域分析 (6)3.2.2 系统的频域分析 (8)3.2.3教学软件中相关知识结构 (10)4 GUI界⾯的创建与应⽤ (10)4.1GUI界⾯的基本知识 (10)4.2信号与系统教学软件GUI设计 (12)4.2.1GUI主界⾯的设计 (12)4.2.2周期信号频域分析 (13)4.2.3⾮周期信号频域分析 (15)4.2.4系统的频率响应 (24)结论 (26)参考⽂献 (27)致谢 (28)1 引⾔1.1论⽂写作背景随着社会科技的⾼速发展以及计算机⽹络的普及,对信息应⽤的研究就变得⾮常重要,⽽其中对信号波形的模拟可以⽅便研究⼈员进⾏科学研究。
“信号与系统”课程的特点是概念抽象,数学运算量⼤、公式和理论推导相对较多,因此⼀直处于教难、学更难的境况中,这就更加需要通过实验来帮助学⽣理解这些抽象概念。
学校开设的传统实验均在实验室的硬件实验设备上完成,设备的使⽤存在空间、时间上的局限性,另外,对仪器操作不当等因素导致⽆法看到正确的波形。
⽽⽤软件对信号波形进⾏仿真有着界⾯可视性强,操作简单⽅便;便于数据修改,⽂件保存,实验效率⾼,实验内容丰富,结果直观易懂,便于分析的优点,同时可以让学⽣对相关课程产⽣兴趣,所以使⽤软件有必要⽽且急为迫切。
1.2研究问题的提出在学习“信号与系统”这门课程时,由于该课程对数学要求较⾼,理论结果往往来源于复杂的数学运算及推导,这就导致学⽣将⼤量的时间⽤于进⾏⼿⼯数学运算(如微分、积分、⽅程求解、多项式求根等),⽽未真正理解分析结果在信号处理中的实际应⽤。
MATLAB中的GUI程序设计

MATLAB中的GUI程序设计MATLAB是一种功能强大的编程语言,它能够进行数据处理、数值计算、图形绘制等多种操作。
在MATLAB中,我们可以通过编写GUI程序来实现更加友好和交互性的界面,使得用户可以直观地进行操作和获得结果。
下面将介绍MATLAB中的GUI程序设计。
在MATLAB中,GUI程序的编写一般分为以下几个步骤:界面设计、回调函数编写和程序调试。
界面设计是GUI程序设计的第一步,我们可以通过MATLAB提供的GUIDE工具来完成。
GUIDE是一个图形化的界面设计工具,可以通过拖拽、调整控件位置和属性等方式来设计界面。
在GUIDE中,我们可以选择界面的布局方式,如水平布局、垂直布局、表格布局等,还可以选择不同的控件,如按钮、文本框、复选框、滑块等。
在界面设计完成后,我们需要编写回调函数来实现不同控件的事件响应。
回调函数是指当用户进行其中一种操作时,界面会调用相应的函数来响应这个操作。
例如,当用户点击按钮时,界面会调用按钮的回调函数来执行相应的操作。
在MATLAB中,回调函数通常以"Callback"结尾并附加到相应的控件上。
在回调函数中,我们可以编写代码来实现各种功能。
例如,可以在按钮的回调函数中编写代码来处理用户的点击事件,可以在文本框的回调函数中编写代码来获取用户输入的内容等。
回调函数中的代码可以调用MATLAB提供的各种函数来完成相应的功能,也可以调用自定义的函数来进行更复杂的操作。
编写完回调函数后,我们需要对整个程序进行调试。
MATLAB提供了调试器功能,可以帮助我们定位程序中的错误和调试逻辑。
我们可以通过设置断点、单步执行、观察变量等方式来调试程序,以确保程序能够正常运行并得到正确的结果。
总之,MATLAB中的GUI程序设计可以帮助我们实现更加友好、交互性和可视化的界面。
通过界面设计和回调函数编写,我们可以实现各种功能,如数据可视化、图形绘制、物理模拟等。
基于MATLAB GUI的机械故障诊断实验系统设计与应用

实 验 技 术 与 管 理 第38卷 第8期 2021年8月Experimental Technology and Management Vol.38 No.8 Aug. 2021收稿日期: 2020-10-17基金项目: 国家自然科学基金项目(51875301);清华大学本科生教育教学改革项目(53412102821,53412102921,53412103321) 作者简介: 李峥(1984—),男,北京,硕士,工程师,实验室副主任,主要从事实验教学与转子动力学及机械故障诊断研究,lizheng2021@ 。
引文格式: 李峥,李宗,王天杨,等. 基于MATLAB GUI 的机械故障诊断实验系统设计与应用[J]. 实验技术与管理, 2021, 38(8): 105-109. Cite this article: LI Z, LI Z, WANG TY, et al. Design and application of mechanical fault diagnosis experimental system based on MATLAB GUI [J]. Experimental Technology and Management, 2021, 38(8): 105-109. (in Chinese)ISSN 1002-4956 CN11-2034/TDOI: 10.16791/ki.sjg.2021.08.023虚拟仿真技术基于MATLAB GUI 的机械故障诊断实验系统设计与应用李 峥,李 宗,王天杨,秦朝烨,卢文秀,褚福磊(清华大学 机械工程系,北京 100084)摘 要:机械故障诊断实验具有工程实践背景,对于培养学生的综合能力有着重要意义。
为此基于MATLAB GUI 设计开发了机械故障诊断实验系统,系统包含振动信号的时域、频谱、时频分析3大功能模块,借助案例分析有效地验证了系统的适用性。
基于Matlab GUI的机械波教学动画

A b s t r a c t :M a t l a b h a s a p o w e f r u l d a t a v i s u a l i z a t i o n f u n c t i o n ,a n d i t s g r a p h i c a l u s e r i n t e f r a c e( G U I )
2 0 1 3 年g l l 期
文章编号: 1 0 0 9— 2 5 5 2 ( 2 0 1 3 ) 1 1— 0 1 9 0— 0 4 中图分类号 : T P 3 9 9 文 献标 识 码 : A
基 于 Ma t l a b G U I 的机械 波教 学 动 画
常 建 ,祝凤荣 ,贾焕玉
( 西南交通大学物理科学与技术学院现代物理研究所 , 成都 6 1 4 2 0 2 )
摘 要 :M a d a b有强大的的数据可视化功能 ,它的图形用户界面 ( G U I )设计也比较 简单 ,可以 较好地 对物理 实验现 象进行模 拟 仿 真 。通过 Ma l f a b G U I 动 画演 示机 械横 波传播 过 程 中振 动 质 点 不随波迁移的编写 ,学习到很 多 M a l f a b G U I 设计的知识。文 中所述演示界 面可以脱 离 M a l f a b环
d e s i g n i s mo r e s i mp l e , i t c a n b e u s e d f o r s i mu l a t i n g p h y s i c a l p h e n o me n a , b y w i r t i n g t h e p r o g r a m o f Ma t l a b GUI a n i ma t i o n o f v i b r a t i o n p a r t i c l e i n t h e s h e a r w a v e d o n t a l o n g w i t h he t w a v e o f mi g r a t i o n,we l e a r n a l o t k n o w l e d g e o f Ma l f a b GU I d e s i g n .T h e GUI d e c r i b e d i n t h i s a r t i c l e c a n r u n i n d e p e n d e n t l y f r o m t h e
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机械原理教学演示系统——基于matlab的GUI设计xxx指导老师:20年月日目录一、功能简介 (3)二、总界面 (3)三、凸轮模块 (4)四、齿轮模块 (6)五.参考书目 (6)六.附录(部分程序源代码) (7)一、功能简介本系统能实现机械原理教学过程中凸轮模块与齿轮模块的设计与运动仿真,加深对机械原理课程学习的理解。
二、总界面总界面标题设置:set(gcf,'name','机械原理教学演示系统 made by 翟鲁鑫');背景图片设置:ximg=imread('机械原理课本.jpg');imshow(ximg);背景声音播放:Fs=44100;[ywav,Fs]=wavread('夜的钢琴曲 - 六3.wav');sound(ywav,Fs);到各个模块:到凸轮模块clcclose(gcf);clear allGUItulun到齿轮模块clcclose(gcf);clear allGUIchilun关闭系统:clcquestion='真的要退出吗?';title='确认退出?';button=questdlg(question,title,'是','否','是'); switch buttoncase'是'clear allclosecase'否'returnend三、凸轮模块设计要点:1.背景声音设置方法同主界面2.推程角、远休角、回程角之和不能大于360度的判别条件;基圆半径、滚子半径、行程不能为0的判别条件sr0=get(handles.edit2,'string');r0=str2num(sr0);if isequal(r0,0)errordlg('基圆半径不能为0,请重新输入','出错');returnendsrr=get(handles.edit3,'string');rr=str2num(srr);if isequal(rr,0)errordlg('滚子半径不能为0,请重新输入','出错');returnendsh=get(handles.edit4,'string');h=str2num(sh);if isequal(h,0)errordlg('行程不能为0,请重新输入','出错');returnendn3=phi01+phi02+phi03; %推程角、远休止角与回程角的总和if n3>360errordlg('角度之和大于360,请重新输入','出错');end3.仿真程序。
采用for 循环以及m(j)=getframe之前要先使用moviein函数Initialize movie frame memory,否则要提示错误4.仿真之前要先清除绘图时留下的图像,命令如下cla(handles.axes1);5.回主界面之前要先clear all,关闭音乐、清空global定义的全局变量,以防全局变量影响下一程序6.图像保存。
绘制出的图像可以保存供以后查看。
主要命令有uiputfile()、imwrite()[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},...'保存图像文件','unititled.jpg');if ~isequal([sfilename,sfilepath],[0,0])sfilefullname=[sfilepath ,sfilename];h_tulun = getframe(handles.axes1);imwrite(h_tulun.cdata,sfilefullname);elsemsgbox('您按了取消,保存失败','保存失败','error');end四、齿轮模块设计要点:大部分与凸轮模块相同1.画齿轮齿廓时用到的rot90()2.画整个齿形时用到的旋转矩阵法。
五.参考书目1. 杨家军主编《机械原理》华中科技大学出版社2. 曹弋主编《matlab教程及实训》机械工业出版社3. 李滨城、徐超编著《机械原理计算机辅助分析》机械工业出版社六.附录(部分程序源代码)1、GUImain.mfunction GUImain_OpeningFcn(hObject, eventdata, handles, varargin) set(gcf,'name','机械原理教学演示系统 made by 翟鲁鑫');ximg=imread('机械原理课本.jpg');axes(handles.axes1);imshow(ximg);Fs=44100;[ywav,Fs]=wavread('夜的钢琴曲 - 六3.wav');sound(ywav,Fs);clear globalfunction totulun_Callback(hObject, eventdata, handles)clcclose(gcf);clear allGUItulunfunction tochilun_Callback(hObject, eventdata, handles)clcclose(gcf);clear allGUIchilunfunction close_Callback(hObject, eventdata, handles)clcquestion='真的要退出吗?';title='确认退出?';button=questdlg(question,title,'是','否','是');switch buttoncase'是'clear allclosecase'否'returnend2、GUItulun.mfunction GUItulun_OpeningFcn(hObject, eventdata, handles, varargin) clear allset(gcf,'name','凸轮设计与仿真 made by 翟鲁鑫 Version 1.0');Fs=44100;[ywav,Fs]=wavread('夜的钢琴曲 - 六.wav');sound(ywav,Fs);function huitu_Callback(hObject, eventdata, handles) global r0 %定义全局变量,仿真用global rrglobal hglobal eglobal phi01global phi02global phi03global seglobal xpglobal ypglobal n2global n3global hdglobal duglobal ctcla(handles.axes1) %清除上一次的图形,很有用axes(handles.axes1);sr0=get(handles.edit2,'string');r0=str2num(sr0);if isequal(r0,0)errordlg('基圆半径不能为0,请重新输入','出错');returnendsrr=get(handles.edit3,'string');rr=str2num(srr);if isequal(rr,0)errordlg('滚子半径不能为0,请重新输入','出错');returnendsh=get(handles.edit4,'string');h=str2num(sh);if isequal(h,0)errordlg('行程不能为0,请重新输入','出错');returnendse=get(handles.edit5,'string');e=str2num(se);sphi01=get(handles.edit6,'string');phi01=str2num(sphi01);sphi02=get(handles.edit7,'string');phi02=str2num(sphi02);sphi03=get(handles.edit8,'string');phi03=str2num(sphi03);% sw=get(handles.edit4,'string');% w=str2num(sw);hd=pi/180; %每一角度代表的弧度数du=180/pi; %每一弧度代表的角度数se=sqrt(r0*r0-e*e); %滚子中心B与偏距圆相切点的距离,为以后画凸轮的理论廓线做准备n2=phi01+phi02; %推程角与远休止角之和,以后画图用n3=phi01+phi02+phi03; %推程角、远休止角与回程角的总和if n3>360errordlg('角度之和大于360,请重新输入','出错');end%————凸轮曲线设计————n=360;for i=1:n %凸轮转过的角度为 i%————计算推杆运动规律————if i<=phi01/2 %升程阶段s(i)=2*h*i^2/phi01^2; %升程前阶段等加速,求位移v(i)=4*h*i*hd/(phi01*hd)^2; %升程前阶段等加速,求速度v=v(i);a(i)=4*h*hd^2/(phi01*hd)^2; %升程前阶段等加速,求加速度a=a(i);elseif i>phi01/2&i<=phi01s(i)=h-2*h*(phi01-i)^2/phi01^2; %升程后阶段等减速,求位移v(i)=4*h*hd*(phi01-i)/(phi01*hd)^2; %升程后阶段等减速,求速度v=v(i);a(i)=-4*h*hd^2/(phi01*hd)^2; %升程后阶段等减速,求加速度a=a(i);elseif i>phi01&i<=n2 %远休止阶段s(i)=h;v=0;a=0;elseif i>n2&i<=n3 %回程阶段s(i)=0.5*h*(1+cos(pi*(i-n2)/phi03)); %回程阶段余弦加速度运动,求位移v(i)=-h*pi*hd*sin(pi*(i-n2)/phi03)/(2*phi03*hd); %回程阶段余弦加速度运动,求速度v=v(i);a(i)=-h*pi^2*hd^2*cos(pi*(i-n2)/phi03)/(2*(phi03*hd)^2); %回程阶段余弦加速度运动,求加速度a=a(i);elseif i>n3&i<=n %近休止阶段s(i)=0;v=0;a=0;end%————计算凸轮轨迹曲线————xx(i)=(se+s(i))*sin(i*hd)+e*cos(i*hd); %计算理论轮廓曲线yy(i)=(se+s(i))*cos(i*hd)-e*sin(i*hd);dx(i)=(v-e)*sin(i*hd)+(se+s(i))*cos(i*hd); %计算导数dy(i)=(v-e)*cos(i*hd)-(se+s(i))*sin(i*hd);xp(i)=xx(i)+rr*dy(i)/sqrt(dx(i)^2+dy(i)^2); %计算实际轮廓曲线 yp(i)=yy(i)-rr*dx(i)/sqrt(dx(i)^2+dy(i)^2);end%————输出凸轮轮廓曲线————hold on;grid on;axis equal;axis([-(r0+h) (r0+h+40) -(r0+h+10) (r0+rr+80)]);text(r0+h+3,4,'X');text(3,r0+rr+3,'Y');text(-6,4,'O');xlabel('x/mm');ylabel('y/mm');plot([-(r0+h-40) (r0+h)],[0 0],'k'); %绘制十字交叉线plot([0 0],[-(r0+h) (r0+rr)],'k');plot(xx,yy,'r-'); %绘制凸轮理论轮廓曲线ct=linspace(0,2*pi);plot(r0*cos(ct),r0*sin(ct),'g'); %绘制凸轮基圆plot(e*cos(ct),e*sin(ct),'c-'); %绘制凸轮偏距圆plot(e+rr*cos(ct),se+rr*sin(ct),'k'); %绘制滚子圆plot(e,se,'o'); %绘制滚子圆中心plot([e e],[se se+30],'k'); %绘制推杆plot(xp,yp,'b'); %绘制凸轮实际轮廓曲线function huitu_Callback(hObject, eventdata, handles)global r0 %定义全局变量,仿真用global rrglobal hglobal eglobal phi01global phi02global phi03global seglobal xpglobal ypglobal n2global n3global hdglobal duglobal ctcla(handles.axes1) %清除上一次的图形,很有用axes(handles.axes1);sr0=get(handles.edit2,'string');r0=str2num(sr0);if isequal(r0,0)errordlg('基圆半径不能为0,请重新输入','出错');returnendsrr=get(handles.edit3,'string');rr=str2num(srr);if isequal(rr,0)errordlg('滚子半径不能为0,请重新输入','出错');returnendsh=get(handles.edit4,'string');h=str2num(sh);if isequal(h,0)errordlg('行程不能为0,请重新输入','出错');returnendse=get(handles.edit5,'string');e=str2num(se);sphi01=get(handles.edit6,'string');phi01=str2num(sphi01);sphi02=get(handles.edit7,'string');phi02=str2num(sphi02);sphi03=get(handles.edit8,'string');phi03=str2num(sphi03);% sw=get(handles.edit4,'string');% w=str2num(sw);hd=pi/180; %每一角度代表的弧度数du=180/pi; %每一弧度代表的角度数se=sqrt(r0*r0-e*e); %滚子中心B与偏距圆相切点的距离,为以后画凸轮的理论廓线做准备n2=phi01+phi02; %推程角与远休止角之和,以后画图用n3=phi01+phi02+phi03; %推程角、远休止角与回程角的总和if n3>360errordlg('角度之和大于360,请重新输入','出错');end%————凸轮曲线设计————n=360;for i=1:n %凸轮转过的角度为 i%————计算推杆运动规律————if i<=phi01/2 %升程阶段s(i)=2*h*i^2/phi01^2; %升程前阶段等加速,求位移v(i)=4*h*i*hd/(phi01*hd)^2; %升程前阶段等加速,求速度v=v(i);a(i)=4*h*hd^2/(phi01*hd)^2; %升程前阶段等加速,求加速度a=a(i);elseif i>phi01/2&i<=phi01s(i)=h-2*h*(phi01-i)^2/phi01^2; %升程后阶段等减速,求位移v(i)=4*h*hd*(phi01-i)/(phi01*hd)^2; %升程后阶段等减速,求速度v=v(i);a(i)=-4*h*hd^2/(phi01*hd)^2; %升程后阶段等减速,求加速度a=a(i);elseif i>phi01&i<=n2 %远休止阶段s(i)=h;v=0;a=0;elseif i>n2&i<=n3 %回程阶段s(i)=0.5*h*(1+cos(pi*(i-n2)/phi03)); %回程阶段余弦加速度运动,求位移v(i)=-h*pi*hd*sin(pi*(i-n2)/phi03)/(2*phi03*hd); %回程阶段余弦加速度运动,求速度v=v(i);a(i)=-h*pi^2*hd^2*cos(pi*(i-n2)/phi03)/(2*(phi03*hd)^2); %回程阶段余弦加速度运动,求加速度a=a(i);elseif i>n3&i<=n %近休止阶段s(i)=0;v=0;a=0;end%————计算凸轮轨迹曲线————xx(i)=(se+s(i))*sin(i*hd)+e*cos(i*hd); %计算理论轮廓曲线yy(i)=(se+s(i))*cos(i*hd)-e*sin(i*hd);dx(i)=(v-e)*sin(i*hd)+(se+s(i))*cos(i*hd); %计算导数dy(i)=(v-e)*cos(i*hd)-(se+s(i))*sin(i*hd);xp(i)=xx(i)+rr*dy(i)/sqrt(dx(i)^2+dy(i)^2); %计算实际轮廓曲线 yp(i)=yy(i)-rr*dx(i)/sqrt(dx(i)^2+dy(i)^2);end%————输出凸轮轮廓曲线————hold on;grid on;axis equal;axis([-(r0+h) (r0+h+40) -(r0+h+10) (r0+rr+80)]);text(r0+h+3,4,'X');text(3,r0+rr+3,'Y');text(-6,4,'O');xlabel('x/mm');ylabel('y/mm');plot([-(r0+h-40) (r0+h)],[0 0],'k'); %绘制十字交叉线plot([0 0],[-(r0+h) (r0+rr)],'k');plot(xx,yy,'r-'); %绘制凸轮理论轮廓曲线ct=linspace(0,2*pi);plot(r0*cos(ct),r0*sin(ct),'g'); %绘制凸轮基圆plot(e*cos(ct),e*sin(ct),'c-'); %绘制凸轮偏距圆plot(e+rr*cos(ct),se+rr*sin(ct),'k'); %绘制滚子圆plot(e,se,'o'); %绘制滚子圆中心plot([e e],[se se+30],'k'); %绘制推杆plot(xp,yp,'b'); %绘制凸轮实际轮廓曲线function tomain_Callback(hObject, eventdata, handles)clcclear globalclose(gcf)clear allGUImainfunction tochilun_Callback(hObject, eventdata, handles)clcclear globalclose(gcf)clear allGUIchilunfunction pushbutton6_Callback(hObject, eventdata, handles) [sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},... '保存图像文件','unititled.jpg');if ~isequal([sfilename,sfilepath],[0,0])sfilefullname=[sfilepath ,sfilename];h_tulun = getframe(handles.axes1);imwrite(h_tulun.cdata,sfilefullname);elsemsgbox('您按了取消,保存失败','保存失败','error');endfunction pushbutton9_Callback(hObject, eventdata, handles)clear allclose。