精华内容
下载资源
问答
  • sfunction模板
    千次阅读
    2020-04-24 21:13:57

    function [sys,x0,str,ts,simStateCompliance] = Sfunction-name(t,x,u,flag)
    %保存的函数文件名
    switch flag
    %初始化函数
    case 0
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
    %求导数
    case 1
    sys=mdlDerivatives(t,x,u);
    %状态更新
    case 2
    sys=mdlUpdate(t,x,u);
    %计算输出
    case 3
    sys=mdlOutputs(t,x,u);
    %计算下一个采样时间
    case 4
    sys=mdlGetTimeOfNextVarHit(t,x,u);
    %终止仿真程序
    case 9
    sys=mdlTerminate(t,x,u);
    %错误处理
    otherwise
    DAStudio.error(‘Simulink:blocks:unhandledFlag’, num2str(flag));
    end
    % mdlInitializeSizes 模型初始化函数,返回;
    % sys 是系统参数
    % x0 系统初始状态,若没有,则x0=[];
    % str 系统阶字串,常取 str=[];
    % ts 取样时间矩阵,对于连续取样时间 ts=[0,0]
    % 若使用内部取样时间,ts=[-1,0],-1表示继承输入信号的采样周期
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes%模型初始化函数
    sizes = simsizes; %取系统默认设置
    sizes.NumContStates = 0; %设置连续状态变量的个数
    sizes.NumDiscStates = 0; %设置离散状态
    sizes.NumOutputs = 0; %系统输出
    sizes.NumInputs = 0; %系统输入
    sizes.DirFeedthrough = 0; %系统是否直通,注:输入信号是否在输出段出现的标识。取 0 或 1
    sizes.NumSampleTimes = 1; %采样周期个数,必须大于1或等于1;
    sys = simsizes(sizes); %设置系统参数
    x0 = []; %系统状态初始化
    str = []; %系统阶字串总为空阶
    ts = [0 0]; %初始化采用时间矩阵
    simStateCompliance = ‘UnknownSimState’;
    % mdlDerivatives 模型计算导数——连续部分的计算,返回连续状态的导数
    function sys=mdlDerivatives(t,x,u)

    sys = []; %根据状态方程(微分部分) 修改此处
    % mdlUpdate 计算离散状态方程
    function sys=mdlUpdate(t,x,u)
    sys = []; %根据状态方程(差分方程部分)修改此处
    % mdlOutputs 计算输出信号,返回模块输出
    function sys=mdlOutputs(t,x,u)
    sys = []; %根据输出方程修改此处
    % mdlGetTimeOfNextVarHit 计算一步的仿真时刻,该函数仅当
    % mdlInitializeSizes函数中的采样时间向量定义了一个可变离散采样时间 ts = [-2,0]时才被使用
    function sys=mdlGetTimeOfNextVarHit(t,x,u)
    sampleTime = 1; % Example, set the next hit to be one second later.
    sys = t + sampleTime;
    % mdlTerminate 终止仿真设定,完成仿真终止时的任务
    function sys=mdlTerminate(t,x,u)
    sys = [];
    %程序end

    更多相关内容
  • S_function模板

    2017-09-05 13:50:01
    对MATLAB/Simulink中的自带S_function模板进行了注释,方便新手的快速熟悉和使用,便于专业人员的快速开发,提高了程序代码的开发速度。
  • edit sfuntmpl,(S-Function模板的缩写)回车键来到如下图片: 下面对其中的参数逐一解释: 第1行 t:采样时间,x:状态变量,u:输入变量,flag:指运行时的状态标志,x0:状态变量的初始值,str:保留参数,...

    S-Function图标显示如下:

    在Matlab中行命令窗口Workspace中键入

    edit sfuntmpl,(S-Function模板的缩写)回车键来到如下图片:

    下面对其中的参数逐一解释:

    第1行

     t:采样时间,x:状态变量,u:输入变量,flag:指运行时的状态标志,x0:状态变量的初始值,str:保留参数,不用问,str=[],ts:1x2的向量,ts(1)是采样周期,ts(2)指偏移量。

    第102行(1到102之间不用管)

    上面说过flag描述系统运行状态是初始还是在运行,第102行就是判断系统处于哪个状态,flag=0就是初始状态,此时调用mdlInitializeSize进行初始化,在第166行,sys是结构体,来设置模块的参数,详细说明如下:

     168:模块连续状态变量的个数

    169:模块离散状态变量的个数

    170:模块输出变量的个数

    171:模块输入变量的个数

    172 :模块是否存在直接贯通

    173:模块采样时间的个数,至少为1

    175:设置完成后赋予sys输出

    根据自己系统中的输入输出设置上述参数个数。

    第180行:

    状态变量设置为空,表示没有状态变量

    保留参数即可,其他的不用管

     采样周期设为0是连续系统的

     

    展开全文
  • 在simulink中利用Sfunction模块,通过编写对应模板实现输入的n次方
  • 500多页,全英文.MathWorks 官方出版
  • 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### } 说明: { 和 $ 符号之间不能有空格,后面参数的空格就没有问题; ###表示模板变量本身的参数位置 ; 支持多个函数,函数之间支持空格 ;...
  • Matlab S-function 使用总结

    万次阅读 多人点赞 2019-05-24 09:45:03
    近期在学习电机的智能控制,里面用到了Matlab中的S函数,在此先对S-function做一个小结。 S-function模块,位于Simulink/User-Defined Functions模块库中,S-function模块及其对话框如下图所示: S-function ...

            近期在学习电机的智能控制,里面用到了Matlab中的S函数,在此先对S-function做一个小结。

    S-function模块,位于Simulink/User-Defined Functions模块库中,S-function模块及其对话框如下图所示:

             S-function name:填入S-function的函数名称,这样就建立了S-function模块与M文件形式的S-function之间的对应关系,单机后面的Edit可以打开S-function的M文件的编辑窗口。

            S-function parameters:填入S-function需要输入的外部参数的名称,如果有多个变量的话,中间用逗号隔开,如a,b,c.

            S-function modules:只有S-function是用C语言编写并用MEX工具编译的C MEX文件时,才需要填写该参数。

            设置完这些参数后,S-function模块就成为了一个具有指定功能的模块,它的功能取决于S-function的内容,也可对内容修改进而改变模块功能。

            编写M文件S-function

            在目录toolbol\simulink\blocks中给出了M文件S-function的模板sfuntmpl.m,我电脑上的路径如下图所示:

            该模板由一个主函数和六个子函数组成,每个子函数对应一个特定的flag值。主函数通过flag的值分别调用不同的子函数。在仿真期间,这些子函数被S-function以回调程序的方式调用,执行S-function所需的任务。

           学习S-function最直接有效的方法就是学习S-function范例,下面是我详细分析的sfuntmpl.m模板代码内容:

    function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)
    %主函数
    %主函数包含四个输出:
    %                 sys数组包含某个子函数返回的值
    %                 x0为所有状态的初始化向量
    %                 str是保留参数,总是一个空矩阵
    %                 Ts返回系统采样时间
    %函数的四个输入分别为采样时间t、状态x、输入u和仿真流程控制标志变量flag
    %输入参数后面还可以接续一系列的附带参数simStateCompliance
    switch flag,
      case 0,
          [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
      case 1,
        sys=mdlDerivatives(t,x,u);
      case 2,
        sys=mdlUpdate(t,x,u);
      case 3,
        sys=mdlOutputs(t,x,u);
      case 4,
        sys=mdlGetTimeOfNextVarHit(t,x,u);
      case 9,
        sys=mdlTerminate(t,x,u);
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    
    end
    %主函数结束
    %下面是各个子函数,即各个回调过程
    function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
    %初始化回调子函数
    %提供状态、输入、输出、采样时间数目和初始状态的值
    %初始化阶段,标志变量flag首先被置为0,S-function首次被调用时
    %该子函数首先被调用,且为S-function模块提供下面信息
    %该子函数必须存在
    sizes = simsizes;
    %生成sizes数据结构,信息被包含在其中
    sizes.NumContStates  = 0;
    %连续状态数,缺省为0
    sizes.NumDiscStates  = 0;
    %离散状态数,缺省为0
    sizes.NumOutputs     = 0;
    %输出个数,缺省为0
    sizes.NumInputs      = 0;
    %输入个数,缺省为0
    sizes.DirFeedthrough = 1;
    %是否存在直馈通道,1存在,0不存在
    sizes.NumSampleTimes = 1;
    %采样时间个数,至少是一个
    sys = simsizes(sizes);
    %返回size数据结构所包含的信息
    x0  = [];
    %设置初始状态
    str = [];
    %保留变量置空
    ts  = [0 0];
    %设置采样时间
    simStateCompliance = 'UnknownSimState';
    function sys=mdlDerivatives(t,x,u)
    %计算导数回调子函数
    %给定t,x,u计算连续状态的导数,可以在此给出系统的连续状态方程
    %该子函数可以不存在
    sys = [];
    %sys表示状态导数,即dx
    function sys=mdlUpdate(t,x,u)
    %状态更新回调子函数
    %给定t、x、u计算离散状态的更新
    %每个仿真步内必然调用该子函数,不论是否有意义
    %除了在此描述系统的离散状态方程外,还可以在此添加其他每个仿真步内都必须执行的代码
    sys = [];
    %sys表示下一个离散状态,即x(k+1)
    function sys=mdlOutputs(t,x,u)
    %计算输出回调函数
    %给定t,x,u计算输出,可以在此描述系统的输出方程
    %该子函数必须存在
    sys = [];
    %sys表示输出,即y
    function sys=mdlGetTimeOfNextVarHit(t,x,u)
    %计算下一个采样时间
    %仅在系统是变采样时间系统时调用
    sampleTime = 1; 
    %设置下一次采样时间是在1s以后
    sys = t + sampleTime;
    %sys表示下一个采样时间点
    function sys=mdlTerminate(t,x,u)
    %仿真结束时要调用的回调函数
    %在仿真结束时,可以在此完成仿真结束所需的必要工作
    sys = [];

            S-function应用实例

            用S-function实现Gain增益模块,即对输入信号进行放大。

            (1)首先将模板文件sfuntmpl.m另存为Gain.m,修改主函数,增加新的参数gain,修改函数名为Gain:

            (2)增益参数是用来计算输出值的,所以需要对mdlOutput的调用进行修改:

            (3)修改mdlInitializeSizes初始化回调子函数:

            (4)修改mdlOutput输出子函数:

            (5)保存Gain.m,并建立如下图所示的系统模型,对余弦信号的幅值放大gain倍。在S-function模块的参数对话框中设置S-function parameter 为3(该设置即为外部输入gain的大小)

     

            完整代码如下所示:

    function [sys,x0,str,ts,simStateCompliance] = Gain(t,x,u,flag,gain)
    switch flag,
      case 0,
        [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
      case 1,
        sys=mdlDerivatives(t,x,u);
      case 2,
        sys=mdlUpdate(t,x,u);
      case 3,
        sys=mdlOutputs(t,x,u,gain);
      case 4,
        sys=mdlGetTimeOfNextVarHit(t,x,u);
      case 9,
        sys=mdlTerminate(t,x,u);
      otherwise
        DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
    end
    function [sys,x0,str,ts,simStateCompliance]=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 = [];
    ts  = [0 0];
    simStateCompliance = 'UnknownSimState';
    function sys=mdlDerivatives(t,x,u)
    sys = [];
    function sys=mdlUpdate(t,x,u)
    sys = [];
    function sys=mdlOutputs(t,x,u,gain)
    sys =gain*u;
    function sys=mdlGetTimeOfNextVarHit(t,x,u)
    sampleTime = 1;   
    sys = t + sampleTime;
    function sys=mdlTerminate(t,x,u)
    sys = [];

              (6)运行仿真,仿真结果如下图所示蓝线为输入,黄线为输出,输出放大了3(gain)倍。

     

            注:在参数gain的设置时,为了更直观的表达可以对S-function模块进行封装

            右击S-function模块,选择Mask,Creat Mask...对模块进行封装,如下图所示:

            进行参数设置,如下图所示:

            对S-function的S-function parameter 选项重新设置,如下图所示:

            S-function parameter 的名称要和封装模块中的参数名称一样,此例中都为gain。都设置完成后再次点击S-function函数Gain会弹出如下参数设置框:

            把增益gain设置为5,仿真结果如下:

            这样可以更方便的对增益参数gain进行设置。

            以上就是Matlab S-function 函数的使用心得,要用好S-function还是要多编几个程序,孰能生巧。S-function是Simulink最具魅力的地方,结合了Simulink框图简洁的特点和编程灵活的有点,增强和扩展了Sinulink的强大机制。

    展开全文
  • 用于Spring Cloud功能的OpenFaas模板 这是一个OpenFaas模板,它提供以下环境: 弹簧扣功能 webflux 杰克11 用功能编写您的业务逻辑,即仅提供... 因此,只需代码,函数-RequestHandler,不必担心docker,k8s等。
  • MATLAB的S-Function编写指导 ,十分全面,但是具体使用还是要结合众多网友分享的博客,以及自己实操。
  • MATLAB中simulink的S-function使用指南

    千次阅读 2020-07-23 22:54:29
    在matlab命令行中输入 edit sfuntmpl ,可以打开S-function模板,里面对S-function的函数和变量作用均作了介绍。 S-function的基础是现代控制理论的状态定义,使用S-function需具备现代控制理论的基本知识 为什么...

    重要且全面的学习资料

    在matlab命令行中输入 edit sfuntmpl ,可以打开S-function的模板,里面对S-function的函数和变量作用均作了介绍。 S-function的基础是现代控制理论的状态定义,使用S-function需具备现代控制理论的基本知识

    为什么要有S-function

    • 因为matlab中的模块太过标准化,无法满足多变的应用和调试需求,在以下情况下,S-function可以很方便的对系统进行建模。
    • 控制或受控系统具有复杂时变特性
    • 控制系统在控制过程中自我迭代,存在需要保留和记录的变量
    • 控制系统的输出较为复杂,难以用function和m-function表示
    • 系统在生成、运行或结束时需要执行特殊操作

    S-function属性窗口介绍

    • S-function name :S-function的名字,随便写,自己认识即可
    • S-function parameters:S-function的模块参数,默认为空
    • S-function modules :S-function的模块,无需修改,采用系统
    • 默认模块即可 也就是说,这三个参数,只需要修改第一个参数为模块命名即可
    • 点击Edit,可以进入S-function的代码编辑界面
      在这里插入图片描述

    S-function内部函数介绍

    • [sys,x0,str,ts] = functionName(t,x,u,flag)
      这是函数的总入口,收到信号后,首先进入这个函数.这个函数包含一个switch语句,根据情况进入不同的子函数
    • [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
      S-function进行基本的设置,具体参数会在后面进行介绍。相当于构造函数
    • sys=mdlDerivatives(t,x,u); 该函数仅在连续系统中被调用,用于产生控制系统状态的导数
    • sys=mdlUpdate(t,x,u); 该函数仅在离散系统中被调用,用于产生控制系统的下一个状态
    • sys=mdlOutputs(t,x,u); 产生(传递)系统输出
    • sys=mdlGetTimeOfNextVarHit(t,x,u) 获得下一次系统执行(next hit)的时间,该时间为绝对时间,此函数仅在采样时间数组中指定变量离散时间采样时间[-2 0]时会被调用。
    • sys=mdlTerminate(t,x,u) 相当于构析函数,结束该仿真模块时被调用

    S-function的执行顺序

    1. 在仿真开始时,执行mdlInitializeSizes
    2. 若系统包含连续部分,则调用mdlDerivatives;若系统包含离散部分,则调用mdlUpdate
    3. 调用mdlOutputs,产生输出
    4. 若满足条件,则执行mdlGetTimeOfNextVarHit
    5. 循环执行1–3,直至仿真停止
    6. 执行mdlTerminate,仿真停止

    S-function输入输出参数含义

    输入参数t,x,u,flag

    • t :系统时间
    • x :系统状态
    • u : 系统输入,即在simulink models中连接至S-function的线上的数据。注意区分x和u
    • flag : 系统状态,由系统自动生成,决定了系统应当执行哪个S-function子函数

    mdlInitializeSizes例程与介绍

    sizes = simsizes;           %调用构造函数,生成一个默认类
    
    sizes.NumContStates  = 0;   %设置系统连续状态的数量
    sizes.NumDiscStates  = 0;   %设置系统离散状态的数量
    sizes.NumOutputs     = 0;   %设置系统输出的数量
    sizes.NumInputs      = 0;   %设置系统输入的数量
    sizes.DirFeedthrough = 1;   %设置系统直接通过量的数量,一般为1
    sizes.NumSampleTimes = 1;   % at least one sample time is needed
                                % 需要的样本时间,一般为1.
                                % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态
    
    sys = simsizes(sizes);
    x0  = [];                   % 系统初始状态
    str = [];                   % 保留变量,保持为空
    ts  = [0 0];                % 采样时间
    simStateCompliance = 'UnknownSimState';
    

    注意

    • S-function的基础是现代控制理论的状态定义,S-function本身是一个系统,可以被设置为控制系统,也可以被设置为受控系统。因此本文所指的系统,均指S-function本身
    展开全文
  • Simulink系列 —— S-function的使用笔记(1)

    千次阅读 多人点赞 2020-05-10 18:25:03
    文章目录函数形式S-function的输入参数S-function的输出参数信息的传递标准模板模块使用 从上图来看,S-function可支持多种语言编写,本文为MATLAB版使用笔记。 函数形式 [sys,x0,str,ts]=functionName(t,x,u,flag,...
  • Matlab S-Function详解

    万次阅读 多人点赞 2017-10-24 22:00:51
    Function的简称, 用它来写自己的simulink模块. s函数可以用matlab、C、C++、Fortran、Ada等语言来写, 这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单) < xmlnamespace prefix ="o" ns ="urn:schemas...
  • Simulink基于level 2的s-function C语言编写

    千次阅读 多人点赞 2019-08-13 19:22:05
    在MATLAB中有时候用模块搭建实现一个功能不是十分方便,可以通过编写程序来实现,simulink模块库提供了很不错的编程模板供用户使用。我们只需要简单的进行配置就能够利用模板来像C语言一样编写程序了
  • 解析ue4的TFunction模板

    千次阅读 2020-09-12 18:38:31
    // UE4TFunction.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> /** 声明类模板名:TEnableIf,Result具有默认值void [9/12/2020 ZC] *...
  • S-Function模块C语言实现

    万次阅读 2019-04-17 10:55:03
    S-Function可以使用Matlab,C,C++等语言来辩,使用MEX工具,将C,C++的S-Function编译成MEX-文件,在需要的时候,他们可与其它的MEX-文件一起动态地链接到Matlab中。 S-Function范例: Simulink提供了一个S-...
  • S-Function

    千次阅读 2018-07-13 14:04:06
    S-函数使Simulink的功能大大扩充,除Mmatlab外,用户还可以用其他语言(C/C++/FORTRAN/Ada)编写实现算法,很强大的同时也对使用者提出了较高的要求。下面是编写S-函数的整个流程: 0 基础知识 (1)Simulink仿真...
  • 本专题将用三篇文章对S-function进行介绍及其案例详解。欢迎关注~ 目录一、S-Function简介二、详解sfuntmpl函数2.1 sfuntmpl函数介绍2.2 mdlInitializeSizes函数2.3 mdlDerivatives函数2.4 mdlUpdate函数2.5 ...
  • Simulink S-function 学习及使用实例

    千次阅读 多人点赞 2020-11-19 23:35:19
    文章目录前言1. 概述1.1 基本概念1.2 s-functiong 模块... M文件的S-function 模板4. 使用实例4.1 S-function实现离散系统总结 前言 本文介绍了s-function 的基本概念和使用案例。 1. 概述 函数是系统函数(System Func
  • C MEX S-Functions.pdf

    2020-08-28 22:56:34
    MATLAB中的S-Function的用法介绍PPT,对于S FUNCTION使用入门比较方便; S-Function可以使用Matlab,C,C++等语言来辩,使用MEX工具,将C,C++的S-Function编译成MEX-文件,在需要的时候,他们可与其它的MEX-文件一起...
  • s-function的介绍

    万次阅读 2019-04-07 18:40:38
    Simulink 在 Sfunction Examples 模型库中为用户提供了针对不同语言的很多 S-函数模板和例子,用户可以根据自己的需要修改相应的模板或例子即可完成 S-函数源文件的编写工作; 三、在系统的 Simulink 仿真框图...
  • simulink中s-function使用

    万次阅读 多人点赞 2017-01-11 14:46:42
    s-function是用于单输入单输出系统模块。多输入多输出可以通过Mux跟Demux对信号进行组合和分离 转自:http://blog.sina.com.cn/s/blog_4b013fb10100nbdm.html 最近看了一下无刷直流电机的相关概念及仿真,看到...
  • onCreated ( function ( ) { // This will initialize reactive vars attached to the template with // corresponding default values. You can call `createVars` multiple times // without overriding any
  • S函数模板

    千次阅读 2017-03-27 16:52:54
    本文为simulink中s函数模板的翻译版。可直接拷入m文件编辑。
  • matlab中S-function的概念及使用

    千次阅读 2018-04-17 15:03:41
    更精彩文章:http://blog.sina.com.cn/s/blog_4b013fb10100nbdm.html ...s-function也就是system-function的缩写。 说得简单,s-function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自...
  • S-Function 入门

    千次阅读 2018-03-30 10:40:12
    s函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较...
  • Simulink之S-function函数笔记之一

    万次阅读 2017-08-04 14:43:19
    本文章用来做simulink的S-function函数的学习笔记: s-function即system function,主要为一种扩展simulink的性能的工具,可以通过MATLAB,C,C++,Ada或Fortran语言来编写。其中MATLAB语言是最为简单方便的,...
  • C++——模板(超详细的模板解析)

    千次阅读 多人点赞 2022-03-28 17:29:35
    超详细的C++模板知识列表,持续维护。
  • 摘要 ...前面几期讲过如何通过s-Function写入简单的C代码仿真,今天再度深入讲讲如何在s-function中调用自己写的C代码文件。文本有附上前面几期相关主题介绍,小伙伴们可以自行复习一下。 ...
  • MATLAB中的S-Function的用法(C语言)

    千次阅读 2020-01-02 19:05:08
    1. S-Function简介 S-Function是system-function的缩写。说得简单,S-Function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。 2. MEX函数与M文件的区别 第一, MEX...
  • 微信小程序商城系统完整模板

    热门讨论 2018-09-08 14:02:54
    微信小程序商城系统完整模板,需要改下购物车接口!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,318
精华内容 46,927
关键字:

sfunction模板