
matlab 中 s 函数编写心得
函数是 system Function 的简称,用它来写自己的 simulink 模块。(够简单吧, ^_^, 详
细的概念介绍大伙看帮助吧)可以用 matlab 、C、C++、Fortran 、Ada 等语言来写, 这儿我
只介绍怎样用 matlab 语言来写吧(主要是它比较简单)
先讲讲为什么要用 s 函数,我觉得用 s 函数可以利用 matlab 的丰富资源, 而不仅仅局 限
于 simulink 提供的模块, 而用 c 或 c++等语言写的 s 函数还可以实现对硬件端口的操作,还
可以操作 windows API 等的
先介绍一下 simulink 的仿真过程(以便理解 s 函数), simulink 的仿真有两个阶段:
一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、 采样
时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、 计算连
续状态等等,这个阶段需要反复运行,直至结束。
在 matlab 的 workspace 里打 edit sfuntmpl( 这是 matlab 自己提供的 s 函数模板 ) ,
我们 看它来具体分析 s 函数的结构。 它的第一行是这样的: function
[sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先讲输入与输出变量的含义:t 是采样时间,x 是状态变量,u 是输入(是做成 simulink 模
块的输入) ,flag 是仿真过程中的状态标志(以它来判断当前是初始化还是运行等); sys
输出根据 flag 的不同而不同(下面将结合 flag 来讲 sys 的含义), x0 是状态变量的初始
值,str 是保留参数( mathworks 公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置
空就可以了 ,str=[]) ,ts 是一个 1×2的向量, ts(1) 是采样周期, ts(2) 是偏移量。
下面结合 sfuntmpl.m 中的代码来讲具体的结构:
switch flag, %判断 flag ,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0 表示处于初始化状态,此时用函数 mdlInitializeSizes 进行初始化,此函数在
sfuntmpl.m 的 149 行
我们找到他, 在初始化状态下, sys 是一个结构体, 用它来设置模块的一些参数, 各个参 数
详细说明如下
size = simsizes;% 用于设置模块参数的结构体用 simsizes 来生成
sizes.NumContStates = 0;%模块连续状态变量的个数
sizes.NumDiscStates = 0;%模块离散状态变量的个数
sizes.NumOutputs = 0;%模块输出变量的个数
评论0