声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6807|回复: 7

调用S函数SIMULINK时如何填写S-Function Parameters项?

[复制链接]
发表于 2006-6-6 18:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
<P><br>请教各位老师我调用了一个S函数,在SIMULINK仿真时弹出Block Parameters:S-Function对话框需要输入S-Function Name和S-Function Parameters两个项目,请问S-Function Parameters应该如何填写呢?<br>最好您给给我讲解一下这个S-Function Parameters指的是什么,以免下次同样的问题困惑我和其他遇到这个问题的其他初学者。我填入了t,x,u,flag,出现错误提示说没有定义这些变量,呵呵...郁闷中...</P>
<P>我调用的S函数源程序为:</P>
<P>function [sys,x0,str,ts] = spacemodel(t,x,u,flag)</P>
<P>switch flag,<br>case 0,<br>   [sys,x0,str,ts]=mdlInitializeSizes;<br>case 1,<br>   sys=mdlDerivatives(t,x,u);<br>case 3,<br>   sys=mdlOutputs(t,x,u);<br>case {2,4,9}<br>   sys=[];<br>otherwise<br>   error(['Unhandled flag=',num2str(flag)]);<br>end</P>
<P>function [sys,x0,str,ts]=mdlInitializeSizes<br>sizes=simsizes;<br>sizes.NumContStates=2;<br>sizes.NumDiscStates=0;<br>sizes.NumOutputs=3;<br>sizes.NumInputs=2;<br>sizes.DerFeedthrough=1;<br>sizes.NumSampleTimes=1; %At least one sample time is needed<br>sys=simsizes(sizes);<br>x0=[0;0];<br>str=[];<br>ts=[0 0];</P>
<P>function sys=mdlDerivatives(t,x,u)</P>
<P>%Servo system Parameters<br>J=0.6;Ce=1.2;Km=6;<br>Ku=11;R=7.77;<br>Kv=2.0;</P>
<P>alfa=0.01;<br>a1=1.0; %Effect on the shape of friction curve<br>Fm=20;<br>Fc=15;<br>Kv=2.0;</P>
<P>F=J*u(1);<br>if abs(x(2))&lt;=alfa<br>    if F&gt;Fm<br>       Ff=Fm;<br>    elseif F&lt;-Fm<br>        Ff=-Fm;<br>    else<br>        Ff=F;<br>    end<br>end<br>if x(2)&gt;alfa<br>    Ff=Fc+(Fm-Fc)*exp(-a1*x(2))+Kv*x(2);<br>elseif x(2)&lt;-alfa<br>    Ff=-Fc-(Fm-Fc)*exp(a1*x(2))+Kv*x(2);<br>end</P>
<P>sys(1)=x(2);<br>sys(2)=-Km*Ce/(J*R)*x(2)+Ku*Km*u(2)/(J*R)-Ff/J;</P>
<P>function sys=mdlOutputs(t,x,u)</P>
<P>%Servo system Parameters<br>J=0.6;Ce=1.2;Km=6;<br>Ku=11;R=7.77;<br>Kv=2.0;</P>
<P>alfa=0.01;<br>a1=1.0; %Effect on the shape of friction curve<br>Fm=20;<br>Fc=15;<br>Kv=2.0;</P>
<P>F=F*u(1);<br>if abs(x(2))&lt;=alfa<br>    if F&gt;Fm<br>       Ff=Fm;<br>    elseif F&lt;-Fm<br>        Ff=-Fm;<br>    else<br>        Ff=F;<br>    end<br>end<br>if x(2)&gt;alfa<br>    Ff=Fc+(Fm-Fc)*exp(-a1*x(2))+Kv*x(2);<br>elseif x(2)&lt;-alfa<br>    Ff=-Fc-(Fm-Fc)*exp(a1*x(2))+Kv*x(2);<br>end</P>
<P>sys(1)=x(1); %Angle<br>sys(2)=x(2); %Angle speed<br>sys(3)=Ff;   %Friction force<br></P>
[此贴子已经被电力仿真于2006-6-6 20:58:24编辑过]

回复
分享到:

使用道具 举报

发表于 2006-6-20 19:09 | 显示全部楼层
S-Function Parameters 里的参数应该在S函数里定义<BR>这个是M形的S函数吗?<BR>我只学过C MEX S函数,里面对于参数的定义有标准的格式
发表于 2006-7-1 16:27 | 显示全部楼层

回复:(dayu0518)调用S函数SIMULINK时如何填写S-Fu...

我想应该是 sys,x0,str,ts吧<BR>我也只用c格式的s函数,
发表于 2006-8-20 16:57 | 显示全部楼层
S-Function Parameters里填的参数是定义函数里新增的参数
如:function[sys,x0,str,ts]=sfun(t,x,u,flag,damp),S-Function Parameters这一项里填damp

评分

1

查看全部评分

发表于 2006-8-28 10:51 | 显示全部楼层
谢谢,我也在用S函数编程,遇到了同样的问题。
发表于 2006-8-30 09:58 | 显示全部楼层
原帖由 leafsong 于 2006-8-20 16:57 发表
S-Function Parameters里填的参数是定义函数里新增的参数
如:function=sfun(t,x,u,flag,damp),S-Function Parameters这一项里填damp


这是正解
发表于 2008-11-25 15:07 | 显示全部楼层
原帖由 dayu0518 于 2006-6-6 18:51 发表
请教各位老师我调用了一个S函数,在SIMULINK仿真时弹出Block Parameters:S-Function对话框需要输入S-Function Name和S-Function Parameters两个项目,请问S-Function Parameters应该如何填写呢?最好您给给我讲 ...


我觉得是楼主在输入伺服系统变量的时候缺少定义,可以共同研究一下
发表于 2009-2-26 15:57 | 显示全部楼层
上面写入.m文件名(不要加.m)。。
下面可以不填。t是初始时间。。x是三种状态传递的参数。。flag是三种状态的标志。。u是该模块的输入。。所以都不用填。
如果你要认为的加入一些起始参数,如自己设定抽样时间,可以在函数后面添加。如
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag,ts)。。那么在S-Function Parameters项中就填入ts的值
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-15 20:50 , Processed in 0.069763 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表