Simulink中S-Fucntion函数基础知识

目录

仿真标志位flag

初始化状态子函数 

 执行顺序 

  S-Function函数即系统函数System Function的意思,为什么要使用S函数呢?

因为在研究中,有时需要用到复杂的算法设计等,而这些算法因为其复杂性不适合用普通的Simulink模块来搭建,即matlab所提供的Simulink模块不能满足用户的需求,需要用编程的形式设计出S函数模块,将其嵌入到系统中。如果恰当地使用S函数,理论上,可以在Simulink下对任意复杂的系统进行仿真。S函数具有固定的程序格式,用matlab语言可以编写S函数,此外还允许用户使用C、C++、Fortran和Ada等语言进行编写,用非matlab语言进行编写时,需要采用编译器生成动态链接库DLL文件。


仿真标志位flag

  • flag=0。进行系统的初始化过程,调用mdlInitializeSizes函数,对参数进行初始化设置,比如离散状态个数、连续状态个数、模块输入和输出的路数、模块的采样周期个数、状态变量初始数值等。
  • flag=1。进行连续状态变量的更新,调用mdlDerivatives函数。
  • flag=2。进行离散状态变量的更新,调用mdlUpdate函数。
  • flag=3。求取系统的输出信号,调用mdlOutputs函数。
  • flag=4。调用mdlGetTimeOfNextVarHit函数,计算下一仿真时刻,由sys返回。
  • flag=9。终止仿真过程,调用mdlTerminate函数。


初始化状态子函数 

  • dynamically sized inputs,主要给出连续状态的个数、离散状态的个数、输出数目、输入数目和直接馈通否。

  • direct feedthrough,系统的输出是否直接和输入相关联,即输入是否出现在输出端的标志,若是为1,否则为0,一般可以根据在flag=3的时候,mdlOutputs函数是否调用输入u来判断是否直接馈通。我们本例中由于输出函数中调用了u,所以将其值置为1。

  • x0为状态初始数值,str在目前为止的matlab版本中并没有什么作用,一般str=[]即可,ts为一个两列的矩阵,包含采样时间和偏移量两个参数,如果设置为[0 0],表示是连续系统,那么每个连续的采样时间步都运行;[-1 0]则表示按照所连接的模块的采样速率进行;[0.25 0.1]表示仿真开始的0.1s后每0.25s运行一次,采样时间点为TimeHit=n*period+offset。


 执行顺序

  • 在实际仿真过程中,Simulink会自动将flag设置为0,进行初始化过程

  • 然后将flag的数值设置为3,计算模块的输出,一个仿真周期后,Simulink将flag的数值先后设置为1和2,更新系统的连续和离散状态

  • 再将其设置为3,计算模块的输出,如此循环直至仿真结束条件满足。  

点击下方卡片,加入会员全年无限制学习后台(MPC各矩阵的底层逻辑、MPC纵向控制、模型验证、MPC自适应巡航控制、非线性系统如何线性化及MPC动力学跟踪任何轨迹、约束添加及新求解器的求解、轨迹规划、纵向规划等80个系列)会员专享爆品课程及资源,同时获得分佣资格,可赚回自己的学费!

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值