主题:求助s函数问题!
如题,在进行simulink/s函数仿真时候,出现Unhandled flag = 2错,请教哪方面出现问题~!
附源文件:
function [sys,x0,str,ts]=acmotor_sfun(t,x,u,flag,Rs,Rr,Ls,Lr,Lm,k)
switch flag
case 0 %Initialization%
[sys,x0,str,ts]=mdlInitializeSizes;
case 1 %Derivatives
sys=mdlDerivatives(t,x,u,Rs,Rr,Ls,Lr,Lm,k);
case 3 %Outputs%
sys=mdlOutputs(t,x,u);
case 9 %Terminate%
sys=mdlTerminate(t,x,u);
otherwise %Unexpected flags%
error(['Unhandled flag = ',num2str(flag)]);
end %end acmotor_sfun%
function [sys,x0,str,ts]=mdlInitializeSizes;
sizes=simsizes;
sizes.NumContStates=4;
sizes.NumDiscStates=0;
sizes.NumOutputs=4;
sizes.NumInputs=3;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys = simsizes(sizes);
x0=[0;0;0;0];%No continuous states
str=[]; % No state ordering
ts=[0 0] % Inherited sample time
function sys=mdlDerivatives(t,x,u,Rs,Rr,Ls,Lr,Lm,k);
dx(1)=k*[-Rs*Lr,Lm*Lm*u(3),Lm*Rr,u(3)*Lm*Lr]*[x(1);x(2);x(3);x(4)]-k*Lm*u(2);
dx(2)=[-k1*u(3)*Lm*Lm/Lr,-k1*Rs,-k1*Msr*u(3),k1*Lm*Rr/Lr]*[x(1);x(2);x(3);x(4)]+k1*u(2);
dx(3)=[-k2*Rs,k2*Ls*u(3),k2*Ls*Rr/Lm,k2*Ls*Lr*u(3)/Lm]*[x(1);x(2);x(3);x(4)]+k2*u(1);
dx(4)=[-k2*Ls*u(3),-k2*Rs,-k2*Ls*Lr*u(3)/Lm,k2*Ls*Rr/Lm]*[x(1);x(2);x(3);x(4)]+k2*u(2);
sys=dx;
function sys=mdlOutputs(t,x,u);
sys=[x(1);x(2);x(3);x(4)];
function sys=mdlTerminate(t,x,u);
sys=[];
仿真后出现:
Error in block 'acmotor_sim/Subsystem/S-Function' while executing M-File S-function block 'acmotor_sfun', flag = 2 (update), at time 0. MATLAB error message:
Error using ==> acmotor_sfun
Unhandled flag = 2
附源文件:
function [sys,x0,str,ts]=acmotor_sfun(t,x,u,flag,Rs,Rr,Ls,Lr,Lm,k)
switch flag
case 0 %Initialization%
[sys,x0,str,ts]=mdlInitializeSizes;
case 1 %Derivatives
sys=mdlDerivatives(t,x,u,Rs,Rr,Ls,Lr,Lm,k);
case 3 %Outputs%
sys=mdlOutputs(t,x,u);
case 9 %Terminate%
sys=mdlTerminate(t,x,u);
otherwise %Unexpected flags%
error(['Unhandled flag = ',num2str(flag)]);
end %end acmotor_sfun%
function [sys,x0,str,ts]=mdlInitializeSizes;
sizes=simsizes;
sizes.NumContStates=4;
sizes.NumDiscStates=0;
sizes.NumOutputs=4;
sizes.NumInputs=3;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys = simsizes(sizes);
x0=[0;0;0;0];%No continuous states
str=[]; % No state ordering
ts=[0 0] % Inherited sample time
function sys=mdlDerivatives(t,x,u,Rs,Rr,Ls,Lr,Lm,k);
dx(1)=k*[-Rs*Lr,Lm*Lm*u(3),Lm*Rr,u(3)*Lm*Lr]*[x(1);x(2);x(3);x(4)]-k*Lm*u(2);
dx(2)=[-k1*u(3)*Lm*Lm/Lr,-k1*Rs,-k1*Msr*u(3),k1*Lm*Rr/Lr]*[x(1);x(2);x(3);x(4)]+k1*u(2);
dx(3)=[-k2*Rs,k2*Ls*u(3),k2*Ls*Rr/Lm,k2*Ls*Lr*u(3)/Lm]*[x(1);x(2);x(3);x(4)]+k2*u(1);
dx(4)=[-k2*Ls*u(3),-k2*Rs,-k2*Ls*Lr*u(3)/Lm,k2*Ls*Rr/Lm]*[x(1);x(2);x(3);x(4)]+k2*u(2);
sys=dx;
function sys=mdlOutputs(t,x,u);
sys=[x(1);x(2);x(3);x(4)];
function sys=mdlTerminate(t,x,u);
sys=[];
仿真后出现:
Error in block 'acmotor_sim/Subsystem/S-Function' while executing M-File S-function block 'acmotor_sfun', flag = 2 (update), at time 0. MATLAB error message:
Error using ==> acmotor_sfun
Unhandled flag = 2