Ошибка использования s-функции - PullRequest
0 голосов
/ 10 февраля 2012

У меня проблема при запуске моего файла simulink с постоянным - pid controller - s-function - scope

Я получил ошибку

"Ошибка, M-File S-функция 'chiu_sfcn' в 'project1_simu / S-Function' ожидает 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 голосов
/ 11 февраля 2012

Попробуйте посмотреть на блок S-функции, который настроен для вызова chiu_sfcn. Есть ли какие-либо значения в параметрах S-функции диалогового поля, из ошибки, вероятно, в это диалоговое поле введено 9 значений.

Если вам нужно передать эти параметры, вам нужно обновить интерфейс вашей s-функции, если вы не хотите их удалять, удалите их из диалогового окна.

...