MATLAB中simulink的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本身

猜你喜欢

转载自blog.csdn.net/qq_35358125/article/details/107549927
今日推荐