Anda di halaman 1dari 14

Lógica difusa con LabVIEW ICTL

ICTL se puede tener de la pagina


www.tribalengineering.com
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 lógica
difusa que vienen con el ICTL y además, se comentarán ciertos
programas que sirven de ejemplo.

Palabras Clave—Lógica difusa con LabVIEW, Controlador difuso,


PID, DAQ, Programación con ICTL.

I. INTRODUCCIÓN
El lenguaje de programación de LabVIEW es una mayor
abstracción al código de alto nivel. Este tipo de programación
se basa en el lenguaje gráfico, lo cual, para ciertas
aplicaciones, facilita la programación y disminuye el tiempo
de desarrollo. Fig. 1 Panel frontal calSUMA+B
Una desventaja que tiene LabVIEW por sí solo, es que no
cuenta con un "Toolkit" especializado en lógica difusa. Después de ingresar los dos valores, que tienen formato
Generalmente se tienen que programar las funciones de double, se verifica si están dentro del rango (0.99,5.01). De
membresía, la evaluación de reglas y demás requisitos para estar dentro del rango, se prende el indicador tipo LED que
llevar a cabo un sistema de lógica difusa. Para simplificar ese tiene a un lado cada entrada. En caso contrario, se apaga.
proceso, se utiliza el Intelligent Control Toolkit For LabVIEW. Como segundo paso, se procede a obtener el valor de
Dicho programa ya trae los "vi" necesarios para realizar un membresía de cada entrada. Tal como se puede ver en la Fig.
sistema de lógica difusa. 1, las funciones son triangulares. Dichas funciones se forman
En este documento se expondrá el funcionamiento de gracias al triang-function.vi, el cual recibe como entradas un
ciertos programas de LabVIEW que fueron proporcionados valor booleano que dicta si es triangular u hombro, los valores
por el Dr. Ponce en clase de Control Inteligente y se proponen extremos del triangulo (dado que para este "vi", la función es
algunas formas de controladores difusos o híbridos (parte simétrica a su centro) y la entrada a evaluar.
difusa y parte clásica) para la posición de un motor de DC. Después de convertir la entrada nítida en entrada difusa, se
utilizan dos generadores de arreglos para obtener un arreglo
II. PROGRAMAS DEL DR. PONCE DE LABVIEW (EJEMPLOS FUZZY de 2X5. Cada fila del arreglo tiene los valores de membresía
Y PROGRAMA DEL CD DEL LIBRO INTELLIGENT CONTROL de cada función, para cada entrada (en este caso, dos). Dicha
SYSTEMS FOR LABVIEW) matriz entra a premise_evaluation.vi, la cual recibe como
entradas a la matriz de valores de membresía, el valor double
A. calSUMA+B de umbral para poder detonar la evaluación de una regla y por
último, las combinaciones generadas por Input combinator
Este programa es una calculadora difusa. Dicho programa generator vi. Esta última función recibe como entrada el
computa la sumatoria de dos entradas, A y B. Para esto, número de funciones de membresía por entrada y el número
primero recibe las entradas del usuario, quien puede de entradas, mientras que como salida, ofrece una matriz con
ingresarlas en el siguiente panel frontal: las combinaciones de las reglas a evaluar. Dando el ejemplo
de este programa, tiene 5 funciones de membresía 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 número de filas está
determinado por el número de funciones de membresía por
cada entrada, elevado al número de entradas, mientras que el
número de columnas lo dicta el número de entradas), el cual
va dictando el orden en que se van evaluando las reglas. Por

1
ejemplo, la primera fila tendría a la primera función de Esta función tiene como entradas el número de funciones
membresía de las dos entradas, la segunda fila tendría a la de membresía de salida del sistema, el paso, los valores de
primera función de la primera entrada y la segunda de la otra membresía que se obtienen de la evaluación de reglas y por
entrada y así iría cambiando consecutivamente para generar último, un cluster con las funciones de membresía de salida y
todas las combinaciones posibles. un valor booleano que indica si son tipo triangulares u hombro.
Después de pasar el "vi" de la evaluación de reglas, se El cluster que ingresa a la función debe tener un número de
obtienen 25 valores de membresía para cada regla. Estos columnas igual al número de funciones de membresía de
valores entran al general_defuzzifier_mandami.vi, tal como lo salida y tres filas. En la primera fila se encuentra el valor
hacen el número de funciones de membresía y las funciones booleano que indica la forma de la función, en la segunda fila
de membresía correspondientes a cada regla evaluada (deben el valor de extrema izquierda y por último, en la tercera fila se
ir en orden a las reglas que se evalúan). encuentran los valores de extrema izquierda. Para este caso,
Cabe mencionar que el "vi" de desfusificación por los triángulos o funciones hombro, tienen su centro con
Mamdani tenía un pequeño error que no permitía que la simetría de distancia con respecto al punto izquierdo y
calculadora difusa funcionara correctamente. Dentro del "vi" derecho que es ingresado.
mencionado, se inicializaba un arreglo con los valores "-1", Los valores de entrada se ingresan a un ciclo for, el cual
mientras que debería de ser "0". Al realizar este cambio, el tiene número de iteraciones igual al número de funciones de
programa funcionó correctamente. membresía de salida. Gracias a la opción index se logra hacer
Al pasar la función de desfusificación general tipo que cada iteración pase una sola columna del cluster y un solo
Mamdani, se obtienen los valores de membresía de cada valor del arreglo de valores de membresía que viene de la
función de salida. En este caso, como se tienen 10 funciones evaluación de reglas.
de salida, se obtienen 10 valores de membresía. Los valores de membresía que entran al ciclo, así como el
Los valores de membresía de cada función de salida son paso, entran directo a la función
ingresados al defuzzifier_mamdani.vi, el cual recibe como defuzzifier_mamdani_triangular.vi, la cual funciona como la
entradas el valor en el cual se realizará el corte alfa (en otras defuzzifier_mamdani.vi mencionada con anterioridad en el
palabras, el valor de membresía que sale de punto A. Con respecto al cluster, cada columna va entrando a
general_defuzzifier_mandami.vi), los extremos del triángulo, la función "unbundle", la cual se encarga de separar los
un valor double que indica el paso (cada cuanto se evaluará la valores de cada fila y así, poder ingresar los valores a la
función; sirve para simular la integral de la función y poder función defuzzifier_mamdani_triangular.vi. Tal como ya se
sacar el cetro de gravedad) y por último, un valor booleano había mencionado, esta función tiene dos salidas, la sumatoria
que indica si la función es hombro o triangular. Estos "vi" de los puntos multiplicados por sus valores de membresía y la
tienen como salidas a la sumatoria de las multiplicaciones de sumatoria de los puros valores de membresía.
los puntos con su respectivo valor de membresía y además, la Con ayuda de la opción index, los valores que van saliendo
pura sumatoria de los valores de membresía. Estas dos salidas de la función defuzzifier_mamdani_triangular.vi van
se suman por separado, para así obtener la sumatoria de todas formando un arreglo. Al terminar el ciclo for, se suman los
las funciones de salida (en este caso, 10) y después si divide la valores de los dos arreglos de salida por separado y finalmente,
sumatoria de los productos entre la sumatoria de los valores de se dividen ambos valores para obtener la salida nítida.
membresía. Esto otorga el valor nítido de salida del programa. Esta función es un sub-vi que se utiliza en el proceso de
Para graficar las funciones de membresía tanto de entrada desfusificación de un sistema difuso.
como de salida, se utiliza el rampVector.vi, el cual genera un
arreglo con un determinado paso y en un rango definido. Este C. P_controller
arreglo sirve para ir evaluando cada punto con su valor de
membresía correspondiente y graficar todos los puntos. El P_controller.vi recibe como entrada un valor
Por último, algo importante a mencionar es que la función normalizado que tiene un rango de (-2,2). En el caso de que la
de membresía de salida que se encuentra centrada en 1, no entrada sea |x|≥|2|, la salida es NaN (Not a Number). Mas se
tiene funcionalidad, dado que las funciones de membresía de debe de saber que aunque funciona con valores cercanos a dos,
entrada comienzan en 1 y por ende, la sumatoria mínima no se busca que la entrada esté normalizada en un rango [-1,1].
puede dar menos de 2. Quitar esta función de salida podría Primeramente se ingresan los valores de las funciones de
hacer ligeramente más eficiente al código. O en su caso, membresía de entrada (para este caso son triangulares). Estos
incluir funciones de membresía de entrada que permitan una van en forma matricial de 3 filas por N columnas; siendo las
sumatoria mínima de 1, columnas el número de funciones de membresía. En la
NOTA: En la explicación de los siguientes programas no primera fila se encuentran los valores de extrema izquierda de
se entrará en detalle del funcionamiento ni de las entradas y cada función, en la segunda va el punto de extrema derecha y
salidas de cada sub-vi, al menos que sea una función que no se por último, en la tercera se encuentran los valores del centro
haya explicado en esta sección. Tan solo se procurará de la función de membresía. Esta matriz en realidad es un
explicar el funcionamiento general y en bloques. En el caso cluster, el cual se ingresa al Tria-multi-inputs-vi.
que se utilicé un sub-vi nuevo, este será explicado. Además del cluster anteriormente mencionado, la función
Tria-multi-inputs-vi también tiene como entradas el número
B. Mamdani_tri_multi_H de entradas del sistema, número de funciones de membresía

2
por entrada y el valor nítido de entrada del sistema (double). son el valor actual y el valor de referencia del sistema a
Como salida, esta función tiene un arreglo con los valores de evaluar, mismos valores que se grafican sin realizarles
membresía de cada función de membresía para cada entrada. modificación alguna.
Seguido del paso anteriormente mencionado, se procede a Además de ser graficados, los valores de entrada se restan y
la evaluación de reglas y desfusificación general tipo se obtiene el error del sistema. Dicho error es dividido entre
Mamdani. Este bloque de funciones ya fue explicado en el 2.5, dado que la entrada máxima que se recibe de la DAQ es
punto A. Sin embargo, es importante mencionar que para este de 5V y la mínima es de 0V. Esto haría que la división
caso, tan solo hay tres funciones de membresía para la salida, máxima diera 2 y la mínima -2. La división mencionada sirve
"Negativo", "Zero" y "Positivo". para normalizar el error y poderlo ingresar a la función P-
Ya teniendo los valores de membresía después de la MOTOR-CD.vi que se mencionó en el punto F. Sin embargo,
evaluación de reglas, se ingresan a la función esto trae consigo un error, dado que la entrada de la función
Mamdani_tri_multi_H.vi explicada en el punto B. Dicha P-MOTOR-CD.vi debe de encontrarse en el rango (-1.5,1.5),
función ofrece como salida el valor nítido de salida del explícitamente se menciona que el paréntesis en un rango
sistema. Cabe mencionar que la salida nítida está normalizada representa "abierto". Esto nos dice que tenemos como salida
en el rango [-1,1]. del sistema un NaN cuando el error dividido entre 2.5 nos da
Esta función sirve para utilizarse como sub-vi dentro de [-2,1.5] u [1.5,2]. Para corregir este problema, sería necesario
programas de sistemas difusos. cambiar el valor por el cual se divide el error o en su caso,
modificar los parámetros de las funciones de membresía de
D. I_controller entrada de P-MOTOR-CD.vi.
Suponiendo que la función P-MOTOR-CD.vi no arroja un
Es idéntico al P_controller.vi. Lo que se debe mencionar NaN, se hace una comparación de mayor que y una de menor
es la importancia de tener programas diferentes para cada que. Ambas comparaciones se realizan con la finalidad de
ganancia. Esto permite variar parámetros internos de cada mantener la salida, que va a la DAQ, dentro del rango de
uno. Por ejemplo, el número de funciones de membresía de [0,5]V.
entrada. Como último dato informativo, tal como muchos otros
programas, este se encuentra dentro de un ciclo while, el cual
E. D_controller no se detendrá sino hasta que el usuario presione el botón de
paro.
Es idéntico al P_controller.vi. Lo que se debe mencionar Ya habiendo explicado este programa, se puede pasar a los
es la importancia de tener programas diferentes para cada resultados. Es importante mencionar que para ofrecer los
ganancia. Esto permite variar parámetros internos de cada resultados que se muestran a continuación, se modificó la
uno. Por ejemplo, el número de funciones de membresía de normalización del error en el rango [-1.1]. Esto hizo que la
entrada. salida nunca fuera un NaN y funcione adecuadamente. La
respuesta del sistema es la siguiente:
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).
Después de la fase de fusificación, se procede con la
evaluación de reglas y se utiliza la desfusificación general tipo
Fig. 2 Respuesta del programa P-
Mamdani. Pasada la segunda etapa, se procede con la ControllerForDCMachine-ByFuzzy
desfusificación. Para esta fase final, se utilizan tres funciones
de salida tipo singleton, obteniendo así, una salida nítida. Tal como se muestra en la figura anterior, la respuesta del
Esta función sirve para utilizarse como sub-vi en sistemas sistema es muy oscilatoria. Para mejorar esto, los parámetros
difusos-convencionales. 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
G. P-ControllerForDCMachine-ByFuzzy puede ser muy eficiente en el caso de tener la función de
transferencia precisa de la planta.
Este programa sirve para controlar un motor de DC por
medio de un control P convencional sintonizado por lógica H. ConventionalandFuzzyLogicControllerForDCMachine
difusa. Las entradas de este programa viene de la DAQ. En sí,

3
Este programa tiene la función de controlar un motor de
DC por medio de un control difuso PD más 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 función 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 Fig. 3 Respuesta del programa
normaliza el error en un rango de -1 a +1. Ya con el error ConventionalandFuzzyLogicControllerForDCMachine
normalizado, se procede a la función P_controller.vi, la cual
ofrece un valor nítido de salida normalizado, el cual se Como se muestra en la figura anterior, el control procura
multiplica por la ganancia de 95. Este producto entra a una llevar la respuesta de manera cercana a la referencia. Sin
sumatoria a la que se le llamará SUM-A. Por otro lado, el embargo, la respuesta sigue siendo lenta y además, mantiene
error normalizado se resta con el valor del error pasado y se un error en estado estable.
obtiene la diferencia del error. Dicha diferencia entra a la
I. FuzzyLogicControllerForDCMachine
función D_controller.vi y se obtiene una salida nítida
normalizada. Dicha salida se multiplica por la ganancia 75 y Tiene casi el mismo funcionamiento que la función
se ingresa a la SUM-A. ConventionalandFuzzyLogicControllerForDCMachine.vi, con
La SUM-A tiene tres entradas, de las cuales ya se han la única diferencia de que esta nueva función no tiene la parte
mencionado dos. La última corresponde a la salida de la parte integral convencional. De ahí en fuera, la función
integral del control convencional. Este se explica a FuzzyLogicControllerForDCMachine.vi trabaja de la misma
continuación. manera que la función descrita en el punto H.
El error ingresa a un ciclo while que tan solo se corre una En la siguiente figura se mostrará el funcionamiento del
vez, puesto que tiene un "false" en la terminal condicional y programa después de haberse ajustado las ganancias.
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 multiplicación da la salida de la parte integral,
la cual se analiza que se mantenga dentro de los límites [0,5].
Después de esto, se le suma el anterior valor de la integral.
De nuevo, se analiza que la salida quede dentro de los límites
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 Fig. 4 Respuesta del programa
dentro de los límites de salida deseados. Ya teniendo la salida FuzzyLogicControllerForDCMachine
nítida y definida dentro del rango aceptado, se manda a la Como se puede observar en la figura anterior, el control
DAQ. PD hace que la respuesta intente reaccionar rápidamente a los
Ya habiendo explicado el funcionamiento de este programa, cambios de referencia. Empero, la falta de integral hace que
se mostrará la respuesta que ofrece al utilizar la DAQ y el la salida
módulo de entrenamiento. Cabe mencionar que las constantes
que traía el programa originalmente, hacía un sistema J. PI-StepbyStepMotorCD
oscilatorio, por lo que estas se modificaron y se obtuvo la Este programa se encarga de controlar un motor de DC. A
siguiente respuesta: pesar de que el nombre indica que es para un motor a pasos,
está diseñado 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 nítido 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,

4
el error se multiplica por una ganancia y se verifica que la punto B, Mamdani_tri_multi_H.vi, mas tiene la diferencia de
salida proporcional se encuentre dentro de los límites de salida que analiza si la salida es un NaN. En el caso que la salida sea
aceptables. Después de esto, el valor de salida se manda a una un NaN, cambia la salida a 0. El valor nítido normalizado
sumatoria. Dicha sumatoria tiene dos entradas, la segunda obtenido de la función difuzzifier_mamdani_multiple-tria.vi es
proviene de la parte integral del programa, la cual funciona de la salida del programa completo.
manera idéntica a la parte integral convencional explicada en
el punto I (función FuzzyLogicControllerForDCMachine.vi). L. PID_controller
Se verifica que la salida de la sumatoria se mantenga dentro Recibe como entradas al error, la integral del error y la
de los límites de salida y es enviada a la DAQ. diferencial del error. Cada uno de estos valores es mandado a
Ya habiendo explicado el funcionamiento inicial del su función correspondiente, P_controller, I_controller y
sistema, se debe de mencionar que este no funcionaba D_controller. La salida de cada uno de estos es sumada y se
correctamente, dado que la integral nunca generaba una resta obtiene la salida del programa completo.
y por ende, cuando la referencia se iba por debajo de la
variable de proceso, la señal de control nunca disminuía y por M. FunctionX2
ende, la variable de proceso no cambiaba. Para modificar esto, Este programa sirve para predecir la función x2 en un rango
dentro de la parte de la integral, después de la multiplicación para x de -1 a 1.
de los 3 elementos (promedio de errores, período y Ki), se Primeramente se ingresa el valor a través de una perilla, tal
quitó el análisis de que la señal se encontrara entre 0 y 5. Esto como se muestra en la Fig. 6.
hace que pueda haber valores negativos y se le reste a la señal
integral anterior. Ya después de la sumatoria de la señal
integral anterior con la actual, es cuando se puede realizar el
análisis de que la señal se encuentre entre 0 y 5. Con estos
cambios y ciertas modificaciones en las constantes Kp y Ki, la
respuesta fue la siguiente:

Fig. 6 Panel frontal FunctionX2


El valor de entrada es analizado para que no supere los
límites inferior o superior. Después de esto, se fusifica la
Fig. 5 Respuesta del programa PI-StepbyStepMotorCD entrada nítida por medio de 5 funciones de membresía
triangulares. Ya fusificada la entrada, pasa a la evaluación de
Tal como se muestra en la respuesta del sistema, esta sí reglas y por último, a la desfusificación tipo Sugeno de
llega al valor de referencia. Sin embargo, el problema de este constantes a través de la función defuzzifier_constants.vi.
control es que al no poseer la parte derivativa, la reacción del Para graficar la salida se generan dos clusters, uno con el
sistema no es tan rápida. valor puntual de la entrada y la salida de la lógica difusa, y
otro con el valor puntual de la entrada y el valor real de x2.
K. PD_controller
Ambos clusters entran a un generador de arreglos y el arreglo
Este programa sirve para evaluar la parte PD difusa de un de clusters se manda a la gráfica.
control completo. Recibe como entradas el error y la
diferencial del error, mientras que como salida ofrece un valor III. PROGRAMAS PID DE LAS SLIDES RECIBIDAS
nítido normalizado.
Primeramente se generan las funciones de membresía a A. PID autotunning vi
partir de valores que provienen de un cluster. Las funciones Este VI sirve para sintonizar las ganancias de un
de membresía son idénticas para la parte P y la parte D. Esto controlador el cual puede ser del tipo P, PI o PID. El
es puesto que se espera una entrada normalizada entre -1 y 1, funcionamiento del VI es el siguiente. El bloque recibe en
para ambos casos. primer lugar la señal de referencia y el valor de la variable de
Después de la sección explicada, se procede a la evaluación proceso para poder calcular el error, su integral y su derivada,
de reglas y a la desfusificación tipo Mamdani. Sin embargo, y en este caso vienen de la DAQ6009. También recibe el
esta desfusificación no se realizó como en los casos anteriores, rango de los valores de salida los cuales se fijaron en 0 y 5, la
sino a través de la función difuzzifier_mamdani_multiple- ganancia Kp y los tiempos Ti y Td que pueden ser
tria.vi. Esta funciona igual que la función explicada en el modificadas utilizando una entrada más del bloque llamada

5
autotune, la cual al ser activada llama la pantalla de ayuda el error (obtenidos mediante la DAQ6009). De igual manera,
mostrada en la Fig. 7 en donde se elige si se desea hacer un recibe la ganancia Kp y los tiempos Ti y Td. Utilizando estos
control P, PI o PID y también se selecciona la velocidad de valores el VI calcula la señal de control que debe ser enviada
respuesta deseada (normal, rápida o lenta) y el nivel de ruido. mediante la DAQ6009 al sistema. En la prueba se utilizó la
Utilizando estos parámetros, se cambia el valor de los Kp, Ti y Td calculados mediante el PID autotuning.vi y la
parámetros que se van a utilizar para realiza la sintonización respuesta se muestra en la Fig. 9.
mediante el método de Zieger-Nichols [1].

Fig. 9 Respuesta de un control PID clásico


C. PID advanced vi
Este bloque tiene las mismas entradas que el PID VI y
además tiene otras entradas como el rango de la función de
referencia, beta, linealidad, auto y control manual. El rango de
la función de referencia va de 0 a 100 y es un porcentaje de la
escala completa y también establece el rango de la variable de
proceso. Beta es un factor de la referencia utilizado para
calcular la acción 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
Fig. 7 Asistente de sintonización del PID respuesta casi parabólica. La entrada auto sirve para elegir si
se desea que la señal de control sea mandada por el
Una vez que se calculan las nuevas ganancias con el controlador PID o si el usuario será el encargado de mandarla.
ayudante de sintonización, estas son ingresadas al controlador Cuando se elige este último caso, la señal de control es
PID para que pueda reaccionar correctamente. Para probar el ingresada a través de la entrada control manual.
sistema se realizó una sintonización del tipo PID eligiendo el Para la prueba se utilizaron los mismos valores que en los
tiempo de respuesta normal. Las ganancias obtenidas y la ejemplos anteriores y se probó tanto el modo manual como el
respuesta del sistema se pueden ver en la Fig. 8. automático. La respuesta del automático se observa en la Fig.
10, mientras que en el modo manual no fue posible controlar
el sistema.

Fig. 8 Ganancias y respuesta de un control PID


autosintonizado
Fig. 10 Respuesta de un control PID avanzado
B. PID vi
D. PID Lead Lag vi
La utilización de este VI es muy sencilla, recibe como
entradas el rango de la salida (0V a 5V en este caso), la Este control es distinto a los demás debido a que no utiliza
referencia a seguir y la variable de proceso para poder calcular retroalimentación dentro de sus entradas, lo único que utiliza
es la referencia, el rango de salida y 3 parámetros que son

6
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
parámetro lag time es cero, es como si no existiera este
parámetro. 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 parámetros dieron una respuesta más o menos
aceptable, sin embargo cabe mencionar que solamente
respondía correctamente ante cambios pequeños 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. 12. Controlador tipo Sugeno para el movimiento de


un robot
Esto se puede ver en las funciones triangulares del ICTL
que tienen la condición 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 mínimo en 20 y las otras tienen
los valores 10 y 30 por lo que su centro está en 20 y su valor
Fig. 11 Respuesta de un control PID Lead Lag mínimo en 10.
La segunda etapa es la evaluación de reglas, la cual se
IV. PROGRAMAS EJEMPLO DEL CAPÍTULO 2 DEL LIBRO hace a través del bloque premise_evaluation.vi del ICTL, sin
INTELLIGENT CONTROL SYSTEMS WITH LABVIEW embargo este bloque necesita de otro llamado input
combination generator.vi el cual recibe el número de entradas
E. Control de movimiento de un robot utilizando un y el número de funciones de membresía que tienen las
controlador tipo Sugeno entradas y usando esos valores calcula la combinación de
Como ya se mencionó en el proyecto 5, un control de tipo todas las posibles reglas del tipo IF L=x and C=y and R=z
Sugeno contiene 3 partes, fusificación, evaluación de reglas y THEN… El bloque de evaluación recibe el valor de los
funciones de salida. En este ejemplo se realizó un control de antecedentes de cada una de las reglas y calcula el grado de
este tipo para el movimiento de un robot dependiendo de la activación de los consecuentes de cada regla mediante la
lectura de 3 sensores distintos y para las salidas se utilizaron función min.
funciones tipo singleton. En la Fig 12. Podemos observar las 3 La tercera etapa es el bloque de desfusificación, el cual al
etapas en donde la primera es la de fusificación en la cual se ser del tipo Sugeno utiliza singletons cuyos centros son
observa que hay tres entradas con 2 funciones de membresía, especificados en un arreglo de acuerdo a la tabla 1.
cada una de tipo hombro, una comienza a bajar mientras que
la otra empieza a subir en 10 y terminan en 20.
Left Center Right Left Wheel Right Wheel

Close Close Close 2 2

Close Close Far 2 0

Close Far Close 1 1

Close Far Far 2 1

Far Close Close 0 2

Far Close Far 2 2

7
Far Far Close 1 2

Far Far Far 1 1

Tabla 1. Reglas del robot en forma de tabla


Se 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 activación de
los consecuentes calculado en la segunda etapa. Con estos
datos, el bloque de desfusificación 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 número representa una instrucción en el robot) es
necesario realizar un redondeo para acercarnos a la instrucción
a la que tienda la respuesta. En la Fig. 13 se puede observar un Fig. 14. Controlador tipo Mamdani para el movimiento de
ejemplo del sistema en funcionamiento. un robot
A continuación, el arreglo con los valores máximos de los
consecuentes se separa en el número de funciones de
membresía 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
membresía de desfusificación 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 parámetros a y b, así como un bit que indica si se
Fig. 13 Salida del sistema tipo Sugeno bajo dos entradas desean funciones tipo hombro, pero en vez de dar el valor a
distintas fusificar, se da el valor a desfusificar que fue el obtenido en el
bloque anterior. Con este valor se genera un corte alfa inverso.
F. Control de movimiento de un robot utilizando un El bloque se encarga de generar dos salidas ∑▒μ(u)u y ∑
controlador tipo Mamdani
▒μ(u) para que se haga la suma de estos valores por cada
En el proyecto 4 ya se explicó el funcionamiento de un función de membresía y al final se dividan para obtener el
controlador tipo Mamdani, el cual tiene 3 etapas, las dos valor nítido desfusificado, mediante centro de gravedad. En la
primeras son iguales que en el caso del controlador tipo Fig. 15 se puede observar un ejemplo del sistema en
Sugeno, sin embargo la desfusificación cambia y podemos ver funcionamiento.
esta diferencia comparando las Fig. 12 y 14, en donde las
primeras 2 etapas son idénticas, pero en la Fig. 14, la etapa de
desfusificación es un poco más compleja.
Mediante el ICTL la desfusificación 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 evaluación de los antecedentes de las reglas (min), el
número deseado de funciones de salida y un arreglo indicando
la función 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 activación que va a tener cada función de
salida utilizando la función max. Podemos ver que se utilizó el
método min-max para calcular el grado de activación, min en
la etapa 2 y max en la primera parte de la etapa 3. Fig. 15 Salida del sistema tipo Mamdani bajo dos entradas
distintas

V. 5 PROPUESTAS NUEVAS DE CONTROL (UTILIZANDO LÓGICA


DIFUSA Y EL ICTL)

8
A. PD difuso con FAM completa Una vez que se recibe la entrada se procede a evaluar las
En los ejemplos del manual se pudo observar la forma de reglas utilizando el bloque premise_evaluation.vi el cual
hacer un controlador PD difuso en el cual el error entraba a un recibe las reglas a evaluar y los valores de los antecedentes y a
controlador P y la derivada entraba a un controlador D, ambos la salida nos entrega el antecedente de las reglas evaluado con
difusos, y al final la salida de ambos se sumaba para obtener la función min. La salida de este bloque entra a otro llamado
un control PD. En otras palabras, la parte proporcional, y general_defuzzifier_mamdani.vi el cual recibe además el
derivativa se analizaban de forma aislada y después se número de la función que se va a activar con cada regla y con
sumaban. Sin embargo, en este caso la parte proporcional y la estos dos parámetros genera un arreglo con el máximo de los
parte derivativa son calculadas de manera conjunta con una consecuentes de cada función de membresía de salida. Esta
FAM completa. etapa se puede ver en la Fig. 16.
Por esta razón se propuso un control PD en el cual se
calcula una sola salida dependiendo la relación entre el error y
su derivada, la cual se puede ver en la FAM de la Tabla. 2.

Error Derivada del error Salida


N N MN
N Z N
N P Z
Z N N
Z Z Z
Z P P
P N Z
P Z P
P P MP Fig. 16 Evaluación de reglas
Tabla. 2 Reglas difusas PD FAM Ya que se tiene la evaluación de los consecuentes se pasa al
Como se puede observar, hay 3 funciones de membresía siguiente bloque el cual se llama
para cada entrada (negativo, cero y positivo) y 5 en la salida defuzzifier_mamdani_multiple-tria.vi, el cual recibe además el
(muy negativo, negativo, cero, positivo y muy positivo). Las número de funciones de salida y un arreglo con los valores a y
funciones elegidas fueron señales triangulares centradas en -1, b de las funciones de membresía de salida y su salida es el
0 y 1 para el caso de las entradas y en -1, -0.5, 0, 0.5 y 1 para valor nítido de la señal de control. Al final simplemente se
el caso de la salida. Las funciones de entrada fueron creadas hace un ajuste ya que el control se tiene normalizado entre -1
con los triang-function.vi del ICTL que reciben los parámetros y 1 y esta salida se manda por la DAQ al módulo, como se ve
a y b, y a la mitad de estos dos valores queda el centro del en la Fig. 17. En la Fig. 18 se muestra el resultado de una
triángulo. En la Fig. 15 se pueden observar los bloques de las prueba que se hizo con este control.
funciones de membresía de entrada.

Fig. 15 Funciones de entrada del PD Fig. 17 Desfusificación y etapa de salida

9
Fig. 20 Respuesta del sistema PID híbrido
C. PI difuso con FAM + D difuso (PID difuso)
Fig. 18 Respuesta del sistema PD
Se sabe que es posible hacer un control PI difuso
Como se muestra en la Fig. 18, la falta de integral no integrando la salida de un control PD difuso [2], por lo que se
permite que la salida llegue al valor deseado. decidió utilizar el PD que fue explicado anteriormente (Fig. 21)
y después, integrarlo para obtener un control PI.
B. P+I difuso + D convencional (PID híbrido)
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 dividiéndolo 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 acción derivativa del
controlador. También 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 señales de control para generar un Fig. 21 Controlador PID
control tipo PID como se ve en la Fig. 19 y la respuesta se ve
en la Fig. 20.
Por otra parte se genera un control tipo D difuso utilizando
el bloque que ya se explicó en la primera sección 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 demostración del funcionamiento se
muestra en la Fig. 23.

Fig. 19 Circuito de control híbrido con PI difuso y D


convencional

10
Fig. 22 Integración del PD para formar un PI y control D
difuso

Fig. 24 Funciones de membresía de salida del PD difuso


Tal como se muestra en la Fig. 24, la funciones de
membresía 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.
Después 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. 23 Respuesta del sistema PID


D. 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 membresía
de salida del PD, para así obtener una respuesta más aceptable
del PI. Las nuevas funciones de membresía de salida que se
utilizaron en el programa se pueden apreciar en la Fig. 24:

Fig. 25 Integral continua para un PI difuso a partir de un


PD con FAM completa
Por último, la respuesta que se obtuvo con este sistema fue
la siguiente:

11
Fig. 26 Respuesta del PI a partir de integrar un PD difuso
con FAM completa
Tal como se ve en la Fig. 26la respuesta es bastante rápida
y además, elimina casi por completo el error en estado estable.
E. PID convencional sintonizado por lógica difusa Fig. 28 PID convencional después de actualización de
Para este caso, se optó por utilizar un PID convencional. constantes
Sin embargo, las constantes Kp, Ki y Kd se actualizan por Después de este punto, todas las salidas se suman como en
medio de una lógica difusa que recibe como entrada el error un control convencional y la salida va directo a la planta.
del sistema. Cabe mencionar que la salida está delimitada entre [0,5]V. La
Como inicio, el sistema tiene las 3 partes de la lógica difusa respuesta del sistema fue la siguiente:
tipo Mamdani. Esto se puede apreciar en el código mostrado
en la Fig. 27.

Fig. 29 Respuesta de PID convencional sintonizado con


Fig. 27 Lógica difusa para actualización de constantes PID lógica difusa
convencional Como se aprecia en la Fig. 29, la respuesta del sistema no
Como se puede observar en la Fig. 27, en este caso se es sumamente rápida para cambios bruscos. Sin embargo, si
introducen las funciones de membresía por medio de un procura seguir a la referencia y además, cuando la referencia
cluster. Existen 5 funciones de membresía de entrada y 5 de se estabiliza un poco, la alcanza con velocidad y precisión.
salida. Al obtener la salida normalizada de [-1,1], esta pasa a
modificar las diferentes constantes del control tradicional. VI. ESTIMACIÓN DE PARÁMETROS
Como Kp máxima se tiene 18, como Ki máxima se tiene 4.5 y LabVIEW cuenta con herramientas para estimar los
por último, la Kd máxima es de 11. Estas constantes son parámetros de una planta, por lo que para ver el
multiplicadas por el error, integral del error y diferencial del funcionamiento se piensa modelar el circuito RLC que viene
error, en orden de correspondencia. Esto se aprecia en la Fig. dentro del módulo de entrenamiento. El circuito se puede
28. observar en la Fig. 29.

12
Fig. 29 Diagrama del circuito RLC

La función de transferencia de este sistema es: Fig. 31 Señal cuadrada de 100Hz leída por la DAQ6009


( )
⁄ ⁄

Si los valores son R=10kΩ, L=330mH y C=100nF, la


función queda de la siguiente manera:

( )

Ya que se tiene la función de transferencia se hizo la


simulación ante un escalón para observar la respuesta teórica
del sistema y después poder compararla con la real. La
simulación se hizo utilizando LabVIEW y se muestra en la Fig.
30.

Fig. 32 Señal cuadrada de 100Hz en el osciloscopio

Por último se observó la respuesta del circuito RLC ante un


escalón pero ya no simulado, sino en un osciloscopio (Fig. 33)
y vimos que efectivamente responde en el tiempo que se había
visto en la simulación, por lo que no se puede caracterizar el
sistema con este tipo de herramientas y por esa razón ya no se
generaron los VI’s que calculan el modelo de la planta.

Fig. 30 Respuesta simulada del circuito RLC ante un


escalón

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 estimación de los
parámetros de la planta. No fue posible hacer la estimación
debido a que la frecuencia máxima 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 señal cuadrada a 100 Hz y se observó que la
DAQ no la leía correctamente. En la Fig. 31 y 32 se ve la
comparación de la lectura hecha por la DAQ6009 y por un Fig. 33 Respuesta real del circuito RLC ante un escalón
osciloscopio.

13
VII. CONCLUSIÓN
Tal como se sabía con anterioridad, gracias a proyectos
realizados en semanas pasadas, la lógica difusa es muy útil al
momento de aplicarse a control. Además, 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 programación gráfica simplifica mucho el
tiempo de desarrollo. Además, no solo es el hacer uso de
herramientas como LabVIEW, sino además, de toolkits
especializados para cada tipo de aplicación. En caso de no
haber utilizado ICTL, la programación de las funciones de
membresía, evaluación de reglas y desfusificación hubiera
tomado mucho más 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 económica crezca de manera aceptable, no
importa si hay que incurrir en costos de compra de paquetes
computacionales.
Hablando un poco más 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 más 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 estimación de
parámetros, 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
más potente para poder obtener buenos y fidedignos
resultados.

VIII. BIBLIOGRAFÍA
[1] PID Control Toolkit User Manual. National
Instruments. Junio 2008.
[2] Ponce, P., Inteligencia Artificial con aplicaciones a la
ingeniería, Alfaomega Grupo Editor, 2010.
[3] Ponce, P., Ramírez-Figueroa, F., Intelligent Control
Systems with LabVIEWTM, Springer-Verlag London Limited,
2010.

14

Anda mungkin juga menyukai