Documente Academic
Documente Profesional
Documente Cultură
IEEE-UNAC
Diseo de un Controlador PID Difuso para una planta de Segundo Orden Subamortiguada usando LABVIEW
Cuya Solari, Omar Antonio oacs_198@hotmail.com Flores Bustinza, Edwing Irwing irwing_1988_@hotmail.com Torres Chavez, Jonathan Emmanuel jonathan260605@hotmail.com
IEEE-UNAC
I.- Objetivos Realizar la simulacin y tiempo real de un sistema lineal con controlador PID difuso de nueve reglas, con Labview en cdigo Puro. Comparar las bondades de emplear lgica difusa a un controlador PID Anlogo con sintona Ziegler Nichols comn para sus parmetros Kp, Kd y Ki.
II.- Modelamiento de una Planta Prototipo de Segundo Orden 2.1.- Diseo Para este caso se utiliz una planta con TL082 en modo sub-amortiguado, y para el diseo de los componentes a utilizar plantearemos las ecuaciones elctricas para llegar a la expresin Gp(s) de una planta prototipo de segundo orden.
Fig 1.-Planta TL082 a disear De la planta prototipo obtenemos las siguientes ecuaciones:
Despejando
IEEE-UNAC
Despejando
Reemplazando las ecuaciones (3) y (6) en la ecuacin (5) se obtiene la siguiente ecuacin diferencial de segundo orden:
) ( )
Se puede observar las relaciones para los parmetros de la planta prototipo: coeficiente de amortiguamiento, frecuencia natural y sobrepaso mximo, que nos permitir disear en modo sub-amortiguado.
IEEE-UNAC
Se disear para una respuesta transitoria sub-amortiguada por lo partiremos de un sobrepaso del 21%, de lo que se comienza calculando el sobrepaso mximo de la expresin:
(
Despejando
se obtiene:
) 21.5% obtenemos:
Reemplazando obtenemos:
IEEE-UNAC
2.2.- Prueba en Software Simulando el momento transitorio de la planta en PROTEUS 7.7 obtenemos un sobrepaso de 17%:
Fig 2.- Simulacin Planta TL082 en Proteus 7.7 2.3.- Adquisicin de los datos Para adquirir los datos de nuestra planta diseada anteriormente, elaboramos un cdigo en Labview:
IEEE-UNAC
Como se observa nuestro datos sern almacenados en dos archivos con extensin .lvm, uno con cabecera (data_sub_cc.lvm) y otro sin cabecera (data_sub_sc.lvm), con ayuda del toolkit Write to Measurement File. Luego al realizar la adquisicin de los datos obtuvimos los siguientes resultados para las datas:
(a)
(b)
Fig 4.- (a) Data sin cabecera. (b) Data con cabecera 2.4.- Ploteo en Matlab Emplearemos el cdigo siguiente para plotear nuestra data sin cabecera en Matlab:
clear all; close all; clc load data_sub_sc.lvm data=data_sub_sc; t=data(:,1); y=data(:,2); u=data(:,4); figure(1) plot(t,y,'r',t,u,'b') title('\bf Ploteo de los datos Planta Subamortiguada') legend('Salida','Entrada') grid
2012-A
1.5
0.5
-0.5
10
12
III.- Identificacin del Modelo Adquirido Los dos archivos de datos se adquirieron con dos fines: Visualizarla e identificarla en Matlab (herramienta ident , etc) e identificarla con Labview en la herramienta Signal Express. Para nuestro caso hemos usado la herramienta signal express para realizar la identificacin del modelo adquirido con ayuda del algoritmo ARMAX 2111 configurable en esta herramienta que mostraremos a continuacin: a) Abrimos el entorno del Workbench Signal Express de Labview:
2012-A
b) Cargamos nuestra data LVM con cabecera con Add Step y la ruta especificada en la figura:
Fig 7.- Data LVM con cabecera y paquetes de datos segn configuracin en la NIDAQ (1000 datos por segundo) c) Seguidamente importamos los paquetes de datos de nuestro archivo de adquisicin con cabecera y seleccionamos los paquetes de entrada (Voltage_1) y salida (Voltage_0) del sistema:
Fig 8.- Seleccin de paquetes de datos para entrada y salida d) Ahora pasamos a identificar el modelo, para ello accedemos al System Identification y estimacin de parmetros, con la ruta especificada:
2012-A
Fig 9.- Entorno para la Identificacin e) Luego configuramos el algoritmo de identificacin para nuestra planta, para ello ubicamos los paquetes de datos de entrada y salida seleccionados anteriormente siguiendo el diagrama de bloques que presenta el entorno para dicha accin. A su vez configuramos el algoritmo a trabajar para una planta de segundo orden subamortiguada, se elegir el ARMAX 2111 porque present mejor performance en la identificacin, es decir se acerca ms a los datos adquiridos.
Fig 9.- Configuracin ARMAX 2111 Fig 10.- Configuracin ARMAX 2111
2012-A
f) Luego haremos un panel con la performance: Seal de error (celeste), Datos adquiridos (rojo) e identificacin con ARMAX 2111(verde), adems la ecuacin discreta de la identificacin con ARMAX 2111.
Como se observa la identificacin fue rpida y sencilla con esta herramienta, adems de eficiente ya que si se observa la identificacin con algoritmos de recursin como el ARMAX trabajan con la seal de error (nos da compatibilidad del modelo identificado con los datos adquiridos), y tiene como objetivo principal la convergencia de este error a cero lo ms rpido posible y arrojarnos el modelo matemtico que hace dicha accin.
10
2012-A
g) Finalmente guardamos el archivo .sim con la informacin de la identificacin realizada en el signal express, para ello, realizamos la siguiente accin:
IV.- Obtencin de la Funcin de Transferencia Gp(s) Lo siguiente que hicimos fue tratar la ecuacin de identificacin por cdigo LABVIEW, y obtener la funcin de transferencia Gp(s), para luego pasar a disear el controlador, con esta idea presentamos el cdigo Labview para dicha accin:
11
2012-A
En este cdigo le agregamos herramientas que nos pueden servir de gua para un algn otro algoritmo de control a disear: Diagrama de Bode Magnitud, Sistema notacin variable Espacio Estado, polos y ceros del sistema, as como la matriz de controlabilidad para verificar si la planta identificada es controlable o no. Este aporte le da un anlisis ms exhaustivo al sistema y todo con el uso del archivo .sim que identificamos y guardamos en Signal Express. Ver Figura 14.
Fig 14.- Tratamiento ARMAX Panel Frontal Y lo ms importante que con este cdigo se obtuvo la funcin de transferencia en Laplace, importante para el diseo del controlador PID anlogo a emplear para luego migrar al PID difuso:
V.- Diseo del Controlador PID con Matlab Para disear un controlador PID para una planta sub-amortiguada, emplearemos la herramienta sisotool de Matlab, el cual segn la configuracin que hagamos para la sintonizacin del PID, nos arrojara la funcin de transferencia de ste, que luego nos servir para identificar las constantes Kp, Ki, Kd
12
2012-A
5.1.- Diseo en Sisotool Para comenzar nuestro diseo PID, empezaremos ingresando la palabra sisotool en la ventana de comando de Matlab, nos aparecer nuestro entorno con un diagrama de bloques. Ver figura 15:
Fig 15.- Entorno Sisotool de Matlab El diagrama de bloques que nos presenta sisotool constituye el de un sistema de control en lazo cerrado donde el bloque amarillo G es la notacin de nuestra planta obtenida anteriormente, el bloque rojo C que viene a ser la funcin de transferencia de nuestro controlador a disear, adems de la realimentacin H que para nuestro caso ser unitaria. Este diagrama de bloques es configurable accediendo a la opcin Control Architecture, pero como es exactamente el sistema de control que deseamos implementar no cambiaremos dicho diagrama. Ahora importaremos la F.T de la planta, siguiendo la siguiente secuencia:
2012-A
5.2.- Sintonizacin PID El controlador proporcionalintegral-derivativo o PID, es un dispositivo de control genrico (limitado segn la planta a controlar) para procesos con tiempo de establecimiento no muy pequeo, donde el diseador slo tiene que dar valores adecuados, segn lo requiera la situacin, a los parmetros de sintona que contiene. La herramienta sisotool nos permite interactuar con una gama de sintonizaciones para nuestro PID, por practicidad y con fines de probar nuestro algoritmo fuzzy ms adelante realizamos dos sintonizaciones que se configuran siguiendo la secuencia de la figura 17: PID por Ziegler Nichols y PID con respuesta temporal robusta (Optimizado), una vez terminada la configuracin de la sintonizacin se le da click en Update Compensator:
14
2012-A
El tipo de algoritmo PID en que se basa nuestro trabajo es el tipo paralelo que tiene la estructura de la figura 18, donde la actuacin del controlador se puede separar en forma de tres sumandos diferentes. Cada uno de ellos contempla la accin proporcional, derivativa e integral:
Donde las constantes dela accin proporcional, integral y derivativa: Kp: Hace que la respuesta de la planta sea ms rpida sin introducir retrasos o adelantos en la salida del sistema. Ki: Produce la reduccin del error en el estado estacionario insertando una accin de seguimiento para el control. Kd: Produce una accin de frenado en la respuesta del sistema y evita las fuertes oscilaciones, tiene una accin de anticipacin para el control. Adems la funcin de transferencia del controlador PID tiene la siguiente estructura:
15
2012-A
Por lo tanto, se observa que los valores de las constantes Kp, Ki y Kd elegirn la posicin de los ceros y el valor de la ganancia para el control del sistema. Regresando a los resultados del diseo en sisotool, se tienen las ecuaciones arrojadas para las dos sintonizaciones en cuestin en el panel de PID TUNING:
( ) ( )
Finalmente configuramos los grficos de simulacin en lazo cerrado para el control PID diseado en sisotool:
Luego de configurar le damos mostrar ploteos de diseo y anlisis en cada ventana, para obtener dos grficos: el primero nos indicara el diagrama de bode del sistema en lazo abierto y cerrado, lo cual nos permitir contrastar en el dominio de la frecuencia como se da la modificacin de los ceros de la planta por la accin del controlador diseado, el segundo grafico muestra una comparacin de las respuestas del sistema en lazo abierto y cerrado ante un escaln unitario. Se presentan dos graficas debido a las dos sintonizaciones que se realizaron, verificndose las bondades de la respuesta del diseo PID robusto:
16
2012-A
Luego corroboraremos los resultados por cdigo matlab usando las funciones de transferencia arrojadas en el sisotool para las dos sintonizaciones, a su vez le insertaremos un tren de pulsos al sistema para ver cmo responde en lazo cerrado. Finalmente se extraern los coeficientes Kp, Ki, Kd de cada sintonizacion. Para todo ello usaremos el siguiente cdigo:
17
2012-A
%Planta en lazo abierto identificada clear all; close all; clc n=[0.0771137 154.535]; d=[1 12.0318 154.287]; Gp=tf(n,d) %Gpla=zpk(Gp); t=0:0.001:2; u1=2*ones(size(t)); u2=2*[ones(1,1000) zeros(1,1001)]; yla=lsim(Gp,u1,t); figure (1) plot(t,yla,'r',t,u1,'b','Linewidth', 2) title('\bf Planta Subamortiguada Lazo Abierto') xlabel('tiempo(seg)') ylabel('Amplitud') grid % PID en sisotool "RESULTADOS" %PID ROBUSTO nc1=[0.0669 2.058 15.83]; Gc=tf(nc1,[0 1 0]) Glc1=feedback((Gp*Gc),1) ylc1=lsim(Glc1,u2,t); ylc=lsim(Glc1,u1,t); Kp=nc1(2) Ki=nc1(3) Kd=nc1(1) figure(2) subplot(221) plot(t,yla,'r','Linewidth',2),hold plot(t,ylc,'m',t,u1,'b','Linewidth', 2) title('\bf PID (Optimizado)') xlabel('tiempo(seg)') ylabel('Amplitud') legend ('Gla','Glc','u') grid
subplot(222) plot(t,ylc1,'m',t,u2,'b','Linewidth' ,2),hold title('\bf PID (Optimizado)') legend ('Glc','u') xlabel('tiempo(seg)') ylabel('Amplitud') grid %PID ZIEGLER NICHOLS COMUN nc2=[0.0632 4.4384 30.4]; Gc2=tf(nc2,[0 1 0]) Glc2=feedback((Gp*Gc2),1) ylc2=lsim(Glc2,u2,t); ylc=lsim(Glc2,u1,t); Kpzn=nc2(2) Kizn=nc2(3) Kdzn=nc2(1)
subplot(223) plot(t,yla,'r','Linewidth',2),hold plot(t,ylc,'g',t,u1,'b','Linewidth', 2) title('\bf PID (Zieger - Nichols)') xlabel('tiempo(seg)') ylabel('Amplitud') legend ('Gla','Glc','u') grid subplot(224) plot(t,ylc2,'g',t,u2,'b','Linewidth' ,2) title('\bf PID (Zieger - Nichols)') legend ('Glc','u') xlabel('tiempo(seg)') ylabel('Amplitud') grid
Amplitud
Amplitud
2
1 0 -1
1.5
Amplitud
0.5
0.5
3 2
Amplitud
Amplitud
2
0.5
1 0 -1
0.2
0.4
0.6
1.4
1.6
1.8
0.5
1 1.5 tiempo(seg)
0.5
1 1.5 tiempo(seg)
2012-A
De este cdigo se obtienen las constantes Kp, Ki y Kd: Para el PID Robusto:
19
2012-A
VI.- Diseo de un controlador DPID (Parte 1) 6.1.- Control Difuso Proporcional La entrada a un controlador difuso proporcional (PD) es el error (e), y la salida es la seal (U).
GE
GU
Base de Reglas
Fig 21.- Controlador difuso proporcional (DP) Este es el controlador ms simple. Si comparamos con el controlador proporcional crisp, vemos que el control difuso proporcional tiene dos ganancias GE y GU. La ganancia sirve principalmente para sintonizar la repsuesta, hay dos ganancias que tambin pueden usarse para escalar la seal de entrada hacia el universo de entrada explotndolo mejor. La salida del controlador o seal de control Un es una funcin no lineal de en, entonces:
La funcin es el mapeo de entrada-salida del controlador difuso. Usando la aproximacin lineal , tenemos:
Podemos decir que el producto de los factores de ganancias es equivalente a la ganancia proporcional, es decir, . La exactitud de la aproximacin depende principalmente de las funciones de pertenencia y las reglas. Para una mejor aproximacin, es mejor escoger el mismo universo en ambos lado de la entrada y salida. Por ejemplo, asumimos que los universos de entrada son ambos [-100,100]. 6.2.- Control Difuso Proporcional-Derivativo La accin derivativa ayuda a predecir el error y el controlador proporcionalderivativo usa la accin derivativa para mejor la estabilidad en lazo cerrado. La estructura bsica de un controlador PD es: ( )
La seal de control es proporcional a una estimacin del error en segundos, dnde la estimacin se obtiene por la extrapolacin lineal. Para el control es completamente proporcional, y cuando se aumenta gradualmente, se tienen oscilaciones amortiguadas.
20
2012-A
Si se pone demasiado el sistema se vuelve subamortiguado y empezar a oscilar de nuevo. La entrada al controlador DPD es el error y la derivada del error.
GE
f
CE
GU
ce
GCE
Base de Reglas Fig 22.- Controlador difuso PD (DPD) En el controlador difuso el ltimo trmino se llama normalmente el cambio en el error y es dado por:
Esta es una aproximacin discreta y usa una ecuacin de diferencias recursiva (barckward). La salida del controlador es una funcin no lineal del error( ) y cambio del error .
De nuevo la funcin es el mapeo de la entrada-salida del controlador difuso, slo en este tiempo es una superficie. Usando la aproximacin lineal , entonces: ( )
6.3.- Control Difuso Proporcional, Integral Y Derivativo La accin integral ayuda a que el error en estado estacionario se mantenga al valor cero, junto con el controlador proporcional-derivativo la performance del controlador incrementa. La estructura bsica de un controlador PID es: ( )
El ndice n est referido al instante de tiempo. Para sintonizar debemos activar y ajustar los parmetros , y .
21
2012-A
El controlador difuso PID presenta tres trminos de entrada: error, error integral y error derivativo. Una base de la reglas con tres entradas llega a ser bastante grande y la accin ntegra resulta una molestia. Por consiguiente es comn separar la accin integral en el controlador difuso PD+I (DPD+I):
GE
f
CE
GU
ce
GCE
Fig 23.- Controlador difuso PD+I (DPD+I) El error integral se computa como: funcin de las tres entradas: [ La aproximacin lineal es: . El controlador es una ]
Comparando esta ltima ecuacin con la ecuacin de la estructura bsica (ley de control PID), las ganancias son relacionadas de la siguiente forma:
Este controlador proporciona todos los beneficios del control PID, pero tambin las desventajas con respecto al windup del integrador.
22
2012-A
6.4.- Algoritmo DPID en Labview a.- Declaracin de Reglas y funciones de pertenencia de 4 y 9 reglas en Labview Para declarar las funciones de pertenencia, las entradas crisps y las reglas del algoritmo difuso a emplear, usamos el Fuzzy System Designer:
Fig 24.- Uso del Fuzzy System Designer En el entorno del Fuzzy Controller se configurarn las entradas crisps E y CE que corresponden a las acciones Proporcional y Derivativa del Algoritmo DPID mencionado anteriormente, tambin los universo de discurso, funciones de pertenencia tipo Triangular por ser un proceso Lineal el que se va a controlar, a su vez se declararn las reglas a trabajar para las inferencias y la defuzzificacin por centroide y la salida U se configurar funciones singletons en N, Z y P.
2012-A
b.- Simulacin y control tiempo real Ya con el algoritmo Fuzzy cargado en el Fuzzy Controller en el panel de bloques de Labview, pasamos a mostrar el algoritmo DPID programado:
Fig 27.- Panel Frontal En este cdigo se ha incluido las ecuaciones para las ganancias GIE, GCE y GE del DPID, a partir de las constantes Kp, Kd y Ki de la sintona del PID anlogo comn, esto me va permitir insertar las constantes que comnmente diseamos y as probar la performance del algoritmo PID Difuso respecto al control PID Anlogo.
24
2012-A
Adems se incluye el Fuzzy Controller, en el cual se cargar los archivos 4rules.fs y 9rules.fs con el algoritmo difuso y la tabla de nueve y cuatro reglas respectivamente. A su vez, la estructura case para eleccin entre la simulacin (Toolkit H(s)) y el tiempo real (Configuracin DAQ Assistant para TR). Finalmente se ha incluido un parmetro de escalamiento multiplicando a la accin derivativa y proporcional, y su reciproco multiplicando a la seal de control resultante del controlador DPID antes de ingresar a la planta. Este parmetro es experimental y de alguna u otra forma participa regulando la accin PD que ingresa al algoritmo Fuzzy, por lo tanto su valor afinara a la seal de control para realizar un mejor resultado en el control. Para nuestro caso se tendr en cuenta que: GE = 1 (Valor fijo) = 8.163 (PID Robusto) = 9.5 (PID Z-N)
Resultados para 4 reglas Para algoritmo Fuzzy PID con 4 reglas en tiempo real se obtuvo:
25
2012-A
Resultados para 9 reglas Para algoritmo Fuzzy PID con 9 reglas en tiempo real se obtuvo:
26
2012-A
Fig 31.- Cambio a simulacin VII.- Diseo de un controlador DPID (Parte 2) Para esta segunda parte se codificara el algoritmo DPID en cdigo puro, empleando la aproximacin trapezoidal para la accin integral, partiendo del algoritmo mencionado en el item 6.3 y su ecuacin 6.3 para la ley de control, con la diferencia que en este algoritmo no habr escalamiento ni parmetro de la prueba anterior: GIE, GCE y GE. Adems el proceso de Fuzzificacin y defuzzificacin se har en cdigo puro en un SubVi que interactuara con nuestra planta prototipo en tiempo real.
2012-A
7.1.- Discretizacin de la Planta Como el algoritmo a realizar es enteramente discreto, entonces para realizar las pruebas respectivas tendremos que discretizar nuestra planta, para ello se ha creado dos cdigos para dicho fin. En el primero se ha trabajado con los coeficientes de las F.T hallada de la notacin funcin de transferencia, luego este modelo pasa por un toolkit de conversin de continuo a discreto con un periodo de muestreo de ( T = 0.001 seg), dando como resultado una funcin de transferencia discreta, la cual ser insertada a un toolkit H(z) para ser estimulada con un escaln u(t) que pasara por mantenedor de orden cero (ZOH), obteniendo como resultado la respuesta de nuestra planta discretizada en lazo abierto, adems de ello se superpondr con la respuesta en continuo con ayuda del mismo estimulo u(t) pero insertado a un toolkit H(s) con la F.T cargada. Obsrvese que las respuestas coinciden con lo que se ha discretizado exitosamente el modelo (Ver figura 32).
Fig 33.- Diagrama de bloques Respuesta planta discreta vs Continua En el segundo programa se ha calculado la ecuacin de diferencias de nuestra planta teniendo en cuenta que su estructura F.T es de la forma:
28
2012-A
Con esta ecuacin pasamos al espacio k con las siguientes notaciones para la primera y segunda derivada: ,
Luego, reemplazando los trminos y despejando, se tiene la ecuacin de diferencias de nuestra planta en funcin a los coeficientes de la F.T y el periodo de muestreo:
La ecuacin de diferencias anterior se ha codificado en Labview usando los registros de desplazamiento para declarar los , , y , adems se ha codificado la condicin inicial 0 para los registros , , y , as al inicio no se cargarn con valores inesperados y errneos que afecten a los datos verdaderos que debe arrojar el programa.
29
2012-A
El programa nos muestra los resultados de las dos formas de representar nuestra planta discretizada:
Fig 35.- Simulacin de respuesta de la planta discreta ante un escaln unitario 7.2.- Accin Proporcional Derivativa Siguiendo el algoritmo DPID explicado en tems anteriores se construy un SubVi llamado FUZZY PD, el cual recibe 4 entradas (Error, T, GCE y GE), y 5 salidas (E, CE, Grafico de U, Salida Defuzzy y Salida Final). Para fines didcticos para monitoreo en las pruebas de Tiempo Real.
2012-A
7.3.- Accin Integrativa El SubVi construdo para la accin integral contiene un algoritmo interesante, y es el de aproximacin trapezoidal, uno de los ms eficientes en cuanto a diseo de PID Discreto, ya que se basa en la sumatoria de reas de trapecios formados por el errores mostrados en dos posiciones consecutivas de muestreo (n y n-1), cuya base es el periodo de muestreo. Este valor multiplicado con el 1/Ti que se calcula con la divisin de GIE y GE, constituyen la accin integral, que se codifica como registro de desplazamiento ya que necesita sumar su valor actual con el valor anterior.
7.4.- Diseo de un SubVI para Fuzzyficacin y Defuzzyficacin con 9 reglas en cdigo Puro con Matlab y Labview 1.- Fuzzy System Designer de 4 y 9 reglas en cdigo puro en matlab Para la implementacin en la plataforma Labview de un sistema fuzzyficador y defuzzificador en cdigo puro de 9 reglas, primero realizamos simulaciones en el software Matlab que servirn de base para la posterior programacin en Labview.
31
2012-A
La primera de las programaciones en Matlab muestran un programa para poder elegir entre un sistema fuzzy de 4 reglas y 9 reglas y observar la respuesta defuzzificada del sistema. a) La parte inicial del cdigo presenta las 2 entradas del sistema, cada una de las cuales posee 3 MF (Member Shift Factor) que tienen formas triangulares con parmetros distintos, pero con el mismo universo de discurso.
clear all ; close all ; clc % -------------------------------------------------% ENTRADA 1 % -------------------------------------------------puntos_n = 201; x1=linspace(-100,100, puntos_n); param_in_1 = [ -100.00 -100.00 0.00 -100.00 0.00 100.00 0.00 100.00 100.00 ]; mf_in_1=zeros(3,puntos_n); mf_in_1(1,:)=trian_mf(x1,param_in_1(1,:)); mf_in_1(2,:)=trian_mf(x1,param_in_1(2,:)); mf_in_1(3,:)=trian_mf(x1,param_in_1(3,:)); % Universo de discurso IN 1
% E = N % E = Z % E = P
% -------------------------------------------------% ENTRADA 2 % -------------------------------------------------x2=linspace(-100,100, puntos_n); % Universo de discurso IN 2 param_in_2 = [ -100.00 -100.00 0.00 -100.00 0.00 100.00 0.00 100.00 100.00 ]; mf_in_2=zeros(3,puntos_n); mf_in_2(1,:)=trian_mf(x2,param_in_2(1,:)); mf_in_2(2,:)=trian_mf(x2,param_in_2(2,:)); mf_in_2(3,:)=trian_mf(x2,param_in_2(3,:)); % CE = N % CE = Z % CE = P
b) Para continuar se presenta la salida del fuzzyficador que tambin posee 3 Member Shift Factor pero con salidas de modo Singleton que toman nicamente 3 posibles valores: -200, 0, 200.
% -------------------------------------------------% SALIDA % -------------------------------------------------y=linspace(-200,200, puntos_n); param_out = [ -300.00 -200.00 -199.00 -1.00 0.00 1.00 199.00 200.00 300.00 ]; mf_out=zeros(3,puntos_n); mf_out(1,:)=trian_mf(y,param_out(1,:)); mf_out(2,:)=trian_mf(y,param_out(2,:)); mf_out(3,:)=trian_mf(y,param_out(3,:)); % Universo de discurso OUT
% U = N % U = Z % U = P
32
2012-A
c) Ploteamos las entradas y salida del sistema, las cuales sern analizadas por el algoritmo Mandani descrito ms adelante en cdigo puro.
% -------------------------------------------------% PLOTEOS DE ENTRADA Y SALIDA % -------------------------------------------------figure(1) subplot(3,1,1) plot(x1,mf_in_1(1,:),'r','LineWidth',2),hold plot(x1,mf_in_1(2,:),'g','LineWidth',2) plot(x1,mf_in_1(3,:),'b','LineWidth',2) grid legend('N','Z','P') title('Error') axis([-100 100 0 1]) subplot(3,1,2) plot(x2,mf_in_2(1,:),'r','LineWidth',2),hold plot(x2,mf_in_2(2,:),'g','LineWidth',2) plot(x2,mf_in_2(3,:),'b','LineWidth',2) grid legend('N','Z','P') title('Derivada del Error') axis([-100 100 0 1]) subplot(3,1,3) plot(y,mf_out(1,:),'r','LineWidth',2),hold plot(y,mf_out(2,:),'g','LineWidth',2) plot(y,mf_out(3,:),'b','LineWidth',2) grid legend('N','Z','P') title('Salida') axis([-200 200 0 1])
Error 1 0.5 0 -100 1 0.5 0 -100 1 0.5 0 -200 N Z P -150 -100 -50 0 50 100 150 200 N Z P -80 -60 -40 -20 0 Salida 20 40 60 80 100 N Z P -80 -60 -40 -20 0 20 40 60 80 100
33
2012-A
Para iniciar el algoritmo debemos tener en claro las reglas que sern colocadas en nuestra base de reglas y que sern aplicadas en el controlador para obtener la seal de control en la salida, las reglas son las siguientes: Para 4 reglas: para este caso debemos aclarar que slo se tendrn en cuenta las entradas N y P del Error y de la Derivada del Error.
IF E IS N AND CE IS N THEN U IS N IF E IS N AND CE IS P THEN U IS Z IF E IS P AND CE IS N THEN U IS Z IF E IS P AND CE IS P THEN U IS P
Para 9 reglas: para este caso si empleamos los 3 MFs citados en las entradas (N, Z, P) para obtener la seal de control de salida.
IF E IS N AND CE IS N THEN U IS N IF E IS N AND CE IS Z THEN U IS N IF E IS N AND CE IS P THEN U IS Z IF E IS Z AND CE IS N THEN U IS N IF E IS Z AND CE IS Z THEN U IS Z IF E IS Z AND CE IS P THEN U IS P F E IS P AND CE IS N THEN U IS Z IF E IS P AND CE IS Z THEN U IS P IF E IS P AND CE IS P THEN U IS P
a) Una vez conocidas las reglas a aplicar en cada caso, podemos estructurar el programa de manera que ingresemos 2 entradas (x1 y x2) de valores cualesquiera y sean procesadas en la base de 4 o 9 reglas (dependiendo del gusto y/o necesidad del usuario), para que finalmente sean ploteada la seal de control defuzzyficada as como la salida final que debe ser -200, 0 +200.
i=input('Ingresa el valor de la entrada 1 : '); disp(['x1 = ',num2str(i)]) j=input('Ingresa el valor de la entrada 2 : '); disp(['x2 = ',num2str(j)]) disp(' ') var=input('Elegir la cantidad de reglas a considerar (4 Reglas), (9 Reglas) : '); disp(' ') disp(['Numero de reglas = ',num2str(var)])
34
2012-A
b) De ser elegida la opcin de 4 reglas se proceder con implementar el algoritmo basado en su base de reglas, comparando los grados de pertenencia de ambas entradas (x1 y x2) y tomar el valor mnimo, para luego comparar (mnimo) este valor con la salida respectiva dependiendo de cada regla, y finalmente de las 4 reglas obtener la salida mxima (superposicin de grficas) y a este arreglo aplicarle la funcin de defuzzyficacin y obtener un valor que luego ser clasificado entre -200, 0, +200.
if var == 4 disp(' ') disp('HAS ELEGIDO LA FUZZYFICACION POR 4 REGLAS') disp(' ') mf_calificada = zeros(4,puntos_n); w1_1 = trian_mf(i, param_in_1(1,:)); w2_1 = trian_mf(i, param_in_1(3,:)); w1_2 = trian_mf(j, param_in_2(1,:)); w2_2 = trian_mf(j, param_in_2(3,:)); comp_1 = min(w1_1,w1_2); mf_calificada(1,:)=min(comp_1,mf_out(1,:)); comp_2 = min(w1_1,w2_2); mf_calificada(2,:)=min(comp_2,mf_out(2,:)); comp_3 = min(w2_1,w1_2); mf_calificada(3,:)=min(comp_3,mf_out(2,:)); comp_4 = min(w2_1,w2_2); mf_calificada(4,:)=min(comp_4,mf_out(3,:)); conjunto_out_mf = max (mf_calificada); salida=defuzzy(y,conjunto_out_mf,1); % E = N % E = P % CE = N % CE = P % % % % % % % % MIN MIN MIN MIN MIN MIN MIN MIN (E=N, CE=N) (ANTERIOR, U=N) (E=N, CE=P) (ANTERIOR, U=Z) (E=P, CE=N) (ANTERIOR, U=Z) (E=P, CE=P) (ANTERIOR, U=P)
disp('Valor de salida defuzzy por 4 reglas:') disp(salida) if salida>=-200 && salida<-100 respuesta=-200; elseif salida>=-100 && salida<0 respuesta=0; elseif salida>=0 && salida<100 respuesta=0; elseif salida>=100 && salida<200 respuesta=200; else respuesta=200; end disp('Valor de salida final por 4 reglas:') disp(respuesta) % Limitador en salida
c) Una vez realizado este proceso resta obtener los resultados y mostrarlos en un plot. Supongamos que ingresamos las entradas de E = -89 y CE = 69 (estos valores estn siendo tomados al azar con el fin simplemente de mostrar algn resultado indiferente).
35
2012-A
Ingresa el valor de la entrada 1 : -89 x1 = -89 Ingresa el valor de la entrada 2 : 69 x2 = 69 Elegir la cantidad de reglas a considerar (4 Reglas), (9 Reglas) : 4 Numero de reglas = 4 HAS ELEGIDO LA FUZZYFICACION POR 4 REGLAS Valor de salida defuzzy por 4 reglas: 0 Valor de salida final por 4 reglas: 0
0.5
0 -200
-150
-100
-50
50
100
150
200
0.5
0 -200
-150
-100
-50
50
100
150
200
36
2012-A
De ser elegida la opcin de 9 reglas se proceder tambin con implementar el algoritmo basado en su base de reglas siguiendo el mismo criterio que la opcin anterior en la toma de valores mnimos, mximos, defuzzificacin y limitador.
elseif var==9 disp(' ') disp('HAS ELEGIDO LA FUZZYFICACION POR 9 REGLAS') disp(' ') mf_calificada = zeros(9,puntos_n); w1_1 = trian_mf(i, param_in_1(1,:)); w2_1 = trian_mf(i, param_in_1(2,:)); w3_1 = trian_mf(i, param_in_1(3,:)); w1_2 = trian_mf(j, param_in_2(1,:)); w2_2 = trian_mf(j, param_in_2(2,:)); w3_2 = trian_mf(j, param_in_2(3,:)); comp_1 = min(w1_1,w1_2); mf_calificada(1,:)=min(comp_1,mf_out(1,:)); comp_2 = min(w1_1,w2_2); mf_calificada(2,:)=min(comp_2,mf_out(1,:)); comp_3 = min(w1_1,w3_2); mf_calificada(3,:)=min(comp_3,mf_out(2,:)); comp_4 = min(w2_1,w1_2); mf_calificada(4,:)=min(comp_4,mf_out(1,:)); comp_5 = min(w2_1,w2_2); mf_calificada(5,:)=min(comp_5,mf_out(2,:)); comp_6 = min(w2_1,w3_2); mf_calificada(6,:)=min(comp_6,mf_out(3,:)); comp_7 = min(w3_1,w1_2); mf_calificada(7,:)=min(comp_7,mf_out(2,:)); comp_8 = min(w3_1,w2_2); mf_calificada(8,:)=min(comp_8,mf_out(3,:)); comp_9 = min(w3_1,w3_2); mf_calificada(9,:)=min(comp_9,mf_out(3,:)); conjunto_out_mf = max (mf_calificada); salida=defuzzy(y,conjunto_out_mf,1); % E = N % E = Z % E = P % CE = N % CE = Z % CE = P % % % % % % % % % % % % % % % % % % MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN MIN (E=N, CE=N) (ANTERIOR, U (E=N, CE=Z) (ANTERIOR, U (E=N, CE=P) (ANTERIOR, U (E=Z, CE=N) (ANTERIOR, U (E=Z, CE=Z) (ANTERIOR, U (E=Z, CE=P) (ANTERIOR, U (E=P, CE=N) (ANTERIOR, U (E=P, CE=Z) (ANTERIOR, U (E=P, CE=P) (ANTERIOR, U = N) = N) = Z) = N) = Z) = P) = Z) = P) = P)
disp('Valor de salida defuzzy por 9 reglas:') disp(salida) if salida>=-200 && salida<-100 respuesta=-200; elseif salida>=-100 && salida<0 respuesta=0; elseif salida>=0 && salida<100 respuesta=0; elseif salida>=100 && salida<200 respuesta=200; else respuesta=200; end disp('Valor de salida final por 9 reglas:') disp(respuesta) % Limitador en salida
37
2012-A
0.5
0 -200
-150
-100
-50
50
100
150
200
0.5
0 -200
-150
-100
-50
50
100
150
200
Fig 40.- Salida del fuzzyficador y defuzzificador de 9 Reglas Finalmente si alguna de las opciones es elegida errneamente el programa emitir un mensaje de error.
else disp(' ') disp(' NUMERO DE REGLAS INCORRECTO !!!') disp(' ') end
38
2012-A
2.- Fuzzy System Designer de 9 reglas en cdigo puro en Labview Una vez realizados todas estas experiencias en Matlab empezamos a implementar el cdigo en Labview de 9 reglas, para lo cual realizamos los siguientes pasos: Paso 1.- Obtencin de un MF trapezoidal TRAPEZE: este sub-vi tendr el objetivo de FUZZIFICAR, esto quiere decir convertir las entradas exactas (nmeros reales) al dominio difuso (valores entre cero y uno). Esta funcin esta implementada en el programa LABVIEW tal y como sigue: Aviso.- este es un indicador que nos informa si los valores ingresados son ascendentes (a<b<c<d). Esto quiere decir que si a, b, c y d son ingresados ascendentemente el aviso mostrara parmetro legal en caso contrario mostrara parmetro ilegal.
Fig 41.- Diagrama de bloques del aviso Parmetros de entrada.- los parmetros de entrada est formado por un array unidimensional de cuatro elementos. Estos elementos son los lmites del trapecio que se forma al ingresarle una trama de datos (array).
2012-A
Entrada.- es el elemento o conjunto de elementos (array) que se quiere FUZZIFICAR. Fuzzificacin.- es el resultado de la FUZZIFICACION (convertirlo al dominio difuso, entre cero y uno).
Sub-vi TRAPEZE
40
2012-A
Paso 2.- Sub-Vi de Entradas de 3 MFs Para realizar esta etapa se tomaron en cuenta MFs de forma trapezoidal que fueron agrupados en un SubVI, el cual se basa en la programacin del trapecio antes expuesta. Esta etapa muestra un Array de parmetros a ser ingresados en cada MF para especificar la forma exacta del trapecio, no obstante debemos indicar que convertiremos al trapecio en tringulo haciendo que 2 parmetros sean iguales, por ejemplo:
Adems se especifica un aviso para saber si estn siendo bien empleados los parmetros.
Debemos mencionar tambin que para cada MF se mostrarn las salidas respectivas y la entrada ser la misma, pues debe ser evaluada en los 3 Member Shift Factor para luego pasar a la base de reglas. El SubVI resultante es de la forma:
Fig 44.- SubVI de Entradas con 3 MFs Paso 3.- Obtencin de la Sub-vi Linspace Este sub-vi tiene el objetivo de generar una trama de datos (array) cuyas entradas, parmetros obtenidos y salidas son: N: es la cantidad de elementos que necesitemos generar entre los valores de ti y tf. ti: es el valor con el que queremos que empiece nuestra trama de datos. tf: es el valor con el que queremos que finalice nuestra trama de datos. n: es la cantidad de espacios entre dato y dato.
41
2012-A
h: es el paso entre dato y dato que se obtiene con las variables N, ti y tf. tn: es el elemento n-ensimo de todo el array. x: es el array resultante de los parmetros obtenidos. Para crear este LINSPACE en LABVIEW seguimos las relaciones expuestas en la figura siguiente:
Fig 45.- Diagrama de bloques del LINSPACE Como podemos observar solo es necesario tener claro estas plasmarlas en el diagrama de bloques de LABVIEW. sucesiones y
Para la creacin del array x utilizamos el Reshape Array, el cual cambia la longitud del array x1 (array unidireccional de un el emento) a un array unidireccional de N elementos. A su vez ste ser el array de inicializacin del bloque de realimentacin de Replace Array Subset (generado automticamente al unir la entrada y salida del mismo).
42
2012-A
Fig 46.- Panel de control del LINSPACE Paso 4.- Obtencin de la funcin Singleton Para la realizacin de esta etapa se empleo el SubVI linspace para poder as generar un universo de discurso cuyos valores de inicio, final y nmero de elementos pueden ser controlados. A la vez se genera un Array conformado por el valor del universo en el que se encontrar el singleton (por ejemplo: si el universo posee 1000 elementos de -200 a +200 y queremos que el singleton se ubique en la posicin ocupada por +10, pues creamos un Array de la misma dimensin que el universo pero con puros valores de +10 que son ingresados por el control de nombre Patrn). Una vez realizado ello se comparan ambos Arrays de tal forma que en el momento en que coincidan los +10 (siguiendo el ejemplo) de ambos Arrays se genere el valor de 1 (resultado de la igualdad) y en todos los otros instantes se generen 0s. Adems debemos in dicar que existe un generar de Array de puros elementos 0 para garantizar que el Array Final (Singleton) haya sido inicializado en valor por defecto. Finalmente se plotean los resultados de resultar conveniente por el usuario.
43
2012-A
Paso 5.- Obtencin de la Salida con 3 MFs En esta etapa los MFs son los Singletons antes creados y ahora agrupados de modo que constituyan la salida. Los parmetros para el Linspace de los 3 MFs son el mismo (pues poseen el mismo universo de discurso: X1, X2 y X3 iguales), pero los valores en los cuales se harn presentes los Singletons (Patrn Y1, Y2 y Y3) son -200, 0 y +200. Debemos indicar adems que en el ploteo, el grfico debe ser configurado en modo Barras para poder visualizar el Singleton, de lo contrario solo se ver un punto en el grado de Pertenencia 1.
44
2012-A
Paso 6.- Base de Reglas En este paso programamos el algoritmo de 9 reglas de acuerdo a lo conocido y teniendo como base la programacin antes realizada en Matlab. Cabe mencionar que en esta etapa estamos realizando nicamente las comparaciones por minimizacin.
45
2012-A
Paso 7.- Implementamos el SubVI Maximizacin Este SubVI permitir obtener la superposicin de grficas, es decir los valores mximos obtenidos luego de la aplicacin de cada regla, para constituir finalmente un arreglo final que pasar a la defuzzyficacin.
Fig 50.- Maximizacin en el Proceso de Mandani Paso 8.- Obtencin del SubVI Defuzzy Este SubVI est basado en el mtodo del centro de masa. Se obtendr un valor que luego ser limitado en el Paso 9.
46
2012-A
Paso 9.- Funcin Limitador Al estarse empleando en la salida nicamente 3 Singletons, el valor final de la salida debe ser: -200, 0 +200. Para ello creamos un limitador de la defuzzyficada de tal manera que el valor real de la salida y por ende de la seal de control tome esos tres valores antes definidos.
Fig 52.- Limitador para obtener Salida Final para la seal de control Paso 10.- Ploteos Este paso no requiere de mayores explicaciones, simplemente se trata de plotear los resultados obtenidos.
47
2012-A
Paso 11.- Programacin completa Finalmente la programacin completa del SubVI denominado FIS_9_RULER es la siguiente:
48
2012-A
49
2012-A
3.- Simulacin y Tiempo Real Finalmente luego de haber concluido con la explicacin todos los SubVis construidos para lograr el diseo final de nuestro PID Difuso de la figura 32 en cdigo Puro, tenemos las siguientes pestaas para la prueba en Tiempo Real:
Fig 56.- Panel Frontal de resultados del SubVI FIS_9_RULES Finalmente con los toolkits de la NIDAQ PCI 6221 configurados adecuadamente para la prueba final, y se obtuvieron buenos resultados como se puede constatar en la figura 57.
50
2012-A
Fig 57.- Resultados en tiempo Real para nuestro control DPID con 9 reglas por cdigo puro VII.- Conclusiones 1. Acorde de la necesidad del usuario depende la recomendacin de emplear 4 o 9 reglas, sin embargo debemos observar que si los MFs de la salida fuesen cualquier otra figura excepto singleton, los valores defuzzificados no tendran que ser limitados y seran de un mayor rango los de 9 reglas. 2. Debemos observar que en todos los bucles While se ha cambiado el smbolo del Stop, por otro cuyo smbolo es una flecha circular que indican repeticin, esto debido a que al poseer varios SubVI con bucles del mismo tipo el programa no funciona adecuadamente pues el bucle del SubVI ms interno se ejecuta slo y los restantes no tienen efecto; por tal motivo se debe cambiar el smbolo del Stop por el de las flechas continuas. 3. Implementar un algoritmo de 25 reglas podra ser tomado en cuenta en futuras experiencias, sin embargo la planta empleada es de respuesta rpida, por tanto un nmero muy alto de reglas como lo es 25, en vez de mejorar la seal de control, la vuelve oscilatoria (inestable) por requerir mayor tiempo de procesamiento. Precisamente alta cantidad de reglas son empleadas para plantas que poseen respuestas lentas (Planta de Nivel o mejor an Planta de Temperatura).
51
2012-A
4. Debemos recordar que las tarjetas de adquisicin de datos dan valores anlogos de salida de hasta +/-10 Voltios, por tanto la seal de control empleada para nuestra experiencia debe ser limitada para no tomar valores elevados como los menciona el algoritmo de control implementado de acuerdo a los universos de discurso del Fuzzy Controler. 5. Cuando se emplea un SubVI elaborado en cdigo puro por el estudiante, puede ser que se necesite variar alguno de los parmetros del PID del controlador, aunque de manera nfima. 6. Una base de la reglas con tres entradas llega a ser bastante grande y la accin ntegra resulta una molestia. Por consiguiente es comn separar la accin integral en el controlador difuso PD+I (DPD+I). 7. El empleo de la tarjeta PCI 6221 para las pruebas en tiempo real permite al controlador entregar seal de control negativa (+/- 10V), esto es importante ya que por limitaciones de hardware a veces dejamos de entregar este voltaje que puede tener accin de control para la planta, y se pierde, trayendo como resultado un control limitado. 8. El controlador DPID nos ofrece la ventaja de mejorar la performance de control de un PID anlogo con sintona comn que normalmente presenta fallas de oscilacin o de sobrepaso en lazo cerrado. Como se observ en las pruebas de tiempo real, el algoritmo DPID elimina el sobrepaso casi en su totalidad y tambin entrega una seal de control con comportamiento ms adecuado. 9. De las pruebas en tiempo real pudimos constatar la ventaja de emplear lgica difusa para el diseo de un controlador genrico como lo es el PID, que normalmente presenta fallas en procesos como los subamortiguados. La seal de control que se entrega tiene trayectoria suave y no tiene sobrepicos bruscos de tensin, lo que resultado beneficioso para la robustez del control, a diferencia de la seal de control que presenta un PID Ziegler Nichols comn.
52