Lab View and Fuzzy

  • Published on
    15-Oct-2015

  • View
    254

  • Download
    0

Embed Size (px)

Transcript

<p>IEEE Paper Template in A4 (V1)</p> <p>Lgica difusa con LabVIEW ICTLICTL se puede tener de la pagina www.tribalengineering.com</p> <p>14</p> <p>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.</p> <p>Palabras ClaveLgica difusa con LabVIEW, Controlador difuso, PID, DAQ, Programacin con ICTL.IntroduccinEl lenguaje de programacin de LabVIEW es una mayor abstraccin al cdigo de alto nivel. Este tipo de programacin se basa en el lenguaje grfico, lo cual, para ciertas aplicaciones, facilita la programacin y disminuye el tiempo de desarrollo.Una desventaja que tiene LabVIEW por s solo, es que no cuenta con un "Toolkit" especializado en lgica difusa. Generalmente se tienen que programar las funciones de membresa, la evaluacin de reglas y dems requisitos para llevar a cabo un sistema de lgica difusa. Para simplificar ese proceso, se utiliza el Intelligent Control Toolkit For LabVIEW. Dicho programa ya trae los "vi" necesarios para realizar un sistema de lgica difusa.En este documento se expondr el funcionamiento de ciertos programas de LabVIEW que fueron proporcionados por el Dr. Ponce en clase de Control Inteligente y se proponen algunas formas de controladores difusos o hbridos (parte difusa y parte clsica) para la posicin de un motor de DC.programas del dr. ponce de labview (ejemplos Fuzzy y programa del cd del libro intelligent control systems for labview)A. calSUMA+B</p> <p>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:</p> <p>Fig. 1 Panel frontal calSUMA+BDespus de ingresar los dos valores, que tienen formato double, se verifica si estn dentro del rango (0.99,5.01). De estar dentro del rango, se prende el indicador tipo LED que tiene a un lado cada entrada. En caso contrario, se apaga.Como segundo paso, se procede a obtener el valor de membresa de cada entrada. Tal como se puede ver en la Fig. 1, las funciones son triangulares. Dichas funciones se forman gracias al triang-function.vi, el cual recibe como entradas un valor booleano que dicta si es triangular u hombro, los valores extremos del triangulo (dado que para este "vi", la funcin es simtrica a su centro) y la entrada a evaluar.Despus de convertir la entrada ntida en entrada difusa, se utilizan dos generadores de arreglos para obtener un arreglo de 2X5. Cada fila del arreglo tiene los valores de membresa de cada funcin, para cada entrada (en este caso, dos). Dicha matriz entra a premise_evaluation.vi, la cual recibe como entradas a la matriz de valores de membresa, el valor double de umbral para poder detonar la evaluacin de una regla y por ltimo, las combinaciones generadas por Input combinator generator vi. Esta ltima funcin recibe como entrada el nmero de funciones de membresa por entrada y el nmero de entradas, mientras que como salida, ofrece una matriz con las combinaciones de las reglas a evaluar. Dando el ejemplo de este programa, tiene 5 funciones de membresa de entrada y 2 entradas, por lo que al elevar 5 a la 2, obtenemos 25. Con esto se genera un arreglo de 25X2 (el nmero de filas est determinado por el nmero de funciones de membresa por cada entrada, elevado al nmero de entradas, mientras que el nmero de columnas lo dicta el nmero de entradas), el cual va dictando el orden en que se van evaluando las reglas. Por ejemplo, la primera fila tendra a la primera funcin de membresa de las dos entradas, la segunda fila tendra a la primera funcin de la primera entrada y la segunda de la otra entrada y as ira cambiando consecutivamente para generar todas las combinaciones posibles.Despus de pasar el "vi" de la evaluacin de reglas, se obtienen 25 valores de membresa para cada regla. Estos valores entran al general_defuzzifier_mandami.vi, tal como lo hacen el nmero de funciones de membresa y las funciones de membresa correspondientes a cada regla evaluada (deben ir en orden a las reglas que se evalan).Cabe mencionar que el "vi" de desfusificacin por Mamdani tena un pequeo error que no permita que la calculadora difusa funcionara correctamente. Dentro del "vi" mencionado, se inicializaba un arreglo con los valores "-1", mientras que debera de ser "0". Al realizar este cambio, el programa funcion correctamente.Al pasar la funcin de desfusificacin general tipo Mamdani, se obtienen los valores de membresa de cada funcin de salida. En este caso, como se tienen 10 funciones de salida, se obtienen 10 valores de membresa.Los valores de membresa de cada funcin de salida son ingresados al defuzzifier_mamdani.vi, el cual recibe como entradas el valor en el cual se realizar el corte alfa (en otras palabras, el valor de membresa que sale de general_defuzzifier_mandami.vi), los extremos del tringulo, un valor double que indica el paso (cada cuanto se evaluar la funcin; sirve para simular la integral de la funcin y poder sacar el cetro de gravedad) y por ltimo, un valor booleano que indica si la funcin es hombro o triangular. Estos "vi" tienen como salidas a la sumatoria de las multiplicaciones de los puntos con su respectivo valor de membresa y adems, la pura sumatoria de los valores de membresa. Estas dos salidas se suman por separado, para as obtener la sumatoria de todas las funciones de salida (en este caso, 10) y despus si divide la sumatoria de los productos entre la sumatoria de los valores de membresa. Esto otorga el valor ntido de salida del programa.Para graficar las funciones de membresa tanto de entrada como de salida, se utiliza el rampVector.vi, el cual genera un arreglo con un determinado paso y en un rango definido. Este arreglo sirve para ir evaluando cada punto con su valor de membresa correspondiente y graficar todos los puntos.Por ltimo, algo importante a mencionar es que la funcin de membresa de salida que se encuentra centrada en 1, no tiene funcionalidad, dado que las funciones de membresa de entrada comienzan en 1 y por ende, la sumatoria mnima no puede dar menos de 2. Quitar esta funcin de salida podra hacer ligeramente ms eficiente al cdigo. O en su caso, incluir funciones de membresa de entrada que permitan una sumatoria mnima de 1,NOTA: En la explicacin de los siguientes programas no se entrar en detalle del funcionamiento ni de las entradas y salidas de cada sub-vi, al menos que sea una funcin que no se haya explicado en esta seccin. Tan solo se procurar explicar el funcionamiento general y en bloques. En el caso que se utilic un sub-vi nuevo, este ser explicado.B. Mamdani_tri_multi_HEsta funcin tiene como entradas el nmero de funciones de membresa de salida del sistema, el paso, los valores de membresa que se obtienen de la evaluacin de reglas y por ltimo, un cluster con las funciones de membresa de salida y un valor booleano que indica si son tipo triangulares u hombro. El cluster que ingresa a la funcin debe tener un nmero de columnas igual al nmero de funciones de membresa de salida y tres filas. En la primera fila se encuentra el valor booleano que indica la forma de la funcin, en la segunda fila el valor de extrema izquierda y por ltimo, en la tercera fila se encuentran los valores de extrema izquierda. Para este caso, los tringulos o funciones hombro, tienen su centro con simetra de distancia con respecto al punto izquierdo y derecho que es ingresado.Los valores de entrada se ingresan a un ciclo for, el cual tiene nmero de iteraciones igual al nmero de funciones de membresa de salida. Gracias a la opcin index se logra hacer que cada iteracin pase una sola columna del cluster y un solo valor del arreglo de valores de membresa que viene de la evaluacin de reglas.Los valores de membresa que entran al ciclo, as como el paso, entran directo a la funcin defuzzifier_mamdani_triangular.vi, la cual funciona como la defuzzifier_mamdani.vi mencionada con anterioridad en el punto A. Con respecto al cluster, cada columna va entrando a la funcin "unbundle", la cual se encarga de separar los valores de cada fila y as, poder ingresar los valores a la funcin defuzzifier_mamdani_triangular.vi. Tal como ya se haba mencionado, esta funcin tiene dos salidas, la sumatoria de los puntos multiplicados por sus valores de membresa y la sumatoria de los puros valores de membresa.Con ayuda de la opcin index, los valores que van saliendo de la funcin defuzzifier_mamdani_triangular.vi van formando un arreglo. Al terminar el ciclo for, se suman los valores de los dos arreglos de salida por separado y finalmente, se dividen ambos valores para obtener la salida ntida.Esta funcin es un sub-vi que se utiliza en el proceso de desfusificacin de un sistema difuso.C. P_controller</p> <p>El P_controller.vi recibe como entrada un valor normalizado que tiene un rango de (-2,2). En el caso de que la entrada sea |x||2|, la salida es NaN (Not a Number). Mas se debe de saber que aunque funciona con valores cercanos a dos, se busca que la entrada est normalizada en un rango [-1,1].Primeramente se ingresan los valores de las funciones de membresa de entrada (para este caso son triangulares). Estos van en forma matricial de 3 filas por N columnas; siendo las columnas el nmero de funciones de membresa. En la primera fila se encuentran los valores de extrema izquierda de cada funcin, en la segunda va el punto de extrema derecha y por ltimo, en la tercera se encuentran los valores del centro de la funcin de membresa. Esta matriz en realidad es un cluster, el cual se ingresa al Tria-multi-inputs-vi.Adems del cluster anteriormente mencionado, la funcin Tria-multi-inputs-vi tambin tiene como entradas el nmero de entradas del sistema, nmero de funciones de membresa por entrada y el valor ntido de entrada del sistema (double). Como salida, esta funcin tiene un arreglo con los valores de membresa de cada funcin de membresa para cada entrada.Seguido del paso anteriormente mencionado, se procede a la evaluacin de reglas y desfusificacin general tipo Mamdani. Este bloque de funciones ya fue explicado en el punto A. Sin embargo, es importante mencionar que para este caso, tan solo hay tres funciones de membresa para la salida, "Negativo", "Zero" y "Positivo".Ya teniendo los valores de membresa despus de la evaluacin de reglas, se ingresan a la funcin Mamdani_tri_multi_H.vi explicada en el punto B. Dicha funcin ofrece como salida el valor ntido de salida del sistema. Cabe mencionar que la salida ntida est normalizada en el rango [-1,1].Esta funcin sirve para utilizarse como sub-vi dentro de programas de sistemas difusos.D. I_controller</p> <p>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</p> <p>Es idntico al P_controller.vi. Lo que se debe mencionar es la importancia de tener programas diferentes para cada ganancia. Esto permite variar parmetros internos de cada uno. Por ejemplo, el nmero de funciones de membresa de entrada.F. P-MOTOR-CD (programa incluido en el CD del libro Intelligent Control Systems with LabVIEWTM, del Dr. Ponce)</p> <p>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.</p> <p>G. P-ControllerForDCMachine-ByFuzzy</p> <p>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:</p> <p>Fig. 2 Respuesta del programa P-ControllerForDCMachine-ByFuzzyTal como se muestra en la figura anterior, la respuesta del sistema es muy oscilatoria. Para mejorar esto, los parmetros del programa P-MOTOR-CD se deben de modificar. Lo importante a recalcar aqu, es que la ganancia Kp convencional se va actualizando con un control difuso, lo cual puede ser muy eficiente en el caso de tener la funcin de transferencia precisa de la planta.H. ConventionalandFuzzyLogicControllerForDCMachineEste programa tiene la funcin de controlar un motor de DC por medio de un control difuso PD ms un control convencional I. Las entradas del programa vienen de una DAQ y son el valor actual y el valor de...</p>