LabVIEW: Exploración y Conceptos Fundamentales - PDF

Summary

Este documento, de tipo PDF, proporciona una introducción a LabVIEW, un entorno de programación gráfico utilizado para la creación de aplicaciones. Explora la interfaz de usuario profesional, su flujo de datos, las características de LabVIEW , las funciones y herramientas esenciales para el desarrollo en el software.

Full Transcript

LECCION UNO Explorando LabVIEW ¿Qué es LabVIEW? LabVIEW es un entorno de programación gráfico que puede utilizar para crear aplicaciones rápida y eficientemente con interfaces de usuario profesionales. Millones de ingenieros y científicos usan LabVIEW para desarr...

LECCION UNO Explorando LabVIEW ¿Qué es LabVIEW? LabVIEW es un entorno de programación gráfico que puede utilizar para crear aplicaciones rápida y eficientemente con interfaces de usuario profesionales. Millones de ingenieros y científicos usan LabVIEW para desarrollar sofisticadas aplicaciones de pruebas y control usando iconos y cables intuitivos. Además, la plataforma LabVIEW es escalable a través de diferentes objetivos y OSs. Características de LabVIEW Los programas de LabVIEW tienen las siguientes características: Naturaleza gráfica y compilada Flujo de datos y/o programación basada en eventos Capacidades multi-objetivo y plataforma Flexibilidad orientada a objetos Posibilidades de multithreading Flujo de datos y programación orientada a eventos Los programas de LabVIEW se ejecutan de acuerdo a las reglas de flujo de datos en lugar de la manera tradicional encontrada en la mayoría de lenguajes de programación basados en texto como C y C++. La ejecución mediante flujo de datos es dependiente de los datos. El flujo de datos entre los nodos en el código G determina el orden de ejecución. Orientado a objetos La programación orientada a objetos es un acercamiento popular a través de una gran variedad de lenguajes de programación. Permite una gran variedad de ítems similares, aunque diferentes, de ser representados como una clase de objetos en el software. Creación de un proyecto en LabVIEW Complete los pasos siguientes para crear un proyecto. 1. Escoja una de las siguientes acciones para crear un proyecto LabVIEW nuevo. En la ventana Getting Started haga clic en Blank Project para abrir un proyecto en nuevo o haga clic en el botón Create Project para crear un proyecto nuevo a partir de una plantilla. En un proyecto o VI abierto, seleccione File»Create Project. En cualquier ventana de LabVIEW, seleccione File»New. También puede seleccionar Project»Empty Project en el cuadro de diálogo New para mostrar la ventana Project Explorer. 2. Añada elementos que desee incluir en el proyecto bajo un destino. 3. Seleccione File»Save Project para guardar el proyecto. Partes de un VI Los VIs de LabVIEW contienen tres componentes principales: la ventana del panel frontal, el diagrama de bloques y el panel de iconos / conectores. Ventana del panel frontal La ventana del panel frontal es la interfaz del usuario para el VI. Puede crear la ventana del panel frontal con controles e indicadores, que son los terminales interactivos de entrada y salida del VI, respectivamente. Ventana de diagrama de bloques Tras crear la ventana del panel frontal, puede añadir código usando representaciones gráficas de funciones para controlar los objetos del panel frontal. La ventana del diagrama de bloques contiene este código fuente gráfico. Los objetos del panel frontal aparecen como terminales en el diagrama de bloques. Panel de iconos y conectores El panel de iconos y conectores muestra cómo usar y ver un VI en otro VI. Un VI que se utiliza en otro VI se denomina subVI, que es similar a una función en un lenguaje de programación basado en texto. Para utilizar un VI como subVI, debe tener un panel de iconos y conectores. Cables Con los cables se transfieren datos entre objetos del diagrama de bloques. , los cables conectan los terminales de control y de indicador a la función Add y Subtract. Cada cable tiene un solo origen de datos, pero puede cablearlo a numerosos VIs y funciones que leen los datos. Los cables tienen distintos colores, estilos y grosores, en función de sus tipos de datos. Tipo de Cable Escalar Array 1D Array 2D Color Naranja (como Numérico flotante) Azul(numero entero) Boleano ………. verde Cadena de Rosa Caracteres Paleta de funciones La paleta Functions contiene los VIs, funciones y constantes que utiliza para crear el diagrama de bloques. Se accede a la paleta Functions desde el diagrama de bloques seleccionando View» Functions Palette. La paleta Functions se divide en varias categorías; puede mostrar u ocultar categorías según sus necesidades. Selección de una herramienta Puede crear, modificar y depurar VIs utilizando las herramientas que ofrece LabVIEW. Una herramienta es un modo de funcionamiento especial del cursor del ratón. El modo de funcionamiento del cursor se corresponde con el icono de la herramienta seleccionada. LabVIEW elige qué herramienta seleccionar en función de la ubicación actual del ratón. Flujo de datos LabVIEW sigue un modelo de flujo de datos para ejecutar VIs. Se ejecuta un nodo del diagrama de bloques cuando recibe todas las entradas necesarias. Cuando se ejecuta un nodo, produce datos de salida y pasa los datos al siguiente nodo de la ruta del flujo de datos. El movimiento de los datos a través de los nodos determina el orden de ejecución de los VIs y las funciones del diagrama de bloques. Visual Basic, C++, JAVA y la mayoría del resto de lenguajes de programación basados en texto siguen un modelo de flujo de control de la ejecución del programa. En el flujo de control, el orden secuencial de los elementos del programa determina el orden de ejecución de un programa. DAQ Assistant El DAQ Assistant adquiere datos con un dispositivo de adquisición de datos. Debe utilizar este VI Express con frecuencia a lo largo de este curso. Hasta que aprenda más de la adquisición de datos, sólo usará un canal del dispositivo de adquisición de datos, CH0. Este canal está conectado al sensor de temperatura en el BNC 2120. Puede tocar el sensor de temperatura para cambiar la lectura de temperatura en el sensor. LECCION DOS Resolución de problemas y depuración de Vis Corrección de VIs rotos Si un VI no se ejecuta, es un VI roto o no ejecutable. El botón Run aparece roto cuando el VI que está creando o modificando contiene errores. Si el botón sigue apareciendo roto tras terminar de cablear el diagrama de bloques, el VI está roto y no puede ejecutarse. Las advertencias no impiden que ejecuté un VI. Están diseñadas para ayudarle a evitar posibles problemas en VIs. Sin embargo, los errores pueden romper un VI. Debe resolver los errores antes de poder ejecutar el VI. Haga clic en el botón Run o seleccione View»Error List para averiguar por qué se ha roto un VI. La ventana Error list muestra cada uno de los errores. La sección Items with errors muestra los nombres de todos los elementos en memoria, como librerías de proyectos y VIs que contienen errores. Si dos o más elementos tienen el mismo nombre, esta sección muestra la ubicación en concreto de cada elemento. La sección errors and warnings muestra los errores y las advertencias del VI que seleccioné en la sección Items with errors. La sección Details describe los errores y en algunos casos recomienda cómo corregirlos. Haga clic en el botón Help para ver un tema de LabVIEW Help que describa el error en detalle e incluya instrucciones paso a paso para corregirlo. Haga clic en el botón Show Error o haga doble clic en la descripción del error para resaltar la zona del diagrama de bloques o del panel frontal que contenga el error. Causas habituales de VIs rotos Esta lista contiene razones habituales de rotura de un VI mientras lo modifica: El diagrama de bloques contiene un cable roto por un desajuste de tipos de datos o un extremo suelto o desconectado. Consulte el tema Correcting Broken VIs de la Ayuda de LabVIEW para obtener información acerca de corregir cables rotos. Un terminal obligatorio del diagrama de bloques no está cableado. Consulte el tema Using Wires to Link Block Diagram Objects en la Ayuda de LabVIEW para obtener información acerca de configurar entradas y salidas obligatorias. Un subVI está roto o modificó su panel de conectores tras colocar su icono en el diagrama de bloques del VI. Consulte el tema Creating SubVIs de LabVIEW Help para obtener información acerca de subVIs. Técnicas de depuración Si un VI no está roto, pero obtiene datos inesperados, puede utilizar las siguientes técnicas para identificar y corregir problemas con el VI o el flujo de datos del diagrama de bloques: Cablee los parámetros de salida y entrada de error en la base de la mayoría de los VIs y funciones integradas. Estos parámetros detectan errores encontrados en cada nodo del diagrama de bloques e indican si ocurrió un error y dónde. También puede utilizar estos parámetros en los VIs que cree. Para eliminar todas las advertencias del VI, seleccione View»Error List y marque la casilla de verificación Show Warnings para ver todas las advertencias del VI. Determiné las causas y corríjalas en el VI. Haga triple clic en el cable con la herramienta de posicionamiento para resaltar toda su ruta y asegurarse de que los cables se conecten a los terminales apropiados. Use la ventana Context Help para comprobar los valores predeterminados de cada función y subVI en el diagrama de bloques. Los VIs y las funciones pasan los valores predeterminados si no están cableadas las entradas recomendadas u opcionales. Por ejemplo, una entrada booleana podría configurarse en TRUE si no está cableada. Usé el cuadro de diálogo Find para buscar subVIs, texto y otros objetos para corregir en el VI. Seleccioné View»VI Hierarchy para buscar subVIs sin cablear. A diferencia de las funciones sin cablear, los VIs sin cablear no siempre generan errores a menos que configure una entrada como obligatoria. Si coloca por error un subVI sin cablear en el diagrama de bloques, se ejecuta cuando lo hace el diagrama de bloques. Por lo tanto, el VI podría realizar acciones adicionales. Resalte las ejecuciones para ver el movimiento de datos por el diagrama de bloques. Ejecuté paso a paso el VI para ver cada acción suya en el diagrama de bloques. Use la herramienta de sonda para observar valores de datos intermedios y para comprobar la salida de errores de VIs y funciones, en especial las que realizan E/S. Haga clic en el botón Retain Wire Values en la barra de herramientas del diagrama de bloques para conservar los valores del cable, que utilizará con sondas. Esta función permite comprobar fácilmente valores de datos que se transfirieron por última vez por algún cable. Use puntos de interrupción para pausar la ejecución, para poder ejecutar paso a paso o insertar sondas. Suspenda la ejecución de un subVI para modificar valores de controles e indicadores, para controlar el número de veces que se ejecuta o para volver al principio de la ejecución del subVI. Determine si los datos que pasa una función o subVI están sin definir. Esto suele suceder con los números. Por ejemplo, en un punto del VI una operación podría haber dividido un número por cero, devolviendo Inf (infinito), mientras que las siguientes funciones o subVIs esperaban números. Si el VI se ejecuta con más lentitud de la esperada, confirmé que desactivó resaltar la ejecución en subVIs. Asimismo, cierre los paneles frontales y los diagramas de bloques del subVI cuando no los esté utilizando, ya que las ventanas abiertas pueden afectar a la velocidad de ejecución. Compruebe la representación de controles e indicadores para ver si se está produciendo desbordamiento, porque convirtió un número de coma flotante en un número entero o éste en un número entero de menos bits. Por ejemplo, podría cablear un número entero de 16 bits en una función que sólo acepte números enteros de 8 bits. Esto hace que la función convierta el número entero de 16 bits en una representación de 8 bits, con lo que podría perder datos. Determine si algún bucle For ejecuta accidentalmente cero iteraciones y produce arrays vacíos. Compruebe que inicializó correctamente registros de desplazamiento, a menos que deseara que guardaran datos desde una ejecución del bucle a otra posterior. Compruebe el orden de los elementos de clusters en los puntos de origen y de destino. LabVIEW detecta los desajustes de tipos de datos y de tamaños de cluster durante la edición, pero no detecta desajustes de elementos del mismo tipo. Compruebe el orden de ejecución de los nodos. Verifique que el VI no contenga subVIs ocultos. Podría haber ocultado un subVI accidentalmente colocándolo directamente sobre otro nodo o disminuyendo el tamaño de una estructura sin mantener a la vista el subVI. Contraste el conjunto de subVIs que utiliza el VI con los resultados de View»Browse Relationships»This VI’s SubVIs y View»Browse Relationships»Unopened SubVIs para determinar si existen subVIs adicionales. Abra también la ventana VI Hierarchy para ver los subVIs de un VI. Para ayudarle a evitar resultados incorrectos por VIs ocultos, especifique entradas obligatorias para los VIs. Herramientas de sonda Usé la herramienta de sonda para comprobar valores intermedios en un cable mientras se ejecuta un VI. Use la herramienta de sonda si tiene un diagrama de bloques complicado con una serie de operaciones, alguna de las cuales podría producir datos incorrectos. Use la herramienta de sonda con el resaltado de la ejecución, la ejecución paso a paso y los puntos de interrupción para determinar si los datos son incorrectos y en qué punto. Si dispone de datos, la sonda inmediatamente actualiza y muestra los datos en la Probe Watch Window durante el resaltado de la ejecución, la ejecución paso a paso o cuando pause en un punto de interrupción. Cuando se pause la ejecución en un nodo por la ejecución paso a paso o por un punto de interrupción, también puede sondar el cable que acaba de ejecutar para ver el valor que fluyó por ese cable. Tipos de sonda Genéricas Use la sonda genérica para ver los datos que pasan por un cable. Haga clic con el botón derecho en un cable y seleccione Custom Probe»Generic Probe desde el menú contextual para usar la sonda genérica. La sonda genérica muestra los datos. No puede configurar la sonda genérica para responder a los datos. Suministradas Las sondas suministradas son VIs que muestran información exhaustiva sobre los datos que pasan por un cable. Por ejemplo, la sonda VI Refnum devuelve información sobre el nombre del VI, su ruta y el valor hexadecimal de la referencia. También puede utilizar una sonda suministrada para responder en función de los datos que pasan por un cable. Personalizadas Use el cuadro de diálogo Create New Probe para crear una sonda en función de una sonda existente o para crear una nueva. Haga clic con el botón derecho en un cable y seleccione Custom Probe»New desde el menú contextual para ver el cuadro de diálogo Create New Probe. Cree una sonda cuando desee tener más control sobre cómo LabVIEW sonda los datos que fluyen por un cable. Cuando crea una nueva sonda, el tipo de datos de la sonda coincide con el tipo de datos del cable donde hizo clic con el botón derecho. Si desea modificar la sonda que creó, debe abrirla desde el directorio donde la guardó. Puntos de interrupción Use la herramienta Breakpoint para establecer puntos de interrupción en VIs, nodos o cables y pausar la ejecución en esa ubicación. Cuando configura un punto de interrupción en un cable, la ejecución se pausa una vez que los datos pasan por el cable y el botón Pause aparece rojo. Sitúe un punto de interrupción en el diagrama de bloques para pausar la ejecución una vez que se ejecuten todos los nodos del diagrama de bloques. El borde del diagrama de bloques aparece rojo y parpadea para reflejar la colocación de un punto de interrupción. Datos sin definir o inesperados Los datos sin definir, que son NaN (no un número) o Inf (infinito), invalidan todas las operaciones siguientes. Las operaciones de coma flotante devuelven los dos siguientes valores simbólicos que indican cálculos imperfectos o resultados sin sentido: NaN (no un número) representa un valor de coma flotante que producen las operaciones no válidas, como obtener la raíz cuadrada de un número negativo. Inf (infinito) representa un valor de coma flotante que producen las operaciones válidas, como dividir un número entre cero. Gestión de errores Aunque confíe mucho en el VI que cree, no puede predecir todos los problemas que puede encontrar un usuario. Sin un mecanismo para comprobar los errores, sólo sabe que el VI no funciona correctamente. La comprobación de errores indica dónde y por qué se generan los errores. La gestión de errores es el mecanismo para anticipar, detectar y resolver advertencias y errores. La gestión de errores es un componente esencial en el desarrollo de aplicaciones de LabVIEW. Con la gestión de errores rápidamente localiza la fuente de errores de programación. Sin ella, podría observar un comportamiento inesperado, pero necesitaría un esfuerzo para encontrar el origen del problema. Clusters de error Los VIs y las funciones producen errores de uno de dos modos: con códigos de error numéricos o con cluster de error. Normalmente las funciones usan códigos de error numéricos y los VIs usan clusters de error, habitualmente con entradas y salidas de error. Use los controles e indicadores de clusters de error para crear entradas y salidas de error en subVIs Los clusters error in y error out incluyen los siguientes componentes de información: status es un valor booleano que produce TRUE si ocurrió un error. code es un número entero con signo de 32 bits que identifica el error numéricamente. Un código de error que no sea cero junto con un status de FALSE indica una advertencia en lugar de un error. source es una cadena de caracteres que identifica dónde ocurrió el error. Cuadro de diálogo Explain Error Cuando ocurre un error, haga clic con el botón derecho en el borde del clúster y seleccione Explain Error del menú contextual para abrir el cuadro de diálogo Explain Error. El cuadro de diálogo Explain Error contiene información sobre el error. El menú contextual incluye una opción Explain Warning si el VI contiene advertencias, pero no errores. Rangos de códigos de error Los VIs y las funciones en LabVIEW pueden devolver códigos de error numéricos. Cada producto o grupo de VIs define un rango de códigos de error. Consulte el tema Ranges of LabVIEW Error Codes de la Ayuda de LabVIEW para ver las tablas de códigos de error que muestra los códigos de error numéricos y descripciones de cada producto y grupo de VIs. Además de definir los rangos de códigos de error, LabVIEW reserva algunos rangos de códigos de error para que los utilice en su aplicación. Puede definir códigos de error personalizados en el rango de -8999 a -8000, 5000 a 9999 o 500.000 a 599.999. LECCION TRES Implementación de un VI Panel frontal En la fase de diseño del método de desarrollo de software se identifican las entradas y salidas del problema. Esta identificación conduce directamente al diseño de la ventana del panel frontal. Las entradas para el diseño pueden venir de las siguientes acciones: adquiriendo desde un dispositivo de adquisición de datos o un multímetro leyendo directamente desde un fichero manipulando controles en el panel frontal Opciones de controles e indicadores Puede configurar valores predeterminados para los controles. Para inicializar o reinicializar todos los controles e indicadores en el panel frontal al mismo tiempo, seleccione Edit»Make Current Values Default o Edit» Reinitialize to Default Values desde el menú de LabVIEW. Terminales del diagrama de bloques y tipo de datos Los nombres de las terminales corresponden a las etiquetas de los controles e indicadores en el panel frontal. Haga clic con el botón derecho en un terminal y seleccione Find control o Find indicator en el menú contextual para localizar un control o un indicador en el panel frontal. Números en coma flotante Los números en coma flotante representan números fraccionales. En LabVIEW, los números en coma flotante se representan con el color naranja. Precisión simple (SGL): los números en coma flotante de precisión simple tienen un formato de precisión simple de 32 bits IEEE Doble precisión (DBL): los números en coma flotante de doble precisión tienen un formato de precisión doble de 64 bits IEEE. Numéricos. Precisión extendida (EXT): Cuando guarda números de precisión extendida al disco, LabVIEW los almacena en una plataforma independiente con formato de 128-bit. Números complejos Los números complejos son versiones concatenadas de números en coma flotante con una parte real e imaginaria. En LabVIEW, como los números complejos son un tipo de número en coma flotante, los números complejos también se representan con el color naranja. Existen tres partes en los números complejos. Complejo simple (CSG): los números complejos de coma flotante de precisión simple constan de valores reales e imaginarios y tienen un formato de precisión simple de 32 bits IEEE. Complejo doble (CDB): los números complejos de coma flotante de doble precisión constan de valores reales e imaginarios y tienen un formato de doble precisión de 64 bits IEEE. Complejo ampliado (CXT): los números complejos de coma flotante de precisión ampliada constan de valores reales e imaginarios y tienen un formato de precisión ampliada IEEE. En la memoria, el tamaño y la precisión de números de precisión ampliada varían en función. Valores booleanos LabVIEW almacena datos booleanos como valores de 8 bits. Si el valor de 8 bits es cero, el valor booleano es FALSE. Cualquier valor que no sea cero representará TRUE. En LabVIEW, el color verde representa datos booleanos. Cadenas de caracteres Una cadena de caracteres es una secuencia de caracteres ASCII visualizables y no visualizables. Las cadenas de caracteres tienen un formato independiente de las plataformas para la información y los datos. Algunas de las aplicaciones más comunes de las cadenas de caracteres son: Generación de mensajes de texto simples Control de instrumentos enviando comandos de texto al instrumento y devolviendo valores de datos en forma de cadenas de caracteres ASCII o binarias que después convierte en valores numéricos. Almacenamiento de datos numéricos en disco. Para almacenar datos numéricos en un fichero ASCII, primero debe convertir los datos numéricos en cadenas de caracteres antes de escribir los datos en un fichero del disco. Petición o visualización de datos con cuadros de diálogo. Enums Un enum (indicador, constante o control enumerado) es una combinación de tipos de datos. Un enum representa una pareja de valores, una cadena de caracteres y un numérico, donde el enum puede ser uno de una lista de valores. Propiedades de VI Usé el componente Documentation del cuadro de diálogo VI Properties para crear descripciones de VIs y enlazar desde VIs a ficheros HTML o a ficheros de ayuda compilados. incluye los siguientes componentes: VI description: contiene el texto que aparece en la ventana Context Help cuando mueve el cursor sobre el icono de VI. Use las etiquetas y alrededor de cualquier texto de la descripción al que desee dar formato en negrita. También puede utilizar la propiedad VI Description para modificar la descripción del VI programáticamente. Help tag: contiene el nombre del fichero HTML o la palabra clave del índice del tema que desea vincular en un fichero de ayuda compilado. También puede utilizar la propiedad Help:Document Tag para configurar la etiqueta de ayuda programáticamente. Help path: contiene la ruta al fichero HTML o al fichero de ayuda compilado que desea vincular desde la ventana Context Help. Si este campo está vacío, el enlace Detailed help no aparecerá en la ventana Context Help y se atenuará el botón Detailed help. Browse: muestra un cuadro de diálogo de fichero que se utiliza para navegar hasta un fichero HTML o hasta un fichero de ayuda compilado para utilizarlo como ruta de ayuda. Bucles While Al igual que un bucle Do o un bucle Repeat-Until en lenguajes de programación basados en texto, un bucle While, ejecuta un subdiagrama hasta que ocurra una condición. La siguiente ilustración muestra un bucle While en LabVIEW, un diagrama de flujo equivalente a la funcionalidad del bucle While, y un ejemplo de pseudocódigo de la funcionalidad del bucle While. El bucle While siempre se ejecuta al menos una vez. El bucle While ejecuta el subdiagrama hasta que el terminal condicional, un terminal de entrada, reciba un valor booleano específico. El bucle While no incluye un contaje de iteraciones configurado y se ejecuta hasta el infinito si la condición nunca ocurre. La terminal de iteración es una terminal de salida que contiene el número de iteraciones completadas. El contaje de iteraciones para el bucle While siempre empieza en cero. Túneles a través de Estructuras Los túneles suministran datos hacia dentro y hacia fuera de las estructuras como bucles While. El túnel aparece como un bloque sólido en el borde del bucle While. El bloque es del color del tipo de datos cableado al túnel. Los datos salen de un bucle cuando éste termina. Cuando un túnel introduce datos en un bucle, éste se ejecuta sólo cuando los datos llegan al túnel. Bucles For Un bucle For, ejecuta un subdiagrama cierto número de veces. También puede colocar un bucle While en el diagrama de bloques; haga clic con el botón derecho en el borde del bucle While y seleccione Replace with For Loop en el menú contextual para cambiar un bucle While por uno For. La terminal de contaje es una terminal de entrada cuyo valor indica cuántas veces debe repetir el subdiagrama. La terminal de iteración es una terminal de salida que contiene el número de interacciones completadas. Añadir un terminal condicional a un bucle For Si es necesario, puede añadir un terminal condicional para configurar un bucle For para que se detenga cuando ocurra un error o una condición booleana. Un bucle For con un terminal condicional se ejecuta hasta que ocurra la condición o hasta que se completen todas las iteraciones, lo que suceda primero. Los bucles For que configure para una salida condicional tendrán un símbolo rojo en el terminal de contaje y un terminal condicional en la esquina inferior derecha. Usando bucles For para chequeo y manejo de errores En un bucle For con un terminal condicional, también debe cablear un valor al terminal de contaje o autoindexar un array de entrada para configurar un número máximo de iteraciones. El bucle For se ejecuta hasta que ocurra un error o hasta que se complete el número de iteraciones configurado. Comparando bucles For y bucles While Los bucles For y los bucles While difieren de varias maneras. BUCLE FOR BUCLE WHILE Se ejecutan en número de veces a Detiene la ejecución solo si el valor en menos que se agregue una terminal la terminal condicional alcanza esa condicional condición Puede ejecutarse cero veces Debe ejecutarse al menos una vez Los túneles automáticamente dan un Los túneles automáticamente dan el Array de datos ultimo valor Temporización de Vis Cuando un bucle termina de ejecutar una iteración, inmediatamente empieza a ejecutar la siguiente, a menos que llegue a una condición de parada. Normalmente tendrá que controlar la frecuencia o temporización de la iteración. Por ejemplo, si está adquiriendo datos y desea hacerlo cada 10 segundos, necesita poder temporizar las iteraciones del bucle para que ocurran cada 10 segundos. Funciones de espera Coloque una función de espera dentro de un bucle para que un VI se desactive durante cierto tiempo. Esto permite al procesador abordar otras tareas durante el tiempo de espera. Las funciones de espera usan el reloj de milisegundos del sistema operativo. La función Wait Until Next ms Multiple controla un contador de milisegundos y espera hasta que éste alcance un múltiplo de la cantidad que especifique. Use esta función para sincronizar actividades. Sitúe esta función en un bucle para controlar la velocidad de ejecución de éste. Para que esta función sea efectiva, el tiempo de ejecución del código debe ser inferior al tiempo especificado para esta función. El tiempo de ejecución de la primera iteración del bucle es indeterminado. La función Wait (ms) espera hasta que el contador de milisegundos cuente una cantidad igual a la entrada que especifique. Esta función garantiza que la velocidad de ejecución del bucle se corresponda al menos con el valor que especifique a la entrada de la función Retroalimentación de datos en los bucles Al programar con bucles, a menudo debe acceder a datos de iteraciones anteriores del bucle en LabVIEW. Por ejemplo, si está adquiriendo un dato en cada iteración de un bucle y debe hallar el promedio cada cinco datos, debe conservar los datos de iteraciones anteriores del bucle. Nota: Los nodos de realimentación son otro método para conservar información de una iteración anterior. Consulte el tema Feedback Node de la Ayuda de LabVIEW para obtener información adicional acerca de nodos de realimentación. Registros de desplazamiento Los registros de desplazamiento son similares a las variables estáticas en lenguajes de programación basados en texto. Use registros de desplazamiento cuando desee pasar valores de iteraciones anteriores a la siguiente iteración a través del bucle. Un registro de desplazamiento aparece como un par de terminales directamente opuestos entre sí en los lados verticales del borde del bucle. Inicialización de registros de desplazamiento Al inicializar un registro de desplazamiento, se restablece el valor que transmite el registro de desplazamiento a la primera iteración del bucle cuando se ejecuta un VI. Inicialice un registro de desplazamiento cableando un control o constante al terminal del registro de desplazamiento en el lado izquierdo del bucle. Registros de desplazamiento apilados Los registros de desplazamiento apilados permiten acceder a datos de iteraciones anteriores al bucle. Los registros de desplazamiento apilados almacenan valores de varias iteraciones anteriores y llevan esos valores a las siguientes iteraciones. Para crear un registro de desplazamiento apilado, haga clic con el botón derecho en el terminal izquierdo y seleccione Add Element en el menú contextual. Graficando datos – Waveform Chart El gráfico tipo “waveform chart” es un tipo especial de indicador numérico que muestra una o más curvas de datos, normalmente adquiridos a una velocidad constante. Los gráficos tipo “waveform chart” pueden mostrar una o varias curvas. El grafico utiliza los siguientes modos para mostrar datos: Strip Chart: muestra los datos móviles desplazándose continuamente de izquierda a derecha por el gráfico con los datos antiguos a la izquierda y con los nuevos a la derecha. Un strip chart es similar a un registrador de cinta de papel. Strip Chart es el modo de actualización predeterminado. Scope Chart: muestra un elemento de datos, como un impulso o una onda, desplazándose parcialmente por el gráfico de izquierda a derecha. Para cada nuevo valor, el gráfico traza el valor a la derecha del último valor. Cuando la curva llega al borde derecho de la zona de trazado, LabVIEW borra la curva y empieza a trazar de nuevo desde el borde izquierdo. La visualización de un scope chart es similar a la de un osciloscopio. Sweep Chart: funciona de modo parecido a un scope chart salvo que muestra los datos antiguos a la derecha y los nuevos a la izquierda separados por una línea vertical. LabVIEW no borra la curva en un sweep chart cuando ésta llega al borde derecho de la zona de trazado. Un sweep chart es similar a la visualización de un electrocardiograma. Estructuras Case Una estructura Case tiene dos o más subdiagramas o casos. Sólo se ve un subdiagrama a la vez y la estructura ejecuta sólo un caso cada vez. Un valor de entrada determina qué subdiagrama ejecutar. La estructura Case es similar a las declaraciones switch o a las declaraciones if...then...else en lenguajes de programación basados en texto. La etiqueta del selector de caso en la parte superior de la estructura Case contiene en el centro el nombre del valor de selección que se corresponde con el caso actual y las flechas de incremento y decremento a cada lado. Por defecto, los valores de cadenas de caracteres que cablee al terminal de selección distinguen mayúsculas de minúsculas. Para permitir coincidencias sin distinción de mayúsculas y minúsculas, cablee un valor de cadena de caracteres al terminal de selección, haga clic con el botón derecho en el borde de la estructura Case y seleccione Case Insensitive Match en el menú contextual. Túneles de entrada y salida en estructuras Case Puede crear varios túneles de entrada y salida para una estructura Case. Las entradas están disponibles en todos los casos, pero los casos no necesitan utilizar cada entrada. No obstante, debe definir un túnel de salida para cada caso. Si el control booleano cableado al terminal de selección es True, el VI suma los valores numéricos. De lo contrario, el VI resta los valores numéricos. En situaciones donde simplemente debe elegir entre dos valores basado en la entrada de un booleano, la instruccion Select puede ser usada en vez de la estructura Boolean Case. LECCION CUATRO Desarrollo de aplicaciones modulares Comprensión del modularidad La modularidad define el grado en que un programa se compone de módulos diferenciados de modo que un cambio en un módulo tenga un impacto mínimo en otros módulos. Los módulos de LabVIEW se denominan subVIs. Un VI dentro de otro VI se denomina subVI. Un subVI corresponde a una subrutina en lenguajes de programación basados en texto. Cuando hace doble clic en un subVI, aparece un panel frontal y un diagrama de bloques en lugar de un cuadro de diálogo donde poder configurar opciones. El panel frontal incluye controles e indicadores. El diagrama de bloques incluye cables, iconos del panel frontal, funciones, posiblemente subVIs y otros objetos de LabVIEW que también podrían parecerle familiares. Creación del panel de iconos y conectores Tras crear un panel frontal y un diagrama de bloques del VI, cree el icono y el panel de conectores para poder utilizar el VI como un subVI. El icono y el panel de conectores se corresponden con el prototipo de función en lenguajes de programación basados en texto. Cada VI muestra un icono en la esquina superior derecha de la ventana del panel frontal y de la ventana del diagrama de bloques. El panel de conectores es un conjunto de terminales que se corresponde con los controles e indicadores de ese VI, similar a la lista de parámetros de una llamada a una función en lenguajes de programación basados en texto. El panel de conectores define las entradas y salidas que puede cablear al VI para que pueda usarlo como un subVI. Un panel de conectores recibe datos en sus terminales de entrada, los pasa al código del diagrama de bloques mediante los controles del panel frontal y recibe los resultados en sus terminales de salida desde los indicadores del panel frontal. Creación de un icono de VI desde una plantilla Complete estos pasos para crear un icono de VI que utilice la plantilla: 1. Pulse las teclas para seleccionar todas las capas de usuario del icono y pulse la tecla para eliminar la selección. 2. En la página Templates, seleccione la plantilla que creó. Puede examinar plantillas por categoría o por palabra clave. 3. En la página Icon Text, escriba hasta cuatro líneas de texto de icono para el cuerpo del icono. Puede configurar la fuente, alineación, tamaño y color del texto. Si marca la casilla de verificación Center text vertically, el cuadro de diálogo Icon Editor centra el texto del icono verticalmente en el cuerpo del icono. 4. En la página Glyphs, arrastre y suelte símbolos en la zona Preview. Pulse la tecla o para voltear un símbolo horizontalmente o girarlo en sentido horario, respectivamente, mientras lo mueve. También puede hacer doble clic en un símbolo para colocarlo en la esquina superior izquierda del icono. Puede examinar símbolos por categoría o por palabra clave. 5. Use la herramienta de mover para mover cualquier símbolo. Cada símbolo se encuentra en una capa distinta y por lo tanto se mueve independientemente. Tenga en cuenta que el resto del icono se atenúa cuando selecciona un símbolo, para poder identificar qué selección está moviendo. 6. Use las herramientas de edición a la derecha del cuadro de diálogo Icon Editor para modificar más el icono, si es necesario. El cuadro de diálogo Icon Editor crea una nueva capa de usuario para cada uso no consecutivo de las herramientas de edición. Seleccione Layers»Create New Layer para crear una nueva capa de usuario durante los usos consecutivos de las herramientas de edición. Configuración del panel de conectores Defina conexiones asignando un control o indicador del panel frontal a cada terminal del panel de conectores. El panel de conectores se muestra junto al icono del VI en esquina superior derecha de la ventana del panel frontal. Cuando se abre LabVIEW, se ve un panel de conectores predeterminado. Cada rectángulo del panel de conectores representa una terminal. Use los rectángulos para asignar entradas y salidas. El panel de conectores predeterminados 4 × 2 × 2 × 4. También puede seleccionar un patrón diferente haciendo clic con el botón derecho en el panel de conectores y seleccionando Patterns en el menú contextual. Si anticipa cambios en el VI que requieran una entrada o salida nueva, mantenga el panel de conectores predeterminado para dejar terminales extra desasignadas. Selección y modificación de modelos de terminales Seleccione otro modelo de terminales haciendo clic con el botón derecho en el panel de conectores y seleccionando Patterns en el menú contextual. Por ejemplo, puede seleccionar un modelo de panel de conectores con terminales adicionales. Puede dejar los terminales adicionales sin conectar hasta que los necesite. Esta flexibilidad permite realizar cambios con un efecto mínimo en la jerarquía de los VIs. Asignación de terminales a controles e indicadores Tras seleccionar un modelo para usar en el panel de conectores, puede asignar un control o indicador del panel frontal a cada terminal del panel de conectores. Cuando asigna controles e indicadores al panel de conectores, coloque entradas en la izquierda y salidas a la derecha para evitar modelos de cableado complicados o confusos. Uso de subVIs Para colocar un subVI en el diagrama de bloques, haga clic en el botón Select a VI en la paleta Functions. Navegue al VI que desee usar como subVI y haga doble clic para colocarlo en el diagrama de bloques. Apertura y modificación de subVIs Para ver el panel frontal de un subVI desde el VI que llama, use la herramienta de operaciones o de posicionamiento para hacer doble clic en el subVI del diagrama de bloques. Para ver el diagrama de bloques de un subVI desde el VI que llama, pulse la tecla y use la herramienta de operaciones o de posicionamiento para hacer doble clic en el subVI del diagrama de bloques. Configuración de entradas y salidas obligatorias, recomendadas y opcionales En la ventana Context Help, las etiquetas de terminales obligatorios aparecen en negrita, los terminales recomendados como texto sin formato y los opcionales aparecen atenuados. Las etiquetas de terminales opcionales no aparecen si hace clic en el botón Hide Optional Terminals and Full Path en la ventana Context Help. Puede designar qué entradas y salidas son obligatorias, recomendadas y opcionales para evitar que los usuarios olviden cablear terminales del subVI. Creación de un subVI desde un VI existente Puede simplificar el diagrama de bloques de un VI convirtiendo secciones de aquél en subVIs. Convierta una sección de un VI en un subVI utilizando la herramienta de posicionamiento para seleccionar la sección del diagrama de bloques que desee reutilizar y seleccionando Edit»Create SubVI. Un icono para el nuevo subVI sustituirá a la sección seleccionada del diagrama de bloques. LabVIEW crea controles e indicadores para el nuevo subVI, configura automáticamente el panel de conectores en función del número de terminales de controles y de indicadores seleccionado y cablea el subVI a los cables existentes. LECCION CINCO Creando y aprovechando estructuras de datos Arrays Un array consta de elementos y dimensiones. Los elementos son los datos que conforman el array. Una dimensión es la longitud, altura o profundidad de un array. Un array puede tener una o más dimensiones y un máximo de (231) - 1 elementos por dimensión, si lo permite la memoria. Puede crear arrays de tipos de datos numéricos, booleanos, rutas, cadenas de caracteres, forma de onda y cluster. Use arrays cuando trabaje con un conjunto de datos similares y cuando realice cálculos repetitivos. Los arrays son ideales para almacenar datos que recopile de formas de onda o datos generados en bucles, donde cada iteración de un bucle produce un elemento del array. Restricciones No puede crear arrays de arrays. Sin embargo, puede usar un array multidimensional o crear un array de clusters donde cada cluster contenga uno o más arrays. Asimismo, no puede crear un Array de controles subpanel, controles de pestañas, controles.NET, controles ActiveX, gráficos tipo “chart” o gráficos tipo “XY graph” de varias curvas. Consulte la sección de clusters de esta lección para obtener información adicional acerca de los clusters. Creación de controles e indicadores de tipo array Cree un control o indicador de array en el panel frontal añadiendo una estructura array al panel frontal, como se muestra en el siguiente panel frontal, y arrastrando un objeto o elemento de datos, que puede ser un control o indicador numérico, booleano, de cadena de caracteres, de ruta, de refnum o de cluster, en la estructura array. Si intenta arrastrar un control o indicador no válido a la estructura array, no podrá colocar el control o el indicador en la estructura array Creación de constantes de arrays Para crear una constante de array en el diagrama de bloques, seleccione una constante de array en la paleta de Funciones, coloque la estructura array en el diagrama de bloques y coloque una constante de cadena de caracteres, una constante numérica, una constante booleana o una constante de cluster en la estructura array. Puede utilizar una constante de array para almacenar datos de constantes o para comparar con otro array. Arrays bidimensionales Un array 2D almacena elementos en una cuadrícula. Requiere un índice de columna y un índice de fila para buscar un elemento, ambos basados en cero. Inicialización de arrays Puede inicializar un array o dejarlo sin inicializar. Para inicializar un array, debe definir el número de elementos de cada dimensión y el contenido de cada elemento. En un array 2D, tras inicializar un elemento de una fila, los elementos restantes de ésta se inicializan y se rellenan con el valor predeterminado para el tipo de dato. Funciones de array comunes LabVIEW agrupa las funciones que usted puede utilizar para manipular arrays en la paleta Array. Las siguientes funciones son las funciones más comunes cuando se trabaja con arrays. Array Size—Provee el número de elementos en cada dimensión de array. El panel de conectores muestra el tipo de datos predeterminado para esta función polimórfica. Initialize Array—Crea un array de dimensión n en el cual cada elemento está inicializado al valor de element. Use la herramienta de posicionamiento para cambiar el tamaño de la función y aumentar el número de dimensiones (elemento, fila, columna, página, etc) del array de salida. El panel de conectores muestra el tipo de datos predeterminado para esta función polimórfica. Array Subset—Provee una porción de array empezando en index y conteniendo length elementos. Build Array—Concatena múltiples arrays o agrega elementos a un array de n dimensiones. También puede usar la función Replace Array Subset para modificar un array existente. El panel de conectores muestra el tipo de datos predeterminado para esta función polimórfica. Index Array—Provee el elemento o subarray de n-dimension array en index. Cuando cablea un array a esta función, la función cambia su tamaño automáticamente para mostrar index entradas para cada dimensión en el array que cableo a n-dimension array. También. Polimorfismo Polimorfismo es la habilidad de VIs y funciones de adaptarse automáticamente para aceptar diferentes tipos de datos. Las funciones son polimórficas en diferentes grados—ninguna, algunas o todas sus entradas pueden ser polimórficas. Algunas entradas de funciones aceptan valores numéricos o booleanos. Algunas aceptan valores numéricos o cadenas de caracteres. Algunas aceptan no solo valores escalares, pero también arrays de valores numéricos, clusters de valores numéricos, arrays de clusters de valores numéricos y más. Polimorfismo para funciones aritméticas Las funciones aritméticas aceptan entrada de datos numéricos. Con algunas excepciones detalladas en la descripción de las funciones, la salida predeterminada tiene la misma representación que la entrada o si las entradas tienen diferentes representaciones, la salida predeterminada será igual a la representación más larga de las entradas. cluster. Para las funciones con dos entradas, puede usar las siguientes combinaciones: Similar—Ambas entradas tienen la misma estructura y la salida tiene la misma estructura que las entradas. Un escalar—Una entrada es un escalar numérico, la otra es un array o cluster y la salida es un array o cluster. Array de—Una entrada es un array numérico, la otra es el tipo numérico y la salida es un Array. En LabVIEW puede sumar dos arrays elemento por elemento. Ambos arrays deben tener la misma dimensión. Puede sumar arrays de diferente número de elementos, la salida de dicha suma tiene el mismo número de elementos que la entrada más pequeña. Combinaciones polimórficas de la función Add Polimorfismo para funciones booleanas Las funciones lógicas aceptan datos de entrada booleanos, numéricos y clusters de error. Si la entrada es numérica, LabVIEW realiza una operación bit a bit. Si entrada es un número entero, la salida tiene la misma representación. Las funciones lógicas con dos entradas pueden tener la misma combinación de entradas que las funciones aritméticas. Autoindexado Si cablea un array a o desde un bucle For o While, puede vincular cada iteración del bucle en un elemento de ese array habilitando el autoindexado. La imagen del túnel cambia de un cuadrado relleno a la imagen para indicar el autoindexado. Entradas de array y autoindexado Si habilita el autoindexado en un array cableado a un terminal de entrada de un bucle For, LabVIEW configurará el terminal de contaje en el tamaño del array, por lo que no tiene que cablear el terminal de contaje. Salidas de array y autoindexado Cuando autoindexa un túnel de salida de un array, el array de salida recibe un nuevo elemento de cada iteración del bucle. Por lo tanto, el tamaño de los arrays de salida autoindexados es siempre igual al número de iteraciones del bucle For. Creación de arrays bidimensionales Puede usar dos bucles For, anidados uno dentro del otro, para crear un array 2D. El bucle For externo crea los elementos de la fila, mientras que el interno crea los elementos de la columna. Autoindexado con un túnel condicional Usted puede determinar que valores LabVIEW escribe a la salida de un túnel de un bucle basado en una condición que especifica haciendo clic con el botón derecho en la salida del túnel y seleccionando Tunnel Mode»Conditional en el menú contextual. Gráficos tipo “Waveform graph” Los VIs con un gráfico normalmente acumulan los datos en un array y después los trazan en el gráfico. Los gráficos situados en la paleta Graph Indicators incluyen los tipos “waveform graph” y “XY graph”. El tipo “waveform graph” sólo representa funciones de una única variable, como en y = f(x), con puntos distribuidos uniformemente en el eje x, como las formas de onda adquiridas variables con el tiempo. Los gráficos XY muestran cualquier conjunto de puntos, muestreados uniformemente o no. Gráficos tipo “Waveform graph” de una sola curva El gráfico tipo “waveform graph” acepta varios tipos de datos para gráficos de una sola curva. El gráfico tipo “graph” acepta un solo array de valores, interpreta los datos como puntos del gráfico e incrementa el índice x en uno empezando por x = 0. Gráficos tipo “waveform graph” de varias curvas El gráfico tipo “waveform graph” acepta varios tipos de datos para mostrar varias curvas. Acepta un array 2D de valores, donde cada fila de ésta es una sola curva. El gráfico interpreta los datos como puntos del mismo e incrementa el índice x en uno, empezando por x = 0. Gráficos XY de una sola curva El gráfico XY acepta tres tipos de datos para gráficos XY de una sola curva. El gráfico XY acepta un cluster que contiene un array x y un array y. Gráficos XY “waveform graph” de varias curvas El gráfico XY acepta tres tipos de datos para mostrar varias curvas. Acepta un array de curvas, donde una curva es un cluster que contiene un array x y un Array y. El gráfico XY también acepta un array de clusters de curvas, siendo una curva un array de puntos. Un punto es un cluster que contiene un valor x y un valor y. Clusters Los clusters agrupan elementos de datos de tipos mixtos. Un ejemplo de un cluster es el cluster de error de LabVIEW, que combina un valor booleano, uno numérico y una cadena de caracteres. Un cluster es similar a un registro o una estructura en lenguajes de programación basados en texto. Orden de elementos del cluster Aunque los elementos del cluster y del array están ordenados, con la función Unbundle debe desunir todos los elementos del cluster enseguida. Puede utilizar la función Unbundle By Name. Creación de controles e indicadores de clusters Cree un control o indicador de clusters en el panel frontal añadiendo una estructura cluster al panel frontal, como se muestra en el siguiente panel frontal, y arrastrando un objeto o elemento de datos, que puede ser un control o indicador numérico, booleano, de cadena de caracteres, de ruta, refnum o cluster, en la estructura cluster. Orden de clusters Los elementos de clusters tienen un orden lógico no relacionado con su posición en la estructura. El primer objeto que coloca en el cluster es el elemento 0, el segundo es el elemento 1, etc. Si elimina un elemento, el orden se ajusta automáticamente. El orden del cluster determina el orden en que aparecen los elementos como terminales en las funciones Bundle y Unbundle en el diagrama de bloques. El cuadro blanco de cada elemento muestra su lugar actual en el orden del cluster. El cuadro negro muestra el nuevo lugar en el orden para un elemento. Para establecer la posición de un elemento en el cluster, escriba el número de orden nuevo en el cuadro de texto Click to set to y haga clic en el elemento. Uso de funciones de cluster Use las funciones de cluster para crear y manipular clusters. Por ejemplo, puede realizar tareas similares a las siguientes: Extraer elementos de datos individuales de un cluster. Añadir elementos de datos individuales a un cluster. Dividir un cluster en sus elementos de datos individuales. Use la función Bundle para ensamblar un cluster, use la función Bundle y la función Bundle by Name para modificar un cluster. Definiciones tipo Puede usar definiciones tipo para definir clusters y arrays personalizados. Una definición tipo es una copia maestra de un tipo de dato personalizado (control personalizado, indicador o constante) que múltiples VIs pueden usar. Cuando usa una definición tipo, usted puede actualizar todas las copias de un tipo de dato personalizado en una sola edición. Controles e indicadores personalizados Use controles e indicadores personalizados para ampliar el conjunto de objetos disponibles del panel frontal. Puede crear controles e indicadores personalizados para una aplicación que varían cosméticamente de los controles e indicadores predeterminados de LabVIEW. Puede guardar un control o indicador personalizado que creó en un directorio o LLB y usar el control o indicador personalizado en otros paneles frontales. También puede crear un icono para el control o indicador personalizado y añadirlo a la paleta Controls. Use el modo de edición para cambiar el tamaño o color de un control o indicador y para seleccionar opciones de su menú contextual, como haría en el modo de edición de un panel frontal. Use el modo de personalización para realizar grandes cambios en controles e indicadores cambiando cada parte de un control o indicador. Definiciones tipo Use definiciones tipo y definiciones tipo estrictas para vincular todas las copias de un control o indicador personalizado a un archivo de control o indicador personalizado guardado. Si desea vincular copias de un control o indicador personalizado con el archivo de control o indicador personalizado, guarde el control o indicador personalizado como una definición tipo o una definición tipo estricta. Cuando guarda un control o indicador personalizado como una definición tipo o una definición tipo estricta, cualquier cambio de tipo de dato que realice en la definición tipo o tipo estricta afecta a todas las copias de la definición tipo o tipo estricta en todos los VIs que la utilicen. Asimismo, los cambios de aspecto que realice en una definición tipo estricta afectan a todas las copias de la definición tipo estricta del panel frontal. No obstante, como las definiciones tipo identifican sólo el tipo de dato, sólo se actualizarán los valores que formen parte del tipo de dato. Definiciones tipo estrictas Una definición tipo estricta fuerza que la copia sea idéntica a la definición de tipo estricta, excepto en el título, etiqueta, descripción, ayuda y valor predeterminado. Al igual que las definiciones tipo, el tipo de dato de una definición tipo estricta permanece invariable en cualquier lugar donde use la definición tipo estricta. LECCION SEIS Administrando archivos y recursos hardware Entendiendo recursos hardware y software Un recurso es un archivo direccionable, dispositivo de hardware, objeto o conexión de red disponible en el sistema. El sistema identifica recursos usando rutas, nombres, puertos u otros identificadores. Al usar estos identificadores y los VIs y funciones que LabVIEW provee, usted puede programar su sistema para acceder estos recursos. Accediendo recursos en LabVIEW Un recurso operacional típico involucra las siguientes operaciones: 1. Crear el recurso. 2. Leer y escribir en el recurso. 3. Cerrar el recurso. 4. Revisar errores en un recurso Los nombres de funciones o VIs asociados con crear un recurso generalmente incluyen uno de los siguientes verbos: abrir (open), inicializar (initialize) o crear (create). La función o VI que crea el recurso toma la ruta del recurso o el nombre del dispositivo como una entrada y luego crea un identificador único al recurso. Números de referencia (Refnums) Un número de referencia, o refnum, es un identificador único para un recurso. Cuando abre un fichero, dispositivo o conexión de red, LabVIEW crea un refnum asociado a ellos. Si un VI abre un objeto múltiples veces, cada operación de apertura devuelve un refnum diferente. LabVIEW automáticamente cierra refnums cuando finaliza la ejecución de un VI pero es una buena práctica de programación cerrar los refnums tan pronto como haya terminado de usarlos para manejar eficientemente memoria y otros recursos. Cierre refnums en orden opuesto al que los abrió. E/S de ficheros Las operaciones de E/S de ficheros pasan datos desde y hacia archivo. Use los VIs y funciones de E/S de ficheros para manejar todos los aspectos de E/S de archivos. Comprender la E/S de ficheros Una operación típica de E/S de ficheros incluye el siguiente: 1. Cree o abra un fichero. Tras abrir el fichero, un identificador único denominado refnum representará el fichero. 2. La función o el VI File I/O lee en el fichero o escribe en él. 3. Cierre el fichero. Formatos de ficheros LabVIEW puede utilizar o crear los siguientes formatos de archivo: Binario, ASCII, LVM, y TDMS. Binario: los ficheros binarios son el formato de fichero subyacente del resto de formatos de fichero. ASCII: un fichero ASCII es un tipo específico de fichero binario y es un estándar que utilizan la mayoría de los programas. Consta de una serie de códigos ASCII. Los ficheros ASCII también se denominan ficheros de texto. LVM: el fichero de datos de medición de LabVIEW (.lvm) es un fichero de texto delimitado con tabulaciones que puede abrir con una aplicación de hoja de cálculo o un editor de texto. El fichero (.lvm) incluye información sobre los datos, como la fecha y la hora en que se generaron. Este formato de ficheros es un tipo específico de un fichero ASCII creado para LabVIEW. TDMS: este formato de ficheros es un tipo específico de un fichero binario creado para productos de National Instruments. Consta de dos ficheros distintos: uno binario que contiene datos y almacena propiedades sobre los datos y un fichero de índice binario que ofrece información consolidada sobre todos los atributos y punteros del fichero binario. E/S de ficheros de alto nivel Algunos VIs de E/S de fichero realizan los tres pasos de un proceso de E/S de ficheros: abrir, leer/escribir y cerrar. Si un VI realiza los tres pasos, se denomina VI de alto nivel. Sin embargo, estos VIs quizá no sean tan eficientes como las funciones y los VIs de bajo nivel diseñados para partes concretas del proceso. LabVIEW incluye los siguientes VIs de E/S de ficheros de alto nivel: Write to Spreadsheet File: convierte un array 2D o 1D de números de doble precisión en una cadena de caracteres de texto y escribe ésta en un nuevo fichero ASCII o anexa los datos de la cadena de caracteres en un fichero existente. Read From Spreadsheet File: El VI abre el fichero antes de leerlo y lo cierra después. Puede utilizar este VI para leer un fichero de hoja de cálculo guardado en formato de texto. Write to Measurement File: Puede especificar el método de guardado, el formato de fichero (.lvm o.tdms), el tipo de encabezado y el delimitador. Read from Measurement File: un VI Express que lee datos de un formato de fichero de medidas basado en texto (.lvm) o un fichero de medidas binario (.tdms). Comprender la E/S de ficheros de bajo nivel Los VIs y funciones de E/S de fichero de bajo nivel realizan sólo una parte del proceso de E/S de fichero cada uno. Por ejemplo, existe una función para abrir un fichero ASCII, otra para leerlo y otra para cerrarlo. Use funciones de bajo nivel cuando la E/S de fichero esté realizándose en un bucle. Flujo continuo de datos a disco con funciones de bajo nivel El flujo continuo de datos a disco es una técnica para mantener los ficheros abiertos mientras realiza varias operaciones de escritura, por ejemplo, dentro de un bucle. Si cablea un control de ruta o una constante a la función Write to Text File, la función Write to Binary File o el VI Write To Spreadsheet File, añade el retardo de abrir y cerrar el fichero cada vez que se ejecuta la función o el VI. Los VIs pueden ser más eficientes si evita abrir y cerrar los mismos ficheros con frecuencia. Al abrir el fichero una vez antes de que empiece el bucle y cerrarlo cuando termina el bucle, ahorra dos operaciones de fichero en cada iteración del bucle. Ejemplo sin flujo continuo de datos a disco Ejemplo con flujo continuo de datos a disco Directorio LabVIEW Data Puede utilizar el directorio predeterminado LabVIEW Data para almacenar los ficheros de datos que genere LabVIEW, como ficheros (.lvm o.txt.) LabVIEW instala el directorio LabVIEW Data en el directorio de ficheros predeterminado de su sistema operativo para ayudarle a organizar y encontrar los ficheros de datos que genere LabVIEW. La constante Default Data Directory y la propiedad Application:Default:Data Directory también devuelven el directorio LabVIEW Data de forma predeterminada. Tools»Options y Paths en la lista Category para especificar un directorio de datos predeterminado distinto. Adquiriendo mediciones con sistema DAQ Un sistema de adquisición de datos (DAQ) usa un dispositivo de adquisición de datos para pasar una señal eléctrica acondicionada a un ordenador para el análisis software y registro de datos. Un sistema DAQ típico tiene tres tipos básicos de hardware: un bloque de terminales, un cable y un dispositivo DAQ Uso de un bloque de terminales y un cable Un bloque de terminales permite conectar señales. Consta de terminales de tornillo o de muelle para conectar señales y un conector para acoplar un cable que conecte el bloque de terminales a un dispositivo DAQ. Los bloques de terminales tienen 100, 68 o 50 terminales. El tipo de bloque de terminales que debe elegir depende de dos factores: el dispositivo y el número de señales que está midiendo. Un bloque de terminales con 68 terminales ofrece más terminales de tierra para conectar una señal que un bloque de terminales con 50 terminales. Tener más terminales de tierra evita tener que solapar cables para alcanzar un terminal de tierra, lo que puede provocar interferencias entre las señales. Un cable transporta la señal desde el bloque de terminales al dispositivo DAQ. Los cables tienen configuraciones de 100, 68 y 50 pines. Uso de dispositivos DAQ La mayoría de los dispositivos DAQ tienen cuatro elementos estándares: entrada analógica, salida analógica, E/S digital y contadores. Puede transferir la señal que mide con el dispositivo DAQ al ordenador a través de distintas estructuras de bus. Si no dispone de un dispositivo DAQ, puede simular uno en Measurement & Automation Explorer (MAX) para completar la prueba de su software. Entrada analógica La entrada analógica es el proceso de medir una señal analógica y transferir la medida a un ordenador para su análisis, visualización o almacenamiento. La adquisición de una señal analógica con un ordenador requiere un proceso conocido como conversión analógico-digital, que capta la señal eléctrica y la traduce en datos digitales para que el ordenador pueda realizar el procesamiento. Salida analógica La salida analógica es el proceso de generar señales eléctricas desde el ordenador. La salida analógica se genera realizando la conversión digital-analógico (D/A). Un DAC tiene un reloj de actualización que indica al DAC cuándo generar un nuevo valor. La función del reloj de actualización es similar a la del reloj de muestreo para un ADC. En cada ciclo de reloj, el DAC convierte un valor digital en una tensión analógica y genera una tensión de salida en uno de los pines. E/S digital Las señales digitales son señales eléctricas que transfieren datos digitales por un cable. Estas señales normalmente tienen sólo dos estados: on y off, también conocidos como alto y bajo, o 1 y 0. Cuando envía una señal digital por un cable, el emisor aplica tensión en el cable y el receptor usa el nivel de tensión para determinar el valor que se está. Contadores Un contador es un dispositivo de temporización digital. Normalmente se utilizan contadores para contar eventos, medir frecuencias, medir periodos, medir posiciones y generar pulsos. El siguiente flanco activo obliga al contador a reiniciarse y empezar en 0. Uso del software DAQ Los dispositivos de adquisición de datos de National Instruments disponen de un controlador que comunica el dispositivo y el software de aplicación. Puede usar LabVIEW para comunicarse con estos controladores. NI-DAQmx contiene VIs, funciones y herramientas de desarrollo para controlar dispositivos de medición. Consulte la sección Programando con DAQ en LabVIEW. Configuración del hardware DAQ Antes de usar un dispositivo de adquisición de datos, debe confirmar que el software puede comunicarse con el dispositivo configurando los dispositivos. Windows El Administrador de configuración de Windows ayuda a realizar un seguimiento del hardware instalado en el ordenador, como los dispositivos DAQ de National Instruments. Si tiene un dispositivo Plug & Play (PnP), como un dispositivo MIO Serie E, el Administrador de configuración de Windows detecta y configura automáticamente el dispositivo. Si dispone de un dispositivo que no sea PnP, o un dispositivo legacy, debe configurar el dispositivo manualmente con la opción Agregar nuevo hardware en el Panel de control de Windows. Puede comprobar la configuración de Windows accediendo al Administrador de dispositivos. Puede ver Data Acquisition Devices, que muestra todos los dispositivos DAQ instalados en el ordenador. Measurement & Automation Explorer MAX establece todos los parámetros de configuración de dispositivos y canales. Tras instalar un dispositivo DAQ en el ordenador, debe ejecutar esta utilidad de configuración. MAX lee la información que registra el Administrador de dispositivos en el registro de Windows y asigna un número de dispositivo lógico a cada dispositivo DAQ. Use el número de dispositivo para hacer referencia al dispositivo de LabVIEW. Acceda a MAX haciendo doble clic en el icono del escritorio o seleccionando Tools»Measurement & Automation Explorer en LabVIEW. Los parámetros de dispositivos que puede ajustar con esta utilidad de configuración dependen del dispositivo. MAX guarda el número de dispositivo lógico y los parámetros de configuración en el registro de Windows. Simulación de un dispositivo DAQ Puede crear dispositivos simulados NI-DAQmx en NI-DAQmx 7.4 o posterior. Con los dispositivos simulados NI-DAQmx puede probar productos de NI en su aplicación sin el hardware. Cuando adquiera el hardware posteriormente, puede importar la configuración del dispositivo simulado NI-DAQmx en el dispositivo físico usando el MAX Portable Configuration Wizard. Programando con DAQ en LabVIEW Ya comprende los transductores, señales, configuración de dispositivos DAQ y MAX. NI-DAQmx es compatible con paquetes de software distintos de LabVIEW, pero este curso sólo describe el desarrollo de aplicaciones DAQ con LabVIEW. DAQmx Name Controls La paleta DAQmx Name Controls incluye controles para el nombre de tarea, nombre de canal, canal físico, terminal, nombre de escala, nombre de dispositivo y conmutador. También puede crear estos controles haciendo clic con el botón derecho en el terminal de entrada correspondiente en un VI DAQmx y seleccionando Create»Control. VIs DAQmx - Data Acquisition Use los VIs NI-DAQmx con los dispositivos hardware NI-DAQ para crear aplicaciones de instrumentos, adquisición y control. Consulte la guía DAQ Getting Started Guide o el fichero NI-DAQ Readme para ver la lista completa de dispositivos que admite NI-DAQmx. La paleta DAQmx - Data Acquisition incluye las siguientes constantes y VIs. Constantes Constante DAQmx Task Name—Muestra todas las tareas que cree y guarde utilizando el DAQ Constante DAQmx Global Channel—Muestra todos los canales globales que cree y guarde utilizando el DAQ VIs VI DAQmx Create Virtual Channel—Crea un canal virtual o conjunto de canales virtuales y los añade a una tarea. Las copias de este VI polimórfico corresponden al tipo E/S del canal, como entrada analógica, salida digital o salida de contador. Esta función configura los mismos ajustes que configura en MAX al crear un canal virtual. Use esta función si el operador de su programa pudiera cambiar periódicamente la conexión del canal físico, pero no otros ajustes importantes, como el modo de configuración del terminal o la escala personalizada aplicada. VI DAQmx Read—Lee muestras de la tarea o canales que especifiqué. Las copias de este VI polimórfico especifican qué formato de las muestras hay que devolver, si hay que leer una sola muestra o varias a la vez y si hay que leer de uno o varios canales. VI DAQmx Write—Escribe muestras en la tarea o canales que especifiqué. Las copias de este VI polimórfico especifican qué formato de las muestras hay que escribir, si hay que escribir una sola muestra o varias y si hay que escribir en uno o varios canales. VI DAQmx Wait Until Done—Espera a que se complete la medida o generación. Use este VI para que la operación especificada se complete antes de que detenga la tarea. VI DAQmx Timing— Configura el número de muestras que hay que adquirir o generar y crea un búfer cuando es necesario. Las copias de este VI polimórfico corresponden al tipo de temporización que se utilizará en la tarea. VI DAQmx Trigger—Configura la activación de la tarea. Las copias de este VI polimórfico corresponden al trigger y al tipo de trigger que hay que configurar. VI DAQmx Start Task—Transiciona la tarea al estado de ejecución para empezar a medir o a generar. Debe usar este VI para algunas aplicaciones y es opcional para otras. VI DAQmx Stop Task—Detiene la tarea y la devuelve al estado en que se encontraba ésta antes de que utilizara el VI DAQmx Start Task o el VI DAQmx Write con la entrada autostart configurada a TRUE. VI DAQmx Clear Task—Borra la tarea. Antes de borrar, este VI detiene la tarea, si es necesario, y libera los recursos que reserva aquélla. No puede utilizar una tarea tras borrarla, a menos que vuelva a crearla. Controlando Instrumentos Cuando usa un ordenador para automatizar un sistema de prueba, no se limita al tipo de instrumento que puede controlar. LabVIEW permite controlar virtualmente cualquier tipo de instrumento incluyendo amplificadores, analizadores, calibradores, osciloscopios, fuentes de poder, generadores de señales, sensores y más. Puede mezclar y combinar instrumentos de varias categorías. Las categorías más comunes de interfaces de instrumentos son GPIB, USB, Ethernet, serie e instrumentos modulares. Otros tipos de instrumentos son adquisición de imágenes, control de movimiento, puerto paralelo, NI-CAN y otros dispositivos. Este curso se enfoca en GPIB. Configurando un instrumento GPIB La arquitectura software para el control de instrumentos mediante LabVIEW es similar a la arquitectura para DAQ. Las interfaces de instrumentos como GPIB incluyen varios controladores. Use MAX para configurar la interfaz. MAX (Windows: GPIB) Use MAX para configurar y probar la interfaz GPIB. MAX interactúa con las herramientas de diagnóstico y configuración instaladas con el controlador y también con el registro de Windows y el Administrador de dispositivos. El software a nivel de controlador toma la forma de una DLL y contiene todas las funciones que se comunican directamente con la interfaz GPIB. Los VIs y las funciones de Instrument I/O llaman directamente al software del controlador. Lance MAX haciendo doble clic en el icono del escritorio o seleccionando Tools» Measurement & Automation Explorer en LabVIEW. El siguiente ejemplo muestra una interfaz GPIB en MAX tras hacer clic en el botón Scan For Instruments de la barra de herramientas. Los VIs de un controlador de instrumento se organizan en seis categorías. Estas categorías se resumen en la siguiente tabla. Categoría Descripción El VI Initialize establece comunicación con el Inicializar instrumento y es el primer VI del controlador de instrumento al que se llama. Los VIs Configure son rutinas de software que configuran el instrumento para realizar operaciones Configurar específicas. Tras llamar a estos VIs, el instrumento está listo para realizar medidas o estimular un sistema. Los VIs Action/Status ordenan al instrumento realizar una acción (por ejemplo, armar un trigger) u Acción/Estado obtener el estado actual de las operaciones pendientes o del instrumento Los VIs de datos transfieren datos al instrumento Datos o desde él. Los Vis Utility realizan varias operaciones Utilidad auxiliares, como reinicio y autodiagnóstico. El VI Close termina la conexión software con el Cerrar instrumento. Es el último VI del controlador de instrumento al que se llama. LECCION SIETE Usando algoritmos de máquinas de estado y secuenciales Programación secuencial Muchos de los VIs que escribe en LabVIEW cumplen tareas secuenciales. El modo de programar estas tareas secuenciales puede ser muy distinto. En este diagrama de bloques, se adquiere una señal de tensión, un cuadro de diálogo indica al usuario que active la alimentación, la señal de tensión se adquiere de nuevo y al usuario se le indica que debe apagar la alimentación. En LabVIEW puede completar tareas secuenciales colocando cada una en un subVI y ordenando los subVIs en el orden en que desee que se ejecuten usando los cables del cluster de error. Puede usar una estructura Sequence para forzar el orden de operaciones de los objetos del diagrama de bloques. Una estructura Sequence contiene uno o más subdiagramas, o marcos, que se ejecutan en orden secuencial; un marco no puede empezar la ejecución hasta que se haya completado la ejecución de todo el código del marco anterior. Tareas secuenciadas con una estructura Sequence Para aprovechar el paralelismo inherente de LabVIEW, evite abusar del uso de estructuras Sequence. La estructura Sequence garantizan el orden de ejecución, pero prohíben operaciones paralelas. Otra desventaja de usar estructuras Sequence es que no puede detenerse la ejecución en medio de la secuencia. Sin embargo, el mejor modo de escribir este VI es encerrar las funciones One Button Dialog en una estructura Case y cablear el cluster de error al selector de caso. Programación de estado Aunque una estructura Sequence y subVIs cableados secuencialmente cumplen la tarea, los Vis suelen requerir programación más compleja. En su programa siempre existe la posibilidad de que sea modificado en el futuro. Por este motivo, una arquitectura de programación de estado es una buena elección, aunque bastaría con una estructura de programación secuencial. Máquinas de estados Una máquina de estados, que se define mejor como una máquina de estados finitos, consta de una serie de estados y una función de transición que indica cuál es el siguiente estado. Las máquinas de estados tienen numerosas variaciones. Aplicación de máquinas de estados Use máquinas de estados en aplicaciones donde se distingan los estados. Cada estado puede llevar a uno o más estados o finalizar el flujo del proceso. Una máquina de estados depende de la entrada del usuario o del resultado del estado actual para determinar qué estado irá después. Infraestructura de la máquina de estados Trasladar el diagrama de transición de estados a un diagrama de bloques de LabVIEW requiere los siguientes componentes de infraestructura: Bucle While: ejecuta continuamente los estados. Estructura Case: contiene un caso para cada estado y el código para ejecutar en cada estado. Registro de desplazamiento: contiene la información de transición de estados. Código de funcionalidad de estado: implementa la función del estado. Código de transición: determina el siguiente estado de la secuencia. Control de máquinas de estados El mejor método para controlar la inicialización y transición de máquinas de estados es el control de tipo enumerado. Los enums se utilizan ampliamente como selectores de caso en máquinas de estados. Transición de máquinas de estados Existen numerosos modos de controlar qué caso ejecuta una estructura Case en una máquina de estados. Elija el método que se adapte mejor a la función y complejidad de su máquina de estados. Transición predeterminada Para la transición predeterminada, no se requiere código para determinar el siguiente estado, porque sólo hay un estado posible que ocurrirá a continuación. Transición entre dos estados El siguiente método implica tomar una decisión en una transición entre dos estados, para ello se suelen utilizar varios modelos. Este método funciona bien si sabe que cada estado siempre transiciona entre dos estados. Transición entre dos o más estados Cree una arquitectura más escalable utilizando uno de los siguientes métodos para la transición entre estados. Estructura Case: use una estructura Case en lugar de la función Select para el código de transición. Código de transición de la estructura Case Una ventaja de usar una estructura Case es que el código se autodocumenta. Como cada caso de la estructura Case corresponde a un elemento del enum, resulta fácil leer y comprender el código. Una estructura Case también es escalable. A medida que crece la aplicación, puede añadir más transiciones a un estado concreto añadiendo más casos a la estructura Case para ese estado. Una desventaja de usar una estructura Case es que no se ve todo el código a la vez. Debido a la naturaleza de la estructura Case, no se puede ver de una vez toda la funcionalidad del código de transición. Array de transición: si tiene que ver más código del que permite la estructura Case, puede crear un array de transición para todas las transiciones que tengan lugar. LECCION OCHO Resolviendo desafíos de flujo de datos con variables Comunicación entre bucles paralelos En este curso el paralelismo hace referencia a ejecutar varias tareas a la vez. Piense en el ejemplo de crear y mostrar dos ondas sinusoidales con distintas frecuencias. Con el paralelismo, coloque una onda sinusoidal en un bucle y la segunda onda sinusoidal en otro bucle. Panel frontal de bucles paralelos Método 1 (incorrecto) Coloque el terminal Stop Button fuera de ambos bucles y cabléelo a cada terminal condicional. El Loop Control es una entrada de datos de ambos bucles, por lo que elterminal Stop Button se lee sólo una vez, antes de que cualquier bucle While empiece a ejecutarse. Si False pasa a los bucles, los bucles While se ejecutan indefinidamente. Hacer clic en el botón Stop no detendrá el VI, porque el clic en el botón no se lee durante la iteración de cada bucle. Método 2 (incorrecto) Introduzca el terminal Stop Button dentro del Loop 1 para que se lea en cada iteración del Loop 1, como se muestra en el siguiente diagrama de bloques. Aunque el Loop 1 termina correctamente, el Loop 2 no se ejecuta hasta que recibe todas sus entradas de datos. El Loop 1 no pasa los datos fuera del bucle hasta que se detenga el bucle, por lo que el Loop 2 debe esperar al valor final del Stop Button, disponible cuando termine el Loop 1. Por lo tanto, los bucles no se ejecutan en paralelo. Asimismo, el Loop 2 se ejecuta sólo para una iteración porque su terminal condicional recibe un valor True del interruptor Stop Button del Loop 1. Método 3 (solución) Otra forma de realizar esta tarea de comunicarse entre bucles paralelos es buscar la ubicación donde los datos de control del bucle estén almacenados en la memoria y leer esa ubicación de memoria directamente. Una variable local permite hacer esto al leer del mismo control del panel frontal en más de una ubicación en el diagrama. Escribiendo a controles y leyendo de indicadores Con una variable local puede escribir o leer desde un control o indicador del panel frontal. En efecto, con una variable local puede acceder a un objeto del panel frontal tanto una entrada como una salida. Variables En LabVIEW, el orden de ejecución de los mismos no está determinado por el orden secuencial de los comandos sino por el flujo de datos. Por lo tanto, puede crear diagramas de bloque que tengan operaciones simultáneas. Las variables locales almacenan datos en los controles e indicadores del panel frontal. Las variables globales y las variables compartidas tipo single-process almacenan datos en repositorios especiales a los que puede accederse desde varios VIs. Las variables globales funcionales almacenan datos en registros de desplazamiento del bucle While. Independientemente de dónde almacene los datos la variable, todas las variables permiten eludir el flujo de datos normal pasando datos de un lugar a otro sin necesidad de un cable de interconexión. Variables Locales - Uso de variables en un solo VI Las variables locales transfieren datos dentro de un solo VI. En LabVIEW usted lee datos de un objeto del panel frontal o escribe datos en él usando su terminal del diagrama de bloques. Sin embargo, un objeto del panel frontal sólo tiene un terminal del diagrama de bloques, y quizá su aplicación necesite acceder a los datos de ese terminal desde más de una ubicación. Las variables locales y globales pasan información entre ubicaciones en la aplicación que no se pueden conectar con un cable. Creación de variables locales Haga clic con el botón derecho en un objeto del panel frontal o en un terminal del diagrama de bloques y seleccione Create»Local Variable en el menú contextual para crear una variable local. Aparecerá un icono de variable local para el objeto en el diagrama de bloques. Lectura y escritura de variables Tras crear una variable, puede leer datos desde una variable o escribir datos en ella. De forma predeterminada, una variable nueva recibe datos. Este tipo de variable funciona como indicador y es de escritura local o global. Cuando escribe datos nuevos en la variable local o global, el control o indicador del panel frontal asociado se actualiza con los nuevos datos. Variables globales y compartidas - Usando variables entre Vis Puede usar variables para acceder y pasar datos entre varios VIs que se ejecutan simultáneamente. Una variable local comparte datos dentro de un VI. Una variable global también comparte datos, pero entre varios VIs. Creación de variables globales Cuando crea una variable global, LabVIEW crea automáticamente un VI global especial, que tiene panel frontal pero no diagrama de bloques. Seleccione una variable global en la paleta Functions y colóquela en el diagrama de bloques. Haga doble clic en el nodo de la variable global para ver el panel frontal del VI global. LabVIEW usa etiquetas propietarias para identificar variables globales. Por lo tanto, etiquete controles e indicadores del panel frontal con etiquetas propietarias descriptivas. La barra de herramientas no muestra los botones Run, Stop u otros relacionados como una ventana normal de un panel frontal. Tras terminar de colocar objetos en el panel frontal del VI global, guárdelo y vuelva al diagrama de bloques del VI original. A continuación, debe seleccionar el objeto en el VI global al que deseé acceder. Haga clic en el nodo de variable global y seleccione un objeto del panel frontal en el menú contextual. Creación de variables compartidas tipo single-process Debe utilizar un archivo de proyecto para usar una variable compartida. Para crear una variable compartida tipo single-process, haga clic con el botón derecho en My Computer en la ventana Project Explorer y seleccione New»Variable. Aparecerá el cuadro de diálogo Shared Variable Properties, como en la figura. En Variable Type, seleccione Single Process. Dé a la variable un nombre y un tipo de datos. Tras crear la variable compartida, aparecerá automáticamente en una nueva biblioteca de su archivo de proyecto. Inicialización de variables Para inicializar una variable local o global, compruebe que ésta contenga valores de datos conocidos antes de que se ejecute el VI. De lo contrario, las variables podrían contener datos que hagan que el VI funcione incorrectamente. Para que se ejecute primero, puede aislar el código que escribe el valor inicial de la variable en el primer marco de una estructura de secuencia o en un subVI y cablear el subVI para que se ejecute primero en el flujo de datos del diagrama de bloques, como se muestra abajo: Evitando problemas de programación inherentes con variables Las variables locales y globales son conceptos avanzados de LabVIEW. Inherentemente no forman parte del modelo de ejecución del flujo de datos de LabVIEW. Algunos de los problemas de programación con variables pueden incluir los siguientes: Hace que el código del diagrama de bloques sea difícil de leer—Al romper el modelo de flujo de datos, no se pueden usar cables para seguir el flujo de los datos. Lleva a comportamientos inesperados en los VIs—Usar variables en lugar de panel de conectores o usar variables para acceder valores en cada cuadro de una estructura Sequence es una mala práctica por que puede causar comportamiento inesperado en VIs. Redimiento lento—El uso excesivo de variables locales y globales, como usarlas para evitar cables largos a través del diagrama de bloques o usarlas en lugar de flujo de datos, disminuye el rendimiento. Condiciones de carrera Una condición de carrera ocurre cuando la temporización de eventos o la programación de tareas afecta involuntariamente a un valor de salida o de datos. Las condiciones de carrera suponen un problema común en los programas que ejecutan varias tareas en paralelo y comparten datos entre ellos. Las condiciones de carrera son difíciles de identificar y de depurar, porque el resultado depende del orden en que el sistema operativo ejecuta tareas programadas y la temporización de eventos externos. Usualmente, un código con una condición de carrera puede devolver el mismo resultado miles de veces durante las pruebas, pero aun así ser capaz de devolver un resultado diferente en cualquier momento. Para evitar condiciones de carrera, lo mejor es seguir estas técnicas: Control y limitación de recursos compartidos Secuenciando instrucciones apropiadamente especificando un orden de ejecución. Reduciendo el uso de variables. Controlar y limitar recursos compartidos Las condiciones de carrera son más comunes cuando dos tareas tienen que leer y escribir a un recurso. Un recurso es cualquier entidad compartida entre los procesos. Cuando se trata con condiciones de carrera, los recursos compartidos más comunes son el almacenamiento de datos, como las variables. Otros ejemplos de recursos son archivos y referencias a recursos de hardware. Secuenciando instrucciones apropiadamente El código en el que el flujo de datos no se usa correctamente para controlar el orden de ejecución puede causar condiciones de carrera. Si no se establece una dependencia de datos, LabVIEW puede programar tareas en cualquier orden, con lo que pueden surgir condiciones de carrera si las tareas dependen entre sí.

Use Quizgecko on...
Browser
Browser