我是靠谱客的博主 务实帽子,最近开发中收集的这篇文章主要介绍S-function入门及案例详解(3)——S-function进阶案例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

    • 1.案例描述
    • 2.案例详解
    • 3.输出波形
    • 4.对输入参数进行Mask打包

1.案例描述

设计一个蹦极系统
在这里插入图片描述
h为离地面高度,输入参数为长度、质量、离地面高度。

2.案例详解

步骤1.可以修改sfuntmpl函数的名称(这里修改为bengji),并在括号内增加输入参数
参数len,weight,dist分别表示长度、质量、离地面高度;长度用来初始化x0,质量用来初始化m,离地面高度用来初始化h。

function [sys,x0,str,ts,simStateCompliance] = bengji(t,x,u,flag,len,weight,dist)

步骤2.初始化bengji函数
首先,对基本参数进行初始化:

k=5;
a1=1;
a2=1;
g=10;

接着,设置case里的所有函数参数:

...
case 0,
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes(len);

  case 1,
    sys=mdlDerivatives(t,x,u,weight,k,a1,a2,g);

  case 2,
    sys=mdlUpdate(t,x,u);

  case 3,
    sys=mdlOutputs(t,x,u,dist)...

步骤3.初始化mdlInitializeSizes函数
两个连续状态数,一个输出,0个输入,输入和输出没有直接联系
因此,设置相应属性:

sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;

初始化状态x0:

x0  = [-len;1];

步骤4.设置mdlDerivatives函数
连续状态的导数

function sys=mdlDerivatives(t,x,u,weight,k,a1,a2,g)

if x(1)<0
    b=0;
else
    b=-k*x(1);
end
x1dot=x(2); %x1导
x2dot=1/weight*(weight*g+b-a1*x(2)-a2*abs(x(2))*x(2)); %x2导
sys=[x1dot;x2dot]; %x=[x1;x2]

步骤5.设置mdlOutputs函数
输出函数代码如下:

function sys=mdlOutputs(t,x,u,dist)

sys = dist-x(1);  %y=h-x1

步骤6.新建一个simunk文件,将s-function的参数改为如下形式
在这里插入图片描述
这里输入为100,100,200分别为长度、质量、离地面高度。

步骤7.搭建simulink
在这里插入图片描述

3.输出波形

在这里插入图片描述

4.对输入参数进行Mask打包

右击:
在这里插入图片描述
选择“Parameters & Dialog”——>选择“Edit”,设置三个edit。

设置完成后,可以分别设置三个参数:
在这里插入图片描述

输出波形:
在这里插入图片描述
完整代码也可参考:https://download.csdn.net/download/didi_ya/19812218

ok,大功告成!如果对你有所帮助,记得点个赞哟~

下一篇文章:
S-function入门及案例详解(4)——S-function进阶案例之连续/离散状态空间表达式的S-function实现

最后

以上就是务实帽子为你收集整理的S-function入门及案例详解(3)——S-function进阶案例的全部内容,希望文章能够帮你解决S-function入门及案例详解(3)——S-function进阶案例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部