Filter löschen
Filter löschen

Error in 'fsw/Reactor S-Function' while executing MATLAB S-function 'rod', flag = 1 (derivatives), at time 0.0. Index exceeds matrix dimensions.

1 Ansicht (letzte 30 Tage)
función [sys, x0, str, ts, simStateCompliance] = destilación (t, y, u, flag)
cambiar de bandera,
%%%%%%%%%%%%%%%%%%%
% Inicialización%
%%%%%%%%%%%%%%%%%%%
caso 0,
[sys, x0, str, ts, simStateCompliance] = mdlInitializeSizes ();
%%%%%%%%%%%%%%%%
% Derivados%
%%%%%%%%%%%%%%%%
caso 1,
sys = mdlDerivados (t, y, u);
%%%%%%%%%%
% Actualización%
%%%%%%%%%%
caso 2,
sys = mdlUpdate (t, y, u);
%%%%%%%%%%%%
% Salidas%
%%%%%%%%%%%%
caso 3,
sys = mdlOutputs (t, y, u);
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit%
%%%%%%%%%%%%%%%%%%%%%%%
caso 4,
sys = mdlGetTimeOfNextVarHit (t, y, u);
%%%%%%%%%%%%%%
% Terminar %
%%%%%%%%%%%%%%
caso 9,
sys = mdlTerminate (t, y, u);
%%%%%%%%%%%%%%%%%%%%%
% Banderas inesperadas%
%%%%%%%%%%%%%%%%%%%%%
de otra manera
DAStudio.error ('Simulink: blocks: unhandledFlag', num2str (flag));
final
% end sfuntmpl
%
% ================================================= ============================
% mdlInitializeSizes
% Devuelve los tamaños, las condiciones iniciales y los tiempos de muestra para la función S.
% ================================================= ============================
%
función [sys, x0, str, ts, simStateCompliance] = mdlInitializeSizes ()
%
% call simsizes para una estructura de tamaños, complétala y conviértela en
Matriz de% de tamaños.
%
% Tenga en cuenta que en este ejemplo, los valores están codificados. Esto no es una
% de práctica recomendada ya que las características del bloque son típicamente
% definido por los parámetros de la función S.
%
tamaños = simsizes;
tamaños.NumContStates = 20;
tamaños.NumDiscStates = 0;
tamaños.NumOutputs = 5;
tamaños.NumInputs = 4;
tamaños.DirFeedthrough = 0;
tamaños.NumSampleTimes = 1; % se necesita al menos un tiempo de muestra
sys = simsizes (tamaños);
%
% inicializar las condiciones iniciales
x0 = unos (20,1) * 298.0;
%
% str es siempre una matriz vacía
%
str = [];
%
% inicializa la matriz de tiempos de muestra
%
ts = [0 0];
% Especifique el bloque simStateCompliance. Los valores permitidos son:
% 'UnknownSimState', <La configuración predeterminada; advertir y asumir DefaultSimState
% 'DefaultSimState', <Mismo estado sim que un bloque incorporado
% 'HasNoSimState', <Sin estado sim
% 'DisallowSimState' <Error al guardar o restaurar el estado del modelo sim
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes
% ================================================= =========
% mdlDerivados
% Devuelve las derivadas para los estados continuos.
% ================================================= ============================
%
función sys = mdlDerivados (t, x, u)
%
% De conducción de calor 1-D, estado inestable
n = tamaño (x, 1);
% De entradas (3):
% De temperatura de la superficie izquierda (K)
Tem (1) = u (1);
% De temperatura del entorno
% T_amb = u (2); % 298,15;
% Del coeficiente global de transferencia de calor
% h = u (3); % 2;
% Tipo de material (0 = plata, 1 = aluminio)
tipo = u (4);
material = redondo (tipo);
% Estados (n):
% De temperaturas en puntos a lo largo de la barra
Temp (2: n + 1) = x (1: n, 1) ';
Parámetros%
% Radio de la barra
% radio = 0.03; % 3 cm
% De longitud de la barra
longitud = 0.10; % 30 centimetros
m = 0,50;
theta_s = 0.520;
theta_r = 0.218;
alfa = 0.0115;
K_s = 31,6;
% Conductividad térmica
% k_silver = [436.13 -0.011922 -0.000084465 3.3463E-08 0];
% k_alum = [165.84 0.49305 -0.0011114 9.8024E-07 -3.2368E-10];
% si material == 0;
% A = k_silver;
%más
% A = k_alum;
%final
para i = 1: n + 1,
K (i) = K_s * (Temp (i) ^ 0.5) * ((1- (1-Temp (i) ^ (1 / m)) ^ m) ^ 2);
final
% usa la media armónica para estimar la conductividad térmica en los bordes del volumen de control
% para i = 1: n
% D (i) = K_s * ((1-m) / (alpha * m * (theta_s-theta_r))) * ((theta (i) ^ (0.5- (1 / m))) / ((1- theta (i) ^ (1 / m)))) * ((1- (1-theta (i) ^ (1 / m)) ^ m) ^ 2);
%final
% De densidad sólida
% rho_silver = [102.79 -0.0186 0 0 0];
% rho_alum = [102.83 -0.00873 0 0 0];
% si material == 0;
% A = rho_silver;
%más
% A = rho_alum;
%final
para i = 1: n + 1
D (i) = K_s * ((1-m) / (alpha * m * (theta_s-theta_r))) * ((Temp (i) ^ (0.5- (1 / m))) / ((1-Temp (i) ^ (1 / m)))) * ((1- (1-Temp (i) ^ (1 / m)) ^ m) ^ 2);
final
% De capacidad de calor sólido
% cp_silver = [24710 1.14 0.00388 0 0];
% cp_alum = [22149 5.7062 0.0067408 0 0];
% si material == 0;
% A = cp_silver;
%más
% A = cp_alum;
%final
% para i = 1: n + 1,
% cp (i) = A (1) + A (2) * Temp (i) + A (3) * Temp (i) ^ 2 + A (4) * Temp (i) ^ 3 + A (5) * Temp (i) ^ 4;
%final
% Determinar el espacio igual entre nodos
dx = longitud / n;
% De superficie para cada sección
% As = 2 * pi * radio * dx;
% Del área de superficie para las áreas finales o de sección transversal
% Ae = pi * radio ^ 2;
% Calcular xdot:
para i = 2: n,
xdot (i-1,1) = (1 / (2 * (dx) ^ 2)) ...
* (D (i + 1) + D (i)) * (Temp (i + 1) -Temp (i)) ...
-1 / (2 * (dx) ^ 2) ...
* ((D (i-1) -D (i)) * (Temp (i) -Temp (i-1))) ...
+ 1 / dx ...
* (K (i) -K (i-1));
final
xdot (n, 1) = (1 / (2 * (dx) ^ 2)) ...
* (D (n + 1) + D (n)) * (Temp (n + 1) -Temp (n)) ...
+ 1 / dx ...
* (K (n + 1));
% derivados
sys = xdot;
% final mdlDerivados
%
% ================================================= ============================
% mdlUpdate
% Manejar actualizaciones de estado discretas, tiempos de muestra y paso de tiempo importante
% requisitos
% ================================================= ============================
%
función sys = mdlUpdate (t, y, u)
sys = [];
% end mdlUpdate
%
% ================================================= ============================
% mdlOutputs
% Devuelve las salidas del bloque.
% ================================================= ============================
%
función sys = mdlOutputs (t, y, u)
sys = [y (1) y (5) y (10) y (15) y (20)];
% end mdlOutputs
%
% ================================================= ============================
% mdlGetTimeOfNextVarHit
% Devuelve el tiempo del próximo golpe para este bloque. Tenga en cuenta que el resultado es
% tiempo absoluto. Tenga en cuenta que esta función solo se utiliza cuando especifica un
% de tiempo de muestra de tiempo discreto variable [-2 0] en la matriz de tiempo de muestra en
% mdlInitializeSizes.
% ================================================= ============================
%
función sys = mdlGetTimeOfNextVarHit (t, y, u)
sampleTime = 1; % Ejemplo, establece el siguiente golpe para que sea un segundo después.
sys = t + sampleTime;
% end mdlGetTimeOfNextVarHit
%
% ================================================= ============================
% mdlTerminate
% Realizar cualquier fin de las tareas de simulación.
% ================================================= ============================
%
función sys = mdlTerminate (t, y, u)
sys = [];
% end mdlTerminate

Antworten (0)

Kategorien

Mehr zu General Applications finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by