0
S-Function brings the following message:
"Output returned by S-Function 'Hi_plant_sfcn' in 'Untitled/S-Function' During flag=3 call must be a real vector of length 1"
my code:
function [sys,x0,str,ts] = sfcn(t,x,u,flag)
%{
Despacha a bandeira. A função de troca controla as chamadas para
rotinas da S-Function em cada estágio de simulação.
%}
A = [-72 -8100;1 0];
B = [1;0];
C = [0 2.4e8];
D = 0;
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D); % Inicialização
case 1,
%Calcula as derivadas do estado de variáveis contínuas
sys=mdlDerivatives(t,x,u,A,B)
case 3
sys = mdlOutputs(t,x,u,C,D); % Calculo das saídas
case {2, 4, 9 } % Sinalizações não usadas
% 2:discrete
% 4:calctimeHit
% 9:termination
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]); % Error handling
end;
function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)
str=[]; % Sem ordenação de estado
ts = [0 0]; % Tempo de amostra herdado
s = simsizes;
s.NumContStates= length(A); % Número de estados continuos
s.NumDiscStates= 0; % Número de estados discretos
s.NumOutputs= 1; % Número de saídas
s.NumInputs= 1; % Número de entradas
s.DirFeedthrough= 0; % Sinalizar para feedthrough direto
s.NumSampleTimes= 1; % Número de amostras de tempo
sys = simsizes(s);
x0 = [0 0];
function sys=mdlDerivatives(t,x,u,A,B)
sys = A*x + B*u;
function sys=mdlOutputs(t,x,u,C,D)
sys = C*x + D*u;
S-Function in Simulink:
If anyone knows what’s wrong with that code and why it carries that message, I’d appreciate it.