Simulink初学者指南.docx
《Simulink初学者指南.docx》由会员分享,可在线阅读,更多相关《Simulink初学者指南.docx(68页珍藏版)》请在冰点文库上搜索。
Simulink初学者指南
Simulink指南
1引言
Simulink软件是动态系统建模、仿真和分析的工具,它支持线性系统和非线性系统、连续时间系统和离散采样时间系统以及它们之间相互混合后的系统。
0.1Simulink概述
0.1.1建模工具
使用Simulink,用户可以在理想的线性模型之外研究更接近现实情况的非线性模型,比如摩擦力干扰、空气阻力、齿轮打滑、急刹车等。
Simulink提供给用户众多工具用以对真实世界中几乎所有的问题进行建模仿真。
DemoModels展示了很多的真实世界现象的模型。
Simulink提供了良好的图形界面,使用户把模型建成结构图的形式。
Simulink包含非常全面的block模块图:
汇、源、线性和非线性元件以及连接器。
如果这些图块不能满足需求,用户可以自行创建模块图。
交互式的图形环境简化了建模过程,消除了建立微分和差分方程的需要。
模型具有等级性,可通过自上而下和自下而上的手段建模。
0.1.2仿真工具
仿真可通过Simulink菜单栏或者在Matlab中输入指令来完成。
指令输入的方式对于运行一组(批)仿真实验是比较有利的,比如蒙特卡罗仿真或者某参数有多个可能的取值。
仿真结果可通过scopes和其他显示模块看到。
随意更改某个参数的值可以看结果的变化。
0.1.3分析工具
模型分析工具包括线性化和调整(trimmng)工具,可通过Matlab命令行以及许多应用工具箱完成。
0.1.4Simulink与Matlab环境的交互
Simulink与Matlab环境紧密集成。
它依赖Matlab才能运行,定义和评估模型及
参数。
例如:
定义模型输入;
存储模型输出的数据用以分析和可视化;
在模型内完成函数体的编写。
0.2基于模型的设计
基于模型的设计是对控制系统、信号处理系统和通信系统等动态系统进行设计的更快、成本更低的一种设计过程。
在整个过程中,系统模型居于中心,从需求的建立,到设计、执行和测试,模型是一个可不断重新定义的能够执行的实例。
一旦模型建立之后,仿真可以显示模型的工作结果。
设计流程:
1、定义系统
对于大系统,最好将其分解为几个子系统,分别进行考虑。
2、确定系统的组成要素
分成三类:
参数(常量)、状态(随时间变化的量)、信号流(输入或输出)
3、通过方程对系统建模
代数方程、逻辑运算、微分方程(连续系统)、差分方程(离散系统)
4、搭建Simulink动态结构图
5、运行仿真
6、验证仿真结果
1Simulink介绍
1.1Simulink基本使用
1.1.1启动Simulink软件
打开Matlab软件后,通过以下两种方式启动Simulink:
在工具条上点击Simulink图标
在Matbla指令窗口中输入simulink
启动后,左侧会出现模块图库(blocklibrary),以树状结构显示了系统安装的所有模块图,通过拖曳的方式可以将其复制到模型窗口中去。
1.1.2打开一个模型
打开模型不仅将模型加载到内存中,而且模型图也同时显示在模型窗口中。
如果只想将模型加载在内存中而不显示,可参考“加载模型”。
1.1.2.1打开一个已经存在的模型
操作方式:
菜单栏:
file->open
工具条:
open图标
快捷键:
ctrl+o
指令窗:
如果.mdl文件在当前文件夹或路径上,可直接输入模型的名字(不需要加后缀)
1.1.2.2用不同字符编码的环境中打开模型
如果出现警告信息,需要关闭所有已打开的模型,使用slCharacterEncoding指令改变软件的字符编码格式,然后再打开。
1.1.3加载一个模型
1.1.4保存一个模型
编码出错无法保存:
如果保存时,你在模型中引入了不能识别的字符,保存结果
为.err文件,这时候需要通过文本编辑器查找到错误字符的位置进行修改。
将文件保存为之前版本的文件。
1.1.5使用模型编辑器
包括工具条、菜单栏、画布、背景菜单和状态条。
1.1.6撤销一个操作
可撤销连续101次操作
1.1.7缩放模型动态结构图
放大:
菜单栏View->Zoomin或者r
缩小:
菜单栏View->Zoomout或者v
适合窗口:
菜单栏View->FitSystemToView或者空格键真实大小:
菜单栏View->Normal或者1
1.1.8平移动态结构图
当结构图太大时,可通过键盘+鼠标的方式移动结构图。
快捷键:
p或者q
1.1.9视图操作历史
无论是对模型图的缩放还是平移,这些操作都被记录下来,通过模型编辑器的View菜单按钮或者工具栏,可以展示前一个视角或者后一个视角,以及父图。
1.1.10前置Matlab窗口
Simulink以Matlab作为桌面打开模型窗口,可以通过View->MATLABDesktop的方式使Matlab窗口前置。
1.1.11复制模型图到第三方软件
1、设置图像复制选项:
File->Preferences,设置保存格式,尽量设置为metafile;
2、打开模型,在菜单编辑器中选择Edit->复制模型到剪切板即可。
1.1.12更新动态结构图
如果用户没有具体给定结构图的某些参数或属性,例如信号的数据类型和采样时间,Simulink可以自己推断最合适的值,如果无法推断,将会终止更新,显示错误对话框。
每次仿真运行前,动态结构图都要进行更新,保证仿真能够反映最新的改变,而且用户可以在任何时刻命令Simulink软件进行更新:
操作方式:
Edit->UpdateDiagram或者Ctrl+D。
1.1.13打印动态结构图
操作方式
1、菜单栏选项:
File->Print
2、命令行指令:
print
打印对话框:
选择当前模型图、包含父图、包含子图、打印所有图等选项设置纸张大小和方向
设置打印位置:
平铺打印:
File->EnableTilePrinting
显示页面边界:
View->ShowPageBoundaries
设置打印页边距:
设置打印页数:
打印采样时间:
在打印对话框中选择“printsampletimelegend”
1.1.14生成模型报告
模型报告是一个描述模型结构和内容的HTML文档,包括模型的动态结构图和所有的子系统以及参数的设置。
操作方式:
File->PrintDetails
1.1.15结束Simulink
1.1.16鼠标键盘操作总结
1模型视图快捷键
2、模块编辑快捷键
3、线操作快捷键
4、信号符号操作快捷键
5、注释操作快捷键
1.2Simulink如何工作
1.2.1介绍
动态系统的仿真需要两步完成:
1、利用模型编辑器创建动态结构图,以此描述系统的输入、状态、输出之间的数学关系;
2、给定仿真开始时间和结束时间,进行仿真。
1.2.2动态系统建模
1.2.2.1动态结构图的语义
动态结构图由基本的模块图和信号(线)组成。
Simulink中有两类模块图,一种是非虚拟的模块,代表基本的系统,另一种是虚拟的模块,只是为了图形和组织的方便而使用,可改善程度的可读性。
通常来说,动态结构图是基于时间的。
1.2.2.2创建模型
Simulink提供了一个图形化的模型编辑器,允许用户从模块库中选择模块类型创建和连接。
模块图可代表基本的系统。
模块分为内置的模块和用户自定义的两种。
1.2.2.3时间
动态结构图代表的是一个动态系统同时发生的行为。
确定一个系统随时间的行为需要没经过一个时间间隔便重复不断的求解系统。
这个在连续的时间间隔里不断的求解模型的过程就是系统仿真。
1.2.2.4状态
Simulink模型中存在两种状态:
离散状态和连续状态。
能够定义连续状态的标准模块图有:
积分、状态空间、传递函数、变量传输延迟、零极点
model命令:
显示模型所定义的状态的信息,包括状态的总数,每个模块对应的状态和每个状态的初始值。
Simulink调试时会在每个时刻显示状态的值。
DataImport/Export窗口可以允许用户为状态赋初值,也可以输出各个时刻的状态值。
计算连续状态在当前时刻的值,需要从仿真开始时刻进行积分。
数值积分的精度反过来又依赖于时间间隔的大小,因此,时间间隔越小,解的精度越高。
一些ODE解法,可以根据状态变化的速度自动改变时间步长,达到需要的精度。
计算离散状态需要知道当前时刻与前一时刻状态之间的关系,即状态的更新函数。
离散状态在仿真时间步长上设定约束。
对于既含连续状态又含离散状态的系统,我们称之为混合系统。
解算混合系统模型需要选择一个同时满足连续状态积分精度要求和采样时间的补偿。
连续系统的步长要小于离散系统下一个采样点所用的时间。
适合混合系统的有龙格库塔法、ODE23和ODE45。
1.2.2.5模块参数
1.2.2.6可调参数
可调参数是指不需要重新编译系统便能更改的参数。
1.2.2.7模块采样时间
每一个模块都有一个采样时间用以定义模块执行。
大多数模块允许用户通过sampletime参数设置采样时间。
三种采样方式:
离散采样、连续采样、继承采样
对于离散采样模块,离散采样时间是一个矢量TsTo,第一个分量表示采样间
隔,第二个分量表示初始采样的值。
对于连续采样模块,用0,0表示
对于集成采样模块,用-1,0表示。
1.2.2.8用户自定义模块
1.2.2.9系统与子系统
一个Simulink动态结构图可以由多层构成,每一层定义为一个子系统。
子系统有另类:
虚拟的和非虚拟的。
非虚拟的子系统可控。
虚拟的子系统:
虚拟的子系统只是为了提供图形上的等级性。
模型执行时,Simulink引擎会在适当的时候展开子系统。
非虚拟的子系统:
非虚拟的子系统既能执行,又可提供图形上的等级性。
在执行时,被视作一个单元。
非虚拟的子系统包括:
原子子系统
enabled子系统:
Enabled子系统与atomic子系统基本一致,唯一不同的是,enabled子系统只有在enable端口的信号驱动值大于零时才执行。
用户可以通过Stateswhenenabling参数设置一个enabled子系统保持或重置状态值;也可以通过Outputwhendisabled参数设置保持或重置输出值。
触发式子系统
函数调用子系统
Enabledwithtriggersubsystems
Actionsubsystems
While-subsystems
For-subsystems
1.2.2.10信号
在动态结构图中,信号以带箭头的线表示。
1.2.2.11模块的方法
模块代表多重方程。
通常的方法有:
输出、更新、求导
模块的命名:
BlockType.MethodType例如:
Gain.Outputs
1.2.2.12模型的方法
输出、更新、求导
1.2.3动态系统仿真
1.2.3.1模型编译
当从模型编辑器的仿真菜单中选择开始时,仿真第一步便启动了模型编译器。
模型编译器将模型转换为可执行的形式。
1.2.3.2链接阶段
在此阶段,Simulink引擎为执行分配内存。
1.2.3.3仿真循环阶段
分为两个子阶段:
循环初始化和循环迭代阶段。
每一步,Simulink都会:
1、计算模型的输出
2、计算模型的状态
3、随意的检查连续状态模块的不连续性
4、计算下一步的时间
1.2.3.4求解器
动态系统的仿真过程就是利用模型信息在连续的时间步长上计算状态。
这个过程就是求解模型的过程。
求解器有多种。
固定步长求解器VS.可变步长求解器
固定步长求解器以固定的时间间隔求解模型。
一般来说,步长越小,解的精度越高。
可变步长求解器根据状态变化的快慢改变求解步长。
连续求解器vs.离散求解器
连续求解器利用数值积分计算模型的连续状态。
ODEs离散求解器主要用于解算纯离散模型。
二级步长
一些连续的解算器将仿真总时间细分为一级、二级时间步长。
利用二阶步长的结果代替一级步长,可提高精度。
形状保留
对于导数变化剧烈的信号,需要输入导数的信息以获取更高精度的积分结果。
1.2.3.5过零检测
过零检测的两种算法:
自适应算法和非自适应算法。
算法的选择方式:
菜单栏Simulation->ConfigurationParameter->Solverpane->Algorithm:
choose‘Nonadaptive’or‘Adaptive’
自适应算法适用于:
1系统包含大量振颤现象
2用户系统确定一个保护频段
自适应算法结束括搜(迭代)当出现以下情况时:
1过零误差很小。
需要在solverpan中选择Signalthreshold选项。
2连续过零穿越次数已超过最大值
需要进行过零检测的模块
1.2.3.6代数循环
什么是代数循环?
代数循环是指输入口依赖于输出的情况。
可以通过直接穿过或者通过其他模块反馈的形式。
directfeedthrough(直接穿过)
MathFunctionblock
Gainblock
Integratorblock,whentheinitialconditionportdependsonthe
blockoutput
Productblock
State-Spaceblock,whentheDmatrixcoefficientisnonzeroSumblock
TransferFcnblock,whenthenumeratoranddenominatorareofthesameorder
Zero-Poleblock,whentheblockhasasmanyzerosaspoles
代数循环的数学定义
常微分方程(ODE)可写为:
xfx,t
微分代数方程(DAE)写为:
0gx,xa,t
Simulink不直接求解DAE,用ODE求解DAE
代数循环的物理意义
质量或能量守恒定律,固定的设计参数
代数循环诊断
Simulation->ConfigurationParameter->Diagnostics->Algebraicloop
利用代数循环诊断高亮显示代数循环
利用ashow编译命令高亮显示代数循环
Simulink代数循环解算器
如果模型中含有代数循环,Simulink软件在每一时刻都会使用非线性求解器用来计算代数循环。
求解器会使用迭代运算确定代数循环的解。
这样,模型便比没有代数循环的模型运行得要慢很多。
代数循环求解的算法
置信域算法和线搜索算法
set_param(model_name,'AlgebraicLoopSolver','TrustRegion');set_param(model_name,'AlgebraicLoopSolver','LineSearch');
代数循环的局限
如果代数循环求解不能收敛或者很慢收敛,那么仿真将推出并显示错误。
不能计算代数循环的情况:
Blockswithdiscrete-valuedoutputs
Blockswithnondoubleorcomplexoutputs
Stateflowcharts
Nonvirtualsubsystems
使用代数循环带来的问题
Youcannotgeneratecodeforamodelwithalgebraicloops.
TheSimulinkalgebraicloopsolvercannotsolvethealgebraicThesimulationexecutesslowlywhileSimulinkistryingtosolvethealgebraicloop.
loop.
Formostmodels,thealgebraicloopsolveriscomputationally
expensiveforthefirsttimestep.Simulinksolvessubsequenttime
stepsrapidlybecauseagoodstartingpointforxaisavailablefrom
theprevioustimestep.
2动态系统建模
2.1创建一个模型
2.1.1创建一个空模型
模块库浏览器:
单击工具栏上的New按钮;
菜单栏:
File->New->Model
快捷键:
Ctrl+New
2.1.1.1创建模型模板
默认的模型配置参数:
白画布
ODE45解算器
可视工具栏
可自行编写函数产生一个自己想要的模型
functionnew_model(modelname)
%NEW_MODELCreateanew,emptySimulinkmodel
%NEW_MODEL('MODELNAME')createsanewmodelwith
%thename'MODELNAME'.Withoutthe'MODELNAME'
%argument,thenewmodelisnamed'my_untitled'.
ifnargin==0
modelname='my_untitled';
end
%createandopenthemodel
open_system(new_system(modelname));
%setdefaultscreencolor
set_param(modelname,'ScreenColor','green');
%setdefaultsolver
set_param(modelname,'Solver','ode3');
%setdefaulttoolbarvisibility
set_param(modelname,'Toolbar','off');
%savethemodel
save_system(modelname);
2.1.2增加一个模型
2.1.2.1库浏览器
用户可使用库浏览器进行浏览、搜索、复制模块图。
2.1.2.2打开库浏览器
Simulink按钮
Simulink命令行指令
使库浏览器始终显示在屏幕前端,可在库浏览器的工具栏上选择Pushpin按钮。
2.1.2.3浏览模块库
树状结构文件夹
2.1.2.4搜索模块库
1在模块库浏览器的搜索区域输入要搜索的字符串
2回车或单击Search按钮
2.1.2.5克隆模块图进入模型
拖放即可
2.1.3选择对象
2.1.3.1选择单个对象
单击对象,出现黑色小框
2.1.3.2选择多个对象
每次选择一个:
Shift+LMB(左键单击)
每次选择多个:
拉框
选择所有对象:
Edit->SelectAll
2.1.4定义结构图的颜色
2.1.4.1如何定义结构图的颜色
可定义画布的背景、模块图(及注释)的前景色和背景色
2.1.4.2选择自定义颜色
2.1.4.3定义自定义颜色
2.1.4.4在程序中定义颜色
set_param(gcs,'ScreenColor','[0.3,0.9,0.5]')
2.1.4.5用颜色显示采样时间
菜单栏:
Format->SampleTimeColors
2.1.5连接模块图
2.1.5.1自动连接模块图
连接两个模块图
单击源模块,按下Ctrl键,左键单击目标模块
连接模块组
先选择组(可能是源,也可能是目标),按下Ctrl键,左键单击目标模块
2.1.5.2手动连接模块图
Shift+托拉:
画斜线
画分支线:
将鼠标位置放在主线上,按下Ctrl键,同时按下鼠标左键,拖动至目标模块的输入口。
或者,右键托拉
画线的分段
移动线的分段
在线中插入模块图
2.1.5.3取消连接
方式一、按下Shift键,拖动模块图至新位置
方式二、鼠标移动至连线的终端箭头处,拖拽连线离开模块图
旋转模块图
有时候为了模型图美观,需要旋转模块图以改变连线的方向。
操作方式:
1、选中模块,菜单栏Format->RotateBlock->Clockwise
2、右键单击模块出现context菜单
3、顺时针旋转的快捷键:
ctrl+R
2.1.6自动对齐,均匀分布和重置大小
选中模块后,菜单:
Format->AlignBlocks/DistributeBlocks/ResizeBlocks
2.1.7为结构图注释
2.1.7.1如何为结构图添加注释
添加注释方式
在空白区域双击鼠标,一个小的矩形出现,鼠标会同时变成插入点。
这时就可以键入注释内容
移动注释
将注释拖动至新的位置
编辑注释
选中注释后,
如果要更换注释内容,双击或者拖动鼠标选中要更换的文本,然后键入新的注释如果要插入字符,在插入位置点击鼠标,键入文本
如果要改变某个字符,拖动鼠标选中要更换的文本,然后键入新的文本
删除注释
按下shift键的同时单击注释,按delete或backspace键
改变注释的字体
按下shift键,单击选中注释,从菜单栏Format->Font出现的对话框中选择字体和字号
改变注