s函数使用错误

时间:2012-02-10 04:38:21

标签: matlab simulink

运行我的simulink文件时遇到问题 - pid控制器 - s函数 - 范围

我收到了错误

  

“错误,'project1_simu / S-Function'中的M-File S-function'chiu_sfcn'期待0参数,而9提供”

 function [sys,x0,str,ts]= chiu_sfcn(t,x,u,flag)

switch flag

case 0,

 [sys,x0,str,ts]=mdlInitializeSizes;

case 1,
    sys = mdlDerivatives(t,x,u);
case 3,
    sys = mdlOutputs(t,x,u);
case 9
    sys =[];
otherwise
    error(['unhandled flag =',num2str(flag)]);
end

function [sys,x0,str,ts] = mdlInitializeSizes()

ssSetInputPortWidth(S,0,11)
    s = simsizes;
s.NumContStates   = 11;
s.NumDiscStates   = 0;
s.NumOutputs      = 11;
s.NumInputs       = 1;
s.DirFeedthrough  = 0;
s.NumSampleTimes  = 1;

sys = simsizes(s) ;
x0 = [0.0258,0,0,0,0,0,0,0,8.83];
str=[] ; 
ts = [0 0];


    function sys = mdlDerivatives (t,x,u)

% Reactor temperature 
u=303.15;
T=u;
B=0.03;
I0=0.0258;
M0=8.83;
F=0.58;
dp=1.2;
Tgp=3.87e2;  


Kd = (6.32e16*exp(-15.43e3/T));
Kt0 = 5.88e9*exp(-701/(1.987*T));
Kp0 = 2.95e7*exp(-4353/(1.987*T)); 
Tet = ((1.1353e-22)/I0)*exp(17420/T);
Tep = 5.4814e-16*exp(13982/T);
A=0.168-(8.21e-6*((T-Tgp)^2));
dm = 0.973-1.164e-3*(T-273.15);
Fev = (dm - dp)/dp ;
Fvm = (1 - x(2))/(1 + (Fev*x(2)));
g = exp(2.303*Fvm/(A + B*Fvm));
Kt = (Kt0*g)/(g + (Tet*x(3)*Kt0));
Kp = (Kp0*g)/(g + (Tep*x(3).*Kp0));


sys(1)=-Kd*I - ((Fev*I.*P0.*(1-X)*Kp)/(1+Fev*X));
sys(2)=Kp*(1-X)*P0;
sys(3)=(-Fev*P0.^2*(1-X)*Kp)/(1+Fev*X) + 2*F*Kd*I - Kt*P0.^2;
sys(4)=(-Fev*P0.*P1.*(1-X)*Kp)/(1+Fev*X)+ 2*F*Kd*I - Kt*P0.*P1 + (Kp*P0.*M0*(1-X))/(1+Fev*X);
sys(5)=(-Fev*P2.*P0.*(1-X)*Kp)/(1+Fev*X) + 2*F*Kd*I - Kt*x(3).*x(5) + (Kp*M0*(1-X)*(2*P1+P0))/(1+Fev*X);
sys(6)=(-Fev*Q0.*P0.*(1-X)*Kp)/(1+Fev*X) + Ktd*P0.^2 + 0.5*Ktc*P0.^2;
sys(7)=(-Fev*Q1.*P0.*(1-X)*Kp)/(1+Fev*X) + Ktd*P0.*P1 + Ktc*P0.*P1;
sys(8)=(-Fev*Q2.*P0.*(1-X)*Kp)/(1+Fev*X) + Ktd*P0.*P2 + Ktc*(P1.*P0+P1.^2);
sys(9)=(-Kp*P0*M0*(1-X)/(1+Fev*X))*((Fev*(1-X)/(1+Fev*X))+1);
sys(10)=(-Fev*P0.*Q2.*(1 - X)./(1 + Fev*X)).*Kp + Ktd*P0.*P2 + Ktc*(P1.*P0 + P1.^2);
sys(11)=(-Kp*P0*M0*(1 - X)./(1 + Fev*X)).*((Fev*(1 - X)./(1 + Fev*X)) + 1);


        function sys = mdlOutputs(t,x,u)
             sys(1)=x(6);
 %                 sys(2)=x(2);
 %                 sys(3)=x(3);
 %                 sys(4)=x(4);
 %                 sys(5)=x(5);
 %                 sys(6)=x(6);
 %                 sys(7)=x(7);
 %                 sys(8)=x(8);
 %                 sys(9)=x(9);
 %                 sys(10)=x(10);
 %                 sys(11)=x(11);

我的问题是关于错误。这是什么意思?在哪里确定问题的根源?

1 个答案:

答案 0 :(得分:0)

尝试查看设置为调用chiu_sfcn的S功能块。对话框字段S函数参数中是否有任何值,从错误中可能有9个值输入到该对话框字段中。

如果需要传入这些参数,则需要更新s函数的接口,如果不需要,请从对话框中删除它们。