Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1) RESUMEN:
Se presenta a continuación el código elaborado en MatLab para el desarrollo y
modelamiento de un reactor tubular de lecho empacado. El código presenta los
siguientes componentes:
- Establecimiento de parámetros de ingreso y cualidades constantes.
- Cálculo de propiedades empleando correcciones con la ecuación de gases
ideales.
- Cálculo de propiedades empleando correlaciones en función de
temperatura.
- Balances de materia, energía y presión en el sistema.
- Establecimiento del ciclo de resolución de ecuaciones diferenciales con
el Solver ODE45 y construyendo una función en MatLab para realizar los
cálculos repetitivos.
- Gráfica de perfiles de concentraciones, temperaturas y presión.
1
% Parámetros cinéticos obtenidos con las expresiones de Cinética B
(Denominador más corto), [Eact = J/mol]:
A_k1 = 121.5539; Eact_k1 = 62661.3851;
A_K1A = 62661.3851; Eact_K1A = 133441.5273;
A_k2 = 0.017971; Eact_k2 = 32820.4093;
A_K2D = 1.1538; Eact_K2D = -16817.5167;
% Flujos de reacción másicos (fr [kg / s]) y molares (FR [mol / s])
iniciales:
fR_in = 0.6;
2
A_transi = pi() * di^2 / 4; % [m2]
do = 2.54 / 100; % [m]
d = do - di; % [m]
MLDd = (do - di) / log(do / di); % [m]
Censu = 0.01 / 5.67826334106816; % [W / m2 K]
CondTerm_Tubo = 16.20; % [W / m2 K]
switch(CasoMani)
case 1 % Empleo de Metanol (A) y Formaldehido (C)
for i = 1 : length(Y')
VFR_A(i) = Y(i, 1); % Flujo de Metanol
VFR_C(i) = Y(i, 2); % Flujo de Formaldehído
VE1(i) = (FR_Ain - VFR_A(i)); % Avance de Reacción 1 en
función de Metanol (A)
VE2(i) = (FR_Cin - VFR_C(i) + VE1(i)); % Avance de
Reacción 2 en función de Formaldehído (C)
VFR_B(i) = (FR_Bin - 0.5 * VE1(i) - 0.5 * VE2(i)); % Flujo
Molar de Oxígeno (B)
VFR_D(i) = (FR_Din + VE1(i) + VE2(i)); % Flujo Molar de
Agua (D)
VFR_E(i) = (FR_Ein + VE2(i)); % Flujo Molar de Monóxido de
Carbono (C)
3
VFR_F(i) = FR_Fin; % Flujo Molar de Nitrógeno (F)
end
case 2 % Empleo de Metanol (A) y Monóxido de Carobono (E)
for i = 1 : length(Y') % Valores obtenidos en la Resolución de
Ecuaciones
VFRA(i) = Y(i, 1); % Flujo de Metanol
VFRE(i) = Y(i, 2); % Flujo de CO
end
% Variación de Concentraciones:
for i = 2 : (length(Y') - 1)
VFR_A(i) = VFR_A(i - 1) - VE1(i);
VFR_B(i) = VFR_B(i - 1) - 0.5 * VE1(i) - 0.5 * VE2(i);
VFR_C(i) = VFR_C(i - 1) + VE1(i) - VE2(i);
VFR_D(i) = VFR_D(i - 1) + VE1(i) + VE2(i);
VFR_E(i) = VFR_E(i - 1) + VE2(i);
VFR_F(i) = VFR_F(i - 1);
VFR_R(i) = VFR_A(i) + VFR_B(i) + VFR_C(i) + VFR_D(i) +
VFR_E(i) + VFR_F(i);
end
4
VConc_D(i) = VFR_D(i) / VQ(i);
VConc_E(i) = VFR_E(i) / VQ(i);
VConc_F(i) = VFR_F(i) / VQ(i);
VConc_R(i) = VFR_R(i) / VQ(i);
end
end
% Construcción de gráficas:
subplot(2, 3, 1);
plot(X, VConv_A, '-', 'linewidth', 2);
hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Conversión")
title("Conversión de Metanol")
grid on;
axis([0 Long 0 1])
subplot(2, 3, 2);
plot(X, VRend_C, '-', 'linewidth', 2);
hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Rendimiento")
title("Rendimiento de Formaldehído")
grid on;
axis([0 Long min(VRend_C) * 0.999 max(VRend_C) * 1.001])
subplot(2, 3, 3);
plot(X, VFR_A, '-', 'linewidth', 2); hold on;
plot(X, VFR_B, '-', 'linewidth', 2); hold on;
plot(X, VFR_C, '-', 'linewidth', 2); hold on;
plot(X, VFR_D, '-', 'linewidth', 2); hold on;
plot(X, VFR_E, '-', 'linewidth', 2); hold on;
plot(X, VFR_F, '-', 'linewidth', 2); hold on;
plot(X, VFR_R, '-', 'linewidth', 2); hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Flujo molar [mol /s]")
title("Flujos Molares de Reacción")
legend("Metanol", "Oxígeno", "Formaldehído", "Agua", "Monóxido de
Carbono", "Nitrógeno", "Flujo Total")
axis([0.01 Long 0 VFR_R(length(VFR_R)) * 1.2])
grid on;
subplot(2, 3, 4);
plot(X, VConc_A, '-', 'linewidth', 2); hold on;
plot(X, VConc_B, '-', 'linewidth', 2); hold on;
plot(X, VConc_C, '-', 'linewidth', 2); hold on;
plot(X, VConc_D, '-', 'linewidth', 2); hold on;
plot(X, VConc_E, '-', 'linewidth', 2); hold on;
plot(X, VConc_F, '-', 'linewidth', 2); hold on;
plot(X, VConc_R, '-', 'linewidth', 2); hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Concentracion molar [mol / m3]")
title("Concentraciones de Flujo de Reacción")
5
legend("Metanol", "Oxígeno", "Formaldehído", "Agua", "Monóxido de
Carbono", "Nitrógeno", "Flujo Total")
axis([0.01 Long 0 VConc_R(1) * 1.2])
grid on;
subplot(2, 3, 5)
plot(X * Long / Lmax, VT_r, 'linewidth', 2); hold on;
plot(X * Long / Lmax, VT_c, 'linewidth', 2); hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Temperatura [K]")
title("Temperaturas de Flujos de Reacción y de Control")
legend("Fluido de Reacción", "Fluido de Control")
axis([0.01 Long T_cin T_rin])
grid on;
subplot(2, 3, 6)
plot(X, VPR, 'linewidth', 2); hold on;
xlabel("Distancia de Reactor [m]")
ylabel("Presión [kpa]")
title("Presión en las Tuberías de Flujo de Reacción")
grid on;
% Flujos de reacción másicos (fr [kg / s]) y molares (FR [mol / s])
iniciales:
fR_in = 0.6;
6
FR_in = fR_in / (y_Ain * PM_A + y_Bin * PM_B + y_Cin * PM_C + y_Din *
PM_D + y_Ein * PM_E + y_Fin * PM_F);
FR_Ain = FR_in * y_Ain; FR_Bin = FR_in * y_Bin; FR_Cin = FR_in * y_Cin;
FR_Din = FR_in * y_Din; FR_Ein = FR_in * y_Ein; FR_Fin = FR_in * y_Fin;
7
% - y(4): Tc
% - y(5): PR
% y = [FR_Ain; FR_Ein; T_rin; T_cin; PR_in];
T_r = y(3);
T_c = y(4);
PR = y(5);
T_s = T_sin;
switch(CasoRelEstq)
case 1
FR_A = y(1); % Variable 1: Flujo Molar de Metanol (A)
FR_C = y(2); % Variable 2: Flujo Molar de Formaldehído (C)
E1 = FR_Ain - FR_A; % Avance de Reacción 1 en función de
Metanol (A)
E2 = FR_Cin - FR_C + E1; % Avance de Reacción 2 en función de
Formaldehído (C)
FR_B = FR_Bin - 0.5 * E1 - 0.5 * E2; % Flujo Molar de Oxígeno
(B)
FR_D = FR_Din + E1 + E2; % Flujo Molar de Agua (D)
FR_E = FR_Ein + E2; % Flujo Molar de Monóxido de Carbono (C)
FR_F = FR_Fin; % Flujo Molar de Nitrógeno (F)
FR = FR_A + FR_B + FR_C + FR_D + FR_E + FR_F; % Flujo Molar
Total
case 2
FR_A = y(1); % Variable 1: Flujo Molar de Metanol (A)
FR_E = y(2); % Variable 2: Flujo Molar de Monóxido de Carbono
(C)
E1 = FR_Ain - FR_A; % Avance de Reacción 1 en función de
Metanol (A)
E2 = FR_E - FR_Ein; % Avance de Reacción 2 en función de
Monóxido de Carbono (E)
FR_B = FR_Bin - 0.5 * E1 - 0.5 * E2; % Flujo Molar de Oxígeno
(B)
FR_C = FR_Cin + E1 - E2; % Flujo Molar de Formaldehído (C)
FR_D = FR_Din + E1 + E2; % Flujo Molar de Agua (D)
FR_F = FR_Fin; % Flujo Molar de Nitrógeno (F)
FR = FR_A + FR_B + FR_C + FR_D + FR_E + FR_F; % Flujo Molar
Total
end
% Flujos másicos de reacción (fR) [kg / s]: Producto entre flujo molar y peso
molecular.
fR_A = FR_A * PM_A; fR_B = FR_B * PM_B; fR_C = FR_C * PM_C; fR_D = FR_D *
PM_D; fR_E = FR_E * PM_E; fR_F = FR_F * PM_F;
fR = fR_A + fR_B + fR_C + fR_D + fR_E + fR_F;
8
% Fluxes Molares (NR) [kg / m2 s] y Másicos de reacción (NR) [kg / m2 s]:
Cociente entre flujos molares o másicos con el área transversal interna.
NR_A = FR_A / A_transi; NR_B = FR_B / A_transi; NR_C = FR_C / A_transi;
NR_D = FR_D / A_transi; NR_E = FR_E / A_transi; NR_F = FR_F / A_transi;
NR_R = NR_A + NR_B + NR_C + NR_D + NR_E + NR_F;
y_A = FR_A / FR; y_B = FR_B / FR; y_C = FR_C / FR; y_D = FR_D / FR; y_E =
FR_E / FR; y_F = FR_F / FR;
PM_R = y_A * PM_A + y_B * PM_B + y_C * PM_C + y_D * PM_D + y_E * PM_E +
y_F * PM_F; % Peso molecular promedio [kg / mol].
% Densidades de reacción (Ro) [kg / m3]: Cocientes entre los flujos másicos y
los caudales volumétricos parciales de cada especie. La densidad promedio
% se cálcula con la fórmula de inversos:
Ro_A = fR_A / Q_A; Ro_B = fR_B / Q_B; Ro_C = fR_C / Q_C; Ro_D = fR_D /
Q_D; Ro_E = fR_E / Q_E; Ro_F = fR_F / Q_F;
Ro_R = 1 / (x_A / Ro_A + x_B / Ro_B + x_C / Ro_C + x_D / Ro_D + x_E /
Ro_E + x_F / Ro_F);
9
CR_A = FR_A / Q; CR_B = FR_B / Q; CR_C = FR_C / Q; CR_D = FR_D / Q; CR_E
= FR_E / Q; CR_F = FR_F / Q;
switch(CasoCapCal)
case 1 % Obtenidos de "Principios Elementales de los Procesos
Químicos - Felder" - Tabla B.2 (Todos menos G)
% Coeficientes: Para ser manejados en grados Celsius, en unidades de
[KJ / mol K] y de la forma "C1 + C2 * T + C3 * T^2 + C4 * T^3":
C1_A = (+42.93 * 10^-3); C2_A = (+8.3010 * 10^-5); C3_A = (-1.8700 *
10^-8); C4_A = (-8.030 * 10^-12);
C1_B = (+29.10 * 10^-3); C2_B = (+1.1580 * 10^-5); C3_B = (-0.6076 *
10^-8); C4_B = (+1.311 * 10^-12);
C1_C = (+34.28 * 10^-3); C2_C = (+4.2680 * 10^-5); C3_C = (+0.0000 *
10^-8); C4_C = (-8.694 * 10^-12);
10
C1_D = (+33.46 * 10^-3); C2_D = (+0.6880 * 10^-5); C3_D = (+0.7604 *
10^-8); C4_D = (-3.593 * 10^-12);
C1_E = (+28.95 * 10^-3); C2_E = (+0.4110 * 10^-5); C3_E = (+0.3548 *
10^-8); C4_E = (-2.220 * 10^-12);
C1_F = (+29.00 * 10^-3); C2_F = (+0.2199 * 10^-5); C3_F = (+0.5723 *
10^-8); C4_F = (-2.871 * 10^-12);
11
case 2 % Obtenidos de la base de datos de NIST
% Coeficientes: Para ser manejados en [J / mol K] y de la forma "C1
+ C2 * T + C3 * T^2 + C4 * T^3 + C5 / T^-2":
C1_A = (+26.84900); C2_A = (+0.075000); C3_A = (-0.000010); C4_A =
(0); C5_A = (0); % [J / mol K]
C1_B = (+31.32234); C2_B = (-20.23531); C3_B = (+57.86644); C4_B =
(-36.50624); C5_B = (-0.007374); %
C1_C = (+5.193767); C2_C = (+93.23249); C3_C = (-44.85457); C4_C =
(+7.882279); C5_C = (+0.551175); % [J / mol K]
C1_D = (+30.09200); C2_D = (+6.832514); C3_D = (+6.793435); C4_D =
(-2.534480); C5_D = (+0.082139); % [J / mol K]
C1_E = (+25.56759); C2_E = (+6.096130); C3_E = (+4.054656); C4_E =
(-2.671021); C5_E = (+0.131021);% [J / mol K]
C1_F = (+19.50583); C2_F = (+19.88705); C3_F = (-8.598535); C4_F =
(+1.369784); C5_F = (+0.527601); % [J / mol K]
12
((C1_D + C1_C - 0.5 * C1_B - C1_A)/1 * (298.15 / 1000)^1 +
(C2_D + C2_C - 0.5 * C2_B - C2_A)/2 * (298.15 / 1000)^2 + ...
(C3_D + C3_C - 0.5 * C3_B - C3_A)/3 * (298.15 / 1000)^3 +
(C4_D + C4_C - 0.5 * C4_B - C4_A)/4 * (298.15 / 1000)^4 + ...
(C5_D + C5_C - 0.5 * C5_B - C5_A)/-1 * (298.15 / 1000)^-1))
* 100;
Cp_R = 1 / (y_A / Cp_A + y_B / Cp_B + y_C / Cp_C + y_D / Cp_D + y_E /
Cp_E + y_F / Cp_F);
C1_G = (+1.74 * 10^-5); C2_G = (+2.99 * 10^-7); % [J / kg K]
Cp_G = C1_G + C2_G * (T_r);
13
% Resolución de expresión algebráica:
n1 = 1; n2 = 1;
syms Balance(T_s)
%
Balance(T_s) = (h_CalorR * ap * (T_s - T_r)) - ...
(n1 * EntR1 * (k1 * (PR_in * (Q_Ain / Q_A) * (FR_A /
FR_Ain) * (T_r / T_rin))) / ...
(1 + K1A * (PR_in * (Q_Ain / Q_A) * (FR_A / FR_Ain) *
(T_r / T_rin)))) - ...
(n2 * EntR2 * (k2 * (PR_in * (Q_Cin / Q_C) * (FR_C /
FR_Cin) * (T_r / T_rin))) / ...
(1 + K2D * (PR_in * (Q_Din / Q_D) * (FR_D / FR_Din) *
(T_r / T_rin))));
%{
Balance(T_s) = (h_CalorR * ap * (T_s - T_r)) - ...
(n1 * EntR1 * (k1 * FR_A) / ((Q_in * (FR / FR_in) * (T_r /
T_rin) * (PR_in / PR) * (1 / (ConstR * T_r)) + K1A * FR_A))) - ...
(n2 * EntR2 * (k2 * FR_C) / ((Q_in * (FR / FR_in) * (T_r /
T_rin) * (PR_in / PR) * (1 / (ConstR * T_r)) + K2D * FR_D)));
%}
T_s = vpasolve(Balance);
T_sup = double(T_s);
Ec = zeros(5,1);
Tubos = 1;
14
Ec1 = -(k1 * (PR_in * (Q_Ain / Q_A) * (FR_A / FR_Ain) * (T_r /
T_rin))) / ...
(1 + K1A * (PR_in * (Q_Ain / Q_A) * (FR_A / FR_Ain) * (T_r /
T_rin))) * Ro_Lecho * A_transi * Tubos; % B
%
case 2 % En torno a Monóxido de Carbono (E):
%
Ec2 = (k2 * (PR_in * (Q_Cin / Q_C) * (FR_C / FR_Cin) * (T_r /
T_rin))) / ...
(1 + K2D * (PR_in * (Q_Din / Q_D) * (FR_D / FR_Din) * (T_r /
T_rin))) * Ro_Lecho * A_transi * Tubos;
end
%
15
% Conjunto de Ecuaciones:
Ec = [Ec1; Ec2; Ec3; Ec4; Ec5];
end
% Fin :)
16