matlab中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-函数过程

Flag

初始化

mdlInitializeSizes

mdlInitializeConditions

mdlInitializeSampleTimes

flag=1

计算下一个采样时间

mdlGetTimeOfNextVarHit

flag=4

计算输出

mdlOutputs

flag=3

更新离散状态

mdlUpdate

flag=2

计算导数

mdlDerivatives

flag=1

计算任务结束

mdlTerminate

flag=9


5 M文件S-函数模板

       S-函数模板文件sfuntmpl.m。

       用户可以输入edit sfuntmpl对该模板函数进行编辑和修改,以达到要求实现的结果,其主要参数说明如下:

t——当前时刻,是一个采用绝对计量的时间值,就是从仿真开始模型运行时间的计量值。

x——模块的状态向量,包括连续状态向量和离散状态向量。

u——模块的输入向量。

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

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

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

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

你可能感兴趣的:(Matlab)