一、介绍
S函数(S-Function)是系统函数(System Function)的简称,是一个动态的计算机语言描述。在MATLAB中,用户可以选择用M文件编写,也可以选择C语言或者HEX文件编写。
二、原理
由于在研究中经常需要复杂的算法设计,而这些算法因为其复杂性不适合用普通的Simlink模块来搭建,MATLAB所提供的Simulink模块不能满足用户的需求,需要用编程的形式设计出S函数模块,然后嵌入到系统当中。若恰当使用S函数,理论上可以在Simulink下对任意复杂的系统进行仿真。
S函数有固定的程序格式,用MATLAB语言可以编写S函数,此外还允许用户使用C、C++、Fortran和Ada等语言进行编写。用非MATLAB语言进行编写时,需要采用编译器生成动态链接库DLL文件。在命令行窗口中输入sfundemos,或者单机Simulink->User-Defined Functions->S-Function Examples,即可出现所示界面,可以选择对应的变成语言查看演示文件。

为了方便,有一个S函数的模板sfuntmpl.m。仅需要在sfuntmpl.m的基础上进行修改即可。在命令行窗口输入edit sfuntmpl即可出现模板函数的内容。 如下:
function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)
%SFUNTMPL General MATLAB S-Function Template
% 输入参数:
% t、x、u分别对应时间、状态、输入信号
% flag为标志位,其,取值不同,S函数执行的任务和返回的数据也是不同的
% 【若想添加其他的输入可以用逗号隔开】
% 输出参数:
% sys为一个通用返回参数值,其取值根据flag的不同而不同
% x0为状态初始数值
% str在目前为止的matlab版本中并没有什么作用,一般str=[]即可
% ts为一个两列的矩阵,包含采样时间和偏移量俩个参数
%
% The following outlines the general structure of an S-function.
%主函数,switch选择语句
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %初始化
%%%%%%%%%%%%%%%%%%
case 0, %系统初始化,调用mdlInitializeSizes函数
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1, %计算连续状态变量的导数,调用mdlDerivatives函数
sys=mdlDerivatives(t,x,u);
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2, %更新离散状态变量,调用mdlUpdate函数
sys=mdlUpdate(t,x,u);
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3, %计算s函数的输出

S-Function是MATLAB中的系统函数,用于创建复杂算法的动态模型。通过编程,用户可以选择M、C、C++等语言编写。文章介绍了S函数的基本原理,提供了模板sfuntmpl.m供用户修改,并通过一个简单的增益乘法例子,展示了如何创建和配置S-Function,包括在Simulink中设置输入变量和参数,以及生成仿真结果。

7万+

被折叠的 条评论
为什么被折叠?



