S-function problem
Show older comments
When trying to run my program it says: An error occurred while running the simulation and the simulation was terminated Caused by: State derivatives returned by S-function 'EJEMPLO3' in 'ejemplo3SIMULINK/S-Function' during flag=1 call must be a real vector of length 4 This is the code: function [sys,x0,str,ts] = EJEMPLO3(t,y,u,flag,xo) switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts] = mdlInitializeSizes(xo);
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys = react(t,y,u,0);
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys = react(t,y,u,1);
%%%%%%%%%%%%%%%%%%%
% Unhandled flags %
%%%%%%%%%%%%%%%%%%%
case { 2, 4, 9 },
sys = [];
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end % end csfunc
% %============================================================================= % mdlInitializeSizes % Return the sizes, initial conditions, and sample times for the S-function. %=============================================================================
function [sys,x0,str,ts]=mdlInitializeSizes(xo)
sizes = simsizes; sizes.NumContStates = 4; %variables dependientes sizes.NumDiscStates = 0; sizes.NumOutputs = 4; %todas las salidas sizes.NumInputs = 2; %variables independietes o entradas sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;
sys = simsizes(sizes); x0 = [xo]; str = []; ts = [0 0];
% end mdlInitializeSizes % %============================================================================= % react % Regresa los estados y par?metros necesarios %=============================================================================
function sys=react(t,y,u,resp) %parametros del sistema v1=150; v2=80; fr=42; k1=9.5537; k2=3.52;
if resp == 0 %MODELO dxdy=[(u(1)*u(2)/v1)+(fr*y(3)/v1)-((u(1)+fr)*y(1)/v1)-(k1*y(1)^2)+(2*k2*y(2));... (fr*y(4)/v1)-((u(1)+fr)*y(2)/v1)+((k1*y(2)^2)/2)-(k2*y(2));... ((u(1)+fr)*y(1)/v2)-((u(1)+fr)*y(3)/v2)-(k1*y(3)^2)+(2*k2*y(4));... ((u(1)+fr)*y(2)/v2)-((u(1)+fr)*y(4)/v2)+((k1*y(3)^2)/2)-(k2*y(4))]; sys = dxdy;
else
%SALIDAS
sys =[y(1) y(2) y(3) y(4)];
end
Answers (0)
Categories
Find more on Discontinuities in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!