matlab入门应用03.docx
《matlab入门应用03.docx》由会员分享,可在线阅读,更多相关《matlab入门应用03.docx(27页珍藏版)》请在冰豆网上搜索。
![matlab入门应用03.docx](https://file1.bdocx.com/fileroot1/2023-2/6/9a605664-9fdf-48e5-bef0-fe90de60e6e9/9a605664-9fdf-48e5-bef0-fe90de60e6e91.gif)
matlab入门应用03
第3章Simulink运行仿真
运行Simulink模型的仿真模式主要有两种:
Simulink模型窗口运行模式和MATLAB命令窗口仿真模式。
这两种方法的区别类似于Windows操作系统和Dos操作系统的区别,前者直接在Simulink窗口通过鼠标进行操作,后者在MATLAB命令窗口通过命令的形式对模型进行仿真。
前者比后者直观,后者比前者容易进行批处理。
本章主要讲解Simulink窗口仿真模式,MATLAB命令窗口仿真模式将在第10章进行详细讲解。
本章主要内容包括:
●Simulink模型窗口运行模式
●设置仿真性能与计算精度
3.1Simulink模型窗口运行模式
3.1.1窗口仿真基本操作
直接使用Simulink窗口方式进行仿真交互性,操作简单明了,不需了解这些操作所执行的具体命令及其语法。
例如最简单、最常用的ODE45命令:
[T,Y]=ODE45(ODEFUN,TSPAN,Y0,OPTIONS,P1,P2...)
可以看出,要想记住命令中的参数是非常困难的,不利于初学者使用,而且在仿真过程中也不能修改参数。
MATLAB命令模式形式也并非一无是处,事实上,命令窗口仿真也有它的优点,即可以同时处理一批系统模型的仿真。
上面提到过,在仿真过程中可修改模型参数,但是下面情况除外:
●采样时间
●模型经过零点个数
●模块中的参数维数
●模型的状态
●模型的输入输出个数
●内部模块工作向量的维数
●增加和删除模块
●增加和删除信号线
如果要完成这些修改,必须停止模型仿真,修改完成后再进行仿真。
利用Simulink窗口进行仿真,主要有以下几个操作:
●设置仿真参数
●运行仿真
●终止仿真
●暂停仿真
●仿真诊断
下面详细介绍这几个主要操作:
1.设置仿真参数
在Simulink模型窗口中选择Simulation|ConfigurationParameters命令,弹出如图3.1所示的仿真参数设置对话框。
图中左侧列表框中的目录树包括Solver、DataImport/Export、Optimization、Diagnostics、HardwareImplementation、ModelReferencing和Real-TimeWorkshop等几项。
右侧是每一项所包含的参数设置选项。
图3.1仿真参数设置对话框
仿真参数设置好之后,单击Apply按钮应用设置,或者单击OK按钮。
前者应用设置,但是不关闭对话框,后者应用并关闭对话框。
说明:
单击Cancel按钮表示不设置参数并关闭对话框,单击Help按钮显示对话框的帮助文档。
2.运行仿真
设置好Simulink模型运行环境之后,可以运行仿真了。
选择Simulation|Start命令运行仿真,或者使用Ctrl+T快捷键,或者单击
按钮直接运行。
模型运行时,命令Simulation|Start自动变化为Simulation|Stop,运行按钮
变为暂停按钮
。
3.终止仿真
与运行仿真操作类似,当运行仿真后可选择Simulation|Stop命令,或者使用快捷键Ctrl+T,或者单击按钮
直接终止。
4.暂停仿真
与终止仿真操作类似,当运行仿真后可选择Simulation|Pause命令,或者单击
按钮直接暂停。
5.仿真诊断
在仿真过程中,如果模型中存在错误,运行会被终止,并弹出cmacpid(诊断)对话框,在对话框中显示错误信息,如图3.2所示。
错误信息分为上下两部分,上部分为出错模块的详细信息。
错误信息及其所表示的含义如表3.1所示。
图3.2仿真诊断对话框
表3.1错误信息介绍
错误信息
信息含义
Message
信息类型,如错误模块,警告,日志
Source
导致出错的元素名,如模块
Reportedby
信息来源,如Simulink,Stateflow,Real-TimeWorkshop
Summary
出错信息摘要
3.1.2仿真参数设置
ConfigurationParameters对话框中各个参数包括Solver、DataImport/Export、Optimization、Diagnostics、HardwareImplementation、ModelReferencing和Real-TimeWorkshop等。
1.Solver求解器
求解器设置如图3.3所示,包括两个选项组Simulationtime和Solveroptions,可以设置仿真的起止时间、求解器类型、误差大小等。
图3.3Solver求解器参数
1)Simulationtime仿真起止时间设置
●Starttime:
仿真起始时间,默认为0。
●Stoptime:
仿真终止时间,默认为10。
2)Solveroptions仿真求解器设置
当Type选项为Variable-step(变步长)时,对话框中参数的意义如下:
●Type:
此选项包括Variable-step和Fixed-step,分别表示变步长和定步长。
●Solver:
表示求解方法,当Type值为Variable-step时,包括ode45、ode23、ode113、ode15s、ode23s、ode23t和ode23tb,其中前3个为非刚性求解方法,其余为刚性求解方法。
●Maxstepsize:
求解时的最大步长。
●Minstepsize:
求解时的最小步长。
●Relativetolerance:
求解时的相对误差。
●Absolutetolerance:
求解时的绝对误差。
●Initialstepsize:
求解时的初始步长。
●Zerocrossingcontrol:
在变步长仿真中打开零交叉检测功能。
对于大多数模型,此功能可以增加时间步长从而加速仿真。
如果模型动态变化剧烈,关闭这个选项能够加速仿真,但是降低了仿真的精度。
当Type选项为Fixed-step(定步长)时,如图3.4所示对话框中参数的意义如下。
图3.4固定步长时的参数
●Solver:
当Type值为Fixed-step时,求解方法包括ode1、ode2、ode3、ode4、ode5、ode14x。
●Periodicsampletimeconstraint:
允许指定模型样本周期限制,在模型仿真过程中,Simulink会确保满足此要求,如果不满足要求,会出现错误信息。
此参数包括以下选项:
◆Unconstrained无限制;
◆Ensuresampletimeindependent使模型从参考模型中继承样本时间,而不改变参考模型各种性质。
◆Specified确保模型运行在一系列划分的样本时间范围内。
●Taskingmodeforperiodicsampletimes:
有Auto,MultiTasking和SingleTasking3个选项,分别表示多任务与单任务模型,具体功能如下:
◆MultiTasking当两个模块以不同速率运行时,即多任务仿真中,这种模式将会在检测到两个模块间出现不合法的样本速率时发出错误信号。
不合法的样本速率会导致一个任务的输出数据不能被另外一个任务使用。
通过检测这种信号传输,MultiTasking模式可以帮助创建一个合法的现实多任务系统。
◆SingleTasking这种模式不会检测模块间的信号传输,当模型是一个单任务模型时,所有的信号传输都是同步的,不需要检测。
◆Auto这种模式会自动选择不同的运行模式,当模型是单任务模型时就用SingleTasking模式,当是多任务模型时就会自动选择MultiTasking模式。
其下还包括两个复选框,功能如下:
◆Higherpriorityvalueindicateshighertaskpriority如果选中该复选框,模型的目标实时系统将会给不同的任务分配不同的优先权,高的优先权分配给高优先值的模块。
也就是说会导致模型中低优先值的模块与高优先值的模块间的信号传输是异步的。
如果不选中该复选框,目标实时系统将为低优先值任务分配更高的优先值。
详细内容可参看Real-TimeWorkshop帮助文档。
◆Automaticallyhandledatatransfersbetweentasks如果选中该复选框,将会在模块间插入隐含速率传输模块。
2.DataExport/Import——数据输出输入
单击ConfigurationParameters对话框左侧目录中的DataExport/Import选项,右侧如图3.5所示。
图3.5数据输出输入参数
1)Loadfromworkspace:
包含若干控制选项,可以设置如何从MATLAB工作空间调入数据。
●Input:
格式为MATLAB表达式,确定从MATLAB工作空间输入的数据。
●Initialstate:
格式为MATLAB表达式,确定模型的初始状态。
2)Savetoworkspace:
可以设置如何将数据保存到MATLAB工作空间。
●Time:
设置将模型仿真中的时间导出到工作空间时所使用的变量名。
●States:
设置将模型仿真中的状态导出到工作空间时所使用的变量名。
●Output:
设置将模型仿真中的输出导出到工作空间时所使用的变量名。
●Finalstates:
设置将模型仿真结束时的状态导出到工作空间时所使用的变量名。
3)Saveoptions:
包含若干控制选项,允许设置保存到工作空间或者从工作空间加载数据的各种选项。
●Limitdatapointstolast:
限制导出到工作空间的数据个数,如N。
在仿真结束时,MATLAB工作空间只包含最后N个数据。
●Decimation:
如果指定为M,Simulink则会每隔M个数据输出一个。
●Format:
设置保存到工作空间或者从工作空间载入数据的格式,包括矩阵,结构体,带有时间的结构体。
●Signalloggingname:
用来保存仿真过程中信号记录的变量名。
3.Optimization优化选项
单击Configurationparameters对话框左侧目录中的Optimization项,右侧如图3.6所示。
这个优化选项组可以选择不同的选项来提高仿真性能以及产生代码的性能。
图3.6Optimization参数
1)Simulationandcodegeneration:
该选项组的设置对模型仿真和代码生成共同有效。
●Blockreductionoptimization:
用一个合成模块来代替一组模块,以此来提高模型的执行效率。
●Conditionalinputbranchexecution:
该选项在模型中含有Switch模块或者Multiport模块时使用。
当被选中时,该选项只执行模型中那些需要计算控制输入的,以及每一个时间步长内控制输入所选择的输入数据的Switch或者MultiportSwitch模块。
在通过Real-TimeWorkshop生成模型代码时具有类似的功能,以提高执行速度。
●Signalstoragereuse:
促使Simulink重新使用分配的内存来保存模块的输入与输出数据。
如果不选中该复选框,Simulink将会为每一个模块输出分配一个独立的内存,这在模型很大时将会极大地占用内存空间,因此在对模型进行调试时应该选中此复选框。
如果要进行C-MEX函数调试,或者使用了FloatingScope和Display模块时,则不选中该复选框。
●Inlineparameters:
默认在仿真过程中可以修改许多可调模块参数。
在仿真过程中参数可以修改的模块称为可调模块。
选中此复选框,使所有模块都称为不可调模块,可以移动这些模块到仿真循环外部,从而加快模型仿真的速度以及模型代码的运行速度。
●Applicationlifespan(days):
设置模型所代表系统的活动周期。
这个参数和仿真步长决定了用来保存绝对时间值的固定点模块的数据类型。
2)Codegeneration:
该选项组的设置只对代码生成有效。
4.Diagnostics诊断
Diagnostics参数配置控制面板可以配置适当的参数,如图3.7所示,以便在仿真执行过程中遇到异常条件时采取相应的措施。
图3.7Diagnostics参数
1)Solver:
当Simulink检测到与求解器相关的错误时,这个控制组可设置诊断措施。
●Algebraicloop:
在执行模型仿真时可以检测到代数环。
共有3个参数可供选择,none、warning和error,如果选择error,Simulink将会显示错误信息并高亮显示组成代数环的模块。
选择none则不给出任何信息及提示,选择warning会给出相应的警告而不会中断模型的仿真。
●Minimizealgebraicloop:
如果需要Simulink消除包含有子系统的代数环及这个子系统的直通输入端口,就可以设置此选项来采取相应的诊断措施。
如果代数环中存在一个直通输入端口,仅当代数环所用的其他输入端口没有直通时,Simulink才可以消除这个代数环。
●Blockpriorityviolation:
当仿真运行时,Simulink检测优先设置错误选项的模块。
●Minstepsizeviolation:
允许下一个仿真步长小于模型设置的最小时间步长。
当设置的模型误差需要的步长小于设置的最小步长时,此选项起作用。
●Unspecifiedinheritabilityofsampletime:
当模型中包含有S函数,但又不排除函数从父模型中继承样本时间时,指定诊断时采取的应对措施。
仅当仿真过程中使用的是固定步长的离散求解器,以及求解器有周期样本时间限制时Simulink才会检测。
●Solverdatainconsistency:
兼容性检测是一个调试工具,确保满足Simulink中ODE求解器的若干假设。
其主要作用是让S函数和Simulink的内部模块具有同样的执行规则。
由于兼容性检测会导致仿真性能的大大降低,甚至可达到40%,一般这个选项都设置为none。
利用兼容性检测来检测S函数,有助于找到出现非预期仿真结果的原因。
●Automaticsolverparameterselection:
当Simulink改变求解器参数时采取的诊断措施。
例如,假如用一个连续求解器来仿真离散模型,并设置此选项为warning,此时,Simulink就会改变求解器的类型为离散,并在MATLAB命令窗口显示一个有关于此的警告信息。
2)SampleTime:
当Simulink检测到与模型样本时间相关的编辑错误时,这个控制组可以设置诊断措施,如图3.8所示。
图3.8设置SampleTime参数
●Sourceblockspecifies-1sampletime:
设置源模块的样本时间为-1,如SineWave模块。
●Discreteusedascontinuous:
将离散模块作为连续模块,例如,单位延迟模块是一个离散模块,但是可从与其输入端相连的模块处继承连续样本属性。
●Multitaskratetransition:
在多任务模式中的两个模块,会出现两个无效速率的转换。
●Singletaskratetransition:
在单任务模式中,两个模块间的速率会进行转换。
●Taskswithequalpriority:
这个模型所表示的目标中的一个异步任务与另外一个目标异步任务具有同样的优先级。
如果目标允许具有同样优先级的任务相互支配,则必须将选项设置为error。
3)DataIntegrity:
数据完整性诊断。
设置当Simulink检测到有危害模型定义的数据完整性条件时,Simulink所采取的诊断措施,如图3.9所示。
图3.9设置DataIntegrity参数
●Signalresolutioncontrol:
设置Simulink如何求解传向MATLAB工作空间Simulink.Signal对象的信号。
其中包括以下选项。
◆Tryresolveallsignals&states(warnforimplicitresolution):
将求解每一个传向Simulink.Signal目标的信号或者状态,这些信号或者状态具有与Simulink.Signal同样的名称。
如果信号或状态隐性地求解到信号对象就会显示警告信息,例如,一个信号对象具有与MATLAB工作空间中已经存在的信号或状态同名,而模型又没有设置这些信号或者状态应该传输到信号对象。
◆Tryresolveallsignals&states:
传输每一个信号或者离散状态到具有同名的Simulink.Signal对象中,而不管模型是否已经设置这些信号或者状态到信号对象中。
◆Uselocalsettings:
求解每一个模型指定的信号或者离散状态到MATLAB工作空间Simulink.Signal中。
●Attempteddivisionbysingularmatrix:
Product模块通过对相乘的输入矩阵进行求逆来检测是否存在奇异矩阵。
●32-bitintegertosingleprecisionfloatconversion:
32位整数转换为浮点值,这个转换会带来精度的损失。
●Parameterdowncast:
将模块输出的参数类型转化到具有更小值域的参数类型,例如将uint32转换到uint8,这个诊断仅仅应用于可调谐的参数。
●Parameteroverflow:
参数溢出,参数的数据类型不能容纳参数值。
●Parameterprecisionloss:
将模块输出转换到低精度的数据类型,例如,将double转换为uint8。
●Underspecifieddatatypes:
不设置数据类型。
Simulink在数据传播过程中不能判断数据的类型。
●Duplicatedatastorenames:
复制数据保存所使用的变量名。
●Arrayboundsexceeded:
这个选项将会促使Simulink在仿真过程中检测模块是否写到所分配内存的外部。
最典型的就是当用户自己编写的S函数存在一个漏洞时就会发生这种情况。
如果是激活状态,将在模块每次执行时检测每一个模块,直接产生的影响就是降低了模型执行的速度。
为了避免不必要的降低执行速度,只有当怀疑模型中编写的S函数存在问题时激活这个功能。
●Dataoverflow:
表示信号或参数的值超过信号或参数数据类型所能够保存的值。
●ModelVerificationblockenabling:
这个参数可以全局,或者局部激活,或者非激活模型中的模型验证(verification)模块。
其中可以选择如下选项:
◆Uselocalsettings根据每个认证模块的激活判定参数值来激活或者非激活模块。
如果模块的激活判定值为on,那么模块就处于激活状态,否则相反。
◆Enableall不管模块的激活判定是如何设置,将所有的认证模块都激活。
◆Disableall不管模块的激活判定是如何设置,将所有的认证模块都非激活。
4)Conversion:
该选项组用于用户设置诊断,以便在模型编译过程中Simulink检测到模型中存在数据转换问题时所采取的应对措施,如图3.10所示。
●Unnecessarytypeconversions:
将DataTypeConversion模块添加到不需要转换数据的地方。
●Vector/matrixblockinputconversion:
在模块输入端口会进行向量到矩阵或者矩阵到向量的转换。
图3.10设置Conversion参数
5)Connectivity:
这个选项组可以设置相应的诊断,以便在模型编译过程中Simulink检测到模块的连接问题时采取相应的措施,如图3.11所示。
图3.11设置Connectivity参数
●Invalidfunctioncallconnection:
Simulink检测到模型中存在一个不正确的函数回调子系统。
如果不激活这个错误信息可能会得到一个错误的仿真结果。
●Signallabelmismatch:
仿真中会遇到虚拟信号,它们具有同一个信号,但是具有不同的标签。
●Unconnectedblockinputports:
模型中包含一个模块,其有一个输入端口没有信号线与之连接。
●Unconnectedblockoutputports:
模型中包含一个模块,其中有一个输出端口没有信号线与之连接。
●Unconnectedline:
模型中含有一个没有连接的信号线。
●Unspecifiedbusobject:
设置相应的诊断,当Simulink遇到此类问题时所采取的措施,即当为参考模型生成仿真目标时,如果模型中的任何一个Outport模块都连接到总线,但是没有设置总线对象。
6)Compatibility:
该选项组允许用户设置相应的诊断措施,以便在模型升级或者模型仿真过程中,检测到Simulink不同版本之间的不兼容性时采取相应的应对措施,如图3.12所示。
图3.12设置Compatibility参数
7)ModelReferencing:
该选项组允许用户设置相应的诊断措施,以便在模型升级或者模型仿真过程中,检测到Simulink不同版本之间的不兼容性时采取相应的应对措施。
功能类似于CompatibilityDiagnostics,只是针对的对象有所不同,如图3.13所示。
图3.13设置ModelReferencing参数
●Modelblockversionmismatch:
设置诊断措施,在模型加载或更新升级过程中,当Simulink检测到用来创建或更新Model模块的两个模型版本不兼容时所采取的对应措施。
其中的选项包括:
◆none默认。
◆warning刷新Model模块,同时报告警告信息。
◆error显示错误信息,但是不刷新Model模块。
●Portandparametermismatch:
设置诊断措施,在模型加载或者更新升级过程中,当Simulink检测到本模型中Model模块的I/O端口和参考模型的总线I/O端口之间的失配,或者是本模型中Model模块的参数与参考模型中的参数失配时采取相应的应对措施。
其中的选项包括:
◆none默认
◆warning刷新过时的Model模块,并显示警告信息。
◆error显示错误信息,但是不刷新过时的Model模块。
●Modelconfigurationmismatch:
设置诊断措施,在当前模型与参考模型的参数设置不匹配,或者参考模型本身的参数设置存在问题时所应当采取的应对措施。
默认设置为none。
如果怀疑模型中存在失配的参数设置并可能导致错误的结果时,可以设置诊断为warning或者error。
●InvalidrootInport/Outportblockconnection:
设置诊断措施,在代码生成过程中,当Simulink检测到有不合法的内部连接到模型的总线输出模块端口时所采取的应对措施。
当设置为error时,如果遇到以下几种连接情况,Sim