image

Programación gráfica para ingenieros

Primera edición, junio 2010

© 2010 José Miguel Molina Martínez

© 2010 Manuel Jiménez Buendía

© 2010 MARCOMBO, S.A.
Gran Via de les Corts Catalanes, 594
08007 Barcelona
www.marcombo.com

Diseño de la cubierta: NDENU DISSENY

«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».

ISBN-13: 978-84-267-2066-5

ÍNDICE

Bloque I

LabVIEW. Lenguaje de Programación Gráfico

1.    Entorno de Programación LabVIEW

1.1    INTRODUCCIÓN

1.2    PROGRAMACIÓN GRÁFICA

1.3    INSTRUMENTOS VIRTUALES

1.4    MENÚS DE LABVIEW

1.5    BARRA DE HERRAMIENTAS (TOOLBAR)

1.6    PALETAS DE CONTROLES, FUNCIONES Y HERRAMIENTAS

2.    Diseño y creación de una aplicación. Instrumento Virtual

2.1    INTRODUCCIÓN

2.2    CREACIÓN DE UN VI

2.3    FLUJO DE DATOS (DATAFLOW)

2.4    SUBVIS

2.5    PROYECTOS

3.    Programación Estructurada y Tipos de Datos

3.1    INTRODUCCIÓN

3.2    ESTRUCTURAS EN LABVIEW

3.2.1    Estructuras iterativas

3.2.2    Estructuras de casos y eventos

3.2.3    Estructuras de secuencia (Flat Sequence y Stacked Sequence)

3.2.4    Estructuras temporizadas. Timed Loop y Timed Sequence

3.2.5    Nodos de Fórmula (Formula Node) y Scripts

3.2.6    Variables locales, globales y compartidas

3.3    TIPOS DE DATOS

3.3.1    Tipos Primitivos: Boolean, Numeric y String

3.3.2    Arrays y Clusters

4.    Análisis y Visualización de Datos

4.1    INTRODUCCIÓN

4.2    INDICADORES DE TIPO CHART

4.2.1    Waveform Chart

4.2.2    Intensity Chart

4.3    INDICADORES DE TIPO GRAPH

4.3.1    Waveform Graph

4.3.2    XY Graph

4.3.3    Intensity Graph

4.3.4    Digital Waveform Graph y Mixed Signal Graph

4.3.5    Cursores en los gráficos

4.3.6    Gráficos 3D

4.4    OTROS INDICADORES GRÁFICOS

5.    Programación Avanzada

5.1    INTRODUCCIÓN

5.2    ARQUITECTURAS BÁSICAS DE PROGRAMACIÓN

5.2.1    Arquitectura de Simple

5.2.2    Arquitectura de un VI General

5.2.3    Arquitectura de Máquina de Estado

5.2.4    Manejo de Errores.

5.3    NODOS DE PROPIEDAD Y MÉTODOS

5.4    MANIPULACIÓN DE DATOS

5.4.1    Type Cast

5.4.2    Manipulación de Bytes y Bits

5.4.3    Otras Transformaciones.

5.5    MANEJO DE FICHEROS

5.5.1    Abrir y Cerrar Ficheros

5.5.2    Ficheros de Texto

5.5.3    Ficheros Binarios

5.5.4    Ficheros de Hoja de Cálculo (Spreadsheet)

5.5.5    Format Into File y Scan From File

5.5.6    Path

5.5.7    Measurement File (VIs Express)

5.5.8    Ficheros ZIP

5.5.9    VIs Avanzados

5.5.10    Ficheros de Configuración

5.5.11    Ficheros XML

5.5.12    Ficheros de Imagen y Sonido

5.5.13    Informes (Reports)

5.5.14    Almacenamiento (Storage)

5.5.15    Datalog

5.5.16    Waveform.

5.6    ACCESO REMOTO Y ENLACES DE DATOS

5.6.1    Publicación Web y Acceso Remoto

5.6.2    Enlaces de Datos

5.6.3    VI Server

5.7    CREACIÓN DE LIBRERÍAS Y EJECUTABLES

5.8    INTERFAZ DE USUARIO

5.8.1    Personalización de la apariencia del VI

5.8.2    Subpaneles, Splitters y Pestañas

5.8.3    Personalización de Menús

5.8.4    Teclado

5.8.5    Consejos para el Diseño de la Interfaz de usuario

Bloque II

Sistemas de Control y Adquisición de Datos

6.    Sistemas de Instrumentación y Control basados en ordenador

6.1    INTRODUCCIÓN

6.2    ESTRUCTURA DE UNA APLICACIÓN DE INSTRUMENTACIÓN Y CONTROL POR ORDENADOR

6.3    SENSORES TRANSDUCTORES

6.4    TIPOS DE SEñALES.

6.5    ACONDICIONAMIENTO DE SEñAL

6.5.1    Amplificación

6.5.2    Linealización.

6.5.3    Excitación de Transductores.

6.5.4    Aislamiento

6.5.5    Filtrado.

6.6    ELECTRÓNICA DE ADQUISICIÓN DE DATOS

6.7    ELECTRÓNICA DE ANÁLISIS

6.8    COMPUTADOR Y SOFTWARE.

6.9    INSTRUMENTACIÓN VIRTUAL

7.    Tarjetas de Adquisición de Datos y Controladores Compactos

7.1    INTRODUCCIÓN

7.2    CARACTERÍSTICAS DE LOS EQUIPOS DE ADQUISICIÓN DE DATOS Y CONTROL

7.2.1    Entradas y salidas analógicas

7.2.2    Conversión a digital

7.2.3    Puertos digitales y contadores

7.3    TARJETAS DE ADQUISICIÓN DE DATOS

7.3.1    Tarjeta de adquisición NI USB-6008

7.4    CONTROLADORES COMPACTOS

7.4.1    Compact FieldPoint

7.4.2    CompactRIO.

8.    LabVIEW para la adquisición de datos y el manejo de dispositivos electrónicos

8.1    INTRODUCCIÓN

8.2    MEASUREMENT & AUTOMATION EXPLORER (MAX)

8.3    PROGRAMACIÓN DE TARJETAS DE ADQUISICIÓN (DAQ) EN LABVIEW

8.3.1    DAQmx

8.3.2    DAQ Assistant.

8.4    PROGRAMACIÓN DE CONTROLADORES COMPACTOS COMPACT FIELDPOINT

8.4.1    Requisitos para la programación.

8.4.2    Conexionado y alimentación.

8.4.3    Configuración con MAX

8.4.4    Creación de un VI y ejecución en FieldPoint

8.5    PROGRAMACIÓN DEL CONTROLADOR COMPACTO COMPACTRIO.

8.5.1    Componentes de una aplicación de tiempo real en CompactRIO

8.5.2    Requisitos para la programación.

8.5.3    Conexionado y alimentación.

8.5.4    Configuración con MAX

8.5.5    Creación de un VI y ejecución en CompactRIO.

Bloque III

SCADA

9.    Introducción a los sistemas SCADA

9.1    INTRODUCCIÓN

9.2    DEFINICIÓN DE SISTEMAS SCADA

9.3    PRINCIPALES FUNCIONES DE UN SISTEMA SCADA

9.4    NIVELES CIM EN SISTEMAS DE CONTROL INDUSTRIALES.

9.5    COMPONENTES HARDWARE DE LOS SISTEMAS SCADA.

9.6    COMPONENTES SOFTWARE DE UN SISTEMA SCADA

9.6.1    OPC (OLE for Process Control).

9.6.2    OBDC (Open Data Base Connectivity)

9.6.3    Almacenamiento de datos. Bases de datos industriales

9.6.4    Módulos de un sistema SCADA.

9.6.5    Paquetes SCADA y fabricantes

10.    Desarrollo de SCADAs con LabVIEW

10.1    INTRODUCCIÓN

10.2    LABVIEW Y LOS SISTEMAS SCADA

10.2.1    Comunicación con los Controladores Industriales.

10.2.2    Utilizar OPC en LabVIEW. OPC estÁ en mÓdulo DSC

10.2.3    Generación de históricos.

10.2.4    Generación de informes (Reports).

10.2.5    Monitorización Remota

10.2.6    Comunicación con los Controladores Industriales.

10.2.7    Servidores OPC

10.2.8    Ejemplos de utilización de LabVIEW para la Supervisión y Control en Aplicaciones de Riesgo.

10.3    MÓDULO DSC DE LABVIEW

10.3.1    Introducción al DSC.

10.3.2    Creación de una aplicación con el módulo DSC.

Bibliografía

Bloque I

LabVIEW Lenguaje de Programación Gráfico

1.   Entorno de Programación LabVIEW

1.1     Introducción

LabVIEW es un lenguaje de programación de alto nivel, de tipo gráfico, inicialmente enfocado a la realización de aplicaciones para el control de instrumentación. Desde su aparición, LabVIEW se ha convertido en un auténtico lenguaje y entorno integrado de programación, ya que cuenta con todos los recursos necesarios para elaborar cualquier tipo de algoritmo en aplicaciones muy variadas. Los programas desarrollados con LabVIEW se llaman Instrumentos Virtuales, o VIs, lo que da una idea de su uso en origen: el control de instrumentos. El lema de LabVIEW es: “La potencia está en el Software”. Entre sus objetivos están la reducción del tiempo de desarrollo de aplicaciones y facilitar el desarrollo de aplicaciones a programadores no expertos en informática. Pero una de sus mayores cualidades es la existencia de numerosos paquetes que permiten combinar este software con todo tipo de hardware, como tarjetas de adquisición de datos, controladores, autómatas programables, sistemas de visión, FPGAs, etc.

En este capítulo y en los sucesivos, se intentarán establecer las bases necesarias para que lectores puedan desarrollar aplicaciones enfocadas al campo de la adquisición de datos, supervisión y control y, más concretamente, para la automatización de sistemas de riego. A continuación, comenzaremos proporcionando una visión general sobre el entorno LabVIEW.

1.2     Programación Gráfica

LabVIEW (Laboratory Virtual Instrument Engineering Workbech) fue creado por la empresa National Instruments (fundada en 1976 en Austin, Texas) para funcionar sobre máquinas MAC, salió al mercado por primera vez en 1986. En la actualidad se encuentra disponible para las plataformas Windows, UNIX, Mac y Linux. La última versión (8.6), liberada en Agosto de 2008, cuenta con soporte para el sistema operativo Windows Vista. En la Tabla 1.1 se puede observar la evolución de este entorno y las principales características aportadas con cada una de las versiones.

La programación G constituye el corazón de LabVIEW, y difiere de otros lenguajes de programación como C ó Basic, en que éstos están basados en texto, mientras que en G se utiliza programación gráfica. Los programas en G, o VIs (acrónimo de Virtual Instrument) constan de una interfaz interactiva de usuario y un diagrama de flujo de datos que hace las funciones de código fuente.

Año Versión
1986 LabVIEW 1.0, primera versión en Mac OS
1990 LabVIEW 2.0, máximo aprovechamiento de los resultados
1992 LabVIEW 2.5, primera versión en Windows 3.1 y Solaris
1993 LabVIEW 3.0
1994 LabVIEW 3.0.1, primera versión en Windows NT
1994 LabVIEW 3.1
1995 LabVIEW 3.1.1, integración del Application Builder (creación de archivos ejecutables)
1996 LabVIEW 4.0
1997 LabVIEW 4.1
1998 LabVIEW 5.0, multitarea, contenedores ActiveX, asistente para la adquisición de dato (tarjetas de adquisición DAQ) e asistente para el control de instrumentos
1999 LabVIEW 5.1, primera versión para Linux, primera versión de LabVIEW RT (Real Time)
2000 LabVIEW 6.0, controles gráficos en 3D, referencias de controles
2001 LabVIEW 6.1, mejoramiento y correcciones, primera versión en Palm OS
2003 LabVIEW 7.0, VI Express, primera versión en Windows Mobile 2003
2004 LabVIEW 7.1, traducción en francés, alemán y japonés
2005 LabVIEW 8.0, Project Explorer, XControls, shared variables
2005 LabVIEW 8.1, mejoras y correcciones
2006 LabVIEW 8.20, Programación orientada a objetos
2007 LabVIEW 8.5, primera versión del toolkit FPGA y del toolkit Statechart
2008 LabVIEW 8.6, limpieza automática de los diagramas

Tabla 1.1. Diferentes versiones de LabVIEW aparecidas en el mercado.

De forma más específica, el entorno de programación gráfico LabVIEW se estructura siguiendo la analogía con los instrumentos de laboratorio a los que trataba de emular en sus primeras versiones. Así, un instrumento virtual consta de:

•   Panel Frontal. Es la interfaz interactiva de usuario de un VI, debido a que simula el panel de un instrumento físico. El panel frontal puede contener botones, interruptores, pulsadores, gráficas y otros controles e indicadores. Los datos se introducen utilizando el ratón y el teclado, y los resultados se muestran en la pantalla del ordenador.
•   Diagrama de Bloques. Se construye en G y constituye el código fuente del programa o VI. Supone una solución gráfica a un determinado problema de programación.

Los VIs son jerárquicos y modulares. Pueden utilizarse como programas de alto nivel o como subprogramas de otros programas o subprogramas. Cuando un VI se usa dentro de otro VI, se denomina subVI. El icono y los conectores de un VI funcionan como una lista de parámetros gráficos de forma que otros VIs puedan pasar datos a un determinado subVI.

1.3     Instrumentos Virtuales

Los programas de LabVIEW se denominan instrumentos virtuales o VI, debido a que su apariencia y operación imita a los instrumentos físicos, tales como osciloscopios y multímetros. LabVIEW contiene un amplio abanico de herramientas para adquisición, análisis, despliegue y almacenamiento de datos, así como herramientas que ayudan a especificar su código de ejecución.

En LabVIEW, se construye una interfaz de usuario, o panel frontal (véase la Figura 1.1), con controles e indicadores. Los controles son texto, botones de acción, interruptores y otros dispositivos de entrada. Los indicadores son gráficos, LED, objetos para mostrar texto o números y otros elementos. Una vez construida la interfaz, el código se agrega en el diagrama de bloques utilizando subVIs y estructuras para controlar los objetos del panel frontal.

Figura 1.1. Panel Frontal.

El diagrama de bloques (véase la Figura 1.2) contiene el código fuente gráfico. Los objetos del panel frontal aparecen como terminales en el diagrama de bloques. Adicionalmente, el diagrama de bloques contiene funciones y estructuras incorporadas en las bibliotecas de LabVIEW. Los cables conectan cada uno de los nodos en el diagrama de bloques, incluyendo controles e indicadores de terminal, funciones y estructuras.

Figura 1.2. Diagrama de bloques.

En este diagrama de bloques se llama al subVI Temp, que implementa una subrutina que obtiene una temperatura desde una tarjeta de adquisición de datos (DAQ). Esta temperatura es representada, junto con el valor medio de la temperatura, en la gráfica de forma de onda Temperature History. El interruptor (Power) es un control booleano que se colocó en el panel frontal para detener la ejecución del bucle de iteración While Loop. Esta estructura iterativa (While Loop) también contiene un terminal (i) que indica el número de iteración que se está ejecutando (la primera iteración es la número 0).

A partir de LabVIEW 7.0 se introdujo un nuevo tipo de subVI denominado Express VI. Estos son VIs interactivos que tienen una configuración mediante un cuadro de diálogo que permite al usuario personalizar su funcionalidad de manera rápida e intuitiva. A partir de esta configuración LabVIEW genera un subVI basado en dichos argumentos.

Los VIs estándar están constituidos a su vez por un panel frontal y un diagrama de bloques que son usados dentro de otro VI.

Las funciones son los bloques básicos para la construcción de todos los VIs, pero no tienen un panel frontal o un diagrama de bloques (por ejemplo, funciones aritméticas de suma, resta, multiplicación, etc.).

1.4     Menús de LabVIEW

La barra de menús de la parte superior de las ventanas de LabVIEW contiene diversos menús pull-down (desplegables). Cuando hacemos clic sobre un ítem o elemento de esta barra, aparece un menú por debajo de ella. Dicho menú contiene elementos comunes a otras aplicaciones Windows, como Open (Abrir), Save (Guardar) y Paste (Pegar), y muchas otras particulares de LabVIEW.

La Figura 1.3 muestra la barra de menús para la versión 8.6.1, común para el panel frontal y el diagrama de bloques.

Figura 1.3. Barra de menús de la versión 8.6.

File (Archivo) Sus opciones se usan básicamente para abrir, cerrar, guardar, imprimir VI, etc.
Edit (Edición) Se usa principalmente para organizar el panel frontal y el diagrama de bloques y establecer nuestras preferencias.
View (Ver) Muestra las distintas paletas, errores, navegadores, etc.
Project (Proyecto) Presenta los niveles de jerarquía, los subVIs que lo
integran, los que están sin abrir, busca VIs, etc.
Operate (Función) Sus comandos sirven para ejecutar el VI.
Tools (Herramientas) Se accede a una serie de herramientas para compilar el VI, publicarlo como página Web, etc.
Windows (Ventanas) Se utiliza básicamente para mostrar (Show) ventanas.
Help (Ayuda) Muestra una ayuda sobre los diferentes iconos y otros aspectos de LabVIEW.

El menú de LabVIEW que utilizaremos con más frecuencia es el menú de contexto o emergente (Pop-up) de objetos, al que se accede situando el cursor sobre un objeto y pulsando el botón derecho del ratón. Si la pulsación se hace sobre un espacio vacío, el menú que se obtendrá variará en función de la herramienta seleccionada.

1.5     Barra de Herramientas (Toolbar)

Bajo la barra de menús se sitúa la barra de herramientas, que incluye una serie de botones para editar o ejecutar los VIs. Tal como se ilustra en la Figura 1.4, esta barra se muestra con más o menos opciones dependiendo de si estamos en modo de ejecución o de edición. Además, en el diagrama de bloques se dispone de algunas opciones adicionales. La función de los distintos botones es la siguiente:

Figura 1.4. Barra de herramientas del panel frontal: (a) en modo edición (Edit), (b) en modo ejecución (Run).

Run. Ejecuta el VI. Si la flecha aparece rota, es porque el VI tiene errores y al pinchar sobre ella muestra la lista de errores, su ubicación y descripción
Run continuously. Ejecuta indefinidamente los VIs hasta que se pulsa el botón de abortar o el de pausa.
Abort Execution. Aborta la ejecución del VI. No es recomendable utilizarlo, pues podrían quedar operaciones pendientes que hiciesen inestable el sistema.
Pause. Hace una pausa en la ejecución del VI, quedando resaltado en el diagrama de bloques el punto en el que se ha parado.

El primer botón sirve para configurar el texto (fuente, tamaño, estilo, color, etc.). El resto de botones permiten alinear, distribuir, redimensionar y ordenar los objetos seleccionados.

Help. Muestra una ventana Context Help (menú de contexto) con una ayuda resumida sobre el elemento que se haya seleccionado con el cursor.

Figura 1-5. Barra de herramientas del diagrama de bloques: (a) en modo edición (Edit), (b) en modo ejecución (Run).

Highlight Execution. Presenta una ejecución animada del diagrama de bloques.
Retain Wire Values. Retiene los valores de los hilos.
Step Into, Step Over y Step Out. Permiten ejecutar el programa paso a paso. Step Into abre y muestra la ejecución de los subVIs, Step Over los ejecuta sin abrirlos y Step Out finaliza la ejecución del nodo actual y después hace una pausa. Por ejemplo, en un bucle For de 100 repeticiones, ejecutaría todas las repeticiones y pasaría a pausa en el siguiente nodo.

1.6     Paletas de controles, funciones y herramientas

La paleta de controles (Controls) sólo está disponible en el panel frontal, y permite colocar sobre él los controles e indicadores (véase la Figura 1.6).

Figura 1.6. Paleta de controles (visible en el panel frontal).

La paleta de controles se puede desplegar: (1) seleccionando el menú View » Controls Palette o (2) haciendo clic con el botón derecho del ratón en el espacio de trabajo o en cualquier área abierta del panel frontal. Para que desaparezca la paleta de controles hay que hacer clic fuera de la paleta. También es posible fijarla pulsando el clip () de la esquina superior izquierda.

La paleta de funciones (Functions) sólo está disponible en el diagrama de bloques (véase la Figura 1.7). Se puede desplegar: (1) seleccionando el menú View » Functions Palette o (2) haciendo clic con el botón derecho del ratón en el espacio de trabajo o en cualquier área abierta del diagrama de bloques. Para que desaparezca hay que hacer clic fuera de la paleta. También es posible fijarla pulsando el clip () de la esquina superior izquierda.

Figura 1.7. Paleta de funciones (visible en el diagrama de bloques).

La paleta de herramientas dispone de 11 botones utilizados para operar y modificar objetos en el panel frontal y en el diagrama de bloques (véase la Figura 1.8). Por defecto, LabVIEW activa el cambio automático de herramienta. Si la paleta está oculta se puede mostrar mediante la opción de menú View » Tools Palette. A continuación se muestran las funciones de cada uno de sus botones:

Automatic Tool Selection. Selecciona una herramienta de forma automática dependiendo del objeto o parte del objeto sobre la que se sitúe el cursor.
Operate Value. La herramienta de operación sirve para cambiar valores o para seleccionar texto de un control.
Position/Size/Select. Selecciona, mueve y redimensiona objetos.
Edit Text. Crea y edita textos.
Connect Wire. Enlaza objetos en el diagrama de bloques.
Object Shortcut Menu. Despliega el mismo menú que si pulsamos el botón derecho del ratón sobre el objeto.
Scroll Window. Desplaza la pantalla.
Set/Clear Breakpoint. Permite establecer o quitar puntos de ruptura en el diagrama de bloques.
Probe Data. Crea una ventana flotante que muestra el valor que circula por el cable.
Get Color. Captura el color que tienen objetos, texto u otros elementos.
Set Color. Colorea un elemento. Tiene un color principal y otro de fondo, pudiendo seleccionarse de forma independiente.

Figura 1.8. Paleta de herramientas.

2.   Diseño y creación de una aplicación Instrumento Virtual

2.1     Introducción

En este capítulo se describen los pasos necesarios para la creación de aplicaciones, denominadas Instrumentos Virtuales (VI, Virtual Instrument) en el entorno de programación gráfico LabVIEW.

2.2     Creación de un VI

La programación en LabVIEW se realiza en el diagrama de bloques, mientras que en el panel frontal se presenta la interfaz con el usuario de la aplicación, donde se encuentran las entradas y salidas.

Cuando en el panel frontal se crea un control para la entrada de datos o un indicador para la salida de datos, en el diagrama de bloques aparecen sus respectivos terminales. Estos terminales dan acceso a los objetos del panel frontal, permitiendo operar con ellos mediante las herramientas de la paleta de funciones y generar el código de ejecución asociado en el diagrama de bloques.

Cada terminal contiene información útil del objeto asociado en el panel frontal. Por ejemplo, el color y los símbolos indican el tipo de dato. Los números de punto flotante son representados con terminales anaranjados con un acrónimo que indica su precisión (DBL para double, SGL para single, y EXT para extended). Los terminales booleanos se dibujan en color verde con el acrónimo TF.

Tal como se muestra en la Figura 2.1, los terminales de los controles tienen una flecha en el lado derecho y un borde grueso. Los indicadores tienen una flecha en el lado izquierdo y un borde fino.

Figura 2.1. Indicador numérico (Thermometer) y control booleano (Boolean) en el panel frontal (izquierda) y sus terminales asociados en el diagrama de bloques (derecha).

Como regla general, deben cablearse los terminales del mismo tipo: anaranjados con anaranjados, verdes con verdes, etc. También es posible conectar terminales de tipos compatibles, por ejemplo, LabVIEW permite conectar un terminal azul (correspondiente a un valor entero) a un terminal anaranjado (valor fraccional). En estos casos se produce una conversión automática al tipo de destino (por ejemplo, un truncamiento de los decimales si el destino es un terminal entero).

Además de los terminales del panel frontal, el diagrama de bloques contiene funciones (algebraicas, booleanas, etc.). Cada función puede tener múltiples terminales de entradas y salidas, cuya conexión constituirá una parte muy importante de la programación en LabVIEW.

Al realizar el cableado, cada cable tendrá un único origen, generalmente un control, pero puede derivarse hacia varios indicadores o funciones.

En el ejemplo de la Figura 2.2, el VI toma datos de A y B y pasa los valores a una función de adición y a una función de resta. Los resultados son mostrados en los indicadores de la derecha.

Figura 2.2. Panel frontal y diagrama de bloques de un VI para la suma y resta de dos variables.

Para la realización del cableado en el diagrama de bloques deben tenerse en cuenta las siguientes consideraciones:

2.3     Flujo de Datos (Dataflow)

La ejecución de un VI en LabVIEW sigue un modelo de flujo de datos. Cada nodo del diagrama de bloques se ejecuta cuando están disponibles todas sus entradas. Cuando un nodo completa la ejecución, suministra datos a sus terminales de salida y pasa los datos de salida al siguiente nodo en la trayectoria del flujo de datos. Visual Basic, C++, JAVA y otros lenguajes de programación basados en texto, siguen un modelo de control de flujo de la ejecución de un programa. En flujo de control, el orden secuencial de los elementos del programa determina el orden de ejecución.

El diagrama de bloques de la izquierda de la Figura 2.3, suma dos números y luego resta 50 al resultado de la suma. En este caso, el diagrama de bloques se ejecuta de izquierda a derecha, no porque los objetos estén puestos en ese orden, sino porque una de las entradas de la función de resta no es válida hasta que la función de suma o adición haya terminado su ejecución y pasado los datos a la función de resta. Recuerde que un nodo se ejecuta solamente cuando tiene datos disponibles en todos sus terminales de entrada, y suministra datos a sus terminales de salidas solamente cuando termina su ejecución.

En el código de la derecha, ¿Cuál será el segmento que se ejecutará primero: la suma, el número aleatorio o la función de división? Como las entradas a las funciones de suma y división están disponibles al mismo tiempo, y la función de número aleatorio no tiene entradas, no se puede saber. Cuando se pretenda que un segmento del código se ejecute antes que otro, y no exista dependencia de datos entre las funciones, hay que utilizar una estructura de Secuencia para forzar el orden de la ejecución.

Figura 2.3. Ejemplo de flujo de datos con LabVIEW.

2.4     SubVIs

Un SubVI es un VI que puede ser utilizado dentro de otro VI. Corresponde a una subrutina en lenguajes de programación basados en texto. La utilización de subVIs ayuda a gestionar de manera más eficiente cambios en los programas y a eliminar errores del diagrama de bloques. Además, simplifica los esquemas de cableado mejorando su comprensión.

Un SubVI, debe disponer de su propio icono y terminales de conexión. Del mismo modo que los terminales de un control o de un indicador pueden ser vistos como un icono o como un simple terminal en el diagrama de bloques, los subVIs pueden ser vistos como un icono, un nodo expandible o un nodo expandido (véase la Figura 2.4). Las diferentes vistas dependen de la preferencia del usuario, pero la funcionalidad del subVI no cambia.

Figura 2.4. Diferentes vistas de un subVI.

Cada VI muestra un icono en la esquina superior derecha de las ventanas del panel frontal y del diagrama de bloques. El icono es la representación grafica del VI, y puede contener texto, imágenes, o una combinación de ambos. Si se utiliza un VI como subVI, el icono identifica el subVI en el diagrama de bloques del VI en el que se inserta.

El conector muestra los terminales disponibles para la transferencia de datos hacia y desde el subVI. Hay varios patrones de conectores que se pueden elegir haciendo clic-derecho sobre el conector y seleccionando el patrón del menú de patrones. Posteriormente, se asignan los controles e indicadores del panel frontal al terminal del conector, como veremos mas adelante.

El diagrama de bloques mostrado en la Figura 2.5 contiene cuatro subVIs. Para ver el panel frontal de un subVI basta con hacer doble clic sobre el subVI. También se puede ver la jerarquía de los subVIs dentro de un VI principal en el menú View » VI Hierarchy.

Figura 2.5. SubVIs en el diagrama de bloques.

Los pasos para crear un subVI son los siguientes:

a)   Crear el icono

Para reemplazar los iconos predeterminados por otros personalizados, se debe hacer clic-derecho sobre el icono de la esquina superior derecha del panel frontal o del diagrama de bloques y seleccionar Edit Icon del menú de emergente, o bien, haciendo doble clic en el icono. También se puede acceder desde el menú File » VI Properties, seleccionando General en el menú Category de la ventana emergente, y haciendo clic en el botón de editar (Edit Icon). Con las herramientas del lado izquierdo de la ventana de diálogo del Icon Editor se llevará a cabo el diseño del icono en el área de edición. En la parte derecha aparece la imagen del icono en el tamaño que se mostrará (véase la Figura 2.6).

También se puede arrastrar un gráfico desde cualquier archivo y colocarlo en la esquina superior derecha del panel frontal o del diagrama de bloque. LabVIEW convierte el gráfico a un icono de 32 × 32 píxeles.

Figura 2.6. Ventana de diálogo del editor de iconos (Icon Editor).

b)   Crear el conector

Para utilizar un VI como un subVI, es necesario crear un conector. El conector es un conjunto de terminales que corresponden a los controles y a los indicadores de ese VI, similar a la lista de parámetros de una función basada en un lenguaje de programación de texto. En el conector se definen los terminales de entrada y de salida asociados al icono del subVI, que serán utilizados para realizar el cableado dentro del VI al que se incorpore.

Las conexiones se definen asignando un control o un indicador del panel frontal a cada uno de los terminales del conector. Para definir un conector, se hace un clic-derecho sobre el icono del panel frontal y se selecciona Show Connector del menú emergente (véase la Figura 2.7).

Figura 2.7. Mostrar conectores (Show Connector).

El conector substituye al icono (véase la Figura 2.8). Cada rectángulo del conector representa un terminal, al que se le asignará una entrada o salida. El número de terminales que LabVIEW muestra en el conector depende del número de controles e indicadores en el panel frontal (se puede seleccionar en Patterns del menú emergente). El panel frontal tiene cuatro controles y un indicador, así que LabVIEW muestra cuatro terminales de entradas y una terminal de salida en el conector.

c)   Asignar terminales

El siguiente paso consiste en definir las conexiones, asignando un control o indicador del panel frontal a cada uno de los terminales del conector. Cuando se hacen los vínculos, las entradas deben colocarse a la izquierda (controles) y las salidas a la derecha (indicadores). Para asignar un terminal a un control o indicador del panel frontal, se selecciona un terminal del conector y, seguidamente, se selecciona el control o indicador del panel frontal que se desea asignar a la terminal (véase la Figura 2.8). El terminal cambiará de color para indicar el tipo de datos del control. Cuando estén todos los terminales seleccionados, se debe hacer clic en un área abierta del panel frontal.

Figura 2.8. Asignación de terminales.

d)   Guardar el VI

Tras realizar las asignaciones de los terminales, se debe guardar el VI. Existen varias maneras de organizar los subVIs. La más común es organizarlos por aplicación. En este caso, todos los VIs para una aplicación en particular se guardan en el mismo directorio o dentro de un archivo de librería de VI. La utilización de un archivo de librería permite transportar una aplicación entera dentro de un solo archivo.

Para guardar un VI dentro de una librería se debe seleccionar en el menú File » Save As … (salvar como). En el cuadro de diálogo, presione New VI Library (nueva librería de VI), esto permitirá nombrar la librería, y después guardar el VI en ella. Para agregar otros VIs, simplemente hay que hacer un doble-clic en el archivo .llb del cuadro de diálogo Save y dar un nombre al VI.

e)   Insertar un subVI dentro de otro VI

Después de construir un VI y crear su icono y conector, podemos utilizarlo como un subVI. Para colocar un subVI en el diagrama de bloques, seleccionamos Functions » Select VI (véase la Figura 2.9). Seleccionaremos con un doble-clic el VI que deseamos utilizar como subVI y lo colocaremos en el diagrama de bloques.

También se puede colocar un VI abierto en el diagrama de bloques de otro VI abierto, simplemente arrastrando el icono desde el VI que se desea utilizar como subVI hasta el diagrama de bloques del otro VI.

Figura 2.9. Inserción de un subVI en otro VI.

2.5     Proyectos

A partir de la versión 8.0 de LabVIEW se introduce la posibilidad de crear proyectos para gestionar de forma más eficiente las aplicaciones complejas desarrolladas en este entorno. El proyecto se almacena en un fichero XML con extensión .lvproj que contiene información de todos los ficheros incluidos en el proyecto. Estos ficheros pueden ser VIs, controles, ficheros de configuración, de documentación o cualquier otro archivo que el programador desee incluir.

Los proyectos se gestionan desde el Explorador de Proyectos (Project Explorer), que presenta, en forma de árbol desplegable, una categoría principal denominada My Computer, que incluye los ficheros que componen el proyecto y sus propiedades. Además de esta categoría derivan siempre otras dos:

Figura 2.10. Explorador de Proyectos (Project Explorer).

Los ficheros de un proyecto se pueden agrupar en directorios o librerías que a su vez incluyen otros VIs (no confundir con las librerías .llb). Las librerías de un proyecto no contienen físicamente a los distintos VIs que la componen, sino que representan referencias a los mismos. Los ficheros de una librería pueden ser públicos (accesibles desde cualquier parte del proyecto) o privados (sólo accesibles desde otros VIs de esa misma librería).

3.   Programación Estructurada y Tipos de Datos

3.1     Introducción