Tabla de Contenido
Modelo estático del sistema de nivel
Si se considera que la presión manométrica entre los puntos 1 y 2 son cero. Que m es la masa de las partículas de fluido entre el punto 1 y 2. Y que v es la velocidad de salida de la particula 1 y 2. se tiene que.
El flujo de salida del tanque para el caso de una sección transversal S es:
Flujo por una Válvula
De manera general el flujo que pasa por una válvula de control en estado estacionario es dado por:
: Flujo a través da válvula
: una constante
: Área de paso
: Presión diferencial a través de la válvula. P2-P1
Se puede concluir que el flujo que pasa por la válvula es proporcional al área de abertura de la válvula en el caso que la diferencia de presión sea constante. De manera practica tomamos una válvula con un comportamiento inteligente, donde sea posible hacer una aproximación mas o menos lineal entre el flujo Qv y la abertura de la válvula.
Vamos a suponer que el flujo de entrada Qe es proporcional a la abertura de la válvula de entrada considerando un suministro constante.
Modelado Matemático
Tanque 1:
Tanque 2:
Linealización del sistema no lineal
Primero encontramos el punto de equilibrio del sistema volviendo todas las derivadas igual a cero:
Tanque 1:
Tanque 2:
Linealización por Series de Taylor:
Dado que la serie de Taylor es una serie infinita, y nuestro objetivo es linealizar el sistema en un punto de operación, únicamente vamos a tomar hasta la primera derivada de la serie de Tayor. Esta primera derivada es conocida como la Jacobiana del sistema.
Ahora llevándolo para el problema de los tanques en cascada, vamos a linealizar el primer tanque con relación a la abertura de la primera válvula:
Inicialmente la función de Taylor es equivalente a:
Ahora si linealizamos en torno a un punto de equilibrio que vamos a llamar y
, como son dos variables, nuestra serie de Taylor se reduce a la siguiente expresión:
note que y
, que permite expresar el problema en variable desvío. Es decir estamos trasladando el problema al punto donde queremos linealizar (
).
Sabemos que:
por lo tanto despejando:
donde el primer tanque linealizado es:
Notemos que la ecuación anterior ahora es una ecuación lineal que depende de la variable desvío y que ésta no se encuentra inserida en ninguna raíz cuadrada.
Podemos Aplicar transformada de LaPlace para llevar la ecuación lineal al plano transformado S
Para el Tanque 2 tenemos:
Linealizando tanque 2
Sabemos que:
apicando Laplace
Esta ecuación depende de la transformada de Laplace del tanque 1, por eso debemos sustituirla en la expresión de
Así nos queda una Función de Transferencia de Segundo Orden
Podemos aprovechar y tomar también nuestras ecuaciones lineales en el dominio del tiempo y representarlas en Espacio de Estados, asi:
LINEALIZACIÓN POR JACOBIANA
Otra forma genérica de linealizar es utilizando la Jacobiana, que es simplemente el primer termino de la expansión de series de Taylor, con lo cual podremos obtener directamente nuestro sistema linealizado expresado en la representación en el espacio de estados:
Serie de Taylor:
Jacobiana:
donde:
Dando el mismo resultado:
DATOS NUMÉRICOS
Vamos a asignarle algunos datos numericos a nuestro problema para poderlo simular en Matlab y Simulink. Vamos a suponer entonces los siguientes datos:
A continuación implementaremos el código en matlab usando las funciones para resolver ecuaciones diferenciales y también lo implementaremos en SIMULINK usando S-FUNCTION y también álgebra de Bloques.
DESCARGAR TODOS LOS CÓDIGOS: CLICK AQUI PARA BAJAR.
Implementación en MATLAB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | % Tanques en Cascada % Sergio Andres Castaño Giraldo % Rio de Janeiro - 2017 % http://controlautomaticoeducacion.com/ clc clear all close all %Parametros k1=0.04; k2=0.03; k3=0.055; a1=0.0:0.1:1; %Abertura de la Valvula entrada a2=0:0.1:1; %Abertura de la Valvula salida A1=1; A2=1.5; %Abertura de las Valvulas para el punto de equilibrio a1s=0.5; a2s=0.45; %Altura en los tanques en el punto de equilibrio h1s=((k1*a1s)/k2)^2; h2s=((k2^2*h1s)/(k3*a2s)^2); Eq1=[h1s h2s]; %Perfil de los estados estacionarios variando valvula de entrada a1 fijando %valvula de salida a2 H1s=((k1.*a1)/k2).^2; H2s=((k2^2.*H1s)./(k3*a2s)^2); figure subplot(2,1,1); plot(a1,H1s),grid title('Variación de nivel h1'); ylabel('Altura (h)'); xlabel('Abertura de Valvula a1'); subplot(2,1,2); plot(a2,H2s),grid title('Variación de nivel h2'); ylabel('Altura (h)'); xlabel('Abertura de Valvula a1'); %% Linealizacion del sistema por Jacobiana syms x1 x2 ua1 % Funciones para realizar la jacobiana fx1 = 1/A1*(k1*ua1-k2*sqrt(x1)); fx2 = 1/A2*(k2*sqrt(x1)-k3*a2s*sqrt(x2)); %Conforma vectores fx = [fx1;fx2]; x = [x1;x2]; %Linealiza por medio de la Jacobiana A = jacobian(fx,x); B = jacobian(fx,ua1); C = [0 1]; %Matriz de salida (Cb) %Reemplazo los puntos de equilibrio en la Jacobiana display('Representación en Espacio de Estado Caso 1') Ad = double(subs(A,{x1,x2},{Eq1})) Bd = double(B) %Determino la Funcion de Transferencia display('Representación en Función de Transferencia Caso 1') [num1,den1]=ss2tf(Ad,Bd,C,0); ft1=tf(num1,den1) %Creamos la función de transferencia del Proceso para la altura h2 num=(k1*k2)/(2*sqrt(h1s)); den=conv([A1 k2/(2*sqrt(h1s))],[A2 (k3*a2s)/(2*sqrt(h2s))]); G2=tf(num,den); %Carga los parametros en una variable Par, para hacer la integración del %sistema par.k1=k1; par.k2=k2; par.k3=k3; par.A1=A1; par.A2=A2; u(1)=a1s; u(2)=a2s; % Simula el Modelo No Lineal, realizando la integración del modelo, % resolviendo las ecuaciones diferenciales del sistema t=0:0.01:1000; du=-0.001; %Pequeña Variación en la entrada del sistema u(1)=a1s+du; [ts,X1] = ode23t(@(t,x)tankmodel(t,x,u,par), t , Eq1); 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(G2,u2,ts); %Grafica figure plot(ts,X1(:,2),'-b',ts,ylin+Eq1(2),'--r','LineWidth',2); title('Comparación modelo Lineal vs No Lineal'); xlabel('tiempo (s)'); ylabel('h_2 m^3/s'); legend('No lineal','Lineal'); |
FUNCIÓN DEL MODELO DEL TANQUE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function x = tankmodel(~,x,u,par) %Carga los parametros k1 = par.k1; k2 = par.k2; k3 = par.k3; A1 = par.A1; A2 = par.A2; %Carga las entradas del Modelo a1 = u(1); a2 = u(2); %Definición de las Variables de Estado h1 = x(1); h2 = x(2); % % Sistema de Ecuaciones % dh1dt = 1/A1*(k1*a1-k2*sqrt(h1)); dh2dt = 1/A2*(k2*sqrt(h1)-k3*a2*sqrt(h2)); % % Vector de Estados % x = [dh1dt;dh2dt]; |
FUNCIÓN DE LA S-FUNCTION:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function [sys,x0]=smodelo(t,x,u,flag,par,h1s,h2s) % En el Flag 0 es el paso donde indicamos para la S-Function que es lo que % la función va a encontrar en el momendo de leer el modelo. Esa % información será encontrada en un vector de 6 elementos, que llamaremos % "sys" if flag==0 %Elemento 1: Número de estados continuos (Ecuaciones diferenciables)= 2 %Elemento 2: Número de estados discretos: 0 %Elemento 3: Número de saídas do modelo: 2 %Elemento 4: Número de Entradas do modelo (a1) (a2): 2 entradas %Elemento 5: Parametro de control, colcar 0 %Elemento 6: Tipologia do processo, (1 para processos continuos) [sys]=[2,0,2,2,0,0]; %Incluir las condiciones iniciales x0=[h1s h2s]; elseif flag==1 %Flag 1 llama el modelo [sys]=tankmodel(t,x,u,par); elseif flag==3 %Flag 3 indica la respuesta que se debe obtener, en este caso, un vetor con las 2 %variables de estado [sys]=x; else %Como paso final con un vetor nulo se cierra el bucle [sys]=[]; end end |