En esta entrada aprenderás a Modelar y Linealizar un Reactor CSTR (Perfectamente agitado) usando sus ecuaciones diferenciales para describir el comportamiento dinámico y estacionario del sistema.
Adicionalmente aprenderás a simular el proceso del reactor CSTR en MATLAB y SIMULINK. Cuyos códigos y videos explicativos se encuentran al final de este post.
Antes de comenzar te invito a que veas nuestro CURSO GRATUITO DE MODELADO DE SISTEMAS.
Y que te suscribas al canal de YouTube para que sigas aprenduendo más sobre estos temas:
Reactor CSTR con Reacción de Van de Vusse
Vamos a estudiar el modelo fenomenológico de un reactor CSTR con reacción de Van de Vusse, el cual presenta una componente no lineal en su respuesta dinámica.
Aprovecharemos esta característica para obtener un modelo lineal usando las series de Taylor (matriz Jacobiana) que represente el proceso en diferentes puntos de operación. Este modelo lineal del reactor CSTR será escrito por medio de variables de estado y también por medio de funciones de transferencia.
Finalmente, realizaremos una comparación entre la respuesta dinámica del modelo del reactor CSTR no lineal vs la respuesta dinámica del reactor representado de forma lineal.
Reacción de Van de Vusse
El modelo CSTR (reactor perfectamente agitado, del ingles continuous stirred-tank reactor) de van de Vusse representa el sistema reacional utilizado para la síntesis de ciclopentenol (representado por B) a partir del ciclopentadieno (representado por A).
Este reactor envuelve entonces reacciones en serie y en paralelo entre la entrada del sistema (Reacción A) y el producto obtenido (Reacción B).
Sin embargo dado a la fuerte reatividade de los reagentes y produtos, se obtienen dos productos adicionales NO deseados, el diciclopentadieno (representado por D) es produzido como subproduto por la reacción de Diels-Alder y ciclopentenodiol (representado por C) es produzido como um produto consecutivo por la adición de otra molécula de água.
Ejemplo de reactor CSTR de Van de Vusse
donde los parámetros de la tasa de reacción, vienen dados por:
Balance de Masas del Reactor CSTR
Estudiemos las ecuaciones de diseño del reactor CSTR. Si se asume que la densidad y el volumen son constantes en el interior del reactor CSTR, podemos formular las siguientes dos hipotesis:
Con base a esto, procedemos a obtener el balance de cada uno de los componentes del reactor CSTR.
Balance del componente A:
Interior del reactor = Flujo de entrada – Flujo de Salida – sale reaccion 1 – sale reacción 2
Y debido a que consideramos el volumen constante, el balance de masa del componente A se resume a:
Balance del componente B:
De la misma forma podemos obtener el balance de masa para el componente B
Balance del componente C:
Balance del componente D:
Como deseamos obtener el modelo del Componente B con relación al producto de entrada Componente A, observemos que estos dos balances de energia NO dependen de los balances C y D, por lo tanto, solo nos van a interesar estas dos ecuaciones diferenciales:
Estas dos ecuaciones representan el comportamiento fenomenológico no lineal de nuestro reactor de Van de Vusse.
Linealización del Reactor CSTR de Van de Vusse
Ahora como deseamos linealizar este sistema en torno a un punto de equilibrio o punto de operación el próximo paso sera encontrar dicho punto. Para lograr esto hacemos todas las derivadas (cambios) iguales a cero, lo que significa que el sistema no está cambiando y se encuentra en un estado estacionario.
Ecuaciones estacionarias del Reactor CSTR
A partir de la ecuación de obtenemos lo siguiente:
Resolviendo la ecuación cuadrática anterior utilizando la formula general y escogiendo la raiz positiva (dado que una concentración negativa no tiene un sentido físico), tenemos que:
Y para el componente B tenemos:
La entrada de nuestro sistema es la tasa de disolución l/min.
Si hacemos un barrido de nuestra entrada desde 1 l/min hasta 10 l/min. Obtendremos las curvas que relacionan la entrada y la salida del sistema en su estado estacionario:
Si observamos el comportamiento del Componente B, vemos que tiene una inversión de fase (provocado por un cero de fase no mínima), que con una entrada de 1.292 l/min se obtiene la máxima producción del componente B (Lo más deseado) y que con una entrada superior, la producción de B comienza a caer.
A partir del gráfico anterior, podremos seleccionar un punto de operación, donde nosotros como ingenieros queremos que nuestro proceso opere.
Con ese punto de operación podemos proceder a realizar la linealización del sistema de las ecuaciones no lineales del reactor CSTR representado en Espacio de Estados utilizando el Jacobiano.
Representación Lineal del Reactor CSTR
Vamos a obtener una representación en espacio de estados de nuestro reactor.
Definimos cuales serán nuestras variables de estado, en este caso serán las concentraciones de A y B:
Si renombramos las dos ecuaciones de balance de masa como función 1 () y función 2 ().
Podremos obtener el jacobiano del sistema.
Jacobiano:
Matriz A:
Matriz B:
El modelo en espacio de estado viene dado por:
Teniendo la representación en el espacio de estado de nuestro sistema, vamos a seleccionar diferentes puntos de operación para analizar el comportamiento de este proceso.
Veremos tres casos diferentes. En el caso 1 veremos como aparece una respuesta inversa o respuesta de fase no mínima en la concentración de B mientras que en el caso 2 esta respuesta inversa no aparece. Y en el caso 3 se ilustra el punto de operación donde se alcanza la máxima producción del componente B.
Reactor CSTR de Van de Vusse – CASO 1 (Fase no mínima)
Para este punto de operación vamos a considerar la tasa de flujo . Notemos que esta tasa de flujo se ubica en el lado izquierdo del máximo pico del gráfico de estado estacionario que relaciona la entrada salida.
Inicialmente encontramos el estado estable del componente A () y el componente B().
Con esto obtenemos la siguiente representación en el espacio de estado
Y podemos obtener la función de transferencia de la misma forma que lo hemos visto en el curso de sistemas dinámicos lineales usando .
Si notamos, vemos que esta función de transferencia tiene un cero positivo, lo que provoca la respuesta inversa o respuesta de fase no mínima.
Al final del post, puedes encontrar el código de implementación en Matlab para que lo copies y lo pegues en tu computador.
Veamos una comparación de los dos sistemas en el punto de operación linealizado
Ahora una comparación alejándonos más del punto de operación linealizado. Veamos como el sistema lineal comienza a dejar de valer.
Reactor CSTR de Van de Vusse – CASO 2 (Respuesta directa)
Para este punto de operación vamos a considerar la tasa de flujo . Notemos que esta tasa de flujo se ubica en el lado derecho del máximo pico del grafico de estado estacionario que relaciona la entrada salida.
Procedemos a encontrar el punto estable de ambos componentes de la misma forma que lo hicimos en el caso 1:
Con esto obtenemos la siguiente representación en el espacio de estado
Y podemos obtener la función de transferencia de la misma forma que lo hemos visto en el curso de sistemas dinámicos lineales usando .
En este caso ya se tiene el cero en el semiplano negativo, por lo tanto la respuesta inversa desaparece.
Reactor CSTR de Van de Vusse – CASO 3 (Punto óptimo)
El punto de operación óptimo para la producción del componente B se logra utilizando la siguiente tasa de disolución:
Con esto obtenemos la siguiente representación en el espacio de estado
Y podemos obtener la función de transferencia de la misma forma que lo hemos visto en el curso de sistemas dinámicos lineales usando .
El cero de esta función de transferencia se ubica en el origen. En este caso la condición de estado estable no cambia en la concentración de B para pequeños cambios en la entrada. Esto es debido a la ganancia cero de la función de transferencia.
Suscríbete a este sitio WEB para estar enterado de las nuevas entradas!
Simulación de un Reactor CSTR
Aprende como simular y modelar un Reactor CSTR utilizando el MATLAB y SIMULINK detalladamente.
A continuación te dejo dos videos explicando en detalle el procedimiento de simulación de estos dos procesos y al final podrás descargar los códigos implementados en los videos.
MATLAB:
SIMULINK:
Si estás interesado en aprender a utilizar perfectamente el SIMULINK para el modelado, simulación y control de procesos industriales, te invito a que te inscribas al curso de SIMULINK desde CERO con más de 10 horas de videos explicando en detalle este potente software de ingeniería:
A continuación se presenta el código de implementación para que lo puedas copiar y pegar en tu computador. Recuerda compartir el contenido de esta entrada en tus redes sociales, asi ayudas a que más personas conozcan la página y se beneficien con esta información.
%% Sergio Castaño % Rio de Janeiro - 2017 % https://controlautomaticoeducacion.com/ %% clc close all clear all %Constantes k1 = 5/6; k2 = 5/3; k3 = 1/6; cafs = 10; %Concentracion de A en la entrada del reactor fsov = 0:0.1:10; %Vector de Parametros par.k1=k1; par.k2=k2; par.k3=k3; par.cafs=cafs; par.fsov=fsov; nm=100; Ts=0.1; t = 0:Ts:(nm-1)*Ts; %Tiempo de Simulación %% PUNTOS DE EQULIBRIO % Los puntos de equilibrio pueden ser encontrados utilizando cualquiera de % las dos siguientes posibilidades: %% Punto de Equilibrio (Posibilidad 1) cas1 = -(k1 + fsov)/(2*k3); cas2 = sqrt((k1+fsov).^2 + 4*k3*fsov.*cafs)/(2*k3); cas = cas1 + cas2; cbs = k1*cas./(fsov + k2); %% Punto de Equilibrio (Posibilidad 2) x0=[1,1]; %Valores iniciales for i=1:length(fsov) %Encuentra el estado Estacionario par.fsov=fsov(i); X(i,:) = fsolve(@(x)vvmodel(t,x,par),x0); %X=[Ca Cb] end % Grafica de los Puntos de Equilibrio figure subplot(2,1,1) plot(fsov,X(:,1),'Linewidth',2) title('Relacion Concentraciones vs F/V'); ylabel('Concentracion C_{As} mol/litro'); legend('C_{As}','Location','SouthEast') subplot(2,1,2) plot(fsov,X(:,2),'Linewidth',2) ylabel('Concentracion C_{Bs} mol/litro'); legend('C_{Bs}','Location','SouthEast') xlabel('F_s/V (min^{-1})'); %% Linealizacion del sistema por Jacobiana syms x1 x2 u % Ecuaciones diferenciales % x1 = ca % x2 = cb % u = fsov dx1 = u*(cafs - x1) -k1*x1 - k3*x1^2; dx2 = -u*x2 + k1*x1 - k2*x2; % Funciones para realizar la jacobiana fx1 = u*(cafs - x1) -k1*x1 - k3*x1^2; fx2 = -u*x2 + k1*x1 - k2*x2; %Conforma vectores fx = [fx1;fx2]; x = [x1;x2]; %Linealiza por medio de la Jacobiana A = jacobian(fx,x); B = jacobian(fx,u); C = [0 1]; %Matriz de salida (Cb) %*********************************************************************** %*********************************************************************** %% Caso 1 (Respuesta inversa) % Punto de equilibrio par.fsov=4/7; Eq1 = fsolve(@(x)vvmodel(t,x,par),x0); %Eq1=[Ca Cb] %Reemplazo los puntos de equilibrio en la Jacobiana display('Representación en Espacio de Estado Caso 1') A1 = double(subs(A,{x1,u},{Eq1(1),par.fsov})) B1 = double(subs(B,{x1,x2},{Eq1})) %Determino la Funcion de Transferencia display('Representación en Función de Transferencia Caso 1') [num1,den1]=ss2tf(A1,B1,C,0); ft1=tf(num1,den1) % Comparación del Modelo Lineal vs Modelo No Lineal du=0.01; %Pequeña Variación en la entrada del sistema par.fsov=4/7+du; % Simula el Modelo No Lineal [ts,X1] = ode45(@(t,x)vvmodel(t,x,par), t , Eq1, par.fsov); %tsm=0:0.001:0.1; u2=zeros(length(ts),1); %Creo el vector de entrada para la FT u2(:,1)=du*ones(length(ts),1); %Lo lleno con el pequeño incremento [ylin]=lsim(ft1,u2,ts); %Grafica figure plot(ts,X1(:,2),'-b',ts,ylin+Eq1(2),'--r','LineWidth',2); title('Comparación modelo Lineal vs No Lineal (caso 1)'); xlabel('tiempo (min)'); ylabel('C_b mol/litro'); legend('No Lineal','Lineal','Location','SouthEast') %*********************************************************************** %*********************************************************************** %% Caso 2 (Respuesta NO inversa) % Punto de equilibrio par.fsov=2.8744; Eq2 = fsolve(@(x)vvmodel(t,x,par),x0); %Eq2=[Ca Cb] %Reemplazo los puntos de equilibrio en la Jacobiana display('Representación en Espacio de Estado Caso 2') A2 = double(subs(A,{x1,u},{Eq2(1),par.fsov})) B2 = double(subs(B,{x1,x2},{Eq2})) %Determino la Funcion de Transferencia display('Representación en Función de Transferencia Caso 2') [num2,den2]=ss2tf(A2,B2,C,0); ft2=tf(num2,den2) % Comparación del Modelo Lineal vs Modelo No Lineal du=0.1; %Pequeña Variación en la entrada del sistema par.fsov=2.8744+du; % Simula el Modelo No Lineal [ts,X2] = ode23t(@(t,x)vvmodel(t,x,par), t , Eq2, par.fsov); %tsm=0:0.001:0.1; u2=zeros(length(ts),1); %Creo el vector de entrada para la FT u2(:,1)=du*ones(length(ts),1); %Lo lleno con el pequeño incremento [ylin]=lsim(ft2,u2,ts); %Grafica figure plot(ts,X2(:,2),'-b',ts,ylin+Eq2(2),'--r','LineWidth',2); title('Comparación modelo Lineal vs No Lineal (caso 2)'); xlabel('tiempo (min)'); ylabel('C_b mol/litro'); legend('No Lineal','Lineal','Location','SouthEast') %*********************************************************************** %*********************************************************************** %% Caso 3 (Punto Optmino) % Punto de equilibrio par.fsov=1.2921; Eq3 = fsolve(@(x)vvmodel(t,x,par),x0); %Eq3=[Ca Cb] %Reemplazo los puntos de equilibrio en la Jacobiana display('Representación en Espacio de Estado Caso 3') A3 = double(subs(A,{x1,u},{Eq3(1),par.fsov})) B3 = double(subs(B,{x1,x2},{Eq3})) %Determino la Funcion de Transferencia display('Representación en Función de Transferencia Caso 3') [num3,den3]=ss2tf(A3,B3,C,0); ft3=tf(num3,den3) % Comparación del Modelo Lineal vs Modelo No Lineal du=0.01; %Pequeña Variación en la entrada del sistema par.fsov=1.2921+du; % Simula el Modelo No Lineal [ts,X3] = ode23t(@(t,x)vvmodel(t,x,par), t , Eq3, par.fsov); %tsm=0:0.001:0.1; u2=zeros(length(ts),1); %Creo el vector de entrada para la FT u2(:,1)=du*ones(length(ts),1); %Lo lleno con el pequeño incremento [ylin]=lsim(ft3,u2,ts); %Grafica figure plot(ts,X3(:,2),'-b',ts,ylin+Eq3(2),'--r','LineWidth',2); title('Comparación modelo Lineal vs No Lineal (caso 3)'); xlabel('tiempo (min)'); ylabel('C_b mol/litro'); legend('No Lineal','Lineal','Location','SouthEast')
Función del Modelo:
function x = vvmodel(~,x,par) % Modelo dinamico del Reactor de Van de Vusse % x = Estados % x(1) = concentración de A % x(2) = concentración de B % t = tiempo % % fov = Tasa de disolución % ca = concentración de a % cb = concentración de b % caf = Concentración de A en la entrada del reactor % % Esquema de la Reacción % % A ---> B ---> C % (k1) (k2) % 2A ---> D % (k3) % k1 = par.k1; % (min^-1) k2 = par.k2; % (min^-1) k3 = par.k3; % (mol/(liter min) caf = par.cafs; % mol/liter fov = par.fsov; % (min^-1) %Definición de las Variables de Estado ca = x(1); cb = x(2); % % Sistema de Ecuaciones % dcadt = fov*(caf - ca) -k1*ca - k3*ca*ca; dcbdt = -fov*cb + k1*ca - k2*cb; % % Vector de Estados % x = [dcadt;dcbdt];
Bibliografia
- Bequette, B. (1998). Process Dynamics: Modeling, Analysis, and Simulation. New Jersey: Prentice Hall
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.