Es mostren els missatges amb l'etiqueta de comentaris #labVIEW. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris #labVIEW. Mostrar tots els missatges

dijous, 16 de febrer del 2017

9. Funciones de control de aplicaciones

Las funciones de control de aplicaciones sirven para controlar mediante programación aplicaciones .vi integradas en labview, ya sea en el equipo local o en red.
Imagen 1. Algunas estructuras de funciones de control de aplicaciones en el diagrama de bloques.

Las estructuras de funciones de control de aplicaciones usa el denominado reference number que es un identificador único, para designar objetos, tales como archivos, dispositivos o conexiones de red.

Cuando abres una fila, un dispositivo o una conexión de red, labview crea un código de referencia o refnum asociado con cada uno de los objetos indicados. Todas las operaciones que se realizan sobre estos elementos usan esta referencia para identificar cada uno de ellos de forma inequívoca.

En módulos anteriores, como en el de funciones de archivo I/O, ya pudimos ver está característica en el ejemplo de creación, registro y cierre de archivos (ver imagen 2). Los "wires" señalados transfieren el refnum de una estructura a otra para identificar inequívocamente el archivo sobre el cual se está trabajado. La metodología empleada para referenciar archivos, dispositivos o conexiones de red en cualquier otro tipo de estructura sigue el mismo patrón que el indicado en este apartado.


Imagen 2. Ejemplo de estructura de función de archivo I/O donde se emplean reference number.

Tal y como podemos ver en la imagen 3, los datos que envíamos a la estructura Write Delimited Spreadsheet.vi tienen configuración de matriz con formato de número DBL (double-precision floating-point numeric, ver módulo Labview).

Imagen 3. Ejemplo de estructura de función de archivo I/O donde se emplean reference number.

Podemos combinar cualquiera de estas estructuras con la mayoría de estructuras vistas en el módulo de funciones de matriz para trabajar los datos antes de entrarlos en Write Delimited Spreedsheet.vi.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

dimarts, 14 de febrer del 2017

8. Funciones de onda

Es muy habitual encontrarse con señales de tipo onda cuando se trabaja con sistemas cíclicos o bien cuando se estudian fenómenos de la naturaleza. Es por ello, que resulta de gran importancia disponer de herramientas que nos permitan extraer información de esta fuente de datos.

Las funciones de onda sirven como su nombre indica para trabajar con funciones de onda y extraer de los inputs correspondientes información relativa a propiedades del señal.

Imagen 1. Estructuras de funciones de onda en el diagrama de bloques.

Por ejemplo, la estructura Get Waveform Components permite, recuperar magnitudes como la amplitud de la señal de onda sinusoidal.

Imagen 2. Estructura Get Waveform Components en el diagrama de bloques.

La entrada de señal podría provenir de un dispositivo externo y a través de una tarjeta de adquisición de datos incorporarse en el sistema para su tratamiento.

Para poder visualizar como funciona la estructura indicada y a falta de disponer de un señal externo, labVIEW dispone de la posibilidad de generar nosotros mismos una función de tipo sinusoidal; se trata de la estructura Formula Waveform.vi que nos permite introducir la fórmula que rige el comportamiento de nuestra onda. (*)1

Imagen 3. Estructura Get Waveform Components con una estructura de Formula Waveform.vi en el diagrama de bloques.

Si pulsamos dos veces sobre la estructura Formula Waveform.vi podremos acceder al panel de control correspondiente donde poder programar los parámetros deseados de nuestra función de onda. 

Imagen 4.  Estructura Formula Waveform.vi  en el panel de control.

Imagen 5.  Estructura Get Waveform Components con una estructura de Formula Waveform.vi en el panel de control.

Otras estructuras, como la de Analog to Digital.vi nos permiten convertir el señal analógico en digital (ver imagen 6). (*)1
Imagen 6. Estructura de conversión de señal analógico a digital en el diagrama de bloques. 

Imagen 7. Estructura de conversión de señal analógico a digital en el panel de control. 

Tal y como se ha remarcado en otros módulos, las distintas funciones tienen estructuras análogas que realizan el mismo tipo de operaciones, cambiando únicamente la tipología de datos que procesan.

Por ejemplo, la estructura Index Waveform Array.vi , es análoga a la estructura Index Array de las funciones de cadena. (*)1
Imagen 8. Estructura Index Waveform Array. avi en el diagrama de bloques. 

Imagen 9. Estructura Index Waveform Array. avi en el panel de control. 

(*)1 Aunque nos hemos referido a estas como estructura, lo cierto es que se trata de aplicaciones completas, formadas a su vez por diversas estructuras de diversa tipología de funciones.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

dimarts, 7 de febrer del 2017

6. Funciones de tiempo y diálogo

Las funciones de tiempo nos permiten introducir la variable tiempo en nuestro sistema de control y monitorización, pudiendo ser un tiempo dinámico que se adquiere constantemente desde el reloj del sistema o como constante o parámetro de proceso.

Imagen 1. Estructuras de funciones de tiempo más habituales.

Usaremos las funciones de tiempo y diálogo para realizar las siguientes tareas:
  • Manipular la velocidad a la que una operación se ejecuta.
  • Recuperar información sobre la hora y la fecha del reloj del sistema.
  • Crear cajas de diálogo para solicitar información al usuario.
Veamos algunos ejemplos de las estructuras mostradas en la imagen 1 y para que podríamos utilizarlas.

(1) Estructura Tick Count (ms) permite realizar la lectura del reloj del sistema en ms y mostrarla, a través de un indicador en el panel de control; este indicador puede ser ocultado.
Imagen 2. Estructuras de Tick Count en el diagrama de bloques.

Esta estructura es de especial interés cuando deseamos registrar en tiempo real alguna variable de proceso con el objetivo de desarrollar un modelo de comportamiento para ser introducido en el sistema de control.

(2) Estructura High Resolution Relative Seconds.
Imagen 3. Estructuras de High Resolution Relative Seconds en el diagrama de bloques.

(3) La estructura Wait (ms) sirve para introducir pausas de tiempo en la lectura del reloj que se muestra en pantalla.   

Esta lectura se realiza en unidades de ms pero con el uso de funciones numéricas podemos hacer la conversión en otras unidades o usar alguna de las estructuras de conversión que están disponibles en la paleta de las funciones de tiempo y diálogo.

Imagen 4. Estructuras de Wait (ms) en el diagrama de bloques.

Imagen 5. Estructuras de Wait (ms) en el panel de control.

(4) Estructura Wait Until Next ms Multiple.
Imagen 6. Estructuras de Wait Until Next ms Multiple en el diagrama de bloques.

(5) Estructura To Time Stamp.
Imagen 7. Estructuras de To Time Stamp en el diagrama de bloques.

Imagen 8. Estructuras de To Time Stamp en el diagrama de bloques.

(6) Estructura Get Date/Time String sirve para introducir una fecha y hora a través del panel de control y posteriormente visualizarlo (si no se opta por ocultarlo) en el panel de control (ver imagen 9). Esta estructura permite escoger entre 3 formatos de salida de la fecha/hora (short, abbrev, long).

Imagen 9. Estructuras de Get Date/Time String en el diagrama de bloques.

Imagen 10. Estructuras de Get Date/Time String en el panel de control.

(7) Estructura Get Date/Time String In Seconds.

Imagen 11. Estructuras de Get Date/Time String In Seconds en el diagrama de bloques.

Imagen 12. Estructuras de Get Date/Time String In Seconds en el panel de control.

Estas estructuras son probablemente las más empleadas cuando se trata de crear lazos de control.

Las funciones de diálogo nos permiten interactuar con el programa, visualizando información, pudiendo aceptarla mediante un click y en caso de que lo deseemos pudiendo ser un punto de stop en el programa, lo cual querrá decir que hasta que el usuario no interactúa con el programa no continua ejecutándose.

Dentro de las estructuras de funciones de diálogo encontramos las siguientes:

(a) La estructura One Btm Dialog nos permite incluir un cuadro de diálogo con el mensaje que deseemos para que el usuario lo visualice.
 Imagen 13. Estructuras de One Btm Dialog en el diagrama de bloques.

Imagen 14. Estructuras de One Btm Dialog en el panel de control.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

dilluns, 6 de febrer del 2017

5. Funciones de comparación

Las funciones de comparación, como su nombre indica, sirven para comparar valores. Esto es especialmente relevante en sistemas de control que monitorean procesos en real time para la toma de decisiones mediante sistemas de retroalimentación de la señal en los que sea necesario tomar en cuenta diversas condiciones.

Imagen 1. Estructuras de funciones de comparación.

Veamos algunos ejemplos de la aplicación de estas estructuras y como se pueden combinar con algunas otras de las explicadas en módulos anteriores.

(1) Estructura Equal? para comprobar que el dato se ajusta al control o constante correspondiente (en el ejemplo de la imagen 2 se ha empleado una constante). El valor introducido debe ser un valor numérico.
Imagen 2. Estructura Equal? combinada con una estructura de funciones de matriz (Build Array) en el diagrama de bloques.

Imagen 3. Estructura Equal? combinada con una estructura de funciones de matriz (Build Array) en el panel de control.

El resultado de esta comparación puede ser codificado, junto a otros inputs, como la estructura de Push Button que se puede introducir a través del panel de control, si se emplea, como se ve en la imagen 4, una estructura Build Array.

Imagen 4. Estructura Equal? combinada con una estructura de funciones de matriz y otra booleana en el diagrama de bloques.

Imagen 5. Estructura Equal? combinada con una estructura de funciones de matriz y otra booleana en el panel de control

(2) Estructura Select es sin duda una de las estructuras de comparación más empleadas en los sistemas de control basados en programación lógica pues nos permite construir, junto a las funciones booleanas, auténticos árboles de decisión como los empleados en programación de automatismos y de control de cuadros eléctricos.



Imagen 6. Estructuras Select en el diagrama de bloques.

(3) La estructura Empty Array nos permite saber si una array o matriz está vacía y lo visualiza a través de un LED en el panel de control.


Imagen 7. Estructuras Empty Array en el diagrama de bloques.

Imagen 8. Estructuras Empty Array en el panel de control.

(4) La estructura Empty String / Path nos permite saber si una string o cadena está vacía y lo visualiza a través de un LED en el panel de control.

Imagen 9. Estructuras Empty String / Path en el diagrama de bloques.

 Imagen 10. Estructuras Empty String / Path en el panel de control.

(5) La estructura Comparison permite configurar las condiciones de comparación.

Imagen 11. Menú estructura Comparison en el diagrama de bloques.

Como has podido ver a lo largo del módulo, y en anteriores, a medida que conocemos más tipología de funciones, las posibilidades para combinarlas y sacar el máximo partido a labVIEW aumentan de forma notable.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

diumenge, 5 de febrer del 2017

4. Funciones de Clúster, Class y Variant

Las funciones de clúster, class y variant nos permiten agrupar información de un modo similar a como nos lo permiten las funciones de matriz.

Un clúster es similar a un registro o a una estructura como las empleadas en programación basada en texto. Los clusters agrupan elementos de datos de diferentes tipos. Construir varios elementos de datos en clusters elimina el desorden de cables en el diagrama de bloques y reduce el número de terminales del panel conector que los subVIs necesitan.

En la siguiente imagen se muestran algunas las estructuras de funciones de Clúster, Class y Variant del diagrama de bloques más habituales.
Imagen 1. Estructuras de funciones de Clúster, Class y Variant más habituales.

Usaremos las funciones de clúster para crear y manipular clústers, para lo que podremos:
  • Extraer elementos de datos individuales desde  un clúster.
  • Añadir datos individuales en un clúster.
  • Romper un clúster y separar los datos individuales.
Las estructuras de las funciones disponibles nos permiten filtrar la información y mediante el uso de estructuras de conversión de tipología de datos podremos, por ejemplo, crear representaciones gráficas con datos numéricos que estén contenidos en un cadena de datos proveniente de un dispositivo de captura.

Aquí puedes ver un ejemplo de Clúster.

Las estructuras Clúster se pueden implementar con las Funciones de Cadena y se emplean fundamentalmente para el procesado de datos.


Imagen 2. Diagrama de bloque de estructuras de Clúster, Class y Variant combinadas con estructuras de funciones de cadena.

Imagen 3. Panel de control de estructuras de Clúster, Class y Variant combinadas con estructuras de funciones de cadena.

Aquí puedes descargar el ejemplo de la imagen 3.

Otro ejemplo de estructura de funciones de clúster es Unbundle para la separación de un clúster en sus elementos individuales. Ver el siguiente ejemplo.
 Imagen 4.  Estructura Unbundle para la separación de un clúster en sus elementos individuales en el diagrama de bloques.

Imagen 4.  Estructura Clúster en el panel de control.

La estructura anterior se puede combinar directamente con prácticamente cualquiera de las incluidas en todas las funciones anteriormente explicadas y de este modo vamos obteniendo un diagrama de bloques cada vez más complejo; es la metódica que se recomienda para la programación con labVIEW.

Cabe destacar que cuando construimos el diagrama de bloques e introducimos ciertas funciones como en el caso que nos ocupa, los terminales de entrada y/o salida no están predefinidos para el tipo de dato, sino que es el programador el que lo condiciona mediante la introducción de elementos de control y/o indicadores.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

dissabte, 4 de febrer del 2017

3. Funciones de matriz

Las funciones de matriz nos permiten trabajar con datos en formato matricial para realizar operaciones características, como la resolución de sistemas de ecuaciones lineales.

En la siguiente imagen se muestran algunas las estructuras de funciones de matriz del diagrama de bloques más habituales.

Imagen 1. Estructuras de funciones de matriz más habituales.

Veamos algunos ejemplos de las estructura mostradas en la imagen 1 y para que podríamos utilizarlas.

(1) En primer lugar tenemos la estructura Array Size:

Imagen 2. Estructura de Array Size (view as icon) en el diagrama de bloques.

Imagen 3. Estructura de Array Size en el diagrama de bloques.

En el Panel de Control la estructura Array Size nos permite introducir los elementos que constituyen una matriz y nos indica el tamaño. Con el controlador de la izquierda podemos incrementar el número de posiciones disponibles para escritura; si seleccionamos el recuadro array y arrastramos hacia abajo podemos visualizar más posiciones disponibles, además de las ya editadas (las primeras aparecen en translúcido, ver imagen 4).

Imagen 4. Estructura de Array Size en el panel de control.

(2) La estructura Index Array nos permite seleccionar un elemento dentro de la matriz. Esto nos puede resultar interesante si disponemos de una fuente de datos matricial (muy habitual) y deseamos extraer alguno de los datos para ser visualizado o procesado como señal del diagrama de bloques del sistema de control de un proceso o procedimiento automatizado.

Imagen 5. Estructura de Index Array en el diagrama de bloques.

Imagen 6. Estructura de Index Array en el panel de control.

(3) La estructura Replace Subset posibilita el cambiar alguno de los elementos de la matriz por otros de nuestra elección, que bien podría ser un dato dinámico o un valor que introducimos manualmente mediante un controlador (ver imagen 7 y 8), así como una constante de corrección que hayamos determinado.
Imagen 7. Estructura Replace Subset en el diagrama de bloques.

Imagen 8. Estructura Replace Subset en el panel de control.

Aquí puedes descargar el archivo .vi con los ejemplos desarrollados hasta este punto del módulo. 

(4) La estructura Insert Into Array se utiliza para introducir un nuevo elemento en la matriz de origen; si hemos de construir una matriz a partir de datos de diversas matrices o bien a partir de datos de 1 D.

Imagen 9. Estructura Insert Into Array en el diagrama de bloques.

Imagen 10. Estructura Insert Into Array en el panel de control.

Aquí puedes descargar el archivo .vi con los ejemplos desarrollados hasta este punto del módulo; si deseas obtener el archivo que contiene menos estructuras o cualquier aclaración estaremos encantados de recibir tu comunicación.

(5) La estructura Delete from Array se utiliza para eliminar elementos contenidos en una matriz; si por ejemplo, un dispositivo capta diversas señales que almacena en forma matricial y deseamos utilizarla, a excepción de alguna medida concreta, únicamente deberemos conocer la posición de esa variable en la matriz y descartarla.

Imagen 11. Estructura Delete From Array en el diagrama de bloques.

Imagen 12. Estructura Delete From Array en el panel de control.

Aquí puedes descargar el archivo .vi con los ejemplos desarrollados hasta este punto del módulo

(6) La estructura Initialize Array nos permite, como su nombre indica, inicializar una matriz de n dimensiones con el elemento que introducimos en el controlador correspondiente.

(a)

(b)
 Imagen 13. (a) Estructura Initialize Array (view as icon) en el diagrama de bloques. (b) Estructura Initialize Array en el diagrama de bloques.

Imagen 14. Estructura Initialize Array en el panel de control.

(6) La estructura Sort 1D Array sirve para recuperar un elemento de la matriz original según la posición que le indiquemos, pasando a tener una matriz reducida.
 
Imagen 15. Estructura Sort 1D Array en el diagrama de bloques.

Imagen 16. Estructura Sort 1D Array en el panel de control.

Tal y como puedes ver en la imagen 16 las posiciones en labview se contabilizan desde la posición 0, por lo que deberás tenerlo muy presente en el momento de seleccionar el dato que se desea aislar, dado que habitualmente las posiciones se acostumbran a numerar comenzando en la posición 1.

Combinación de Initialized Array y Insert Into Array
 Imagen 17. Estructura Initialize Array + Insert Into Array en el diagrama de bloques.

 Imagen 18. Estructura Initialize Array + Insert Into Array en el panel de control.

Aquí puedes descargar la .vi de la imagen 17.

¿Cómo nos podrían ser de utilidad todas estas estructuras explicadas hasta el momento?

Piensa por ejemplo en un sistema de control formado por un conjunto de sensores que captan señales de diversos parámetros y/o variables de un proceso y los envían en forma de paquetes de datos matriciales que podríamos separar y reconducir a otras funciones, como las numéricas, para realizar cálculos cuyos resultados podríamos mostrar en pantalla o bien programar el sistema para que actúe conforme a la programación introducida.

Como habrás observado, tanto el diagrama de bloques como el panel de control, se ha ido construyendo gradualmente, implementando las distintas estructuras consecutivamente(*), esto además de facilitar la comprensión permite visualizar distintas funciones interactuando, dado que en un programa lo habitual es que se trabaje con todas estas estructuras de forma simultánea.

Gracias por dedicar tu tiempo a la lectura de esta entrada; si detectas cualquier error y deseas informarnos, estaremos encantados de recibir tu comunicación.

(*) Excepto en la estructura Initialize Array.