2012-02-10 53 views
0

我运行具有恒定我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); 

我的问题是有关该错误。这是什么意思?哪里可以找出问题的根源?

+0

chiu_sfcn在哪里被调用? – eternaln00b 2012-02-10 04:50:36

+0

chiu_sfcn是一个S函数框图file.is,它可以回答你的问题吗? – rina 2012-02-10 06:26:45

回答

0

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

如果您需要传入的参数,您需要将界面更新为您的s函数,如果您不需要它们,请将它们从对话框中移除。

+0

谢谢......从对话框中删除后,错误消失 – rina 2012-02-18 03:27:24