S-Function模块介绍(1)

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

一、介绍

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函数的输出,调用mdlOutputs函数
    sys=mdlOutputs(t,x,u);

  %%%%%%%%%%%%%%%%%%%%%%%
  % GetTimeOfNextVarHit %
  %%%%%%%%%%%%%%%%%%%%%%%
  case 4,        %计算下一仿真时刻
    sys=mdlGetTimeOfNextVarHit(t,x,u);

  %%%%%%%%%%%%%
  % Terminate %
  %%%%%%%%%%%%%
  case 9,        %仿真结束,调用mdlTerminate函数
    sys=mdlTerminate(t,x,u);

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags %
  %%%%%%%%%%%%%%%%%%%%
  otherwise        %其他未知情况处理,用户可自行定义
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

% end sfuntmpl

%
%===========================&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值