运行我的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);
我的问题是关于错误。这是什么意思?在哪里确定问题的根源?
答案 0 :(得分:0)
尝试查看设置为调用chiu_sfcn的S功能块。对话框字段S函数参数中是否有任何值,从错误中可能有9个值输入到该对话框字段中。
如果需要传入这些参数,则需要更新s函数的接口,如果不需要,请从对话框中删除它们。