Simulink之S-function函数笔记之一

本文章用来做simulink的S-function函数的学习笔记:


  • s-function即system
    function,主要为一种扩展simulink的性能的工具,可以通过MATLAB,C,C++,Ada或Fortran语言来编写。其中MATLAB语言是最为简单方便的,可以调用MATLAB提供的函数。若要调用API函数则需要C来开发,C开发的S-function更加灵活。非MATLAB语言编写的s-function都需要用MEX编译成Mex文件。

  • s-function格式可以简单看成:初始化mdlInitializeSizes()、采样时间设定mdlInitializeSampleTimes()、系统输出mdlOutputs()、结束mdlTerminate()四个部分。这四个函数中一个不能少。

  • 最基本的C语言S-function模板:

#define S_FUNCTION_NAME name
#define S_FUNCTION_LEVEL 2  //定义s-function级别 1级为老版本
#include"simstruc.h"  //必须包含,SimStruc是Simulink提供的数据结构
//..C语言库中的头文件
static void mdlInitializeSizes(SimStruct *S){}
static void mdlInitializeSampleTimes(SimStruct *S){}
static void mdlOutputs(SimStruct *S,int_T tid){}
static void mdlTerminate(SimStruct *S){}
#ifdef MATLAB_MEX_FILE
#include"Simulink.c"//用于仿真
#else
#include"cg_sfun.h"//用于RTW代码生成(非内嵌的S函数)
#endif
//内嵌的S函数需要在代码中添加mdlRTW()和额外编写TLC文件

S函数源文件存储在MATLAB路径下,用MEX命令编译C源文件,编译成功则生成.mexw32文件或.dll文件。

  • s函数的模块封装:右键模块 Create
    MaskSimulink之S-function函数笔记之一_第1张图片其中有四栏:图标&端口、参数&会话、初始化、文档。封装好了之后右键模块Look
    Under
    Mask,Simulink之S-function函数笔记之一_第2张图片
    填写源文件,把.mexw32放置在当前目录下,在对话框中填写正确文件名,再按照顺序填写Parameters中的参数,则完成对S函数模块的封装。

  • 自动建立s-function模块(S-function Builde)

  • M文件的S-function
    [sys,x0,str,ts] = f(t,x,u,flag,p1,p2,...) 函数组成,其中f是S-function的函数名,t是当前时间,x是相应s-function块的状态向量,u是块的输入,flag标识了执行任务,p1,p2…是块参数。simulink反复调用f,对于特定的调用使用flag来调用相应函数。matlabroot/toolbox/simulink/blocks中有M文件s-function的模板(sfuntmpl.m)。

  • Mex文件的S-function
    在mex文件中的s-function的实现可以使用c,c++,Ada或Fortran。simulink直接调用Mex文件中的S-function程序,不需要通过flag值来选择,但在函数中必须按照simulink指定的标准命名规定来定义函数名。matlabroot/simulink/src中有Mex文件S-function的模板(sfuntmpl_basic.c), 另外一个模板sfuntmpl_doc.c有更详细的注释。


如果有什么错误望指教。
参考:《MATLAB的S-function编写指导》。

你可能感兴趣的:(matlab学习)