Vous êtes sur la page 1sur 14

1

Lgica 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 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.
I. INTRODUCCIN
El 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.
II. 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+B
Despus 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
2

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_H
Esta 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
3

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 LabVIEW
TM
, 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-ByFuzzy
Tal 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. ConventionalandFuzzyLogicControllerForDCMachine
4

Este 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
ConventionalandFuzzyLogicControllerForDCMachine
Como 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. FuzzyLogicControllerForDCMachine
Tiene 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
FuzzyLogicControllerForDCMachine
Como 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 salida
J. PI-StepbyStepMotorCD
Este 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,
5

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 -StepbyStepMotorCD
Tal 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_controller
Este 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_controller
Recibe 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. FunctionX2
Este programa sirve para predecir la funcin x
2
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 FunctionX2
El 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 x
2
.
Ambos clusters entran a un generador de arreglos y el arreglo
de clusters se manda a la grfica.
III. PROGRAMAS PID DE LAS SLIDES RECIBIDAS
A. PID autotunning vi
Este 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
6

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 PID
Una 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
autosintonizado
B. PID vi
La 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 clsico
C. PID advanced vi
Este 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 avanzado
D. PID Lead Lag vi
Este 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
7

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 Lag
IV. PROGRAMAS EJEMPLO DEL CAPTULO 2 DEL LIBRO
INTELLIGENT CONTROL SYSTEMS WITH LABVIEW
E. Control de movimiento de un robot utilizando un
controlador tipo Sugeno
Como 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 robot
Esto 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.

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
8

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 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
distintas
F. Control de movimiento de un robot utilizando un
controlador tipo Mamdani
En 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 robot
A 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
distintas
V. 5 PROPUESTAS NUEVAS DE CONTROL (UTILIZANDO LGICA
DIFUSA Y EL ICTL)
9

A. PD difuso con FAM completa
En 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.

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
Tabla. 2 Reglas difusas PD FAM
Como 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 PD
Una 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 reglas
Ya 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
10



Fig. 18 Respuesta del sistema PD
Como se muestra en la Fig. 18, la falta de integral no
permite que la salida llegue al valor deseado.
B. 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 hbrido
C. 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.

11


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


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 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 difuso
Tal 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 completa
Por ltimo, la respuesta que se obtuvo con este sistema fue
la siguiente:
12


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 rpida
y adems, elimina casi por completo el error en estado estable.
E. PID convencional sintonizado por lgica difusa
Para 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
convencional
Como 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
constantes
Despus 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 difusa
Como 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.
VI. ESTIMACIN DE PARMETROS
LabVIEW 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.

13


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

14

VII. CONCLUSIN
Tal 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.

VIII. 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 LabVIEW
TM
, Springer-Verlag London Limited,
2010.