目录
- 1.案例描述
- 2.案例详解
- 3.输出波形
- 4.对输入参数进行Mask打包
1.案例描述
设计一个蹦极系统
h为离地面高度,输入参数为长度、质量、离地面高度。
2.案例详解
步骤1.可以修改sfuntmpl函数的名称(这里修改为bengji),并在括号内增加输入参数
参数len,weight,dist分别表示长度、质量、离地面高度;长度用来初始化x0,质量用来初始化m,离地面高度用来初始化h。
1
2function [sys,x0,str,ts,simStateCompliance] = bengji(t,x,u,flag,len,weight,dist)
步骤2.初始化bengji函数
首先,对基本参数进行初始化:
1
2
3
4
5k=5; a1=1; a2=1; g=10;
接着,设置case里的所有函数参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14... 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个输入,输入和输出没有直接联系
因此,设置相应属性:
1
2
3
4
5
6
7sizes.NumContStates = 2; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 0; sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1;
初始化状态x0:
1
2x0 = [-len;1];
步骤4.设置mdlDerivatives函数
连续状态的导数
1
2
3
4
5
6
7
8
9
10
11function 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函数
输出函数代码如下:
1
2
3
4function 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进阶案例内容请搜索靠谱客的其他文章。
发表评论 取消回复