我运行具有恒定我SIMULINK文件时,有一个问题 - PID控制器 - S-功能 - 范围S函数的用法错误
我得到一个错误
“错误,M-文件■ -function 'chiu_sfcn' 在 'project1_simu/S-函数' 期待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);
我的问题是有关该错误。这是什么意思?哪里可以找出问题的根源?
chiu_sfcn在哪里被调用? – eternaln00b 2012-02-10 04:50:36
chiu_sfcn是一个S函数框图file.is,它可以回答你的问题吗? – rina 2012-02-10 06:26:45