Вы находитесь на странице: 1из 26
CAPITULO TIPOS DE DATOS ESTRUCTURADOS 5.1 INTRODUCCION ALOS ARRAYS 5.2 FUNCIONES CON ARRAYS | 5.3. CLUSTERS | 5.4 CONTROLES E INDICADORES STRING | 5.5 FICHEROS DE ENTRADA/SALIDA 5.6 EJERCICIOS PRACTICOS 90 LabVIEW 7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION 5.1 INTRODUCCION A LOS ARRAYS Un array es una coleccién de datos, todos ellos del mismo tipo. Puede tener una o mas dimensiones y hasta 2°' elementos por dimension, segtin la memoria disponible. Un array puede ser de cualquier tipo excepto otro array, chart o graph (véase capitulo 5). Se accede a cada elemento de un array mediante un indice, el cual es cero-base, es decir, va de 0 a N — 1, donde Nes el numero de elementos. La creaci6n de arrays de control o indicadores en el panel frontal se hace mediante la combinacion del icono Array de la paleta Array & Cluster del mend Controls, con un objeto de datos que puede ser numérico, booleano o string $a Al Controls En la imagen que sigue se presenta un array vacio. Para crear un array hemos de llevar un objeto dentro de la Ventana de Objetos o situarlo directamente usando el ment Pop-up. Array bea FY me acct Un array de n-dimensiones necesita de n indices (cero-base) para localizar un elemento. En la tabla siguiente hay un array de N columnas por M filas, conteniendo N veces M elementos. 0123... N =° @ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS «= 91 Se pueden afiadir dimensiones a un array control o indicador de dos maneras: desplegando el menu del Index Display (Visualizador def indice) y, a continuacién, escogiendo la opcién Add Dimension (Afadir dimensién); 0 situando el cursor sobre el Index Display y arrastrando hacia abajo tantas dimensiones como queramos. Auay Podemos indexar @ introducir elementos dentro de los arrays en los bordes de las estructuras For Loop y White Loop de manera automatica. Esto es lo que se llama auto-indexing (aufoindexado). La imagen inferior presenta un ejemplo de ello: cada iteracion crea el siguiente elemento del array; una vez que se ha completado, el array pasa al indicador. Obsérvese que el cable se hace mas grueso al cambiar a array. Array indicador de 1 dimension El cable se hace mas grueso 0123465 Para anular el auto-indexing hemos de desplegar el menu sobre el tunel de salida y escoger la opcién Disable Indexing (Deshabilitar indexado). Al desactivarlo, sélo el Ultimo valor pasara a través de tunel. © ITES-Paraninfo. 92 LabVIEW7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION ‘Solo un valor (o1 de fa tltimaiteraci6n) sale fuera del For Loop Si queremos introducir elementos en un array de dos dimensiones podriamos usar un For Loop dentro de otro For Loop. El interior crea los. elementos de columna, mientras que e! exterior crea los elementos de fila ‘Array indicador de 2 dimensiones Si se habilita el auto-indexing sobre el tunel de entrada de un For Loop, LabVIEW toma el tamafio del array como el numero de |teraciones; por tanto, no es necesario conectar ningun valor en N. Si lo hubiese, o diversos arrays tuvieran auto-indexing de entrada, se tomaria como nlimero de iteraciones el de menor tamafio. Las funciones aritméticas (sumar, restar, multiplicar, dividir, etc.) son polimérficas, es decir, sus entradas pueden ser de diferentes tipos; por ejemplo, podemos sumar un escalar con un array 0 dos arrays juntos. i oa >—onm 8 i Array Atray ©ITES-Paraninto TIPOS DE DATOS ESTRUCTURADOS © 93 5.2 FUNCIONES CON ARRAYS LabVIEW tiene en la paleta Array del menu All Functions de Functions un gran numero de funciones para manipular arrays. Aigunas de las mas comunes: se describen a continuacion: * Array Size (tamafio del array): da el numero de elementos del array. array —_it—_ size(s) * Build Array (construir array): concatena arrays 0 afiade elementos extras a.unarray. La funcion aparece como ==I=] cuando se pone en el diagrama de bloques. Podemos redimensionarla para incrementar el numero de entradas. array element ~ las; | — appended array element 248 element — « Array Subset (subarray de un array): devuelve una parte de un array a partir de un indice y longitud determinados. eh — i sberay lenath (rest) qi index (0) _;—* length (rest) * Index Array (indexar array): accede a un elemento de un array. dimension array —B-| index 0 oe index n-1 #44! element or subarray * Insert Into Array (insertar dentro de un array): inserta un elemento o un subarray en el array de entrada, en el punto que especifiquemos en el index, ©ITES-Paraninto 94 — LabVIEW7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION asd array —pa—_ ‘output array SS | index n-1 aR Js norn-1 dim array * Replace Array Subset (reemplazar una parte de un array): reemplaza un elemento o array en el array de entrada, en el punto especificado por index. erin 05 stot aay fase — lig new element/subarray — J * Delete From Array (borrar del array): borra un elemento o subarray del array especificado en n-dimension array y devuelve el nuevo array en array wisubset delete. El elemento o subarray eliminado es devuelto en deleted portion n-dim array Bi array wi subset deleted length (1) index 0 (last elem) deleted portion index r-1 5.3. CLUSTERS Un cluster en LabVIEW es una coleccién ordenada de uno o mas elementos, similar a las estructuras Record del Pascal u otros lenguajes. A diferencia de los arrays, los clusters pueden contener cualquier combinacién de tipos de datos. Se accede a sus elementos unbundling (literalmente, «desenvolviéndolos») todos a la vez, en lugar de indexarios uno a uno. Otra diferencia con los arrays es que los clusters tienen un tamafio fijo. Al igual que en el caso de los arrays, los clusters no pueden contener combinacion de indicadores y controles. Creamos un cluster de indicadores o controles poniendo cualquier combinacién de booleanos, strings, charts, graphs, escalares. arrays o, incluso, otros clusters dentro de un cluster shell, al cual se accede a través del menti Controls del panel frontal. Un cluster shell nuevo tiene un borde redimensional yuna etiqueta opcional. ©ITES-Paraninfo TIPOSDE DATOS ESTRUCTURADOS © 95 Cuando hacemos Pop-up dentro del area vacia del cluster shell aparece el menti Controls. Podemos situar cualquier elemento de este menu o bien arrastrarlo desde cualquier punto del panel frontal. El cluster pasa a ser indicador o control dependiendo del primer elemento que situemos en su interior. Posteriormente podemos utilizar las opciones Change to Control (Cambiar a Control) o Change to Indicator (Cambiar a Indicador) para cambiar todos los elementos a la opcion deseada. A continuacién se presentan las funciones mas comunes para los clustet « Unbundle (separar): descompone un cluster en sus elementos individuales. — Sie cluster ' — belement 1 ~ LE Sement tel, Bundle (unir): une todas las entradas individuales en un Unico cluster 0 cambia los valores de los componentes conectados. chster Sja- stat element 0 + element 1 eberienit rel Unbundle by Name (separar por nombre): devuelve los elementos del cluster cuyos nombres especificamos. Seleccionamos los elementos a los que queremos acceder haciendo Pop-up sobre el nombre de los terminales de salida y seleccionando un nombre de la lista de elementos dentro de! cluster. cluster of named fy Tone g_ | element 0 element m-1 Bundle by Name (unir por nombre): reemplaza componentes en un cluster ya existente. Siempre hemos de conectar las entradas del cluster. Si estamos creando un cluster como indicador podemos conectar una variable local de ese indicador. Si el cluster va a funcionar como control en un subVI, podemos hacer una copia de ese control sobre el panel frontal del VI y conectar los controles a la entrada al cluster. © ITES Paraninfo 96 — LabVIEW7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION 5.4 CONTROLES E INDICADORES STRING En este apartado se describe cémo usar los controles e indicadores de string (cadenas de caracteres). Se puede acceder a estos objetos a través de la paleta Text Inds y Text Ctrls del ment Controls. $a Test indcatoes ae Table File Path ind Un string es una coleccién de caracteres ASCII, No sdlo se usa como mensaje de texto. En el control de instrumentos pasamos los datos numéricos como cadenas de caracteres 0 strings, a continuacion convertimos esas cadenas en numeros, asi mismo se necesitan strings para almacenar datos numéricos en disco. Control Indicator ‘Se puede introducir o cambiar texto en un control string con las herramientas Operating 0 Labeling. El texto nuevo o cambiado no pasa al diagrama hasta que se pulsa Enter del teclado numérico, se hace clic en cualquier otra parte del panel 0 se pulsa el icono Enter de la barra de herramientas. Pulsando la tecla Enter del teclado alfanumérico se consigue un salto de linea en el string. Para hacer entrar una tabulacion en el string se ha de seleccionar la opcion \Codes del menu Pop-up del string y escribir \t. En la tabla 5.1 se listan todos los cédigos de los caracteres no imprimibles que podemos usar con los strings. @ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS 97 Cédigos Interpretacion en LabVIEW 00 -\FF Valor hexadecimal de un caracter de 8 bits. Debe ir en mayusculas \b Backspace (ASCII BS, equivalente a \08) ¥ Formfeed (ASCII FF, equivalente a \0C) \n New line (ASCII LF, equivalente a \0A) v Return (ASCII CR, equivalente a \0D) \t Tab (ASCII HR, equivalente a \09) \s Space (equivalente a \20) \ Backslash (ASCII \, equivalente a \5C) Tabla 5.1 _Listado de cédigos de los caracteres no imprimibles que podemos usar con los strings. Si necesitamos disminuir el espacio que ocupa un string en el panel frontal, podemos usar la opcién Scrollbar (Mostrar barra de desplazamiento) de su ments Pop-up. LabVIEW presenta un gran nimero de funciones para manipular strings. Estas funciones estan disponibles desde la paleta String del mend Functions (figura 5.1). Acontinuacién se describen algunas de las funciones mas comunes: © String Length (/ongitud de la cadena): devuelve el numero de caracteres (bytes) en la cadena, que puede ser un escalar, un array n-dimensional | © un cluster. string ~~~] — length “= a Figura 5.1 Funciones de manipulacin de strings, * Concatenate Strings (unir cadenas): concatena todos los strings de entrada en un Unico string de salida. String 0 y string 1 son los terminales de entrada por defecto. Se pueden afiadir tantos como sean necesarios. © (TES Paraninfo 98 LabVIEW 7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION string 0 eel string 1 lweoeeee concatenated string ae string n-1 * String Subset (subcadena de un string): devuelve un substring del string original comenzando en el valor del offset y con la longitud determinada por length. stri Ep length (rest) * To Fractional (paso a fraccional): se encuentra en String/Number Conversion. Convierte un numero en un string de punto flotante con notacién fraccional. El tamafio viene determinado por los parametros width, «ancho» y precision number y F-format string + From Exponential/FractiEng (convierte desde los formatos exponencial/ fraccional/ingenieria): en String/Number Conversion, Interpreta los caracteres 0 2 9, signo mas, signo menos, e, E y punto decimal dentro de una cadena y a partir del offset como un numero en formato coma flotante en notacién de ingenieria, o formato exponencial o fraccional, y devuelve ese numero. string 5.5 FICHEROS DE ENTRADA/SALIDA Las operaciones de entrada/salida con ficheros nos permiten almacenar y recuperar informacion en y desde un disco. LabVIEW presenta una gran variedad de funciones para tratar diferentes tipos de operaciones con ficheros. Estas funciones se encuentran en la paleta File I/O (Entrada/Salida de ficheros) del menu Functions>>All Functions. © ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS © 99 ALMACENAMIENTO DE DATOS EN UN ARCHIVO NUEVO Para guardar datos en un archivo de disco nuevo se han de seguir tres pasos: crear el archivo nuevo, escribir los datos en el archivo y cerrar el archivo. ‘También podemos abrir uno ya existente y afiadir la nueva informacion al final de ese fichero 0 sobrescribir su contenido. Con LabVIEW podemos escribir cualquier tipo de datos en el archivo que hemos abierto. Si otros usuarios o aplicaciones necesitan acceder a él, se deben escribir strings de datos, lo cual crea un fichero ASCII. Si la prioridad esta en fa rapidez de acceso y en lo compacto, se debe escribir la informacion con formato binario. Se crea un archivo con formato binario cuando se escriben datos nostring (como un array de enteros) en el archivo. Hay dos maneras de crear un archivo: mediante la programacion o a través de un Dialog Box (Ventana de Diélogo). En el primer método, proporcionamos el nombre del archivo y del pathname (localizacién del archivo) dentro del VI. El pathname consta del nombre de la unidad (por ejemplo C 0 A), seguido por los dos puntos, tantas barras inclinadas (\) como subdirectorios haya que separar, y a continuacion el nombre del archivo. Un ejemplo seria C:\LVSE\TEST1.DAT, donde el nombre del archivo es TEST1 DAT y se encuentra en el directorio LVSE. En el método del Dialog Box, el VI visualiza una ventana que podemos usar para buscar un directorio y escribir el nombre del archivo. En la figura 5.2 se muestran los pasos para grabar una cadena en un fichero. [ECALVSE\TESTIDAT] ~~ [vd ES gel Open/Cieate/Replace File Write Files (string) Close File+ Figura 5.2 Grabacién de una cadena en un fichero. En el ejemplo anterior, la funcién Open/Create/Replace File (Abrir/Crear /Reemptazar fichero) crea el archivo C:\LVSE\TEST1.DAT si no existe. Si ya esta creado pide confirmacién para reemplazario con los nuevos datos. Si en lugar del «2» hubiésemos introducido «1», crearia siempre un archivo nuevo, eliminando, sin pedir confirmacién, los posibles datos existentes en un fichero con el mismo nombre. Si ponemos «O», lo Unico que hace es abrir el fichero si existe. Si no esta creado, no lo crea y no graba los datos. Dicha funcién devuelve un numero, refnum (numero de referencia). Este parametro es un identificador de archivo generado cuando se crea un fichero 0 se abre uno ya existente; identifica el archivo en las operaciones subsiguientes. Se puede observar que refnum se © ITES-Paraninfo 100 LabVIEW 7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION pasa secuencialmente desde una funcidn File I/O a la siguiente. Como ninguna funcion se puede ejecutar hasta que éstas hayan recibido todas sus entradas, el paso del valor refnum fuerza a las funciones de fichero a ejecutarse en el orden adecuado. Esta funcidi crea el fichero que Path Constant (Constante de camino de acceso) especifica, y asigna un parametro refnum. Por consiguiente, la funcién Write File (Escribir en fichero) escribe los datos en el archivo después de recibir el refnum desde la funcién anterior. Aunque el dato en el ejemplo anterior es un string, podemos introducir cualquier tipo de datos a la funcidn. Si no fuese un string, la funcién Write File escribiria la forma binaria de los datos al disco. Finalmente, la funcion Close File (Cerrar fichero) cierra el fichero después de recibir el refnum. ALMACENAMIENTO DE DATOS EN UN ARCHIVO YA EXISTENTE Para guardar informacion en un archivo que ya existe usamos la funcion Open File (Abrir fichero) en lugar de la New File. Open File abre un fichero existente. Si el fichero no existe se devuelve el error File Not Found (Fichero no encontrado). También podemos afiadir datos al final de un fichero existente o sobrescribir la informacion del archivo original. La funcion EOF determina la posicién End-of- File (Final de fichero). Este marcador especifica dénde escribe los datos la funcion Write File. Si se deja sin conexion EOF, Write File afiadira los datos al final del archivo. Si introducimos por EOF el valor 0, los datos actuales sobrescribiran e! fichero existente (EOF se sitda al principio del fichero). El siguiente ejemplo muestra los pasos para grabar nuestros datos sobrescribiendo los existentes en un fichero ya creado: (sCALVSE\TEST1.DAT] ES ey oe Open/Create/Replece File Wiite Filet (sting) Close Files En el ejemplo anterior, el VI abre el fichero existente CALVSE\TEST1.DAT y asigna al fichero un parametro refnum. El 0 intraducido por el terminal pos offset (posicién de! desplazamiento) de la funcién Write File afiade los datos al comienzo del archivo. La funcién Close File cierra el fichero una vez que Write File finaliza. Recordar que el hecho de pasar el refnum fuerza el funcionamiento secuencial @ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS 101 RECUPERACION DE DATOS DESDE UN ARCHIVO. Cuando se lee desde un fichero, normalmente abrimos un fichero ya existente, leemos el contenido en forma de strings 0 cualquier otro tipo de datos y cerramos el fichero. Los datos se deben leer con el mismo formato con el que se almacenaron; es decir, si originariamente se guardaron en formato ASCII usando tipos de datos de strings, deberemos leerios como datos de string. El siguiente diagrama muestra los pasos para leer todo el contenido de un archivo: La funcion Open File abre el fichero C:\LVSE\TEST1.DAT. También devuelve el numero refnum. La funcion Read File (Leer fichero) devuelve todo el archivo. La funcion Close File cierra el fichero. VISUALIZACION DEL DIALOG BOX En los ejemplos anteriores especificabamos el nombre del fichero dentro de! diagrama de bloques. La funcién File Dialog presenta una ventana que podemos usar para buscar un directorio y escribir el nombre deseado para el archivo. El siguiente ejemplo muestra los pasos para conseguirlo. Select Mode 1 visualiza dentro de la ventana todos los directorios y ficheros, apareciendo los nombres de los ficheros en gris. COpen/Cieate/Mepace File Wite Fier (sting) (ose Flew ALMACENAMIENTO DE RESULTADOS (SPREADSHEETS) Enun spreadsheet tabla de resultados, los tabuladores separan columnas, mientras que los saltos de linea separan filas. Usamos la funcién Concatenate Strings para insertar un tabulador entre cada elemento y un salto de linea después de! Ultimo elemento. ©ITES-Paraninfo 102 —LabVIEW7.1_ PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION El siguiente fragmento de bloque de diagrama crea el fichero de texto que se indica debajo. La funcién Format & Append primero convierte el nimero de iteraciones y el numero aleatorio en strings. La funcion Concatenate Strings a continuacién inserta un tabulador y un salto de linea, mientras que el VI escribe el string formado en el fichero. 0.00 1.00 0, 3073 2.00 0, 9453, 3.00 0, 9640 a 4,00 0, 9517 Si abrimos el fichero mediante una hoja de calculo veremos: B c 0. 4258, 0. 3073 0. 9453 0. 964 0. 9517 LabVIEW también proporciona Vis para simplificar las operaciones de escritura/liectura con spreadsheets. Las funciones Write To Spreadsheet File y Read From Spreadsheet File son dos métodos basicos para escribir y leer desde ficheros con formato spreadsheet. 5.6 EJERCICIOS PRACTICOS 1. Realizar la union de dos arrays numéricos, uno de 3 elementos (llamado A1) y otro de 4 (A2). Al array resultante lo llamaremos A3. De éste, ex- @ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS 103 | traer otro array que contenga 4 elementos a partir del tercero (llamado AA). Hacer la suma de A2 y A4, llamando al resultado AS. Extraer el valor situado en la mitad de A3 (llamado V3) y multiplicario por el valor medio de los elementos del array AS (lamarlo VM5). El resultado de la | multiplicacién seré MS. Grabarlo como C:\Mis Documentos\Arrays.vi. La solucion es: * Abrimos un panel nuevo con Ctrl+N: Antoys inicioles Valor ie aaa deA3 Valor medio de AS Nanipn eet de va" VMS MS, bo] = * Para crear A1 desplegar el menu Controls>> All Controls y tomar la opcién Array & Cluster, cogiendo el elemento Array. Introducir el nombre del array (en este caso A1). Pondremos el cursor sobre el rea vacia del array y de la opcion Numeric de Controls tomaremos Num Ctrl. * Una vez hecho esto situaremos la herramienta [| sobre una de las esquinas superior o inferior derecha del array y desplazaremos hacia la derecha hasta tener 3 elementos (en la esquina aparece una rejilla). Para crear A2 seguir los mismos pasos que para A1, con las modificaciones necesarias. * ElarrayA3 ha de tener 7 elementos (3 deA1 mas 4 deA2). Seguiremos los pasos de A1 con las modificaciones necesarias. Tener en cuenta © ITES-Paraninfo 104 —LabVIEW7.1 PROGRAMACION GRAFICA PARAEL CONTROL DE INSTRUMENTACION que ahora hemos de tener indicadores, por lo que en lugar de Num Ctrl tomaremos Num Ind. « Para A4 seguiremos los pasos de A3, teniendo ahora 4 elementos. « En el caso de AS, la suma de dos arrays da otro array, por lo que seguiremos los mismos pasos de A4. * V3, VM5 y M5 seran sencillamente Num Ind. * El siguiente paso es crear el diagrama de bloques. Vamos a él haciendo, por ejemplo, Ctr¥E. * El aspecto ha de ser similar a: At x2 conf icy * A3 lo obtenemos con la funcién Build Array (All Functions > Array). El resultado pasa a la funcién Array Subset (All Functions > Array para obtener el subarray Ad. El «2» representa el tercer elemento (recordar que los arrays son cero-base), mientras que el «4» indica cuantos elementos cogemos. Una vez obtenido A4, lo sumamos con ‘A2 para obtener A5. Pasamos este ultimo por el VI Mean (Functions > Analyze } Mathematics % Probability & Statistics) y obtenemos su valor medio. Para calcular el valor intermedio de A3 (o de cualquier otro array) primero obtenemos su longitud con la funcién Array Size (Functions > Array). Lo decrementamos en una unidad y lo dividimos por dos. De esta manera tenemos la posicién intermedia. Finalmente usamos la funcién Index Array con esa posicién y obtenemos el valor intermedio. « Por Ultimo multiplicamos los valores intermedio de A3 y medio de AS. « Para grabar haremos Ctri+S y C:\Mis Documentos\Array.vi. Llenar ahora el array A1 con los valores 1, 2, 3 y el array A2 con los valores 4, 5, 6 y 7. Comprobar que se obtienen los siguientes re- sultados: © ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS = 105 La solucion es; * Pasamos al modo Run con Ctrl+M. * Conlaherramienta & vamos introduciendo los valores especificados para At yA2. * Clicen * Probar con otros valores y verificar el funcionamiento. Arrays niciales ai 2 ieee) eae ws Anayuniin de Al yA2 |e eno ooo oJ] “a SubArray cblonido e pate de A3 Aney suma de Aly At 00 Jiro fi300 | Volorintermedia de Az Velorrmecia de AS Mutiplicacion de Va “VMS: a Ms MB: fame ao | Construir un VI que convierta un numero en un string, el cual se ha de concatenar con otro dos strings para formar una Unica cadena de Salida. También hemos de determinar la longitud de la cadena final. Guardar como String.vi. El panel frontal ha de ser como sigue: Castna Frat ‘Tena § 765400 Valin i | La solucion es: * Una vez abierto un nuevo panel, situamos los controles, Para Cabecera y Final, Controls > Text Controls String Control; para Cadena Final, Controls > Text Indicators > String Indicator; para © ITES-Parapinto 106 LabVIEW 7.1. PROGRAMACION GRAFICAPARAEL CONTROL DE INSTRUMENTACION Numero, Controls Numeric Control Num Ctrl; y para Longitud de la cadena, Controls Numeric Indicador > Num Ind. * Vamos al diagrama (Ctri#E). * Para.convertir Numero en string tomamos Ia funcién Format Into String (Functions ® String). En su entrada format string introduciremos la cadena constante (All Functions > String > String Constant) « %-f_». Con ello conseguimos que antes y después del nimero haya un espacio en blanco, ademas de convertirlo al formato fraccional. Con la funcién Concatenate String (All Functions > String) unimos las tres cadenas, que se introducen en la variable Cadena Final. * Para obtener la longitud de la cadena usamos la funcién String Lenght (All Functions % String). * El resultado que guardamos, Ctri+S y C:\Mis Documentos\String.vi ha de ser: Cadena final {Case Longitud de la cadena Has21) Creacién de un Cluster, aqui se emplea Controls>>All Controls>>Ar ray&Cluster>>Cluster. Se accede al control cluster; una vez colocado en el panel de control iremos incluyendo los diferentes controles que componen el cluster. En nuestro ejercicio, en la estructura etiquetada como Cluster de entrada, hemos incorporado un control numérico, dos interruptores y otro control numérico en forma de cursor deslizante, arrastrando los controles dentro de la estructura del cluster. Los diferentes elementos incorporados al cluster adquieren un orden que no se relaciona con su posicién dentro del cluster, son etiquetados segtin se van incorporando; si borramos un elemento el orden se reajusta. Para nuestro ejercicio, en la figura 5.3 se observa el menu © ITES-Paraninfo TIPOS DE DATOS ESTRUCTURADOS = 107 desplegable asociado al cluster, y la opcién de Reorder Controls In Cluster se presenta en la figura 5.4. ‘Cluster de salida modificaco Visible Items » Find Terminal ‘Change to Control Description and Tip... ‘Create Replace Data Operations > » » » AutoSizing | —— Figura 5.3. Mend desplegable del cluster de salida modificado del ejercicio 3. Figura 5.4 Orden de los diferentes controles del cluster que puede ser modificado. En este ejercicio vamos a emplear las funciones Unbundle by Name, Bundle by Name, Unbudle y Bundle. Si miramos el panel frontal de la figura 5.5 y el diagrama de la figura 5.6, nos preguntamos: {Qué hace esta aplicacion? © ITES-Paraninfo 108 —LabVIEW7.1 PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION Figura 5.5 Panel frontal que incluye tres clusters, un indicador booleano, uno numérico y el botén de paro de la aplicacion. Figura 5.6 Diagrama de bloques de la aplicacién. El campo contro! de la variable Cluster de entrada se incrementa en 1y es el campo Control de! Cluster de salida modificado. Asi mismo el campo nivel 1 del Cluster de entrada es invertido y sera el valor de nivel 1 del Cluster de salida modificado. Se muestra el ment desplegado de Ja funcién Unbundle by Name. ITES-Paraninto TIPOS DE DATOS ESTRUCTURADOS 109 Set Breakpoint Express Numeric Palette > Create » Replace » Hide Full Names 5.7 APLICACION PRACTICA Nuestra aplicacién consiste principalmente en encender 12 leds de forma correlativa, estando en cada momento Unicamente un solo led encendido y pudiendo escoger entre empezar a encenderlos por la izquierda o por la derecha. Vamos a dividir nuestra aplicacion en diferentes objetivos, de forma que en cada una utilicemos alguna de las estructuras vistas en los apartados anteriores. De esta manera, ademas, dividiremos nuestro problema en otros mas sencillos ¥, Por tanto, mas faciles de programar. Lo primero que haremos sera crear en el panel frontal los siguientes controles: Unartay booleano con 12 leds cuadrados visibles y nombre de la etiqueta «array booleanon. + Un botén de stop rectangular. « Un menu Ring de nombre «menu». 0: de izquierda a derecha, 41: de derecha a izquierda, * Un interruptor vertical. Objetivo 1: Crear un array booleano de 12 posiciones de forma que cada una contenga el estado del led (apagado = false, encendido = true), cuya posicién coincidira con el indice del array. Para encender todos los leds sera necesario repetir el proceso 12 veces. Objetivo 2: Como habremos podide camprobar, los leds se encienden tan rapido que es practicamente imposible darse cuenta. Para poderlo apreciar mejor, después ©ITES-Paraninfo 110 —LabVIEW7.1 PROGRAMACION GRAFICA PARAEL CONTROL DE INSTRUMENTACION de encender cada led introduciremos un tiempo de espera mediante la estructura Sequence. Objetivo 3: Podemos apreciar cémo se van encendiendo los leds de izquierda a derecha, pero cuando se llega al ultimo led el programa se detiene y a nosotros nos interesa que el proceso se repita hasta que sea abortado mediante un control disponible en el propio programa. Para ello utilizaremos la estructura While y un control booleano (Stop), que nos determinaré la condicion de repeticion. Repite la misma opecacién 12 veoas (Geisehsie eae) Halaman nee la siguionte teracién _Enciende un nuevo led ‘Apaga todos los fede ‘Apaga elec que hay encendida Figura 5.7 Estructura que enciende los leds una vez. Frame que eticchuce of hemo de oper Figura 5.8 _Introduccién de un tiempo de espera de 100 ms. © ITES-Paraninto TIPOS DE DATOS ESTRUCTURADOS = 111 indion mientras Stop=False j2 estructura se repetirs Figura 5.9 Rotacién indefinida de los leds. Objetivo 4: Ahora tan sélo nos queda hacer que los leds también se puedan encender de derecha a izquierda. Introduciremos un case dentro del frame 0 al que conectaremos el menu del panel frontal que nos determinara hacia qué lado habremos de hacer el bartido (figura 5.10). Ya habriamos terminado el problema inicialmente planteado, pero lo podriamos complicar un poco mas haciendo que los leds puedan rotar simultaneamente de izquierda a derecha, e inmediatamente después de derecha a izquierda (figura 5.11). Para ello afiadiremos una opcién mas en el ment Ring (2: izquierda-derecha-izquierda). En el nuevo case creado encenderemos el primer led de la izquierda y haremos que la variable menu tome el valor 0 de forma que se enciendan los leds de izquierda a derecha. Una vez hecho esto sera necesario que la variable Meni cambie su valor a 1 para que se enciendan los leds de derecha aizquierda y asi sucesivamente. Pero nos hara falta una variable de control que nos indique cuando estamos encendiéndolos en una direccion determinada, porque asi fue la opcién escogida (y en ese caso no hay que allerar el valor de la variable menu) y cuando los encendemos porque venimos del case dos, siendo necesario alterar el valor de la variable ment. Todo esto tan dificil de explicar se consigue utilizando una variable global como Control y una variable local que haga referencia a la variable Menu. Fuera de la estructura While sera necesario inicializar |as variables utilizadas para que en posteriores ejecuciones del programa no se produzcan situaciones © ITES-Paraninfo 112 LabVIEW7.1. PROGRAMACION GRAFICA PARA EL CONTROL DE INSTRUMENTACION extrafias, como podria ser que la variable Control valiese 1 mientras que la variable local mend valiese 0, lo que provocaria que al empezar la ejecucion del VI los leds comenzaran a rotar en ambas direcciones mientras que, seguin el menu, ‘s6lo deberian rotar en una. Nosotros hemos escogido un valor inicial de 0 para la variable global Control y un valor de 1 para la variable local Menu, aunque cualquier otra combinacién coherente hubiese sido valida. Cave que rotalor leds de derecha a izquiewda Figura 5.10 Estructura que nos permite escoger el sentido de la rotacion. Hemos conseguido nuestro nuevo objetivo, pero la Unica manera de hacer que los leds dejen de rotar en ambas direcciones consecutivamente es pulsar el bot6én STOP, ya que, aunque en e! mend queramos cambiar la direccion de rota- cién, no podremos porque la variable Control ya no se vuelve a poner a 0 hasta que se reinicie el programa. Para devolver el control al menu podemos crear un interruptor booleano en el panel frontal que Unicamente se habilite cuando entre- mos en el case 2 y que cuando sea pulsado cambie el valor de la variable Control a 0 para devolver el dominio de la rotacién al menu. Para habilitar o deshabilitar ©ITES-Paraninfo TIPOS DEDATOSESTRUCTURADOS © 113 un control utilizaremos los property nodes. El case 2 quedara entonces como sigue: Cargamos un cero en la variable local menu de forma que ne la siguiente iteracién del FOR se ejecute el case 0 y escribimos 1 en la variable global CONTROL para poder detectar qu ot }@CONTROL hemos entarado en el case 2 Esta estructura ir colocada fuera del FOR pero dentro del WHILE y se utiliza para detectar cuando entramos en ¢! Case 2. Si el valor de la variable CONTROL es gual a cero querra decir que no hemos entrado, pero si es uno si que habremos entrado y entonces hemos de cambiar el valor de la variable local Mend. Primero comprobaremos el valor de dicha variable y si es cero la pondremos a uno, y si es Uno la pondremos a cero, para asegurar la rotacién alternativa de los leds. CONTROL |g Figura 5.11 Modificacién de la estructura inicial para afiadir una nueva opcién en el ment. Figura 5.12 _Inicializacién de las variables Ment y Control. Dentro del While pero fuera del For afladiremos un case que compruebe si hemos pulsado el interruptor y, si es asi, que ponga la variable global Control a 0; ademas, entonces habra que habilitar de nuevo el ment, deshabilitar el interruptor y ponerlo en off. Para hacer esto aprovecharemos el case True de la estructura que comprueba el valor de la variable Control: © ITES-Paraninfo LabVIEW 7.1 PROGRAMACION GRAFIGA PARA EL CONTROL DE INSTRUMENTACION. Al entrar en este Case habilitamos e! interruptor y deshabilitamos el menu, puesto que no sirve de nada 0: Habilita 1; Deshabilita 2: Deshabilta y lo dibuja medio oculto Ya tan sélo faltaria inicializar la posicién del interruptor, deshabilitarlo y habilitar el menu al comienzo de cada ejecucién del programa: meni alo sre Lainicializacion de las variables es algo que también se puede hacer desde la opcién Data Operations de! menu desplegable de cada control o indicador a través de la opcién Make Current Value Default. Figura 5.13 Posible disenio del panel frontal para la aplicacion creada. © ITES-Paraninfo

Вам также может понравиться