Está en la página 1de 5

E2: Simulación y alerta para tanque

Dado el siguiente tanque:

Cuyo modelo es:

1) Implemente la simulación para el nivel del tanque considerando la siguiente relación de


salida: . Se tienen los siguientes valores de parámetros: ,
, además la altura inicial del tanque es , la entrada es un escalón
de 0.001. Ojo mostrar la simulación de al menos 10 segundos, la figura que se muestra es
de ejemplo:

close all
%%% Defina los valores necesarios (1/2 punto)
t = 0:0.05:10;
ko = 0.03;
A = 0.1;
qi = 0.001;
h0 = 0.8;

%%% Función para resolver en ODE *puede hacerlo al final del documento si
desea* (1/2 punto)
funcion = @(t,h) 1/A*(qi-ko*sqrt(h));

%%% Llamado a resolvedor ODE (1 punto)


[t,h] = ode45(funcion, t, h0);

%%% Cálculos adicionales (1/2 punto)


qo = ko*sqrt(h);

%%% Hacer gráfico (1/2 punto)


figure(1)
subplot(2,2,[1 3])
plot(t,h); title('h(t)')
subplot(2,2,2)
plot(t,qo); title('qo(t)')
subplot(2,2,4)
plot([0,10],[qi,qi],'-r'); title('qi(t)')

2) Como se observa el tanque posee 2 cuerpos, siendo R = 0.6, cuando la altura del
líquido desciende por debajo de R/2, el vólumen se considera bajo y se deberá emitir una
alerta y aumentar el flujo de entrada por 20, elabore el algoritmo correspondiente.
% Necesitaremos definir los vectores previamente
h = zeros(length(t),1);
h(1) = h0;
qo = zeros(length(t),1);
qo(1) = ko*sqrt(h(1));
%%% Completar la simulación (3/2 puntos)
R = 0.6;
for i = 2:length(t)
% Ejecutar un paso del resolvedor
[t1,h1] = ode45(funcion, [t(i-1) t(i)], h(i-1));
h(i) = h1(end);
if h(i)<R/2
% emitir alerta
fprintf("Alerta de nivel: %f m.",h(i))
% actualizar qi
if (qi==0.001)
qi = 20*qi;
end
% actualizar funcion
funcion = @(t,h) 1/A*(qi-ko*sqrt(h));
end
% calcular qo(t)
qo(i) = ko*sqrt(h(i));
end
%%% Hacer gráfico (1/2 punto)
figure()
subplot(2,2,[1 3])
plot(t,h); title('h(t)')
subplot(2,2,2)
plot(t,qo); title('qo(t)')
subplot(2,2,4)
plot([0,10],[qi,qi],'-r'); title('qi(t)')

E3: Sistema de control

El sistema mostrado tiene como objetivo regular el nivel de un tanque mediante el


accionamiento de válvulas.

La entrada del sistema es el voltaje de alimentación del circuito , mientras que la salida
es el nivel .

Las ecuaciones que describen el sistema vienen dadas por:

Y los siguientes parámetros:


- Resistencia del motor,

- Constante del par,

- Constante de fuerza,
- Ganancia del amplificador,

- Inductancia del motor,

- Relación de engranes,

- Carga y fricción del motor: despreciable

- Area del tanque,

El número de válvulas conectadas al tanque desde el recipiente es . Todas las


válvulas tienen las mismas características y son manipuladas simultáneamente por .

- Las ecuaciones que gobiernan el flujo vienen dadas por:

Donde:

- Además recuerde que para un circuito RL:

- Considerando que las variables de estado son:

1) Encuentre el modelo del sistema en espacio de estados y presente el comportamiento


del nivel del tanque ante diversos tipos de estímulos en el voltaje de entrada.
close all
%%% Definir las constantes (1 punto)
Ra = 10;
Ki = 10;
Kb = 0.0706;
Ka = 50;
La = 0.5;
n = 1/100;
A = 50;
kl = 10;
ko = 50;
N = 10
%%% Definir el sistema espacio estados (3 puntos)
A = [-ko/A, kl*N*n/A, 0;
0 0 -Ra/Kb
0 0 -Ra/La];
B = [0 Ka/Kb Ka/La]';
C = [1, 0, 0];
D = 0;
sys1 = ss(A,B,C,D);
%%% Encontrar las respuestas en el tiempo *al menos 3* (1 punto)
step(sys1);
impulse(sys1);
t = 0:0.01:10;
[y,t] = lsim(sys1,sin(t),t,[0,0,0]');
plot(t,y);

2) Implemente un controlador PID y sintonice sus parámetros, el objetivo es regular el


voltaje de entrada según el nivel deseado en el tanque.
%%% Implementar el lazo de control con el PID (4 puntos)
% Definir vector de tiempo;
t = 0:0.1:10;
Csys= pid(0.6,1,10,100); % Genera FT de controlador PID
Geq1 = feedback(series(Csys,sys1),1) % FT en lazo cerrado de Motor 1
% Definir referencia a usar
u0 = 0.5;
u = u0*ones(length(t),1);
% Definir condiciones iniciales
x0 = [0.1, 0.1, 1e-3, 0, 0]';
% Vector para estados
x = zeros(5,length(t));
x(:,1) = x0;
% Hacer simulación del sistema en lazo cerrado
for i = 2:length(t)
[y,t1,xx] = lsim(Geq1, [u(i-1), u(i)], [0, t(i)-t(i-1)],x(:,i-1));
x(:,i) = xx(end,:)';
end
%%% Gráficas de h(t) (y referencia usada), theta(t) e i(t) (2 puntos)
figure()
subplot(2,2,[1 3])
plot(t,x(1,:)); hold on
plot([0,10],[u0,u0],'--r'); legend('h(t)','r(t)')
subplot(2,2,2)
plot(t,x(2,:)); title('theta_m(t)')
subplot(2,2,4)
plot(t,x(3,:)); title('ia(t)')

También podría gustarte