记录MATLAB的s函数的使用(一)

最近要用simulink做仿真,需要用S函数,因此记录一下,防止以后再用找不到资料。

第一步:新建simulink模型

主页面点击新建->Simulink Model新建一个Simulink模型。

进入之后点击Blank Model建立一个空白模型。

 这时候按住ctrl+S保存一下,会弹出一个选择保存路径和起一个文件名字的弹框,我这里选择是MATLAB->bin里面新建了一个文件夹保存,这样模型就建立完成了。

第二步:加入s函数块

 点击simulink library打开simulink的块仓库,在Simulink->User-Defined Functions里面找到下图中4,也就是S-Function块,点击拖到simulink里面。这里直接搜s函数会出现其他不相干的函数,直接按这个路径找就可以。

 拖入之后就可以进行下一步了。

第二步:s函数m文件的建立

回到命令行窗口,Ctrl+N新建一个脚本,Ctrl+S保存一下,名字就是要编写的S函数的名字。

保存到和第一步一样的文件路径里面。

键入:edit sfuntmpl,打开s函数例程,选择全部,复制粘贴到刚刚建立的脚本m文件里面,然后作为自己的s函数的m文件。(键入sfundemos会打开s函数的块例程,目前不知道什么用处。)

复制完之后删掉注释,就变成下面的样子。

第三步:s函数的编写

建立完之后开始进行s函数的编写,s函数按照官方描述是可以实现任意复杂系统的编写的,我这里水平有限,先试一下简单的函数。

y=5*x1+3*x2;

要实现上面这个函数,可以看到有两个输入x1,x2,一个输出y,因此在初始化函数里面设置sizes.NumInputs为 2,sizes.NumOutputs为 1,另外还要注意sizes.DirFeedthrough也要设置,这个根据输出里面有没有输入出现来设置的,若输出的表达式里面有输入,则设置为1,否则设置为0。其他为默认。

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);
x0  = [];
str = [];
ts  = [0 0];
simStateCompliance = 'UnknownSimState';

 设置完初始化函数之后,设置输出函数,输出函数的函数参数为t,x,u,这里只使用u,按照上面式子直接写下来。保存函数。

function sys=mdlOutputs(t,x,u)
x1 = u(1);
x2 = u(2);
y = 5*x1+3*x2;
sys = [y];

第四步:s函数的块关联

打开simulink界面,点击s函数块,在s函数的函数名处填刚刚建立的函数的名字,点击OK。

下面来进行验证一下。搭建如下模型,step的幅值都设为1,时间分别设为0.5和1。

可以看到,满足y=5*x1+3*x2。

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值