Saltar al contenido

Enmascarar control RST en control PID

En este capitulo vamos a aprender a enmascarar un controlador RST (el cual obedece a la filosofia de un controlador por asignación de polos) en los comunes y convencionales controladores PID.

Antes de empezar, te invito a que Veas nuestro 👉 Curso de Control de Procesos 👈 donde hemos explicado en detalle el funcionamiento del controlador RST y que te servirá para entender esta entrada.

Control RST dentro de un Control PID

Son muchas las personas que piensan que el estudio del control es innecesario principalmente porque al momento de implementar un controlador en una industria, siempre en el 95% de los casos vamos a encontrarnos con un controlador PID.

En cierta medida esto puede ser cierto, debido a que el controlador PID ha sido utilizado por decadas dando excelentes resultados en el control de procesos.

En esta tercera entrega de control de procesos, vamos a ver aplicada la teoria de control, donde vamos a hacer todo el analisis y el calculo de un controlador RST Incremental y los resultados obtenidos (Polinomio R,S y T) o controlador Reference Signal Tracking, vamos a ingresarlos en un control PID. En otras palabras vamos a enmascarar nuestro RST en esos controladores PID comunes que vemos en todas las industrias o en los PLCs que programamos.

Inicialmente vamos a ver la ecuación que representa un controlador PID ideal.

u(t)=kc\left [ e(t)+\frac{1}{ti}\int e(t)dt+td\frac{\mathrm{d} e(t)}{\mathrm{d} t} \right ]

donde:

u(t) es la acción de control

k_c es la ganancia proporcional (P)

t_i es el tiempo integral

t_d es el tiempo derivativo

e(t) es el error del sistema. (Referencia – Salida del sistema)

Diagrama de bloques de PID

En este punto te podría interesar estos otros articulos:

Reescribiendo la ecuación anterior en el dominio discreto por medio de la aproximación rectangular, se tiene que un PID puede representarse asi:

u(k)=u(k-1)+q_0e(k)+q_1e(k-1)+q_2e(k-2)

donde:

q_0=kc\left [ 1+\dfrac{t_s}{2t_i}+\dfrac{t_d}{t_s} \right ]
q_1=-k_c\left [ 1-\dfrac{t_s}{2t_i}+\dfrac{2t_d}{t_s} \right ]
q_2=\dfrac{k_ct_d}{t_s}

t_s es el tiempo de muestreo.

Llevando la ecuación discreta al dominio de Z tenemos

\Delta u(t)=(q_0+q_1z^{-1}+q_2z^{-2})e(t)
\rightarrow \Delta u(t)=\left [ q_0+q_1z^{-1}+q_2z^{-2} \right ]\left [ y_i(t)-y(t) \right ]

Comparando la ley de control PID anterior con la ley de control RST la cual se escribe a continuación.

R(z^{-1})\Delta u(t)=T(z^-1)y_i(t)-S(z^{-1})y(t)

se tiene lo siguiente

R(z^{-1})=1
S(z^{-1})=T(z^-1)=q_0+q_1z^{-1}+q_2z^{-2}

De esta manera, hemos enmascarado el controlador RST en un PID, asi de ahora en adelante podríamos hacer todo el diseño de un controlador por asignación de polos RST incremental y ingresar las ganancias en un controlador PID convencional que encontramos en las fabricas.

Pero para que quede mas claro, y no quede todo en ecuaciones, vamos a mirar un ejemplo de como exactamente funciona este negocio.

Ejemplo – Diseño de un control RST en un PID

Vamos a tomar los datos del ejemplo anterior, del control RST Incremental que hicimos.

Control RST Incremental

Del diagrama anterior tenemos las dos ecuaciones mas importantes que necesitamos para el diseño del algoritmo. Que son la ley de control y la ecuación de salida del sistema.

Ley de control RST

R(z^{-1})\Delta u(t)=T(z^-1)y_i(t)-S(z^{-1})y(t)

Para un sistema de segundo orden seria:

u(k)=TY_i(k)-S_0y(k)-S_1y(k-1)-S_2y(k-2)-(R_1-1)u(k-1)-R_1u(k-2)

Salida del sistema

A(z^{-1})y(t)=B(z^{-1})u(t)+d0(t)

para un sistema de segundo orden

y(k)=b_0u(k-1)+b_1u(k-2)-a_1y(k-1)-a_2y(k-2)+d0(k)

Listo con estas dos ecuaciones, vamos a tomar los valores que nos dio el ejemplo anterior, es decir los valores de los polinomios R,S,T

R(z^{-1})=1+0.3176z^{-1}
S(z^{-1})=10.5781-13.3579z^{-1}+4.2884z^{-2}
T(z^{-1})=1.5085

Procedemos entonces a enmascarar nuestro controlador RST en un PID

R(z^{-1})=1
q_0=S_0=10.5781
q_1=S_1=-13.3579
q_2=S_2=4.2884

Ahora si evaluamos el polinomio S cuando las Z valen 1 (Teorema de valor final) vamos a ver que se cumple que S=T

S(1)=10.5781-13.3579+4.2884=1.5085=T(1)

Ya con esto tenemos nuestros parámetros para ingresarlos en un PID discreto. Para hacerlo en un PID continuo basta con reemplazar las q0,q1 y q2 en las ecuaciones de aproximación rectangular y despejar kc, ti y td. (homework)

A continuación esta el codigo donde se compara el algoritmo RST y el algoritmo del PID sintonizado con los parámetros del RST

clc;
clear all;
close all;
%% Condiciones Iniciales
nit=400;    %Numero de interacciones
umin=0;     %Señal de saturacion minima del controlador
umax=4.9;   %Señal de saturacion maxima del controlador
u(1:10)=0;  %Inicializo las 10 primeras señales de control en zero
y(1:10)=0;  %Inicializo las 10 primeras señales de salida en zero
error(1:10)=0;  %Inicializo las 10 primeras señales del error en zero
% Referencia o Set-Point
r(1:100) = 1; r(101:200) = 4; r(201:300) = 3; r(301:nit) = 3;

%% Datos de la planta o del sistema
ts=0.1;                 %Tiempo de muestreo
num=1;                 %Numerador Continuo
den=[0.1 1.1 1];       %Denominador Continuo
gp=tf(num,den);        %Funcion de transferencia
ftz=c2d(gp,ts);         %Discretizacion de la planta
[B,A]=tfdata(ftz,'v'); %Divide Numerador em B e denominador em A

%% Diseño del Controlador por Asignacion de polos

%Datos de diseño, segun se desee el funcionamiento del control
Tss=2;                  %Tiempo de establecimiento deseado en lazo cerrado
ep=0.6;                %Coeficiente de amortiguacion

%Calculos
wn=4/(ep*Tss);          %Calculo de la frecuencia natural

%Determina los Polos conjugados que se van a asignar al sistema
za=exp(-ep*wn*ts);
th=57.3*wn*ts*sqrt(1-ep^2);
polos=za*[cosd(th)+i*sind(th),cosd(th)-i*sind(th)];

% Polinomio deseado, com polo insignificante igual a zero
Am=poly([polos 0 0]);

%Delata A. Multiplica el denominador (A) por integrador (Z-1)
DA=conv(A,[1 -1]);

%Resuelve las ecuaciones de forma matricial
  %Matriz M con los coeficientes de R y S
    M=[1 B(2) 0 0; DA(2) B(3) B(2) 0; DA(3) 0 B(3) B(2);DA(4) 0 0 B(3)];
  %Matriz q coeficientes de la asignacion de polos (Am)
    q=[Am(2)-DA(2); Am(3)-DA(3);Am(4)-DA(4);Am(5)];
  %Matriz X, resultado de la operacion. Inversa de M por q
    X=inv(M)*q;

R=[1 X(1)];     %Polinomio R
S=X(2:end)';    %Polinomio S
T=sum(S);       %Polinomio T

%Ingresa la perturbacion en el instante 300
d0(1:300)=0;
d0(301:nit)=0.1;

%% Lazo cerrado de control RST
for k = 5:nit
    %Salida de la Planta de Segundo orden
    y(k)=B(2)*u(k-1)+B(3)*u(k-2)-A(2)*y(k-1)-A(3)*y(k-2)+d0(k);
    
    %Ley de Control RST
    u(k)=T*r(k)-S(1)*y(k)-S(2)*y(k-1)-S(3)*y(k-2)-(R(2)-1)*u(k-1)+R(2)*u(k-2);
    
    % Saturacion del sistema
    if u(k) >= umax 
     u(k) = umax;
     elseif u(k) <= umin
     u(k) = umin;
    end
end

t = 0:ts:(nit-1)*ts;

figure
subplot(2,1,1),plot(t,r,'--k',t,y,'-r','Linewidth',2.5)
title('ALGORITMO DE CONTROL RST');
xlabel('Tempo (s)');
ylabel('Velocidade');
legend('y_r','y','Location','SouthEast')
grid on;
hold
subplot(2,1,2),plot(t,u,'--b','Linewidth',3)
xlabel('Tempo (s)');
ylabel('Controle (volts)');
legend('u')
grid on;

%% Implementacion del control RST en un control convencional PID

R=1;
q0=S(1);    %q0 es igual a S0
q1=S(2);    %q1 es igual a S1
q2=S(3);    %q2 es igual a S2

%Lazo cerrado de control PID
for k = 5:nit
    %Salida de la Planta de Segundo orden
    y(k)=B(2)*u(k-1)+B(3)*u(k-2)-A(2)*y(k-1)-A(3)*y(k-2)+d0(k);
    
    %Señal de Error (Referencia menos salida del sistema)
      error(k) = r(k) - y(k);
    
    %Ley de Control PID
      u(k) = u(k-1) + q0*error(k) + q1*error(k-1) + q2*error(k-2);
    
    % Saturacion del sistema
    if u(k) >= umax 
     u(k) = umax;
     elseif u(k) <= umin
     u(k) = umin;
    end
end

t = 0:ts:(nit-1)*ts;

figure
subplot(2,1,1),plot(t,r,'--k',t,y,'-r','Linewidth',2.5)
title('ALGORITMO DE CONTROL RST IMPLEMENTADO EN UN PID');
xlabel('Tempo (s)');
ylabel('Velocidade');
legend('y_r','y','Location','SouthEast')
grid on;
hold
subplot(2,1,2),plot(t,u,'--b','Linewidth',3)
xlabel('Tempo (s)');
ylabel('Controle (volts)');
legend('u')
grid on;

A continuación se muestra la respuesta del sistema, Tanto del control RST como del control PID. Se evidencia una respuesta muy similar. La diferencia radica principalmente en la acción de control del PID que es un poco mas agresiva que la acción de control del RST.

En términos generales se muestra como es posible hacer nuestros diseños de controladores y enmascararlos en los controladores convencionales PID que vemos en todas las industrias.

Enmascarar RST en PID

Ayuda compartiendo la información de la pagina en redes sociales, dale un like, twittea o un plus (+) en google, para que mas personas puedan acceder a la información del sitio web.

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.