您的当前位置:首页正文

Simulink仿真

来源:华佗健康网
Simulink仿真

目录

一、

Simulink分析工具与模型调试 ........................................................................................... 2

1 打开Simulink调试器 ............................................................................................................ 2 2 进行模型仿真与调试 .............................................................................................................. 2 3 断点设置 .................................................................................................................................. 2 4 显示仿真信息 .......................................................................................................................... 2 5 显示模型信息 .......................................................................................................................... 3 二、 Simulink进行数值计算 ....................................................................................................... 3 1 微分方程求解器Solver ......................................................................................................... 3

2 刚性方程求解实例 .................................................................................................................. 3 3 Simulink仿真中的代数环问题 ............................................................................................. 3 三、 Simulink连续系统、离散系统和混合系统,以及状态系统建模 ................................... 3 1 连续系统建模 .......................................................................................................................... 3

2 离散系统建模 .......................................................................................................................... 3 3 混合系统建模 .......................................................................................................................... 3 4 状态模块仿真 .......................................................................................................................... 4 四、 S-函数的建立与应用 ............................................................................................................ 4 1 何为S-Function ..................................................................................................................... 4

2 在模型中使用S-函数 ............................................................................................................. 4 3 S-函数工作原理 ...................................................................................................................... 4 4 M文件S-函数的编写 .............................................................................................................. 4 5 M文件S-函数模板 .................................................................................................................. 4 6 连续、离散和混合系统M文件S-函数 ................................................................................. 5 五、 Stateflow使用技巧与实例应用 ......................................................................................... 5

1 Stateflow基础 ....................................................................................................................... 5

2 运行Stateflow ....................................................................................................................... 5 3 为目标生成C代码 .................................................................................................................. 5 4 利用状态和迁移进行控制 ...................................................................................................... 6 5 进行Stateflow图表仿真 ...................................................................................................... 6 6 仿真过程中的调试 .................................................................................................................. 7 7 Stateflow常用命令 ............................................................................................................... 7

Simulink仿真

一、 Simulink分析工具与模型调试

1 打开Simulink调试器

以vdp模型为例,直接在MATLAB命令窗口里输入vdp即可弹出vdp模型的Simulink窗口。 窗口调试方法:在Simulink模型窗口运用快捷按钮、控制选项以及显示信息进行调试。 命令行调试:启动(sim函数和sldebug函数)、停止(stop)、索引模块(s:b,s代表系统编号,b代表系统中的第几个模块;可通过slist显示各个模块的索引)、与MATLAB交互。 如:sim('vdp',[0,10],simset('debug','on'))或sldebug ‘vdp’

2 进行模型仿真与调试

step next continue run 单步执行调试器命令: 命令 推进到下一个模块 推进到下一个时间步 推进到下一个断点 直接推进到仿真结束,不考虑中间存在的断点 分为:无条件断点和有条件断点。

设置断点命令: 命令 break bafter ebreak tbreak xbreak zcbreak nanbreak rbreak 在指定模块前设置断点 在指定模块后设置断点 在求解错误的地方设置断点 清除或者设置一个时间断点 当仿真步长超出步长限制时 发生过零点时间之前 在数值溢出或者无穷大时设置或者消除断点 当仿真需要重新设置求解器时 设置断点的位置 功能 3 断点设置 无条件断点设置:Simulink调试器快捷按钮;Simulink调试器的Simulink Loop面板设置断点;通过MATLAB命令窗口设置(break和bafter设置,clear删除断点)。 条件中断:nonbreak、rbreak以及xbreak。

4 显示仿真信息

显示输入输出信息:快捷按钮;信息显示命令,如表。 命令 prode disp、undisp trace、untrace prode用法: 命令 prode prode gcb prode s:c

显示被选中模块的输入输出 显示有索引s:c指向模块的输入输出 功能 进入或者退出prode模式。进入后输入任何命令都会退出prode模式 显示被选择模块的当前输入输出 显示每一个断点的输入输出 任何时候执行模块 功能 显示代数环信息:atrace命令,只有一个参数。用法如下表。

命令 atrace 0 atrace 1 atrace 2 atrace 3 atrace 4 不显示信息 显示信息 环内变量的解,求解环所需的迭代次数以及估计的解的误差 环内变量的解,求解环所需的迭代次数以及估计的解的误差 在atrace 2所显示的信息的基础上加上环路的Jacobi矩阵 在atrace 2所显示的信息的基础上加上环路变量在每次迭代的瞬时解 显示模型状态的当前值:states,在MATLAB命令窗口显示。 显示积分信息:ishow,被激活时会显示每一时间步或者在遇到约束仿真时间步大小的状态的时间信息。

5 显示模型信息

显示模型信息:slist。 显示模型中正在被调试的非虚拟系统列表:systems。 列出模型中所有可能会产生非采样过零点的模块列表:zclist。 高亮显示一个特定的代数环或者包括某个特定模块的代数环:ashow s#n。s是指包括此代数环的系统索引,n指代数环在该系统内的索引。高亮显示选定的代数环:ashow gcb。显示包含指定模块的代数环:ashow s:b。消除:ashow clear。 显示调试器状态:status。

二、 Simulink进行数值计算

1 微分方程求解器Solver

见《微分方程求解器solver说明》。

2 刚性方程求解实例

求刚性比s=max(abs(real(eig(a))))/min(abs(real(eig(a))))。 求解析解:dsolve函数。

3 Simulink仿真中的代数环问题

代数环是指同一个模块中输出信号再重新送入到输入端口中。 代数环的处理方法:Nowton-Raphson方法;人工排除代数环;利用Memory模块消除代数环。

三、 Simulink连续系统、离散系统和混合系统,以及状态系统建模

1 连续系统建模

通常使用Continuous模块库、Math operations模块库和Nonlinear模块库中的模块。

积分模块及其应用举例:动力学方程;传递函数建立系统模型;状态方程建立系统模型。 非线性系统,如继电器模块Relay、死区模块Dead zone、饱和模块Saturation等。

2 离散系统建模

通常用到Discretion模块库、Math operations模块库和Sink模块库以及Source模块库中的模块。 单位延迟模块Unit Delay:实现y(k)=u(k-1),即为1/z。 离散传递函数:有离散传递函数模块(z的降幂形式)、零极点传递函数模块(z的因式分解形式)和离散滤波器模块(z^(-1)的降幂形式)三种形式。 离散状态方程模块Discrete State-space,矩阵还可以利用c2d函数通过连续系统转换得到。 零阶保持器Zero-Order hold:输入端是采样器,输出端是常素保持器,实现y(kT)=u(t)。 应用举例:单速率离散系统;多速率离散系统。

3 混合系统建模

一般不用ode15s和ode113求解器,而采用例如Runge-Kutta变步长方法、ode23和ode45方法,因为其在效率和精度方面优于其他的方法。

4 状态模块仿真

连续系统的状态方程:积分方式。 离散系统的状态方程:差分方式。

四、 S-函数的建立与应用

1 何为S-Function

S-Function是System Function的缩写。当MATLAB提供的模型不能完全满足用户需要时,就可以通过S-函数提供给用户自己编写程序来满足自己要求模型的接口。可以使用MATLAB、C、C++、Ada和Fortran语言编写。 S-函数使用的是一种比较特殊的调用格式,可以和Simulink求解器进行交互式操作,这种交互式与Simulink求解器和内置固有模块交互式操作相同。S-函数功能非常全面,适用于连续、离散以及混合系统。

2 在模型中使用S-函数

为了在Simulink中使用S-函数,必须从Simulink中的User-Defined Functions模块库中向Simulink模型文件窗口中拖放S-Function模块。然后在S-Function模块的对话框中的S-Function name文本框中输入S-函数的文件名。 S-函数所起的作用:向Simulink模型中增加一个通用目的的模块;使用S-函数的模块来充当硬件的驱动;在仿真中嵌入已经存在的C代码;将系统表示成一系列的数学方程;在Simulink中使用动画。

3 S-函数工作原理

Simulink模型的处理过程:(1)初始化(传递参数给MATLAB进行求值;得到的数值作为实际的参数使用;展开模型的层次,每个子系统被它们所包含的块替代;检查好相邻模块间的连接;确定状态初值和采样时间);(2)运行阶段(计算输出;更新离散状态;计算连续状态,连续状态的计算过程;计算输出,过零可能被激活)。 S-函数方法主要完成:(1)初始化(初始化结构体SimStruct,它包含了S-函数的所有信息;设置输入输出端口数;设置采样时间;分配存储空间);(2)计算下一个采样时间点;(3)计算下一个时间步的输出;(4)更新状态;(5)数值积分(用于连续状态的求解和非采样过零点)。

4 M文件S-函数的编写

既可以是M文件,也可以是MEX文件。仿真过程说明: 仿真阶段 初始化 计算下一个采样时间 计算输出 更新离散状态 计算导数 计算任务结束 S-函数过程 mdlInitializeSizes mdlInitializeConditions mdlInitializeSampleTimes mdlGetTimeOfNextVarHit mdlOutputs mdlUpdate mdlDerivatives mdlTerminate flag=1 flag=4 flag=3 flag=2 flag=1 flag=9 Flag 5 M文件S-函数模板 S-函数模板文件sfuntmpl.m。 用户可以输入edit sfuntmpl对该模板函数进行编辑和修改,以达到要求实现的结果,其主要参数说明如下:

t——当前时刻,是一个采用绝对计量的时间值,就是从仿真开始模型运行时间的计量值。 x——模块的状态向量,包括连续状态向量和离散状态向量。 u——模块的输入向量。

flag——执行不同操作的标记变量。其取值如上表。

case不一定都是必要的,有的情况下,我们可以进行剪裁。

用户对S-函数进行裁剪,但是不能修改输入和输出参数的名称、顺序,不过可以增加输入参数的数量。

6 连续、离散和混合系统M文件S-函数

AxBux连续系统:

yCxDux(n1)Ax(n)Bu(n)离散系统:y(n)Cx(n)Du(n)

五、 Stateflow使用技巧与实例应用

1 Stateflow基础

Stateflow是与Simulink一起运行的图形设计和发展工具,非常适合在Simulink中队控制和操作实际系统的逻辑进行建模。Stateflow是根据有限状态机(finite state machine)理论发展而来的,是有限状态机各个状态之间的转换。 有限状态机系统——事件驱动系统:事件、状态。 状态转换图:State Transition Diagrams,是有限状态机的基本表达方式。 状态:state,代表一个系统模型,具有相应的布尔(boolean)行为,即有active和inactive两个行为状态,可以相互转换。 转移:transitions,定义系统中的逻辑信号流向(logic flow),从inactive→active。首次转换得到的状态由default transitions表示。 同一时刻,只能有一个状态处于启动状态。Default transitions表示第一次启动状态。转移表示激活状态的不断转移。

事件(events)控制激活状态的转移,只有在事件发生后激活状态才回变为非激活状态,反之依然。

2 运行Stateflow

目标的行为取决于目标的状态和控制目标的状态变化。 用Stateflow来表示模型的控制部分:可以在MATLAB的命令窗口中输入Stateflow命令,也可以直接在Simulink中嵌入Stateflow模块。

状态工具——系统的状态就是系统运行的模态。单击状态工具,可以在图形编辑窗口绘制一个状态的示意模块,允许我们填写状态的名称和动作描述。当状态在active下就可以编写相应的执行程序,且在激活状态下可被执行。

通过迁移来改变Stateflow状态:为激活状态的变换提供路径。

状态迁移——在一个状态的边界单击,并拖动到另一个状态处释放,则可以绘制出从一个状态迁移到另外一个状态的连线。右击转移状态线,则会弹出一个窗口,其中空白迁移需要单击窗口坐标的空白迁移按钮来绘制。

通过事件来激活Stateflow:事件为模型中状态间的转化提供了驱动。事件可以在Stateflow中表示,图形中可通过事件触发器来查看事件。

Stateflow使用数据变量。

3 为目标生成C代码

对于Stateflow机有三个类型的目标:仿真目标(Simulation Targets)、Teal-Time Workshop目标和自定义目标(Custom Targets)。

仿真目标:在Stateflow中,其名称为sfun。当利用Stateflow仿真时,Stateflow为每一个Stateflow机产生一个S-函数(MEX文件),用来支持Stateflow的模型仿真。

Teal-Time Workshop目标:它从Simulink中模型的端口产生Stateflow代码,并可为实时运行Stateflow提供一个框架。名称为rtw。

MATLABStateflowSimulinkStateflow coderReal-Time Workshop

4 利用状态和迁移进行控制

创建一个on-off模型,有以下几步:

(1)创建一个带有Stateflow模块的Simulink模型:在MATLAB命令窗口输入sfnew命令,创建一个带有Stateflow模块的Simulink模型;改变标签Chart(单击修改)。

(2)保存Simulink模型(File->Save as)。 (3)打开Stateflow模块图表:双击Chart模块,弹出一个空白的Stateflow图表编辑窗口。进行图标编辑的Stateflow模块名出现在标题栏中;左边的工具栏是用来绘制组成Stateflow图表的不同图形目标,要特别注意状态工具State tool和默认转移工具Default Transition tool。

(4)在Stateflow图表中为Stateflow模块编写控制行为:在Stateflow图表窗口的左边单击绘制状态框的状态工具;在可编辑区绘制一个带圆角的矩形,在其中输入状态名。

在Stateflow图表中绘制迁移:将光标放在起始状态处,变成十字形光标时,按住左键拖动到终止状态处。还要添加空白转移图标:单击工具栏空白(Default)转移图标,将光标移动到绘图区需要的状态框边界上,松开鼠标即可。

为Stateflow图表添加一个触发事件:在Stateflow图表编辑窗口中,选择Add->Event->Input from Simulink菜单命令,弹出新事件的属性对话框;在Tigger下拉列表框中选择Either选项;单击OK按钮,改变和关闭属性对话框。

向Stateflow图表传递一个触发事件:向触发端口发送一个触发信号,信号的过零上升和下降,即可触发事件。

5 进行Stateflow图表仿真

以下图为例:

(1)定义模型仿真参数:

从Simulink窗口中选择Simulation->Configuration Patameters命令,打开Simulink模型仿真参数对话框;

在打开的对话框的Stop time文本框中,设置结束时间; 在Stateflow编辑窗口,选择Tools->Open Simulation Target菜单命令,弹出Stateflow Target Builder参数对话框;

单击Coder Options,确保选中Enable debugging/animation复选框,单击Ok; 返回Stateflow Target Builder参数对话框,单击Ok; 在Stateflow编辑窗口,选择Tools->Debug菜单命令;

在Animation选项组,确保Enabled单选按钮被选中,设置Delay(sec); 单击Close按钮,关闭Stateflow Debugging参数设置对话框。 (2)Stateflow图表仿真的基本步骤:

调整Simulink模型窗口和Stateflow图表窗口,以便同时观察;

单击Stateflow中的Simulation->start菜单命令,开始仿真。仿真之前,Stateflow临时设置模型为只读状态,避免在仿真过程中被修改;对Stateflow的错误进行剖析;在Stateflow进行仿真的时候,会在MATLAB命令窗口出现的相关信息。

在Stateflow图表仿真开始时,背景变暗,图表处于激活状态; 在Simulink窗口激活触发事件,如双击Manual Switch模块; 再次激活触发事件,得到触发信号。

单击Simulink中的stop按钮停止仿真,此时Stateflow又回到可编辑状态。

6 仿真过程中的调试

利用Stateflow Debugging工具来调试上图中的Controller Stateflow图表仿真,步骤如下: 在Stateflow图表编辑窗口中选择Tools->Debug菜单命令,弹出Stateflow Debugging窗口; 在Breakpoint选项组中选中Chart Switch复选框;

放好Stateflow Debugging窗口的位置,以便能够同时看到Stateflow Debugging窗口、Simulink模型窗口和Controller Stateflow图表窗口;

在Stateflow Debugging窗口中,单击Start按钮运行仿真;

单击Start按钮后,在Simulink窗口双击Manual Switch模块向Controller图表发送事件,在Stateflow Debugging窗口上端就会显示当前的信息,如Stopped、Executing、Current Event和Simulink Time等;

在Stateflow Debugging窗口中单击Step按钮,可以单步仿真; 仿真时可以利用Manual Switch和Step按钮进行调试;

当调试完成,可单击Stop Simulation按钮来结束仿真,此时模型变为可编辑状态; 在Stateflow Debugging窗口中单击Close按钮,关闭窗口。

7 Stateflow常用命令

sfnew——创建一个新的带有Stateflow模块的Simulink模型,使用“sfnew 模型名”可以直接以指定的文件名创建一个新的带有Stateflow模块的Simulink模型。

sfexit——关闭包含Stateflow的模型窗口,并关闭Stateflow编辑窗口。 sfsave——保存编辑的Stateflow模型。 sfprint——打印绘制的Stateflow模型。

因篇幅问题不能全部显示,请点此查看更多更全内容