null第12 章 Simulink的建模与仿真第12 章 Simulink的建模与仿真MATLAB R2007基础教程 清华大学出版社教学目标
教学重点
教学内容教学目标教学目标掌握Simulink模型的建立方法
熟悉Simulink模块库
了解S函数的设计和调用教学重点教学重点掌握Simulink模型的建立方法
熟悉Simulink模块库教学内容教学内容掌握Simulink模型的建立方法
掌握Simulink模块库
S函数的设计和调用Simulink模型的建立方法Simulink模型的建立方法Simulink的启动
Simulink模型窗口的建立
Simulink模块的操作
Simulink的仿真设置Simulink启动Simulink启动 Simulink的启动主要有以下两种方法:
在MATLAB的命令窗口中输入simulink,结果是在桌面上出现一个Simulink Library Browser的窗口,如图12-1,在这个窗口中列出了按功能分类的各种模块的名称。
单击MATLAB主窗口的快捷按钮 ,打开Simulink Library Browser窗口 。
Simulink模型窗口的建立Simulink模型窗口的建立 在Simulink中打开一个空白的模型窗口的方法:
选中Simulink菜单系统中的File | New | Model菜单项后,会生成一个Simulink窗口;
单击Simulink工具栏中的“新建模型”图标;
在MATLAB的命令窗口中选择File | New | New Model菜单项;
Simulink 模块的操作(1/2) Simulink 模块的操作(1/2) 在Simulink的空白模型窗口中,搭建Simulink的模型主要是通过用线将各种功能模块连接构成的。在Simulink中,将两个模块相接非常简单,在每个允许输出的模块口都有一个输出的>符号表示离开该模块,,而输入端也有一个表示输入>的符号表示进入该模块。假如想将一个输入模块和一个输出模块连接起来,那么只需要在前一个模块的输出口处鼠标左键单击,然后拖动鼠标至另外一个模块的输入口,松开鼠标左键,Simulink会自动将两个模块用线连接起来。 Simulink 模块的操作(2/2)Simulink 模块的操作(2/2)模块库中的模块可以直接用鼠标进行拖拽(用鼠标左键选中模块,并按住左键不放),然后放到模型窗口中处理。在模型窗口中,选中该模块,然后四个角都有黑色标记,这时可以对该模块进行复制、删除、移动、命名、转向、设置模块属性等操作。
Simulink的仿真设置 Simulink的仿真设置 在建立完Simulink的模型后,接着就需要对模型仿真参数进行设置:
(1)仿真参数设置
(2)数据输入/输出设置
(3)优化选项设置
(4)诊断参数设置
(5)实时工作设置
(6)HDL语言编码设置
Simulink模块库简介(1/2) Simulink模块库简介(1/2) Simulink的模块库是建立好仿真模型的基础,模块库主要包括:
(1)连续模块 ;
(2)非连续模块 ;
(3)离散模块 ;
(4)逻辑和位操作模块 ;
(5)查找表模块 ;
(6)数学模块 ;Simulink模块库简介(2/2)Simulink模块库简介(2/2) (7)模型检测模块;
(8)模型扩充模块;
(9)端口和子系统模块;
(10)信号属性模块;
(11)信号线路模块;
(12)接收模块;
(13)输入模块;
(14)用户自定义函数模块; S函数的设计和调用S函数的设计和调用S函数的介绍
S函数的调用
S函数设计
S函数的介绍S函数的介绍S函数就是S-Functions,是system-Functions的缩写。当MATLAB所提供的模型不能完全满足用户要求时,就可以通过S函数提供给用户自己编写程序来满足自己要求模型的接口。S函数可以用MATLAB,C,C++,Ada和Fortan.编写。C,C++,Ada,and Fortan S-Functions需要编译为Mex文件,就和其它MEX文件一样,Simulink可以随时动态的调用这些文件。
S函数使用的是一种比较特殊的调用格式,可以和Simulink求解器交互式操作,这种交互式就是与Simulink求解器和内置固有模块交互式操作相同。S-Functions功能非常全面,适用于连续、离散以及混合系统。
S函数允许用户向模型中添加自己编写的模块,只要按照一些简单的规制,就可以在S-Functions添加设计算法。在编写好S-Functions之后就可以在S-Functions莫窥阿中添加相应得函数名,也可以通过封装技术来订制自己的交互界面。S函数的调用S函数的调用在Simulink使用S-Functions的方法就是从Simulink中的User-Defined Functions模块库中向Simulink模型文件窗口中拖放S-Function模块。然后在S-Functions模块的对话框中的S-Functions Name框中输入S函数的文件名,在S-Functions Parameters框中输入S函数的参数值。
在点击edit的选项后可以编辑S函数的代码部分,利用S函数实现需要的功能主要是代码部分的修改。S函数设计(1/6)S函数设计(1/6)对于代码部分的修改,可以使用MATLAB语言按照S-Functions的格式来编写代码。MATLAB提供了一个模板文件,方便S-Function的编写,该模板文件位于MATLAB根目录toolbox/Simulink/blocks下 S函数设计(2/6)S函数设计(2/6)模板函数的代码如下:
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
endS函数设计(3/6)S函数设计(3/6)function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 0;
sizes.NumInputs = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function sys=mdlOutputs(t,x,u)
sys = [];
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
S函数设计(4/6)S函数设计(4/6)M文件S-Functions可用的子函数说明如下:
(1)mdlInitializeSizes:定义S-Function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。
(2)mdlDerivatives:计算连续状态变量的微分方程。
(3)mdlUpdate:更新离散状态、采样时间和主时间同步的要求。
(4)mdlOutputs:计算S-Function的输出。
(5)mdlGetTimeOfNextVarHit: 计算下一个采样时间点的绝对时间。
(6)mdlTerminate:结束仿真任务。S函数设计(5/6)S函数设计(5/6)S-function默认的4个输入参数t、x、u和flag,他们的次序不能变动,各自代表的意义是:
t:表示当前仿真时刻,是采用绝对计量的时间值,是从仿真开始模型运行时间的计量值。
x:模块的状态向量,包括连续状态向量和离散状态向量。
u:模块的输入向量。
flag:执行不同操作的标记变量。S函数设计(6/6)S函数设计(6/6)S-Function默认的4个返回参数为sys、x0、str和ts,他们的次序也不能改变,代表的意义为:
sys:通用返回函数;
x0:初始状态值,当flag的值为0时才有效;
str:没有明确定义,是Math Works为将来应用所作的保留。
ts:一个m×2矩阵,它的两列分别表示采样时间间隔和偏移。