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)
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:
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].
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.
7
Far Far Close 1 2
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.
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.
10
Fig. 22 Integración del PD para formar un PI y control D
difuso
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.
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
⁄
( )
⁄ ⁄
( )
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