S-Function的用处
S-Function是用Matlab,C/C++或者Fortran实现的Simulink模块。S-Function和别的MEX文件一样是动态链接的子例程,由Matlab执行引擎自动加载和执行。S-Function可以由Simulink中的模块直接创建subsystem,也可以在Matlab中自定义算法进行实现。在Simulink的模块库中提供了四种语言的API接口:
选择其中一个选项后(譬如C-file),Simulink库中会提供一系列的例程以供后续具体开发和调整。比如连续信号系统,离散信号系统,S-Function Builder构建的系统,C-MEX模版等等。
Matlab和Simulink联合开发
在Simulink中定义自定义的S-Function可以通过Matlab中提供的模版,打开如下模版进行改动调整可以快速完成开发:
edit sfuntmpl.m
函数名可以根据需要改成Simulink中block适配的函数名。这个函数前四个输入的形参是固定的,后面可以追加自定义形参。其中t表示Simulink仿真运行当前的时间,x则是对应S-Function的状态向量(x0则是该状态向量的初始值),u是在Simulink中这个block的输入信号,flag配合switch/case结构实现这个block的功能。这里的模型基本上是按照控制系统中y = Ax+Bu来的,提供离散/连续系统和积分/直馈输出。
function [sys,x0,str,ts] = PlaneModelxiahua(t,x,u,flag,H0,U0,Theta0,vyd0)
switch flag
%flag为0时,调用mdlInitializeSizes子程序对subsystem进行初始化
case 0
[sys,x0,str,ts]=mdlInitializeSizes(H0,U0,Theta0,vyd0);
%flag为1时,调用mdlDerivatives子函数进行连续状态变量计算
case 1
sys=mdlDerivatives(t,x,u);
%flag为3时,调用mdlOutputs子函数计算模块输出
case 3
sys=mdlOutputs(t,x,u)