[MATLAB]S模板函数参数详解及简单案例
本博⽂源于中南⼤学《科学计算与MATLAB语⾔》,包括以下内容:
什么叫S函数
⽤M⽂件编写S函数的⽅法
在仿真模型中使⽤S函数的⽅法
什么叫S函数
1. S函数是系统函数(System Function)的简称,是指采⽤⼀种程序设计语⾔描述的⼀个功能模块。
2. ⽤户可以采⽤MATLAB语⾔,也可以采⽤C、C++或FORTRAN等语⾔来编写S函数。
3. S函数有⾃⼰的特定的语法构成规则,可以⽤来描述并实现连续系统、离散系统以及复合系统。
4. S函数能够接受来⾃Simulink求解算法的相关信息,并对求解算法发出的命令做出适当的相应,这种交互作⽤类似于Simulink系统模
块与求解算法的相互作⽤。
⽤MATLAB语⾔编写S函数
在MATLAB命令⾏窗⼝输⼊命令,打开模板⽂件
>> edit sfuntmpl.m
模板⽂件sfuntmpl.m包括:
1个主函数
6个⼦函数
主函数
主函数的引导语句为:
function [sys,x0,str,ts]=fname(t,x,u,flag)
fname是S函数的函数名。
输⼊形参t,x,y,flag分别为仿真时间、状态向量、输⼊向量和⼦函数调⽤标志。在输⼊形参表中,还包括⽤户⾃定义参数表。
输出形参sys代表⼀种返回参数:得到何种参数取决于flag的值。x0是初始状态值:如果系统中⽆状态变量,x0会得到⼀个空阵。对于M⽂件 S函数,str将被置成⼀个空阵;ts是⼀个两列矩阵,⼀列是各状态变量的采样周期,另⼀列是相应的采样时间的偏移量;对于连续系统,采样周期和偏移量都置成0.如果采样周期为-1,则将继承输⼊信号的采样周期
⼦函数
S函数共有6个⼦函数,这些⼦函数的前缀为mdl,由flag的值来控制在仿真的各阶段调⽤S函数的哪⼀个⼦函数。
flag取0:调⽤初始化⼦函数mdlnitalizeSizes。
flag取1:调⽤⼦函数mdlDerivatives实现⽆连续状态的更新
flag取2:调⽤⼦函数mdlUpdate实现离散状态的更新
Flag取3:调⽤输出⼦函数mdlOutputs
flag取4和9较少使⽤。
采⽤S函数实现y=kx+b
定义s函数
以各⾃函数名存盘
主函数:
function [sys,x0,str,ts]=timekb(t,x,u,flag,k,b) switch flag
case0
[sys,x0,str,ts]=mdlInitializeSizes;%初始化case3
sys=mdlOutputs(t,x,u,k,b);%计算输出量case{1,2,4,9}
sys=[];
otherwise                              %出错处理
error(num2str(flag))
end
⼦函数1
s parameterfunction [sys,x0,str,ts]=mdlInitializeSizes()
sizes=simsizes;
sizes.NumContStates=0;%⽆连续状态
sizes.NumDiscStates=0;%⽆离散状态
sizes.NumOutputs=1;%有⼀个输出量sizes.NumInputs=1;%有⼀个输⼊信号sizes.DirFeedthrough=1;%输出量中含有输⼊量sizes.NumSampleTimes=1;%单个采样周期
sys=simsizes(sizes);
%给其他返回参数赋值
x0=[];%设置初始状态为零状态
str=[];%将str变量设置为空字符串
ts=[-1,0];%假定继承输⼊信号的采样周期⼦函数2
function sys=mdlOutputs(t,x,u,k,b)
sys=k*u+b;
在Simulink模型中使⽤S函数
利⽤这个:
搜索模块进⾏条件,设置两个输⼊⼝,双击Scope,
Number of axes调成2,ok连线!最后代码都写好之后,开始配置S-Function,双击它
配置好ok,双击S-function
存盘,然后run就可以看到图像:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。