Lab View and Fuzzy

Embed Size (px)

Citation preview

IEEE Paper Template in A4 (V1)

Lgica difusa con LabVIEW ICTLICTL se puede tener de la pagina www.tribalengineering.com

14

Abstract Como desarrollador, es importante tener conocimiento de diversos paquetes computacionales que apoyen al desarrollo de sistemas de control inteligente. Una gran herramienta es el Intelligent Control Toolkit for LabVIEW. Dicho "Toolkit" (ICTL) simplifica mucho el tiempo de desarrollo de sistemas inteligentes y control difuso en la plataforma de LabVIEW.En este documento se explicaran algunas funciones de lgica difusa que vienen con el ICTL y adems, se comentarn ciertos programas que sirven de ejemplo.

Palabras ClaveLgica difusa con LabVIEW, Controlador difuso, PID, DAQ, Programacin con ICTL.IntroduccinEl lenguaje de programacin de LabVIEW es una mayor abstraccin al cdigo de alto nivel. Este tipo de programacin se basa en el lenguaje grfico, lo cual, para ciertas aplicaciones, facilita la programacin y disminuye el tiempo de desarrollo.Una desventaja que tiene LabVIEW por s solo, es que no cuenta con un "Toolkit" especializado en lgica difusa. Generalmente se tienen que programar las funciones de membresa, la evaluacin de reglas y dems requisitos para llevar a cabo un sistema de lgica difusa. Para simplificar ese proceso, se utiliza el Intelligent Control Toolkit For LabVIEW. Dicho programa ya trae los "vi" necesarios para realizar un sistema de lgica difusa.En este documento se expondr el funcionamiento de ciertos programas de LabVIEW que fueron proporcionados por el Dr. Ponce en clase de Control Inteligente y se proponen algunas formas de controladores difusos o hbridos (parte difusa y parte clsica) para la posicin de un motor de DC.programas del dr. ponce de labview (ejemplos Fuzzy y programa del cd del libro intelligent control systems for labview)A. calSUMA+B

Este programa es una calculadora difusa. Dicho programa computa la sumatoria de dos entradas, A y B. Para esto, primero recibe las entradas del usuario, quien puede ingresarlas en el siguiente panel frontal:

Fig. 1 Panel frontal calSUMA+BDespus de ingresar los dos valores, que tienen formato double, se verifica si estn dentro del rango (0.99,5.01). De estar dentro del rango, se prende el indicador tipo LED que tiene a un lado cada entrada. En caso contrario, se apaga.Como segundo paso, se procede a obtener el valor de membresa de cada entrada. Tal como se puede ver en la Fig. 1, las funciones son triangulares. Dichas funciones se forman gracias al triang-function.vi, el cual recibe como entradas un valor booleano que dicta si es triangular u hombro, los valores extremos del triangulo (dado que para este "vi", la funcin es simtrica a su centro) y la entrada a evaluar.Despus de convertir la entrada ntida en entrada difusa, se utilizan dos generadores de arreglos para obtener un arreglo de 2X5. Cada fila del arreglo tiene los valores de membresa de cada funcin, para cada entrada (en este caso, dos). Dicha matriz entra a premise_evaluation.vi, la cual recibe como entradas a la matriz de valores de membresa, el valor double de umbral para poder detonar la evaluacin de una regla y por ltimo, las combinaciones generadas por Input combinator generator vi. Esta ltima funcin recibe como entrada el nmero de funciones de membresa por entrada y el nmero de entradas, mientras que como salida, ofrece una matriz con las combinaciones de las reglas a evaluar. Dando el ejemplo de este programa, tiene 5 funciones de membresa de entrada y 2 entradas, por lo que al elevar 5 a la 2, obtenemos 25. Con esto se genera un arreglo de 25X2 (el nmero de filas est determinado por el nmero de funciones de membresa por cada entrada, elevado al nmero de entradas, mientras que el nmero de columnas lo dicta el nmero de entradas), el cual va dictando el orden en que se van evaluando las reglas. Por ejemplo, la primera fila tendra a la primera funcin de membresa de las dos entradas, la segunda fila tendra a la primera funcin de la primera entrada y la segunda de la otra entrada y as ira cambiando consecutivamente para generar todas las combinaciones posibles.Despus de pasar el "vi" de la evaluacin de reglas, se obtienen 25 valores de membresa para cada regla. Estos valores entran al general_defuzzifier_mandami.vi, tal como lo hacen el nmero de funciones de membresa y las funciones de membresa correspondientes a cada regla evaluada (deben ir en orden a las reglas que se evalan).Cabe mencionar que el "vi" de desfusificacin por Mamdani tena un pequeo error que no permita que la calculadora difusa funcionara correctamente. Dentro del "vi" mencionado, se inicializaba un arreglo con los valores "-1", mientras que debera de ser "0". Al realizar este cambio, el programa funcion correctamente.Al pasar la funcin de desfusificacin general tipo Mamdani, se obtienen los valores de membresa de cada funcin de salida. En este caso, como se tienen 10 funciones de salida, se obtienen 10 valores de membresa.Los valores de membresa de cada funcin de salida son ingresados al defuzzifier_mamdani.vi, el cual recibe como entradas el valor en el cual se realizar el corte alfa (en otras palabras, el valor de membresa que sale de general_defuzzifier_mandami.vi), los extremos del tringulo, un valor double que indica el paso (cada cuanto se evaluar la funcin; sirve para simular la integral de la funcin y poder sacar el cetro de gravedad) y por ltimo, un valor booleano que indica si la funcin es hombro o triangular. Estos "vi" tienen como salidas a la sumatoria de las multiplicaciones de los puntos con su respectivo valor de membresa y adems, la pura sumatoria de los valores de membresa. Estas dos salidas se suman por separado, para as obtener la sumatoria de todas las funciones de salida (en este caso, 10) y despus si divide la sumatoria de los productos entre la sumatoria de los valores de membresa. Esto otorga el valor ntido de salida del programa.Para graficar las funciones de membresa tanto de entrada como de salida, se utiliza el rampVector.vi, el cual genera un arreglo con un determinado paso y en un rango definido. Este arreglo sirve para ir evaluando cada punto con su valor de membresa correspondiente y graficar todos los puntos.Por ltimo, algo importante a mencionar es que la funcin de membresa de salida que se encuentra centrada en 1, no tiene funcionalidad, dado que las funciones de membresa de entrada comienzan en 1 y por ende, la sumatoria mnima no puede dar menos de 2. Quitar esta funcin de salida podra hacer ligeramente ms eficiente al cdigo. O en su caso, incluir funciones de membresa de entrada que permitan una sumatoria mnima de 1,NOTA: En la explicacin de los siguientes programas no se entrar en detalle del funcionamiento ni de las entradas y salidas de cada sub-vi, al menos que sea una funcin que no se haya explicado en esta seccin. Tan solo se procurar explicar el funcionamiento general y en bloques. En el caso que se utilic un sub-vi nuevo, este ser explicado.B. Mamdani_tri_multi_HEsta funcin tiene como entradas el nmero de funciones de membresa de salida del sistema, el paso, los valores de membresa que se obtienen de la evaluacin de reglas y por ltimo, un cluster con las funciones de membresa de salida y un valor booleano que indica si son tipo triangulares u hombro. El cluster que ingresa a la funcin debe tener un nmero de columnas igual al nmero de funciones de membresa de salida y tres filas. En la primera fila se encuentra el valor booleano que indica la forma de la funcin, en la segunda fila el valor de extrema izquierda y por ltimo, en la tercera fila se encuentran los valores de extrema izquierda. Para este caso, los tringulos o funciones hombro, tienen su centro con simetra de distancia con respecto al punto izquierdo y derecho que es ingresado.Los valores de entrada se ingresan a un ciclo for, el cual tiene nmero de iteraciones igual al nmero de funciones de membresa de salida. Gracias a la opcin index se logra hacer que cada iteracin pase una sola columna del cluster y un solo valor del arreglo de valores de membresa que viene de la evaluacin de reglas.Los valores de membresa que entran al ciclo, as como el paso, entran directo a la funcin defuzzifier_mamdani_triangular.vi, la cual funciona como la defuzzifier_mamdani.vi mencionada con anterioridad en el punto A. Con respecto al cluster, cada columna va entrando a la funcin "unbundle", la cual se encarga de separar los valores de cada fila y as, poder ingresar los valores a la funcin defuzzifier_mamdani_triangular.vi. Tal como ya se haba mencionado, esta funcin tiene dos salidas, la sumatoria de los puntos multiplicados por sus valores de membresa y la sumatoria de los puros valores de membresa.Con ayuda de la opcin index, los valores que van saliendo de la funcin defuzzifier_mamdani_triangular.vi van formando un arreglo. Al terminar el ciclo for, se suman los valores de los dos arreglos de salida por separado y finalmente, se dividen ambos valores para obtener la salida ntida.Esta funcin es un sub-vi que se utiliza en el proceso de desfusificacin de un sistema difuso.C. P_controller

El P_controller.vi recibe como entrada un valor normalizado que tiene un rango de (-2,2). En el caso de que la entrada sea |x||2|, la salida es NaN (Not a Number). Mas se debe de saber que aunque funciona con valores cercanos a dos, se busca que la entrada est normalizada en un rango [-1,1].Primeramente se ingresan los valores de las funciones de membresa de entrada (para este caso son triangulares). Estos van en forma matricial de 3 filas por N columnas; siendo las columnas el nmero de funciones de membresa. En la primera fila se encuentran los valores de extrema izquierda de cada funcin, en la segunda va el punto de extrema derecha y por ltimo, en la tercera se encuentran los valores del centro de la funcin de membresa. Esta matriz en realidad es un cluster, el cual se ingresa al Tria-multi-inputs-vi.Adems del cluster anteriormente mencionado, la funcin Tria-multi-inputs-vi tambin tiene como entradas el nmero de entradas del sistema, nmero de funciones de membresa por entrada y el valor ntido de entrada del sistema (double). Como salida, esta funcin tiene un arreglo con los valores de membresa de cada funcin de membresa para cada entrada.Seguido del paso anteriormente mencionado, se procede a la evaluacin de reglas y desfusificacin general tipo Mamdani. Este bloque de funciones ya fue explicado en el punto A. Sin embargo, es importante mencionar que para este caso, tan solo hay tres funciones de membresa para la salida, "Negativo", "Zero" y "Positivo".Ya teniendo los valores de membresa despus de la evaluacin de reglas, se ingresan a la funcin Mamdani_tri_multi_H.vi explicada en el punto B. Dicha funcin ofrece como salida el valor ntido de salida del sistema. Cabe mencionar que la salida ntida est normalizada en el rango [-1,1].Esta funcin sirve para utilizarse como sub-vi dentro de programas de sistemas difusos.D. I_controller

Es idntico al P_controller.vi. Lo que se debe mencionar es la importancia de tener programas diferentes para cada ganancia. Esto permite variar parmetros internos de cada uno. Por ejemplo, el nmero de funciones de membresa de entrada.E. D_controller

Es idntico al P_controller.vi. Lo que se debe mencionar es la importancia de tener programas diferentes para cada ganancia. Esto permite variar parmetros internos de cada uno. Por ejemplo, el nmero de funciones de membresa de entrada.F. P-MOTOR-CD (programa incluido en el CD del libro Intelligent Control Systems with LabVIEWTM, del Dr. Ponce)

Este programa se encarga de ir modificando el valor de la Kp de un control P convencional. Primeramente se ingresa el error del sistema y con ayuda de las triang-function.vi (explicadas en el punto A), se obtiene el valor de entrada difuso. Cabe mencionar que la entrada (error) debe de encontrarse en el rango de (-1.5,1.5).Despus de la fase de fusificacin, se procede con la evaluacin de reglas y se utiliza la desfusificacin general tipo Mamdani. Pasada la segunda etapa, se procede con la desfusificacin. Para esta fase final, se utilizan tres funciones de salida tipo singleton, obteniendo as, una salida ntida.Esta funcin sirve para utilizarse como sub-vi en sistemas difusos-convencionales.

G. P-ControllerForDCMachine-ByFuzzy

Este programa sirve para controlar un motor de DC por medio de un control P convencional sintonizado por lgica difusa. Las entradas de este programa viene de la DAQ. En s, son el valor actual y el valor de referencia del sistema a evaluar, mismos valores que se grafican sin realizarles modificacin alguna.Adems de ser graficados, los valores de entrada se restan y se obtiene el error del sistema. Dicho error es dividido entre 2.5, dado que la entrada mxima que se recibe de la DAQ es de 5V y la mnima es de 0V. Esto hara que la divisin mxima diera 2 y la mnima -2. La divisin mencionada sirve para normalizar el error y poderlo ingresar a la funcin P-MOTOR-CD.vi que se mencion en el punto F. Sin embargo, esto trae consigo un error, dado que la entrada de la funcin P-MOTOR-CD.vi debe de encontrarse en el rango (-1.5,1.5), explcitamente se menciona que el parntesis en un rango representa "abierto". Esto nos dice que tenemos como salida del sistema un NaN cuando el error dividido entre 2.5 nos da [-2,1.5] u [1.5,2]. Para corregir este problema, sera necesario cambiar el valor por el cual se divide el error o en su caso, modificar los parmetros de las funciones de membresa de entrada de P-MOTOR-CD.vi.Suponiendo que la funcin P-MOTOR-CD.vi no arroja un NaN, se hace una comparacin de mayor que y una de menor que. Ambas comparaciones se realizan con la finalidad de mantener la salida, que va a la DAQ, dentro del rango de [0,5]V.Como ltimo dato informativo, tal como muchos otros programas, este se encuentra dentro de un ciclo while, el cual no se detendr sino hasta que el usuario presione el botn de paro.Ya habiendo explicado este programa, se puede pasar a los resultados. Es importante mencionar que para ofrecer los resultados que se muestran a continuacin, se modific la normalizacin del error en el rango [-1.1]. Esto hizo que la salida nunca fuera un NaN y funcione adecuadamente. La respuesta del sistema es la siguiente:

Fig. 2 Respuesta del programa P-ControllerForDCMachine-ByFuzzyTal como se muestra en la figura anterior, la respuesta del sistema es muy oscilatoria. Para mejorar esto, los parmetros del programa P-MOTOR-CD se deben de modificar. Lo importante a recalcar aqu, es que la ganancia Kp convencional se va actualizando con un control difuso, lo cual puede ser muy eficiente en el caso de tener la funcin de transferencia precisa de la planta.H. ConventionalandFuzzyLogicControllerForDCMachineEste programa tiene la funcin de controlar un motor de DC por medio de un control difuso PD ms un control convencional I. Las entradas del programa vienen de una DAQ y son el valor actual y el valor de referencia del sistema a controlar. Como salida se tiene un voltaje que se inyecta al motor por medio de la DAQ.Antes que nada, el programa grafica las dos entradas de la DAQ. Es importante mencionar que este programa se corre cada 10ms, dado que usa la funcin Wait Until Next ms Multiple Details.Comenzando por la parte difusa del programa, el error que se obtiene de la resta del SP-PV es dividido entre 5. Esto normaliza el error en un rango de -1 a +1. Ya con el error normalizado, se procede a la funcin P_controller.vi, la cual ofrece un valor ntido de salida normalizado, el cual se multiplica por la ganancia de 95. Este producto entra a una sumatoria a la que se le llamar SUM-A. Por otro lado, el error normalizado se resta con el valor del error pasado y se obtiene la diferencia del error. Dicha diferencia entra a la funcin D_controller.vi y se obtiene una salida ntida normalizada. Dicha salida se multiplica por la ganancia 75 y se ingresa a la SUM-A.La SUM-A tiene tres entradas, de las cuales ya se han mencionado dos. La ltima corresponde a la salida de la parte integral del control convencional. Este se explica a continuacin.El error ingresa a un ciclo while que tan solo se corre una vez, puesto que tiene un "false" en la terminal condicional y esta se activa con un valor 0 booleano. Este error se suma con el error anterior y se divide entre dos para sacar el promedio de error. Este promedio se multiplica por la "Delta time" y se obtiene el rea debajo de la curva, o en otras palabras, la integral. Esta integral, a su vez, se multiplica por la ganancia Ki. Esta ltima multiplicacin da la salida de la parte integral, la cual se analiza que se mantenga dentro de los lmites [0,5]. Despus de esto, se le suma el anterior valor de la integral. De nuevo, se analiza que la salida quede dentro de los lmites de salida aceptables.Por ltimo, la salida de la parte integral entra a la SUM-A y de nuevo, la salida de la sumatoria se analiza que se encuentre dentro de los lmites de salida deseados. Ya teniendo la salida ntida y definida dentro del rango aceptado, se manda a la DAQ.Ya habiendo explicado el funcionamiento de este programa, se mostrar la respuesta que ofrece al utilizar la DAQ y el mdulo de entrenamiento. Cabe mencionar que las constantes que traa el programa originalmente, haca un sistema oscilatorio, por lo que estas se modificaron y se obtuvo la siguiente respuesta:

Fig. 3 Respuesta del programa ConventionalandFuzzyLogicControllerForDCMachineComo se muestra en la figura anterior, el control procura llevar la respuesta de manera cercana a la referencia. Sin embargo, la respuesta sigue siendo lenta y adems, mantiene un error en estado estable.I. FuzzyLogicControllerForDCMachineTiene casi el mismo funcionamiento que la funcin ConventionalandFuzzyLogicControllerForDCMachine.vi, con la nica diferencia de que esta nueva funcin no tiene la parte integral convencional. De ah en fuera, la funcin FuzzyLogicControllerForDCMachine.vi trabaja de la misma manera que la funcin descrita en el punto H.En la siguiente figura se mostrar el funcionamiento del programa despus de haberse ajustado las ganancias.

Fig. 4 Respuesta del programa FuzzyLogicControllerForDCMachineComo se puede observar en la figura anterior, el control PD hace que la respuesta intente reaccionar rpidamente a los cambios de referencia. Empero, la falta de integral hace que la salidaJ. PI-StepbyStepMotorCDEste programa se encarga de controlar un motor de DC. A pesar de que el nombre indica que es para un motor a pasos, est diseado para un motor de DC. El control que hace es por medio de un PI convencional. Las entradas vienen de una DAQ y son el valor actual y al valor de referencia del sistema. Por el otro lado, la salida es un valor ntido de voltaje entre 0 y 5V, el cual va a la DAQ.Las entradas del sistema son graficadas antes de modificarlas. De igual manera, estas se toman para obtener el error actual del sistema. Por el lado de la parte proporcional, el error se multiplica por una ganancia y se verifica que la salida proporcional se encuentre dentro de los lmites de salida aceptables. Despus de esto, el valor de salida se manda a una sumatoria. Dicha sumatoria tiene dos entradas, la segunda proviene de la parte integral del programa, la cual funciona de manera idntica a la parte integral convencional explicada en el punto I (funcin FuzzyLogicControllerForDCMachine.vi).Se verifica que la salida de la sumatoria se mantenga dentro de los lmites de salida y es enviada a la DAQ.Ya habiendo explicado el funcionamiento inicial del sistema, se debe de mencionar que este no funcionaba correctamente, dado que la integral nunca generaba una resta y por ende, cuando la referencia se iba por debajo de la variable de proceso, la seal de control nunca disminua y por ende, la variable de proceso no cambiaba. Para modificar esto, dentro de la parte de la integral, despus de la multiplicacin de los 3 elementos (promedio de errores, perodo y Ki), se quit el anlisis de que la seal se encontrara entre 0 y 5. Esto hace que pueda haber valores negativos y se le reste a la seal integral anterior. Ya despus de la sumatoria de la seal integral anterior con la actual, es cuando se puede realizar el anlisis de que la seal se encuentre entre 0 y 5. Con estos cambios y ciertas modificaciones en las constantes Kp y Ki, la respuesta fue la siguiente:

Fig. 5 Respuesta del programa PI-StepbyStepMotorCDTal como se muestra en la respuesta del sistema, esta s llega al valor de referencia. Sin embargo, el problema de este control es que al no poseer la parte derivativa, la reaccin del sistema no es tan rpida.K. PD_controllerEste programa sirve para evaluar la parte PD difusa de un control completo. Recibe como entradas el error y la diferencial del error, mientras que como salida ofrece un valor ntido normalizado.Primeramente se generan las funciones de membresa a partir de valores que provienen de un cluster. Las funciones de membresa son idnticas para la parte P y la parte D. Esto es puesto que se espera una entrada normalizada entre -1 y 1, para ambos casos.Despus de la seccin explicada, se procede a la evaluacin de reglas y a la desfusificacin tipo Mamdani. Sin embargo, esta desfusificacin no se realiz como en los casos anteriores, sino a travs de la funcin difuzzifier_mamdani_multiple-tria.vi. Esta funciona igual que la funcin explicada en el punto B, Mamdani_tri_multi_H.vi, mas tiene la diferencia de que analiza si la salida es un NaN. En el caso que la salida sea un NaN, cambia la salida a 0. El valor ntido normalizado obtenido de la funcin difuzzifier_mamdani_multiple-tria.vi es la salida del programa completo.L. PID_controllerRecibe como entradas al error, la integral del error y la diferencial del error. Cada uno de estos valores es mandado a su funcin correspondiente, P_controller, I_controller y D_controller. La salida de cada uno de estos es sumada y se obtiene la salida del programa completo.M. FunctionX2Este programa sirve para predecir la funcin x2 en un rango para x de -1 a 1.Primeramente se ingresa el valor a travs de una perilla, tal como se muestra en la Fig. 6.

Fig. 6 Panel frontal FunctionX2El valor de entrada es analizado para que no supere los lmites inferior o superior. Despus de esto, se fusifica la entrada ntida por medio de 5 funciones de membresa triangulares. Ya fusificada la entrada, pasa a la evaluacin de reglas y por ltimo, a la desfusificacin tipo Sugeno de constantes a travs de la funcin defuzzifier_constants.vi.Para graficar la salida se generan dos clusters, uno con el valor puntual de la entrada y la salida de la lgica difusa, y otro con el valor puntual de la entrada y el valor real de x2. Ambos clusters entran a un generador de arreglos y el arreglo de clusters se manda a la grfica.programas pid de las slides recibidasPID autotunning viEste VI sirve para sintonizar las ganancias de un controlador el cual puede ser del tipo P, PI o PID. El funcionamiento del VI es el siguiente. El bloque recibe en primer lugar la seal de referencia y el valor de la variable de proceso para poder calcular el error, su integral y su derivada, y en este caso vienen de la DAQ6009. Tambin recibe el rango de los valores de salida los cuales se fijaron en 0 y 5, la ganancia Kp y los tiempos Ti y Td que pueden ser modificadas utilizando una entrada ms del bloque llamada autotune, la cual al ser activada llama la pantalla de ayuda mostrada en la Fig. 7 en donde se elige si se desea hacer un control P, PI o PID y tambin se selecciona la velocidad de respuesta deseada (normal, rpida o lenta) y el nivel de ruido. Utilizando estos parmetros, se cambia el valor de los parmetros que se van a utilizar para realiza la sintonizacin mediante el mtodo de Zieger-Nichols [1].

Fig. 7 Asistente de sintonizacin del PIDUna vez que se calculan las nuevas ganancias con el ayudante de sintonizacin, estas son ingresadas al controlador PID para que pueda reaccionar correctamente. Para probar el sistema se realiz una sintonizacin del tipo PID eligiendo el tiempo de respuesta normal. Las ganancias obtenidas y la respuesta del sistema se pueden ver en la Fig. 8.

Fig. 8 Ganancias y respuesta de un control PID autosintonizadoPID viLa utilizacin de este VI es muy sencilla, recibe como entradas el rango de la salida (0V a 5V en este caso), la referencia a seguir y la variable de proceso para poder calcular el error (obtenidos mediante la DAQ6009). De igual manera, recibe la ganancia Kp y los tiempos Ti y Td. Utilizando estos valores el VI calcula la seal de control que debe ser enviada mediante la DAQ6009 al sistema. En la prueba se utiliz la Kp, Ti y Td calculados mediante el PID autotuning.vi y la respuesta se muestra en la Fig. 9.

Fig. 9 Respuesta de un control PID clsicoPID advanced viEste bloque tiene las mismas entradas que el PID VI y adems tiene otras entradas como el rango de la funcin de referencia, beta, linealidad, auto y control manual. El rango de la funcin de referencia va de 0 a 100 y es un porcentaje de la escala completa y tambin establece el rango de la variable de proceso. Beta es un factor de la referencia utilizado para calcular la accin proporcional y est relacionado con el rechazo a perturbaciones. Linealidad es un factor que debe de estar entre 0 y 1, cuando se encuentra en 1 significa que el sistema es totalmente lineal y cuando est en 0.01 provee una respuesta casi parablica. La entrada auto sirve para elegir si se desea que la seal de control sea mandada por el controlador PID o si el usuario ser el encargado de mandarla. Cuando se elige este ltimo caso, la seal de control es ingresada a travs de la entrada control manual.Para la prueba se utilizaron los mismos valores que en los ejemplos anteriores y se prob tanto el modo manual como el automtico. La respuesta del automtico se observa en la Fig. 10, mientras que en el modo manual no fue posible controlar el sistema.

Fig. 10 Respuesta de un control PID avanzadoPID Lead Lag viEste control es distinto a los dems debido a que no utiliza retroalimentacin dentro de sus entradas, lo nico que utiliza es la referencia, el rango de salida y 3 parmetros que son ganancia, lag time y lead time. Los tiempos se encuentran en minutos. Este PID usualmente se utiliza como compensador en sistemas pre-alimentados (feed-forward) [1] en donde no existe un lazo cerrado para generar el control. Cuando el parmetro lag time es cero, es como si no existiera este parmetro. Valores grandes de lead time pueden hacer que el sistema oscile bruscamente [1]. Para la prueba se utiliz una ganancia de 1 un lag time de 0.01 y un lead time de 0.03 ya que esos parmetros dieron una respuesta ms o menos aceptable, sin embargo cabe mencionar que solamente responda correctamente ante cambios pequeos en la referencia. Si los cambios son muy grandes la salida se va hasta los extremos (5 y 0). Los resultados de la prueba se muestran en la Fig. 11.

Fig. 11 Respuesta de un control PID Lead LagProgramas ejemplo del captulo 2 del libro intelligent control systems with labviewControl de movimiento de un robot utilizando un controlador tipo SugenoComo ya se mencion en el proyecto 5, un control de tipo Sugeno contiene 3 partes, fusificacin, evaluacin de reglas y funciones de salida. En este ejemplo se realiz un control de este tipo para el movimiento de un robot dependiendo de la lectura de 3 sensores distintos y para las salidas se utilizaron funciones tipo singleton. En la Fig 12. Podemos observar las 3 etapas en donde la primera es la de fusificacin en la cual se observa que hay tres entradas con 2 funciones de membresa, cada una de tipo hombro, una comienza a bajar mientras que la otra empieza a subir en 10 y terminan en 20.

Fig. 12. Controlador tipo Sugeno para el movimiento de un robotEsto se puede ver en las funciones triangulares del ICTL que tienen la condicin de hombro en verdadero y unas funciones tienen como constantes 20 y 0, lo cual significa que su centro est en 10 y su valor mnimo en 20 y las otras tienen los valores 10 y 30 por lo que su centro est en 20 y su valor mnimo en 10.La segunda etapa es la evaluacin de reglas, la cual se hace a travs del bloque premise_evaluation.vi del ICTL, sin embargo este bloque necesita de otro llamado input combination generator.vi el cual recibe el nmero de entradas y el nmero de funciones de membresa que tienen las entradas y usando esos valores calcula la combinacin de todas las posibles reglas del tipo IF L=x and C=y and R=z THEN El bloque de evaluacin recibe el valor de los antecedentes de cada una de las reglas y calcula el grado de activacin de los consecuentes de cada regla mediante la funcin min.La tercera etapa es el bloque de desfusificacin, el cual al ser del tipo Sugeno utiliza singletons cuyos centros son especificados en un arreglo de acuerdo a la tabla 1.

LeftCenterRightLeft WheelRight Wheel

CloseCloseClose22

CloseCloseFar20

CloseFarClose11

CloseFarFar21

FarCloseClose02

FarCloseFar22

FarFarClose12

FarFarFar11

Tabla 1. Reglas del robot en forma de tablaSe puede ver que el bloque defuzzifiers_constants.vi del ICTL recibe dos entradas, la primera es un arreglo con los valores de la tabla 1 y la segunda es el grado de activacin de los consecuentes calculado en la segunda etapa. Con estos datos, el bloque de desfusificacin es capaz de calcular la salida que va a tener el sistema para cada rueda, pero dado que en este caso solamente hay salidas con valores 0, 1 y 2 (ya que cada nmero representa una instruccin en el robot) es necesario realizar un redondeo para acercarnos a la instruccin a la que tienda la respuesta. En la Fig. 13 se puede observar un ejemplo del sistema en funcionamiento.

Fig. 13 Salida del sistema tipo Sugeno bajo dos entradas distintasControl de movimiento de un robot utilizando un controlador tipo MamdaniEn el proyecto 4 ya se explic el funcionamiento de un controlador tipo Mamdani, el cual tiene 3 etapas, las dos primeras son iguales que en el caso del controlador tipo Sugeno, sin embargo la desfusificacin cambia y podemos ver esta diferencia comparando las Fig. 12 y 14, en donde las primeras 2 etapas son idnticas, pero en la Fig. 14, la etapa de desfusificacin es un poco ms compleja.Mediante el ICTL la desfusificacin de un sistema tipo Mamdani se hace utilizando dos bloques principales. En primer lugar se usa el general_defuzzifier_mamdani.vi el cual recibe la evaluacin de los antecedentes de las reglas (min), el nmero deseado de funciones de salida y un arreglo indicando la funcin de salida que ser activada con cada una de las reglas. Por el otro lado, la salida del bloque es un arreglo que indica el grado de activacin que va a tener cada funcin de salida utilizando la funcin max. Podemos ver que se utiliz el mtodo min-max para calcular el grado de activacin, min en la etapa 2 y max en la primera parte de la etapa 3.

Fig. 14. Controlador tipo Mamdani para el movimiento de un robotA continuacin, el arreglo con los valores mximos de los consecuentes se separa en el nmero de funciones de membresa de salida que se hayan establecido (3 en este caso) y cada uno de estos valores son introducidos en el segundo bloque importante de esta etapa, que son las funciones de membresa de desfusificacin que contiene el ICTL. Entre ellas, se pueden elegir triangulares (y de hombro) o Gaussianas por ejemplo. Para este caso se usaron funciones triangulares mediante el bloque defuzzifier_mamdani_triangular.vi, las cuales se construyen casi igual que las funciones triangulares de entrada en donde elegimos los parmetros a y b, as como un bit que indica si se desean funciones tipo hombro, pero en vez de dar el valor a fusificar, se da el valor a desfusificar que fue el obtenido en el bloque anterior. Con este valor se genera un corte alfa inverso. El bloque se encarga de generar dos salidas (u)u y (u) para que se haga la suma de estos valores por cada funcin de membresa y al final se dividan para obtener el valor ntido desfusificado, mediante centro de gravedad. En la Fig. 15 se puede observar un ejemplo del sistema en funcionamiento.

Fig. 15 Salida del sistema tipo Mamdani bajo dos entradas distintas5 propuestas nuevas de control (utilizando lgica difusa y el ictl)1. PD difuso con FAM completaEn los ejemplos del manual se pudo observar la forma de hacer un controlador PD difuso en el cual el error entraba a un controlador P y la derivada entraba a un controlador D, ambos difusos, y al final la salida de ambos se sumaba para obtener un control PD. En otras palabras, la parte proporcional, y derivativa se analizaban de forma aislada y despus se sumaban. Sin embargo, en este caso la parte proporcional y la parte derivativa son calculadas de manera conjunta con una FAM completa.Por esta razn se propuso un control PD en el cual se calcula una sola salida dependiendo la relacin entre el error y su derivada, la cual se puede ver en la FAM de la Tabla. 2.

ErrorDerivada del errorSalida

NNMN

NZN

NPZ

ZNN

ZZZ

ZPP

PNZ

PZP

PPMP

Tabla. 2 Reglas difusas PD FAMComo se puede observar, hay 3 funciones de membresa para cada entrada (negativo, cero y positivo) y 5 en la salida (muy negativo, negativo, cero, positivo y muy positivo). Las funciones elegidas fueron seales triangulares centradas en -1, 0 y 1 para el caso de las entradas y en -1, -0.5, 0, 0.5 y 1 para el caso de la salida. Las funciones de entrada fueron creadas con los triang-function.vi del ICTL que reciben los parmetros a y b, y a la mitad de estos dos valores queda el centro del tringulo. En la Fig. 15 se pueden observar los bloques de las funciones de membresa de entrada.

Fig. 15 Funciones de entrada del PDUna vez que se recibe la entrada se procede a evaluar las reglas utilizando el bloque premise_evaluation.vi el cual recibe las reglas a evaluar y los valores de los antecedentes y a la salida nos entrega el antecedente de las reglas evaluado con la funcin min. La salida de este bloque entra a otro llamado general_defuzzifier_mamdani.vi el cual recibe adems el nmero de la funcin que se va a activar con cada regla y con estos dos parmetros genera un arreglo con el mximo de los consecuentes de cada funcin de membresa de salida. Esta etapa se puede ver en la Fig. 16.

Fig. 16 Evaluacin de reglasYa que se tiene la evaluacin de los consecuentes se pasa al siguiente bloque el cual se llama defuzzifier_mamdani_multiple-tria.vi, el cual recibe adems el nmero de funciones de salida y un arreglo con los valores a y b de las funciones de membresa de salida y su salida es el valor ntido de la seal de control. Al final simplemente se hace un ajuste ya que el control se tiene normalizado entre -1 y 1 y esta salida se manda por la DAQ al mdulo, como se ve en la Fig. 17. En la Fig. 18 se muestra el resultado de una prueba que se hizo con este control.

Fig. 17 Desfusificacin y etapa de salida

Fig. 18 Respuesta del sistema PDComo se muestra en la Fig. 18, la falta de integral no permite que la salida llegue al valor deseado.1. P+I difuso + D convencional (PID hbrido)Otra propuesta de un controlador es utilizar un controlador tipo P difuso, sumar su salida con la de un controlador tipo I difuso para as generar un PI difuso, y al final utilizar un control D convencional para tener un control PID.El funcionamiento es el siguiente, en primer lugar se toma el error proveniente de la DAQ y se normaliza para que se encuentre entre -1 y 1 dividindolo entre 5. El error es ingresado al bloque de control proporcional difuso explicado en la primera parte del proyecto, el cual nos da una salida normalizada por lo que se multiplica por una ganancia para llevar nuestras funciones de salida al universo de trabajo.Por otro lado, se hace la diferencia del error con el error anterior para obtener la derivada, la cual se multiplica por una constante (Kd) para proporcionar la accin derivativa del controlador. Tambin se integra el error en otra parte del programa y se ingresa al bloque de control integral cuya salida es nuevamente multiplicada porque se encuentra normalizada y se quiere ajustar al universo de trabajo.Al final se suman las tres seales de control para generar un control tipo PID como se ve en la Fig. 19 y la respuesta se ve en la Fig. 20.

Fig. 19 Circuito de control hbrido con PI difuso y D convencional

Fig. 20 Respuesta del sistema PID hbrido1. PI difuso con FAM + D difuso (PID difuso)Se sabe que es posible hacer un control PI difuso integrando la salida de un control PD difuso [2], por lo que se decidi utilizar el PD que fue explicado anteriormente (Fig. 21) y despus, integrarlo para obtener un control PI.

Fig. 21 Controlador PID

Por otra parte se genera un control tipo D difuso utilizando el bloque que ya se explic en la primera seccin de este trabajo, cuya salida es multiplicada para que ya no se encuentre normalizado entre -1 y 1. Al final se suma el control PI difuso y el D difuso para obtener un PID difuso como se ve en la Fig. 22. Una demostracin del funcionamiento se muestra en la Fig. 23.

Fig. 22 Integracin del PD para formar un PI y control D difuso

Fig. 23 Respuesta del sistema PID1. PD con FAM integrado (PI)Tal como se coment con anterioridad, es posible integrar un control PD para obtener un control PI. Sin embargo, para este caso se modificaron un poco las funciones de membresa de salida del PD, para as obtener una respuesta ms aceptable del PI. Las nuevas funciones de membresa de salida que se utilizaron en el programa se pueden apreciar en la Fig. 24:

Fig. 24 Funciones de membresa de salida del PD difusoTal como se muestra en la Fig. 24, la funciones de membresa de salida redujeron su rango de 1 a 0.5. Por ende, el universo de salida se redujo de [-1,1] a [-0.75,0.75], lo cual disminuy el efecto de salida y otorg una mejor respuesta del sistema.Despus de obtener la respuesta PD, esta se integra. Empero, para este caso se utiliz una integral continua y no discreta como en casos anteriormente mencionados. La integral utilizada se ve en la Fig. 25.

Fig. 25 Integral continua para un PI difuso a partir de un PD con FAM completaPor ltimo, la respuesta que se obtuvo con este sistema fue la siguiente:

Fig. 26 Respuesta del PI a partir de integrar un PD difuso con FAM completaTal como se ve en la Fig. 26la respuesta es bastante rpida y adems, elimina casi por completo el error en estado estable.1. PID convencional sintonizado por lgica difusaPara este caso, se opt por utilizar un PID convencional. Sin embargo, las constantes Kp, Ki y Kd se actualizan por medio de una lgica difusa que recibe como entrada el error del sistema.Como inicio, el sistema tiene las 3 partes de la lgica difusa tipo Mamdani. Esto se puede apreciar en el cdigo mostrado en la Fig. 27.

Fig. 27 Lgica difusa para actualizacin de constantes PID convencionalComo se puede observar en la Fig. 27, en este caso se introducen las funciones de membresa por medio de un cluster. Existen 5 funciones de membresa de entrada y 5 de salida. Al obtener la salida normalizada de [-1,1], esta pasa a modificar las diferentes constantes del control tradicional. Como Kp mxima se tiene 18, como Ki mxima se tiene 4.5 y por ltimo, la Kd mxima es de 11. Estas constantes son multiplicadas por el error, integral del error y diferencial del error, en orden de correspondencia. Esto se aprecia en la Fig. 28.

Fig. 28 PID convencional despus de actualizacin de constantesDespus de este punto, todas las salidas se suman como en un control convencional y la salida va directo a la planta. Cabe mencionar que la salida est delimitada entre [0,5]V. La respuesta del sistema fue la siguiente:

Fig. 29 Respuesta de PID convencional sintonizado con lgica difusaComo se aprecia en la Fig. 29, la respuesta del sistema no es sumamente rpida para cambios bruscos. Sin embargo, si procura seguir a la referencia y adems, cuando la referencia se estabiliza un poco, la alcanza con velocidad y precisin. Estimacin de parmetrosLabVIEW cuenta con herramientas para estimar los parmetros de una planta, por lo que para ver el funcionamiento se piensa modelar el circuito RLC que viene dentro del mdulo de entrenamiento. El circuito se puede observar en la Fig. 29.

Fig. 29 Diagrama del circuito RLC

La funcin de transferencia de este sistema es:

Si los valores son R=10k, L=330mH y C=100nF, la funcin queda de la siguiente manera:

Ya que se tiene la funcin de transferencia se hizo la simulacin ante un escaln para observar la respuesta terica del sistema y despus poder compararla con la real. La simulacin se hizo utilizando LabVIEW y se muestra en la Fig. 30.

Fig. 30 Respuesta simulada del circuito RLC ante un escaln

Si observamos la respuesta, el sistema se estabiliza en 4.5ms aproximadamente. El siguiente paso es utilizar la DAQ 6009 para obtener la respuesta y mandarla a LabVIEW para que pueda ser procesada y se pueda hacer la estimacin de los parmetros de la planta. No fue posible hacer la estimacin debido a que la frecuencia mxima a la que puede leer la DAQ es de 150Hz, mientras que el sistema al responder en 4.5ms equivale a 220 Hz aproximadamente. Se hizo una prueba de lectura de una seal cuadrada a 100 Hz y se observ que la DAQ no la lea correctamente. En la Fig. 31 y 32 se ve la comparacin de la lectura hecha por la DAQ6009 y por un osciloscopio.

Fig. 31 Seal cuadrada de 100Hz leda por la DAQ6009

Fig. 32 Seal cuadrada de 100Hz en el osciloscopio

Por ltimo se observ la respuesta del circuito RLC ante un escaln pero ya no simulado, sino en un osciloscopio (Fig. 33) y vimos que efectivamente responde en el tiempo que se haba visto en la simulacin, por lo que no se puede caracterizar el sistema con este tipo de herramientas y por esa razn ya no se generaron los VIs que calculan el modelo de la planta.

Fig. 33 Respuesta real del circuito RLC ante un escaln

ConclusinTal como se saba con anterioridad, gracias a proyectos realizados en semanas pasadas, la lgica difusa es muy til al momento de aplicarse a control. Adems, el control difuso es una buena herramienta al momento de controlar sistemas de los cuales no se conoce la planta.En este documento se mostraron diversos programas que utilizan LabVIEW e ICTL. Al estudiarlos se puede apreciar claramente que la programacin grfica simplifica mucho el tiempo de desarrollo. Adems, no solo es el hacer uso de herramientas como LabVIEW, sino adems, de toolkits especializados para cada tipo de aplicacin. En caso de no haber utilizado ICTL, la programacin de las funciones de membresa, evaluacin de reglas y desfusificacin hubiera tomado mucho ms tiempo. Como desarrollador, uno tiene que evaluar el costo-beneficio que un programa trae consigo. En caso de que el tiempo de desarrollo se vea muy reducido y la ganancia econmica crezca de manera aceptable, no importa si hay que incurrir en costos de compra de paquetes computacionales.Hablando un poco ms detalladamente de los diversos controles, se pudo lograr que diferentes configuraciones otorgaran respuestas aceptables. Sin embargo, la complejidad no recae justamente en idear nuevas formas de control, sino de encontrar la ms adecuada para cada sistema. Para dar un ejemplo, de los controles propuestos por el equipo, los dos que tuvieron la mejor respuesta fueron el PI difuso con FAM completa + D difuso y por el otro lado, el PD difuso integrado (en otras palabras, PI con FAM completa a partir de PD difuso).Ahora bien, tomando el tema de la estimacin de parmetros, por lo que no se pudo lograr un buen trabajo fue porque la DAQ no alcanza las frecuencias requeridas para llevar a cabo esta parte del proyecto. Se requiere de un lector ms potente para poder obtener buenos y fidedignos resultados.

Bibliografa[1] PID Control Toolkit User Manual. National Instruments. Junio 2008.[2]Ponce, P., Inteligencia Artificial con aplicaciones a la ingeniera, Alfaomega Grupo Editor, 2010.[3]Ponce, P., Ramrez-Figueroa, F., Intelligent Control Systems with LabVIEWTM, Springer-Verlag London Limited, 2010.