LABVIEW RESUMEN

25
UNIVERSIDAD TECNOLÓGICA FIDEL VELÁZQUEZ INSTRUMENTACIÓN VIRTUAL LEONARDO CUAUHTÉMOC CAMACHO CORONEL ING. EDEBALDO PEZA ORTIZ ESTRUCTURAS TIPOS DE DATOS

Transcript of LABVIEW RESUMEN

Page 1: LABVIEW RESUMEN

UNIVERSIDAD TECNOLÓGICA FIDEL VELÁZQUEZ

INSTRUMENTACIÓN VIRTUAL

LEONARDO CUAUHTÉMOC CAMACHO CORONEL

ING. EDEBALDO PEZA ORTIZ

ESTRUCTURAS TIPOS DE DATOS

11-JULIO-2012

Page 2: LABVIEW RESUMEN

ESTRUCTURAS

Las instrucciones de control permiten al programa ejecutar un código de forma condicional o repetirlo “n” veces y éstas son estructuras que encierran en su interior el código que afectarán. Encontrándose en el menú Programming>Structures.

Ahora veremos cada una de las estructuras.

SEQUENCE

En lenguajes tradicionales basados en texto, la forma de ejecución corresponde con el orden de las instrucciones escritas. LabVIEW sigue el modelo de flujo de datos (dataflow), un nodo necesita todos los datos disponibles en sus entradas para ejecutarse, pero si hay nodos en condición de ejecutarse no terminará, el orden de ejecución; en la mayoría de los casos no será problema y podría ser un beneficio.

Pero puede darse el caso en que haya nodos independientes, y ambos en situaciones de ejecución, se debe fijar el orden de los mismos.

Las estructuras tipo SEQUENCE sirven precisamente para ordenar el ordende ejecución del código.

Habiendo 2 tipos de SEQUENCE: STRACKED SEQUENCE y FLAT SEQUENCE.

La primera fue la única en versiones pasadas de LabVIEW, cuenta con un menú en la parte superior donde se indica la numeración del frame, el total de frames y la opción de situarse en otro. En la siguiente figura se muestran superpuestos los dos frames.

Page 3: LABVIEW RESUMEN

La opción Sequence Local crea tuneles entre un frame y los demás para comprtir datos en uno de ellos de escribe un valor y en los demás se podrá leer.

Puede haber una comunicación de datos desde una estructura SEQUENCE al exterior por túneles. Y cuando hay un dato de salida, un frame de la estructura puede anotar valores en

él.

El FLAT SEQUENCE funciona igual, pero es más visual, los frames se ven en orden consecutivo de izquierda a derecha. En este caso no hay Sequence Local y los datos podrán cablearse de un frame a otro a través de un túnel.

CASE

Ésta estructura equivale a los lenguajes en texto: IF, SWITCH y TRY; ejecutar un código u otro dependiendo de alguna condición.

También hay un menú en la parte superior. En el menú está la condición para ejecutar el código del subdiagrama correspondiente.

A continuación se muestra un CASE con dos subdiagramas, uno se ejecuta al ser evaluada la condición FALSE y otra sea TRUE.

La terminal del lado izquierdo marcado con <<?>> se llama selector. El valor que llega al selector es la condición que se evalúa para seleccionar el subdiagrama a ejecutar.

Si el tipo de dato conectado al selector CASE es booleano, actuará como una IF…THEN…ELSE y si se conectan otro tipo de datos actuarán como

Page 4: LABVIEW RESUMEN

un SWITCH…CASE. También pueden conectarse al selector datos booleanos, numéricos (enum y ring), string y clusters de error.

En el selector booleano solo habrá: verdadero o falso. En los numéricos la condición será el dato del selector sea igual al mostrado en el menú del CASE, para datos enum o ring podría escribir el nombre del ítem en lugar del valor numérico. Los strings es lo mismo que los numéricos enum o ring y el valor aparecerá texto ente comillas. En caso de un cluster de error; cambiará el color del borde de la estructura.

Si el selector se conecta a un string o dato numérico es obligatorio tener algún caso de ejecutar por defecto, debe haber un caso de ejecución debido a que el selector llegue a un valor no asignado a algún subdiagrama y debe seleccionarse Make This The Default Case del menú contextual.

En los números además se pueden asignar una lista de valores escribiéndolos separados por comas o se puede especificar un rango de valores, por ejemplo si se desean ejecutar el mismo código cuando la entrada tiene el valor 4,5,6,7 y 8, en el menú del CASE se escribirá “4..8”

Se pueden pasar los datos del CASE a través de tuneles. En el caso de datos de salida, todos los subdiagramas deben proporionar un valor, hasta que esto no ocurra LabVIEW indicara el error missing assignament to tunnel y aparecerá el túnel con el interior vacio, como se muestra en la parte derecha de la figura 2-7. También existe la opción de marcar sobre el túnel Use Default If Unwired, con esto se consigue que se asigne el valor por defecto para todos aquellos casos que no se han cableado un valor en el túnel de salida.

Page 5: LABVIEW RESUMEN

Por último también hay que decir que se puede cambiar el orden de los subdiagramas desde la opción Rearrange Cases…. Del menú contextual.

WHILE

El bucle WHILE repetirá el código de su interior hasta que se cumpla una condición, la cual es evaluada en cada iteración.

En la figura 2-8 puede verse el aspecto de este bucle, en el se aprecian dos terminales:

-De iteración es el cuadro azul con el símbolo <<i>>. El valor de este terminal es un número entero que irá aumentando en una unidad por cada iteración del bucle, empezando a contar desde cero.

-La condición de stop es el terminal verde de la esquina inferior derecha de la imagen. A este terminal se podrá conectar bien un valor booleano, o bien un cluster de error. Y por el menú podrá elegirse para los booleanos que el bucle se detenga cuando el valor sea True (Stop if False) o False (Continue if True), en el caso de los cluster de error sucede algo parecido con Stop on Error y Continue while Error.

Otra de las opciones que muestra el menú contextual es Add Shift Register. Esta herramienta añade dos terminales a cada lado de la estructura, estos terminales sirven para transferir un valor desde una iteración del bucle a la siguiente. Los valores se pasaran a la siguiente iteración en el terminal de la derecha y se leerán en el de la izquierda. Si se conecta un valor al terminal de la izquierda en el exterior de la estructura, este será el valor inicial que circulara por ese cable en la primera iteración.

En la figura 2-9 (a) se muestra el uso de un Shift register. En la primera iteración se leera el valor 10 del terminal de la izquierda, se le sumara 1 y se escribirá en el terminal de la derecha el valor 11. Este valor será leído de la siguiente iteración en el terminal de la izquierda, al que se le volverá a sumar 1 y asi sucesivamente hasta que se cumpla la condición de parada del bucle, que en este caso es que el numero sea mayor o igual a quince. Este proceso puede comprobarse ejecutando el código de la figura con la opción de Highlight Execution activada.

Page 6: LABVIEW RESUMEN

El shift register de la izquierda puede extenderse para mostrar mas terminales, el terminal superior tendrá el valor que se escribió en la

derecha en la iteración anterior, el siguiente terminal tendrá el valor que se escribió en la derecha dos iteraciones antes y así sucesivamente.

En el ejemplo anterior de la figura 2-9(b) se puede ver un ejemplo del uso de varios shift register. La tabla uno muestra los valores que tendrán cada uno de los terminales en cada iteracion.

Hay una utilidad que funciona de igual forma que un shift register, es el Feedback Node. Este consta de dos terminales.

El terminal inicializador permite dar un valor inicial al nodo, es equivalente conectar un valor al terminal izquierdo de shift register. Este terminal se coloca siempre en el borde izquierdo de la estructura a la misma altura que el Feedback Node.

El Feedback Node es el otro terminal, tiene forma de flechar. En el extremo derecho se le conectara la salida, cuyo valor será leído por el extremo izquierdo en la siguiente iteración. En la primera iteración el valor leído por el extremo izquierdo será el conectado al terminal inicializador. Lógicamente siempre se ejecuta primero la lectura y después la escritura.

El código de la figura 2-10 ilustra el uso del Feedback Node. El programa es igual al de la figura 2-9.

En el menú Tools>Options>Block Diagram se tiene la opción de insertar automáticamente Feedback Nodes dentro de los bucles cuando sea necesario.

Al igual que en otras estructuras, los datos que entren y salgan de una estructura WHILE lo harán a través de túneles. Una opción muy interesante de los túneles en los bucles en el Autoindexing, que se puede habilitar a través del menú contextual del túnel cuando se quiera trabajar con arrays. Cuando se cablea un array desde el exterior al interior de un bucle y se habilita el autoindexing, los valores leidos en ese terminal en el interior del bucle serán los elementos que componen el array, uno por cada iteración.

Page 7: LABVIEW RESUMEN

Cuando el autoindexing está en una salida del bucle ocurre lo contrario: se constituirá un array cuyos elementos serán los generados en cada iteración.

En la figura 2-11 puede verse un programa parecido al anterior. En el borde derecho pueden verse tres terminales, el superior es un túnel, el siguiente un shift register y el inferior una salida indexada. El valor de los dos primeros será el generado por el programa en su última iteración (15), mientras que el valor en el último terminal será una lista ordenada de todos los números generados en cada iteración (11, 12, 13,14 y

15).

FOR

El bucle FOR es parecido al WHILE, también repita el código de su interior un número de veces,

pero a diferencia del anterior este número es fijado a priori y no puede cambiarse una vez empieza a ejecutarse.

Consta de dos terminales numéricos:

-el terminal de iteración se sitúa igual que en el bucle WHILE, está en el interior de la estructura y se va incrementando en una unidad por cada iteración empezando desde

cero.

-el terminal de cuenta esta colocado en la esquina superior izquierda de la estructura simbolizando con una <<N>>. En el se conectara un valor numérico que será el que fije el número de

repeticiones del bucle.

Todo lo dicho en la explicación del bucle WHILE respecto a los shift register, los Feedback Nodes y la salida indexada también es válido para el FOR. Tanto en el menú contextual del WHILE como del FOR se tiene la opción de sustituir uno por el otro.

Los tuneles indexados son la opción por defecto en los bucles FOR. Cuando se cablea un array de forma indexada como entrada puede obviarse el

Page 8: LABVIEW RESUMEN

terminal de cuenta porque se toma el tamaño del array como el número de veces que se ha repetido el bucle.

EVENTFue introducida por primera vez en la versión 6.1 de LabVIEW. Es una estructura muy útil es VIs con los que interactúan el usuario porque mejora la eficiencia del programa.Al igual que la estructura CASE tiene varios sub-diagramas y un menú en la parte superior para cambiar el que se muestra. En este menú también se tiene una condición

que hace que el código del sub-programa correspondiente se ejecute. La diferencia con CASE es que EVENT detiene la ejecución del hilo del programa hasta que se da esa condición, es decir, congela el programa hasta que ocurra un evento.Para añadir más sub-diagramas hay que proceder de igual manera que CASE , es decir, a través del menú contextual. Cada diagrama debe tener asociados uno o varios eventos, estos se configuran desde la ventana Edit Events.En esta ventana primero se muestra el número de diagrama y a continuación la lista de los eventos que pueden dar lugar a la ejecución del diagrama, para añadir o eliminar eventos que usan los botones de la

izquierda.En la parte izquierda de cada sub-programa de la estructura EVENT se sitúa Event Data Node que aporta información sobre la fuente del evento, por ejemplo, una referencia al control, su valor actual y el anterior al evento

Finalmente hay que nombrar algunas recomendaciones que hace National Instruments sobre el uso de la estructura EVENT:

No usar un EVENT dentro de otro.

Page 9: LABVIEW RESUMEN

Si un EVENT se inserta dentro de un WHILE y este acaba mediante un botón, se debe insertar el botón dentro del sub-programa asociado al cambio del valor de dicho botón.

Los cambios de valor en controles de forma programada no generan eventos, solo se generan cuando se realiza el cambio de valor mediante la interfaz de usuario.

TIMED LOOP y TIMED SEQUENCE

TIMED LOOP es una escritura que apareció en la versión 7.1. Su funcionamiento consiste en repetir el código de su interior con unas determinadas especificaciones de tiempo hasta que se cumpla cierta condición, por todo ello es muy usado en aplicaciones de tiempo real.

Su dibujo recuerda a un WHILE circundado por un halo azul, aunque a diferencia de este, nones necesarios establecer una condición de parada o comunicación. También presenta varios nodos, estos son (de izquierda a derecha).

Imput: permite configurar el funcionamiento del bucle por medio de un asistente o cableando los datos. Este nodo puede extenderse por cablear más datos mostrados.

Left Data: proporciona información sobre la iteración anterior, por ejemplo el tiempo que ha tardado, si le ha dado tiempo a acabar las tareas antes de que empiece una nueva ejecución y otras.

Right Data: se trata de una configuración dinámica, permite modificar los parámetros de configuración de la estructura para la siguiente iteración. Los parámetro son prácticamente los mismos que en el Imput Node, excepto el nombre del bucle y el orden del reloj.

Output: al igual que el Left Data Node el Output Node proporciona información, pero en este caso la información, pero en este caso la información se genera después que el bucle se haya detenido.

Page 10: LABVIEW RESUMEN

Tuming Source es la fuente de reloj, cuando el programa se ejecuta sobre un PC la fuente será un reloj de 1 kHz del sistema operativo; si la ejecución se realiza en otros dispositivos puede haber otras fuentes disponibles. Para seleccionar la fuente desde el programa puede usarse el VI Create Timing Source, en la paleta Programming>Structures.

>Timed Structures. Los otros VIs de esta paleta permiten abortar programadamente un TIMED LOOP, sincronizarlos o controlar el comienzo de cada uno.

El periodo será el tiempo que pase entre el comienzo de dos iteraciones y el offset el tiempo que el bucle espera antes de empezar la primera ejecución.

Los modelos de Action on Late Iterations configuran la forma en que el bucle responde cuando la ejecución lleva más tiempo del especificado, las opciones son auto

Page 11: LABVIEW RESUMEN

explicativas, básicamente sirven para alinear el comienzo de las ejecuciones y saltar a iteraciones.

Para ejecutarse, cada TIMED LOOP crea su propio sistema de ejecución que contiene un único hilo. La prioridad se refiere a la preferencia de ejecución entre el bucle y los demás. Los valore más altos corresponderán a TIMED LOOPS con mayor prioridad. Cuando dos o más bucles vayan a empezar su ejecución en un instante determinado, la prioridad de cada bucle determinara el orden, en caso de que haya varios con el mismo nivel de prioridad, el orden será por el de menor tiempo invertido e la ejecución.

En este caso el Right Data Node de un frame cambiara los parámetros del siguiente sub-diagrama a ejecutarse en un lugar de la siguiente iteración y el Left Data Node

proporcionara información sobre el sub-diagrama anterior.

El Left Node del primer sub-diagrama y el Right Node del último proporcionan mas parámetros que

el resto debido a que puede afectar al siguiente/ anterior sub-diagrama o a toda la estructura.

DISABLE STRUCTURE

Estas estructuras también han aparecido recientemente, se usaron por primera vez en la versión 8.0.Sirven para comentar el código, por lo que son muy útiles en la

Page 12: LABVIEW RESUMEN

depuración de programas. Hay dos tipos de estructuras de deshabilitación: la incondicional y la condicional.

L a incondicional es una estructura que como CASE, ATACKED SEQUENCE o EVENT se compone de varios sub-diagramas. Uno de ellos estará habilitado será el único que se ejecute y el resto no llegaran a compilarse. Para cambiar el sub-diagrama habilitado hay que hacer uso del menú contextual de la estructura.

La condicional funciona de la misma forma que la anterior, solo que el diagrama habilitado se selecciona de forma automática dependiendo del valor de unos símbolos asociados al proyecto. Algunos símbolos predefinidos son OS y CPU.

También se pueden definir nuevos símbolos en la ventana de propiedades del proyecto correspondiente.

Una vez creados los símbolos pertinentes hay que editar la condición de la estructura con Edit Condition For This Subdiagram del menú contextual. Se puede añadir más de una condición con el botón <<+>>

Page 13: LABVIEW RESUMEN

FORMULA NODE

La estructura FORMULA NODE puede encontrarse tanto en el menú Programming>Structures como en Mathematics> Scripts &Formulas.

A diferencia de las anteriores, FORMULA NODE no controla el flujo de ejecución, sino que evalúa una expresión matemática escrita como texto con una sintaxis parecida al lenguaje C.

El texto consistirá en una serie de sentencias finalizadas por el símbolo <<;>>. Las sentencias normalmente son asignaciones que usan operadores o funciones, aunque también pueden ser declaraciones de variables, bucles o sentencias de condición. También pueden insertarse comentarios de la misma manera que en C.

Estas son:

Page 14: LABVIEW RESUMEN

Otras palabras reservadas son: break, case, continúe, default, pi. Para mas información puede consultarse la ayuda. Presionando el botón secundario en los bordes de la estructura puede crearse variables de entrada y salida.

SCRIPTS

Al igual que el nodo FORMULA NODE hay otras estructuras que también aceptan textos, de esta forma se puede combinar la programación propia de LabVIEW con la más tradicional programación textual.

En Tools> MathScript Window puede abrirse una ventana, para ayudar a depurar el código. En el campo Command Window pueden escribírselos comandos, también puede ejecutarse un script completo desde la pestaña Script y los resultaos pueden verse en la pestaña Variables.

Page 15: LABVIEW RESUMEN

La sintaxis para usar en la estructura MATHSCRIPT NODE es en gran medida compatible con la de MATLAB dispone de cientos de funciones que pueden ocultarse en la ayuda.

Por otra parte MATLAB SCRIPT NODE y XMATH SCRIPT NODE se encuentra únicamente en el menú Mathematics>Scripts & Formulas> Script Nodes. Ambos llaman a programas externos. En el caso de MATLAB, el nodo llama al servicio.

Page 16: LABVIEW RESUMEN

CAPITULO III

Tipos de datos

3.1 Tipos de terminales

Es el panel frontal se puede colocar controles e indicadores. Como se ha dicho e capítulos anteriores, los controles son el punto de entrada de información al VI y los indicadores de salida. Los controles e indicadores tendrán su representación en el diagrama de Bloques, donde podrán ser cableados para leer o escribir su valor.

E los controles de tipo booleano se tiene la opción de Mechanical Action que les permite actuar como pulsadores (latch) o interruptores (switch).

Page 17: LABVIEW RESUMEN

Los numéricos pueden acotar el rango de entrada con Data Range y modificar varias opciones de visualización con Format and Precisión.

En os controles e indicadores de tipo string se puede ver el contenido de forma normal, representando por unos códigos, como asteriscos o por su valor hexadecimal.

Junto a un terminal pueden aparecer varios ítems

Label: es un texto que da un nombre al terminal en el panel frontal, esta etiqueta será usada para identificar al elemento en variables, propiedades etc.

Caption: es otro texto asociado al terminal que solo puede aparecer en el panel frontal

Incremento/decremento: en los terminales numéricos también se dispone de este elemento para aumentar o disminuir el valor del dato.

Radix: indica el formato de visualización en los terminales numéricos enteros en decimal (d), octal (o), hexadecimal (x) y binario (b).

Valor: es el valor que hay en el determinal representado en el formato elegido. Unidades: el tipo de datos numérico también puede tener un símbolo que

represente sus unidades.

Page 18: LABVIEW RESUMEN

En el diagrama de bloques se representan los indicadores con una flecha en el lado izquierdo que apunta hacia la terminal simbolizando una entrada, y los controles con una flecha a la derecha apuntando hacia afuera.

La visualización con forma de icono permite ver la forma terminal, lo que puede ayudar a identificarlo; por otra parte la vista clásica ocupa menos espacio y será utilizada en el resto del libro.

3.2 Tipos de datos

Una de las primeras cosas que se aprende en cualquier lenguaje de programación son los tipos de datos disponibles. No debe confundirse el tipo de datos con tipo de terminal.

El tipo de datos se representa en el diagrama de bloques por el color del terminal y del cable, a si un dato booleano tendrá terminales y cables verdes para diferenciarlo de un string que será rosa.

A continuación se estudiaran los distintos tipos de datos con sus características mas destacables, transformaciones de unos a otros y la forma en los distintos tipos de datos de LabVIEW se almacenan en memoria.

Llamar a código externo Trabajar con ficheros binarios Otras funciones I/0.

3.2.1 Boolean

Page 19: LABVIEW RESUMEN

Los datos de este tipo solo pueden tener los posibles valores: verdadero (True) o falso (False). Debido a esto suelen usarse en controles con forma de botón o pulsador.

Cada dato booleano se almacena en memoria en un byte completo, si este byte tiene todos sus bits a cero, el dato tendrá el valor False y cualquier otro valor del byte hará que el dato pase a True

En los controles booleanos se puede seleccionar su Mecanical Action, como mostraba la figura 3-2. Ya se dijo que los switch son equivalentes a interruptores y los latch a pulsadores.

3.2.2 Numeric

Al trabajar con datos numéricos hay que distinguir entre números enteros, números racionales y complejos.

Los números enteros tienen asociado el color azul y puede elegirse su tamaño (8, 16, 32, o, 64 bits) si se emplea un bit de signo y su representación (binario, octal, decimal, hexadecimal).

Los controles de tipo enum y Ring también son numéricos. Se tratan de listas que asocian una cadena de caracteres a un valor numérico. Mediante su menú contextual se puede acceder a Edit Item para definir la lista de valores.

3.2.3 Strings

Page 20: LABVIEW RESUMEN

Los strings son cadenas de caracteres LabVIEW asocia el colocar rosa a este tipo de datos.

3.2.3.1 Transformaciones numero-texto

Las transformaciones de números a texto y viceversa son muy usadas en LabVIEW. Muchos VIs trabajan con datos de tipo texto como por ejemplo GPIB, sin embargo pueden ser que los datos que se envían o reciben sean números y necesiten convertirse para realizar algún cálculo con ellos.

3.2.4 Path

Los path sirven para indicar rutas relativas o absolutas o directorios o ficheros tanto de maquina local como de otra red.

Al guardarse en memoria se almacenan un puntero a una estructura que se forma del número de partes que contiene la ruta.

3.2.5 Arrays

Page 21: LABVIEW RESUMEN

Los arrays o arreglos son un conjunto de datos ordenados y de un tipo determinado; de esta forma no puede hablarse simplemente de array sino de array de booleanos array de strings.

3.2.6 Clusters

Al igual que los arrays , los clusters son un tipo de datos estructurados, también son un conjunto de datos, pero a diferencia de los anteriores, los clusters pueden contener datos de varios tipos en su interior, incluidos otros clusters. El concepto es equivalente a los STRUCT en C a los RECORD en pascal.

RESUMEN

Todas las herramientas con que cuenta LabVIEW así como loas frame comunicaciones son complejas, pero a la vez deben de ser lo mejor posible de usarlas para que uno tenga y pueda hacer cambios como los de control permiten al programar o ejecutar un código de forma repetitiva por ciertas variables e incluso en los frame se pueden omitir y podría darse una ventaja en vez de una desventaja, esto como otras grandes maravillas del ejecutar un programa actual en comparación con las versiones que contenía anteriormente LabVIEW ayudan a reducir tiempos en vez de hacerlas manualmente.

La manipulación y los ejemplos de datos disponibles en cada variable y el cómo se realizan son maravillosos.