matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃) |
您所在的位置:网站首页 › simulink磁齿轮模块 › matlab从无到有系列(九):Simulink基础仿真详解(全网最全,从入门到放弃) |
🔗 运行环境:Matlab🚩 作者:左手の明天🥇 精选专栏:《python》🔥 推荐专栏:《算法研究》📚 选自专栏:《数学建模》🧿 优秀专栏:《Matlab神经网络案例分析》
目前持续更新的专栏: 🥇 专栏:Matlab GUI编程技巧🔥 专栏:Matlab从无到有系列📚 专栏:《数学建模》💗 大家好,我是左手の明天!💗 📆 最近更新:2022 年 4 月 2 日,左手の明天的第 215 篇原创博客 🌟🌟往期必看🌟🌟matlab从无到有系列(二):矩阵运算基础 matlab从无到有系列(三):数值计算基础 matlab从无到有系列(四):符号数学基础 matlab从无到有系列(五):基本图形图像处理功能 matlab从无到有系列(六):高级图形处理功能(多窗口绘图以及花瓶绘制) matlab从无到有系列(七):GUI程序设计 matlab从无到有系列(八):M文件及函数的编写 Simulink 中的“Simu”一词表示可用于计算机仿真,而“Link”一词表示它能进行系统连接,即把一系列模块连接起来,构成复杂的系统模型。作为MATLAB的一个重要组成部分,Simulink由于它所具有的上述的两大功能和特色,以及所提供的可视化仿真环境、快捷简便的操作方法,而使其成为目前最受欢迎的仿真软件。 Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持连续的、离散的或二者混合的线性和非线性系统,也支持具有多种采样速率的多速率系统。 本博文主要介绍Simulink的基本功能和基本操作方法,并通过举例介绍如何利用Simulink进行系统建模和仿真。 📢📢📢📢📢📢 精彩开始,come on 📢📢📢📢📢📢 目录 🌟🌟往期必看🌟🌟 🚩Simulink基本操作 ⭐️1.启动Simulink 📜启动Simulink 📜打开空白模型窗口 ⭐️2.建立Simulink仿真模型 📜选取模块或模块组 📜模块拷贝及删除 📜模块调整 📜模块参数设置 📜模块的连接 📜模块文件的取名和保存 ⭐️3.系统仿真运行 💗Simulink模型窗口下仿真步骤 💗MATLAB 命令窗口下的仿真运行 ⭐️4.Simulink 的文件操作 💗新建文件 💗打开文件 ⭐️5.Simulink 的模型窗口 🚩模块库和系统仿真 ⭐️1.Simulink模块库 💗Sources库 💗Sinks 库 💗Continuous 库 💗Math 库 💗Signals & Systems 库 ⭐️2. Simulink环境下的仿真运行 📜仿真参数对话框 🚩子系统创建与封装 ⭐️子系统的创建 💗通过子系统模块来建立子系统 💗组合已存在的模块来建立子系统 ⭐️子系统的封装 💗设置子系统参数变量 💗产生提示对话框 ⭐️条件子系统 💗使能子系统 💗触发子系统 🚩用 MATLAB 命令创建 Simulink 模型 ⭐️Simulink 模型与文件 💗创建新模型 💗打开模型 💗保存模型 ⭐️添加/删除模块和信号线 💗添加模块 💗添加信号线 💗删除模块 ⭐️设置模型和模块属性 🚩Simulink仿真举例 ⭐️悬吊式起重机动力学仿真 💗悬吊式起重机动力学方程 💗悬吊式起重机动力学Simulink仿真 ⭐️脉冲响应模型仿真 ⭐️球弹跳轨迹的模型 🚩Simulink基本操作利用Simulink进行系统仿真的步骤是: 启动Simulink,打开Simulink模块库打开空白模型窗口;建立Smulink仿真模型;设置仿真参数,进行仿真;输出仿真结果。 ⭐️1.启动Simulink 📜启动Simulink单击MATLAB Command窗口工具条上的Simulink图标,或者在MATLAB命令窗口输入simulink,即弹出图示的模块库窗口界面(Simulink Library Browser)。该界面右边的窗口给出Simulink所有的子模块库。 常用的子模块库有Sources(信号源),Sink(显示输出),Continuous(线性连续系统),Discrete(线性离散系统),Function & Table(函数与表格),Math(数学运算), Discontinuities (非线性),Demo(演示)等。 每个子模块库中包含同类型的标准模型,这些模块可直接用于建立系统的Simulink框图模型。可按以下方法打开子模块库: 用鼠标左键点击某子模块库(如【Continuous】),Simulink浏览器右边的窗口即显示该子模块库包含的全部标准模块。模型窗口用来建立系统的仿真模型。只有先创建一个空白的模型窗口,才能将模块库的相应模块复制到该窗口,通过必要的连接,建立起Simulink仿真模型。也将这种窗口称为Simulink仿真模型窗口。 以下方法可用于打开一个空白模型窗口: 在MATLAB主界面中选择【File:New→Model】菜单项;单击模块库浏览器的新建图标![]() 所打开的空白模型窗口如图所示。 📜打开Simulink模型窗口(Untitled) 📜选取模块或模块组 在Simulink模型或模块库窗口内,用鼠标左键单击所需模块图标,图标四角出现黑色小方点,表明该模块已经选中。使模块输入输出端口的方向改变。选中模块后,选取菜单Format→RotateBlock,可使模块旋转900。 例如双击模型窗口的传递函数模块,弹出图示对话框,在对话框中分别输入分子、分母多项式的系数,点击OK键,完成该模型的设置,如右下图所示: 选择模型窗口菜单File→Save as后弹出一个“Save as”对话框,填入模型文件名,按保存(s)即可。 🌻[说明]🌻 模块的修改、调整、连接通常只能在仿真模型窗口中进行,不要直接对模块库中的模块进行修改或调整。 ⭐️3.系统仿真运行 💗Simulink模型窗口下仿真步骤 打开Simulink仿真模型窗口,或打开指定的.mdl文件;设置仿真参数:在模型窗口选取菜单【Simulation: Parameters】,弹出 “Simulation Parameters” 对话框,设置仿真参数,然后按【OK】即可;🌻[说明]🌻 若不设置仿真参数,则采用Simulink缺省设置. 仿真运行和终止:在模型窗口选取菜单【Simulation: Start】,仿真开始,至设置的仿真终止时间,仿真结束。若在仿真过程中要中止仿真,可选择【Simulation: Stop】菜单。也可直接点击模型窗口中的![]() ![]() 在Matlab命令窗口下可直接运行一个已存在的Simulink模型: [t,x,y]=sim(‘model’,timespan,option,ut)其中, t为返回的仿真时间向量; x为返回的状态矩阵; y为返回的输出矩阵;model为系统Simulink模型文件名;timespan为仿真时间;option为仿真参数选择项,由simset设置;ut为选择外部产生输入,ut=[T,u1,u2,…,un]。🌻[说明]🌻 上述参数中,若省略timespan,option,ut则由框图模型的对话框Simulation Parameters设置仿真参数。 ⭐️4.Simulink 的文件操作![]() Simulink 界面 💗新建文件新建仿真模型文件有几种操作: 在 MATLAB 的命令窗口选择菜单“File”→“New→“Model”。 在上图的 Simulink模块库浏览器窗口选择菜单“File”→“New”→“Model”,或者单击工具栏的 图标。 在上图的 Simulink模型窗口选择菜单“File”→“New”→“Model”,或者单击工具栏的 图标。 💗打开文件打开仿真模型文件有几种操作: 在 MATLAB 的命令窗口输入不加扩展名的文件名,该文件必须在当前搜索路径中,例如输入“Ex0701”。 在 MATLAB 的命令窗口选择菜单“File”→“Open…”或者单击工具栏的 图标打开文件。 在 Simulink 模块库浏览器窗口选择菜单“File”→“Open…”或者单击工具栏的 图标打开“.mdl”文件。 在 Simulink 模型窗口中选择菜单“File”→“Open…”或者单击工具栏的 图标打开文件。 ⭐️5.Simulink 的模型窗口模型窗口由菜单、工具栏、模型浏览器窗口、模型框图窗口以及状态栏组成。 模型窗口工具栏如图 Simulink 的模型窗口的常用菜单如表 也可称为信号源库,该库包含了可向仿真模型提供信号的模块。它没有输入口,但至少有一个输出口。 双击图标 📜Sine Wave:产生幅值、频率可设置的正弦波信号 双击图标![]() 📜Step:产生幅值、阶跃时间可设置的阶跃信号 双击图标![]() 该库包含了显示和写模块输出的模块。双击 ![]()
![]() ![]() 📜示波器属性对话框 📜【例】示波器应用示例 Simulink仿真模型如左图所示,示波器输入为3(Y轴个数为3)。右图为该示波器显示的三路输入信号的波形。 该库包含描述线性函数的模块。双击 ![]() ![]() ![]() ![]() 该库包含描述一般数学函数的模块。双击 该库中模块的功能就是将输入信号按照模块所描述的数学运算函数计算,并把运算结果作为输出信号输出。
![]() ![]() ![]() ![]() 点击Simullink模型窗simulation菜单下的Parameters命令,弹出仿真参数对话框如右图所示。它共有5页,用得较多的主要是Solver页和Workspace I/O页。 Simulation time(仿真时间): 设置Start time(仿真开始时间)和Stop time(仿真终止时间)可通过页内编辑框内输入相应数值,单位“秒”。另外,用户还可以利用Sinks库中的Stop模块来强行中止仿真。 Solver options(仿真算法选择): 分为定步长算法和变步长算法两类。定步长支持的算法可在Fixed step size编辑框中指定步长或选择auto,由计算机自动确定步长,离散系统一般默认地选择定步长算法,在实时控制中则必须选用定步长算法;变步长支持的算法如图9-16所示,对于连续系统仿真一般选择ode45,步长范围使用auto项。 Error Tolerance(误差限度): 算法的误差是指当前状态值与当前状态估计值的差值,分为Relative tolerance(相对限度)和Absolute tolerance(绝对限度),通常可选auto。 Output options(输出选择项):有Refine output(细化输出)、Produce additional output(产生附加输出)、Produce specified output only(只产生指定输出)。 这个页面的作用是定义将仿真结果输出到工作空间,以及从工作空间得到输入和初始状态。 Load from workspace:勾选相应方框表明从工作空间获得输入或初始状态。 若勾选Input,则工作空间提供输入,且为矩阵形式。输入矩阵的第一列必须是升序的时间向量,其余列分别对应不同的输入信号。 Save to workspace:勾选相应方框表明保存输出到MATLAB工作空间。 time 和 output 为缺省选中的。即一般运行一个仿真模型后,在MATLAB 工作空间都会增加两个变量tout、yout。变量名可以设置。 Save options(存储选项):存储数据到工作空间的格式,可选数组、构架数组、包含时间数据的构架数组。 📜Simulink中的LTI Viewer 在Simulink中建立的仿真模型也可直接输入到LTI Viewer中进行分析,具体方法如下: 在Simulink 模型窗建立起仿真模型(线性系统)。点击Simulink模型窗上的【Tool:Linear analysis】,在弹出的界面中将输入输出接点分别复制到仿真模型的输入和输出。在建立的Simulink系统模型比较大或很复杂时,可将一些模块组合成子系统,这样可使 模型得到简化,便于连线;可提高效率,便于调试;可生成层次化的模型图表,用户可采取自上而下或自下而上的设计方法。将一个创建好的子系统进行封装,也就是使子系统象一个模块一样,例如可以有自己的参数设置对话框,自己的模块图标等。这样就使子系统使用起来非常方便。 ⭐️子系统的创建 💗通过子系统模块来建立子系统在Simulink库浏览器,有一个子系统(Subsystems)的库模块(有的版本在Signals & Systems子库里),点击该图标即可看到不同类型的子系统模块。 下面以PID控制器子系统创建,说明子系统的创建过程: 🌻1、将子系统库模块中的Subsystem模块复制到模型窗,如图 🌻2、双击该图标即打开该子系统的编辑窗口,如图 🌻3、将组成子系统的模块填加到子系统编辑窗口: 🌻4、将模块按设计要求连接: 🌻5、设置子系统各模块参数(可以是变量);修改 in1 和 out1 模块下面的标签; 🌻6、关闭子系统的编辑窗口,返回模型窗口,修改子系统的标签(PID),该PID子系统即可作为模块在构造系统模型时使用。 如果现有的模型已经包含了需要转化成子系统的模块,就可以通过组合这些模块的方式建立子系统。步骤如下: 🌻1、确定需建立Subsystem的模型(被选中的均标记有黑块) 🌻2、点击模型窗Edit菜单下的Create Subsystem 命令,则所选定的模型组合自动转化成子系统: 🌻3、双击该图标,可打开该子系统窗口,改写输入输出符号: 🌻4、关闭子系统编辑窗口,设置子系统标签,则系统模型如下图所示: 子系统可以建立自己的参数设置对话框,以避免对子系统内的每个模块分别进行参数设置,因此在子系统建立好以后,需对其进行封装。子系统封装的基本步骤如下: 设置好子系统中各模块的参数变量;定义提示对话框及其特性;定义被封装子系统的描述和帮助文档;定义产生模块图标的命令。 💗设置子系统参数变量将原子系统中的常数改为变量,其中饱和环节的上、下限分别设为au、ab (需打开该环节的参数设置框). 💗产生提示对话框🌻选择需要封装的子系统,从模型窗口的 Edit 菜单选择Mask Subsystem命令,即弹出封装编辑器: 🌻该编辑器分为四页(MATLAB6.5版): Icon(图标)页Parameters(参数页)Initialiation(初始化)页Documentation(文档)页其中对于子系统封装最关键的是Parameters项,用于设置参数变量及其类型等。 🌻Parameters页 🌻假定子系统(Nonlinear system)的参数变量名已由封装编辑器全部输入。双击该子系统图标,即弹出如图所示子系统的参数设置框图。如图所示逐栏输入与变量所对应的参数,即完成对该子系统的参数设置。 该子系统当使能端控制信号为正时,系统处于“允许”状态,否则为“禁止”状态。“使能”控制信号可以为标量,也可以为向量。当为标量信号时,只要该信号大于零,子系统就开始执行;当为向量信号时,只要其中一个信号大于零,也“使能”子系统。 【例】积分分离式PID控制器 这种PID控制器可以让控制器中的积分项在系统响应进入稳态时投入运行,以提高稳态精度;而在系统响应处于瞬态过程时,将积分项断开以改善系统动态响应质量。积分分离式PID控制器建立如图所示: 使能模块的控制信号为delta与abs(e)的差值。delta为一很小的正数,当偏差e的绝对值小于delta时,控制器的积分项才投入使用,从而实现了控制器中的积分项的分离控制。 💗触发子系统🌻触发子系统只在触发事件发生的时刻执行。所谓触发事件也就是触发子系统的控制信号,一个触发子系统只能有一个控制信号,在Simulink中称之为触发输入。 🌻触发事件有4种类型,即上升沿触发、下降沿触发、跳变触发和回调函数触发。双击触发子系统中的触发器模块(Trigger),在弹出的对话框中可选择触发类型。 【例】触发子系统应用 触发器设为下降沿触发,正弦输入经触发控制后,成为阶梯波,如图所示。 系统仅在脉冲信号的下降沿导通,并保持导通时刻的输入值至下一个脉冲下降沿。 🚩用 MATLAB 命令创建 Simulink 模型 ⭐️Simulink 模型与文件 💗创建新模型new_system 命令用来在 MATLAB 的工作空间创建一个空白的 Simulink 模型。 语法: new_system('newmodel',option) %创建新模型说明: ‘newmodel’为模型名;option 选项可以是’Library’和’Model’两种,也可以省略,默认为’Model’。 💗打开模型open_system 命令用来打开逻辑模型,在 Simulink 模型窗口显示该模型。 语法: open_system('model') %打开模型说明:‘model’为模型名。 💗保存模型save_system 命令用来保存模型为模型文件,扩展名为.mdl。 语法: save_system('model',文件名) %保存模型说明: ‘model’为模型名可省略,如果不给出模型名,则自动保存当前的模型;文件名指保存的文件名,是字符串,也可省略,如果不省略则保存为新文件。 new_system('test_model') %创建逻辑模型 open_system('test_model') %打开模型 save_system('test_model','test') %保存模型文件 ⭐️添加/删除模块和信号线 💗添加模块使用 add_block 命令在打开的模型窗口中添加新模块。 语法: add_block('源模块名','目标模块名','属性名 1',属性值 1,'属性名 2',属性值2,…)说明: ’源模块名’为一个已知的库模块名,或在其它模型窗口中定义的模块名,Simulink 自带的模块为内在模块,例如正弦信号模块为’built-in/Sine Wave’;’目标模块名’为在模型窗口中使用的模块名。 💗添加信号线模块需要用信号线连接起来,添加信号线使用 add_line 命令。 语法: add_line('模块名','起始模块名/输出端口号','终止模块名/输入端口号') add_line('模块名',m)说明: ’模块名’为在模型窗口中的模块名;m 为有两列元素的矩阵,每列给出一个转折点坐标。 💗删除模块删除示波器模块使用: delete_block('test/Scope')【例】用 MATLAB 命令添加四个模块连接成一个二阶系统模型。 %添加阶跃信号模块 add_block('built-in/Step','test/Step','position',[20,100,40,120]) %添加 Sum 模块 add_block('built-in/Sum','test/Sum','position',[60,100,80,120]) %添加传递函数模块 add_block('built-in/Transfer Fcn','test/Fcn1','position',[120,90,200,130]) %添加示波器模块 add_block('built-in/Scope','test/Scope','position',[240,100,260,120]) %添加连线 add_line('Ex0711','Step/1','Sum/1') add_line('Ex0711','Sum/1','Fcn1/1') add_line('Ex0711','Fcn1/1','Scope/1') add_line('Ex0711','Fcn1/1','Sum/2')程序分析:'position'为位置属性,模块名为'test'。 则出现如图所示的模型 模型属性的获得,获得模型属性和各属性的含义: f1=simget('test') f1 = AbsTol: 'auto' % 绝对允许误差限 Debug: 'off' % 是否允许跟踪调试 Decimation: 1 % 输出位数,每个 1 点输出 1 次 DstWorkspace: 'current' % 输出量工作空间 FinalStateName: '' % 状态变量名 FixedStep: 'auto' % 定步长 InitialState: [] % 初始状态向量 InitialStep: 'auto' % 初始步长 MaxOrder: 5 % 最高算法阶次 SaveFormat: 'Array' % 变量类型 MaxDataPoints: 1000 % 最大返回点数 MaxStep: 'auto' % 最大步长 MinStep: [] % 最小步长 OutputPoints: 'all' % 输出点 OutputVariables: 'ty' % 输出变量 Refine: 1 % 插值点 RelTol: 0.0010 % 相对误差 Solver: 'ode45' % 仿真算法 SrcWorkspace: 'base' % 输入量工作空间 Trace: '' % 是否逐步显示 ZeroCross: 'on' % 检测过零点设置模块和信号线属性 ,建立一个与【例】模型参数相同的二阶系统模型。 set_param('test','StopTime','15') %设置采样停止时间 set_param('test/Step','time','0') %设置阶跃信号上升时间 set_param('test/Sum','Inputs','+-') %设置 Sum 模块信号的符号 set_param('test/Fcn1','Denominator','[1 0.6 0]') %设置传递函数分母则系统模型框图如图所示: 🚩Simulink仿真举例 ⭐️悬吊式起重机动力学仿真 💗悬吊式起重机动力学方程 为便于建模,将起重机动力学方程改写为: 由以上二式可建立如图所示的起重机Simulink模型 : 在运行仿真模型前,须先计算出k1、k2和lmp。设mt =50kg,mp=270kg,l=4m,c=20N/m·s,在MATLAB指令窗输入以下指令 l=4; c=20; mp=270; mt=50; I=mp*l^2; %计算吊重转动惯量 lmp=l*mp; k1=1/(mt+mp); k2=mp*l/(I+mp*l^2);设置仿真时间为200s,启动Simulink仿真,则由小车位移示波器和吊重摆角示波器,可观察到系统在初始状态x(0)=0, 悬吊式起重机小车位移 悬吊式起重机吊重摆角 建立二阶系统 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |