dayu0518 发表于 2006-6-6 18:51

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

<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 = spacemodel(t,x,u,flag)</P>
<P>switch flag,<br>case 0,<br>   =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 =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=;<br>str=[];<br>ts=;</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编辑过]

sfen 发表于 2006-6-20 19:09

S-Function Parameters 里的参数应该在S函数里定义<BR>这个是M形的S函数吗?<BR>我只学过C MEX S函数,里面对于参数的定义有标准的格式

shuisheng 发表于 2006-7-1 16:27

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

我想应该是 sys,x0,str,ts吧<BR>我也只用c格式的s函数,

leafsong 发表于 2006-8-20 16:57

S-Function Parameters里填的参数是定义函数里新增的参数
如:function=sfun(t,x,u,flag,damp),S-Function Parameters这一项里填damp

微微 发表于 2006-8-28 10:51

谢谢,我也在用S函数编程,遇到了同样的问题。

anyren 发表于 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 发表 http://www.chinavib.com/forum/images/common/back.gif
请教各位老师我调用了一个S函数,在SIMULINK仿真时弹出Block Parameters:S-Function对话框需要输入S-Function Name和S-Function Parameters两个项目,请问S-Function Parameters应该如何填写呢?最好您给给我讲 ...

我觉得是楼主在输入伺服系统变量的时候缺少定义,可以共同研究一下

hjp19831983 发表于 2009-2-26 15:57

上面写入.m文件名(不要加.m)。。
下面可以不填。t是初始时间。。x是三种状态传递的参数。。flag是三种状态的标志。。u是该模块的输入。。所以都不用填。
如果你要认为的加入一些起始参数,如自己设定抽样时间,可以在函数后面添加。如
function = sfuntmpl(t,x,u,flag,ts)。。那么在S-Function Parameters项中就填入ts的值
页: [1]
查看完整版本: 调用S函数SIMULINK时如何填写S-Function Parameters项?