Permiten que un VI sea llamado por otro VI de mayor jerarquía. Un VI que se encuentre dentro del diagrama de otro VI de mayor nivel es llamado subintrumento virtual (subVI), y es un equivalente en G de las funciones o subrutinas de otros lenguajes. Los controles e indicadores de un subVI reciben y envían datos con el diagrama del VI de llamada. El icono es una representación pictórica de un VI dentro del diagrama de otro VI. El conector es un conjunto de terminales que corresponden a los controles (entradas) e indicadores (salidas) del subVI. El conector es similar a la lista de parámetros en una función o subrutina, donde las terminales del conector actúan como parámetros. Cada terminal del conector corresponde a un particular control ó indicador del panel del VI. El conector recibe datos en sus terminales de entrada y pasa datos al código del subVI a través de sus controles, ó bien,
recibe resultados en sus terminales de salida a través de los indicadores en el panel del subVI. En la figura A.3 se muestra el panel y el diagrama del VI “Termómetro.vi”, el cual se utiliza como subVI en el diagrama del instrumento “Monitoreo de Temperatura” de la figura A.2. El ícono/conector del VI se localiza en el extremo superior derecho de ambas ventanas.
Fig. A.3.- Panel Frontal y Diagrama a Bloques del subVI “Termómetro.vi”
Cuando se apunta con el ratón el icono/conector que aparece en la ventana del panel, y se activa su botón derecho, aparece un menú con tres opciones principales: VI Setup, Edit Icon
y Show Connector. Si se selecciona esta última
opción, el icono/conector cambia a conector tal y como se muestra en la figura de la derecha. En este caso el subVI solo tiene una terminal de entrada (verde para tipo boleano) conectada al control “Modo” y una terminal de salida (naranja para tipo flotante) conectada al indicador “Temperatura”. Se
deja al lector la interpretación del panel y del diagrama a bloques del subVI de la figura A.3. El subVI que a su vez se utiliza dentro del diagrama produce un valor que simula el voltaje proporcionado por un sensor de temperatura, o bien, puede ser el VI que maneje una tarjeta de adquisición de datos. Con el uso de subVIs se pueden crear diagramas en forma modular de tal manera que los VI creados son fáciles de entender, de mantener y de explorar. Una característica importante de los subVIs es que pueden ser ejecutados y corregidos en forma individual e independiente del programa principal.
A.3
M
E TO DO LO GÍ A D ED
IS E Ñ OUna propiedad importante del lenguaje G es la naturaleza jerárquica de los VI que se diseñan; después de crear un VI, éste puede ser utilizado como un subVI en el diagrama a bloques del VI de mayor nivel. El problema a resolver se debe dividir en piezas lógicas manejables (VIs), es decir, el principal objetivo es dividir las tareas de programación en bloques de diferente nivel que puedan ser manejados fácilmente. Es recomendable interconectar los bloques (VIs) con sus entradas y salidas para formar un diagrama que
represente una propuesta de solución. Para una aplicación específica se puede iniciar diseñando el VI de mayor nivel jerárquico con sus entradas y salidas definidas para esa aplicación, después se pueden construir los subVIs necesarios para realizar las operaciones de menor nivel. LabVIEW también permite iniciar con el diseño de los subVIs y después continuar con un diseño ascendente de bloques hasta crear el VI principal. Algunas recomendaciones importantes en la creación de instrumentos virtuales en el lenguaje gráfico G son las siguientes:
• Proponer una solución general del problema conjuntamente con los problemas específicos de menor nivel. Es aconsejable plantear la solución en un diagrama a bloques con un nivel jerárquico.
• Utilizar un procedimiento modular para construir subVIs donde se encuentre una división lógica de tareas o un posible potencial de reuso del nodo.
• Después de ensamblar un grupo de subVIs se debe analizar en términos generales, la función de cada bloque y como proporciona los resultados deseados hacia otros subVIs.
• Asegurarse de que el diagrama a bloques de mayor nivel contiene los alambres necesarios para pasar datos entre los VIs que lo forman.
• Enlistar tipos de entradas y salidas, velocidades de muestreo, necesidad de análisis en tiempo real, presentación de datos, etc., para cada VI propuesto.
• Crear una prospectiva inicial del panel y diseñar las funciones. Realizar un proceso interactivo para rediseñar el panel y las funciones finales.
• Probar y explorar individualmente los subVIs creados.
Cuando se consideran los detalles de los subVI es posible encontrar que el diseño original esta incompleto. Por ejemplo al final se puede encontrar que es necesario transmitir más información de un subVI a otro. Utilizando subVIs en forma modular para realizar una función especifica es más fácil reorganizar un programa completo.
A.4
P
L AN T A M IEN TO D ELP
R O B L E M APara ejemplificar el procedimiento de diseño en LabVIEW tomaremos un problema que se describe con más detalle en le capitulo 3. Se tiene un sistema opto mecánico llamado monocromador, al cual se le acoplo un motor de pasos controlado por el puerto paralelo de una PC. El motor de pasos mueve una rejilla de difracción cuya posición determina la longitud de onda λ de la señal luminosa que sale del monocromador. En la figura A.4 se presenta esquemáticamente el sistema del monocromador donde se incluye la lectura mecánica original. La transferencia del sistema es un cambio de lambda de salida, para un determinado número de pasos de entrada ejecutados por el motor, esto es: T = ∆λ / pasos. Para un paso se tiene el mínimo valor de ∆λ y corresponde a la resolución (Res) del sistema cuyo primer valor obtenido experimentalmente es de 0.5234 Å/paso (ver el capitulo 3). Si se toma en cuenta el valor de lamda dado por la lectura mecánica del sistema (λo), se tiene que la ecuación de transferencia queda como:
λ = λo ± (Res * Pasos) (A.1)
El signo ± se debe a que el valor de λ puede aumentar o diminuir de acuerdo al sentido de rotación del motor. La secuencia de los códigos binarios, que deben ser enviados hacia el puerto paralelo (dirección 378h), para mover al motor en una determinada dirección es la
siguiente: 0011, 0110, 1100, 1001 (03h, 06h, 0Ch, 09h). Para invertir la dirección de rotación deben enviarse los mismos códigos pero en secuencia inversa. La velocidad de rotación depende de la frecuencia con la que cada código es enviado hacia el motor.
FUENTE LUMINOSA REJILLA DE DIFRACCION MONOCROMADOR ESPEJOS POTENCIA Y MOTOR DE PASOS LECTURA MECANICA ORIGINAL PASOS PUERTO PARALELO 4
Fig. A.4.- Sistema del monocromador
A.5
S
OLU C IÓN ENL
ABVIEW
Como primer instrumento a diseñar se propone el bloque mostrado a la derecha, donde se tienen cuatro entradas y una salida. El instrumento debe Mover el Motor un número de Pasos, en determinado Sentido y con cierta velocidad. La otra entrada Lamda0 (λo), es el valor de lamda donde se encuentra
el monocromador de al inicio del proceso. La salida es el valor de Lamda (λ) calculado a partir de la ecuación A.1 para cada paso ejecutado por el motor. Las dos principales operaciones que debe realizar el bloque propuesto son: calcular el valor de λ para cada paso, y enviar al puerto paralelo la secuencia de códigos apropiada para que el motor se mueva un determinado número de Pasos. Se propone manejar los códigos como valores constantes de un arreglo llamado Código, con un apuntador de índice llamado Ap. Un posible pseudocódigo para realizar el proceso descrito es el siguiente:
Pasos Mover el Motor.vi velocidad Sentido Lamda Lamda0
Mueve el Motor (Pasos, Sentido, velocidad, Lamda 0 (entradas); Lamda (salida)) case Sentido
0: Repite para el número de Pasos λ = λo + (Res * (Pasos+1)) Ap+1 = 4 ?
Si: Ap=0
No: +Ap
puerto paralelo (378h) = Código[Ap]
espera un tiempo en ms para que el motor alcance su estado estacionario 1: Repite para el número de Pasos
λ = λo - (Res * (Pasos+1)) decrementa Ap
Ap-1 = -1 ?
Si: Ap=3 No: -Ap
puerto paralelo (378h) = Código[Ap] espera un tiempo en ms
Fin
A.6P
ROTOTIPO DEL PANELCon las entradas y salidas propuestas para el bloque se puede iniciar el diseño del panel frontal. En el menú principal de LabVIEW se selecciona la opción File>>New y aparece un panel vacío. Posicionando al ratón dentro del panel y oprimiendo su botón derecho aparece un Menú de Controles e Indicadores como el que muestra en la figura A.5, donde se indican los nombres originales de cada uno de los botones del menú [25,27].
Numeric Boolean String & Table
List & Ring Array & Cluster Graph
Path & Refnum Decorations User Controls
Active X Select a Control
Fig. A.5.- Menú de Controles e Indicadores en el panel
El Menú de Controles también se puede invocar desde el menú principal seleccionando la opción Windows>>Show Controls Palette. Cuando se tiene el Menú de Controles sobre el panel, con el ratón se debe apuntar el botón del tipo de control o indicador que se desea colocar en el panel. Por ejemplo, en nuestro caso requerimos cuatro controles numéricos: Pasos, velocidad y Sentido (enteros), y Lamda0 (flotante). En la figura A.6, el ratón se posiciona primero en el botón Numérico y aparece el submenú mostrado. Después se lleva al ratón dentro del submenú para seleccionar un objeto particular. En la figura, el ratón se encuentra seleccionando un control digital, cuando se oprime cualquier botón del ratón se ocultan las ventanas de los dos menús y en el panel aparece el objeto seleccionado con su contorno en líneas punteadas, tal y como se muestra en la figura A.7. El objeto se puede mover con el ratón y posicionarlo en cualquier lugar dentro del panel cuando se oprime nuevamente cualquier botón del ratón. Cuando se posiciona el control numérico inicialmente aparece un bloque en su parte superior, como en la figura A.7, donde se puede introducir una etiqueta de identificación para su correspondiente terminal en el diagrama.
Fig. A.7.- Colocación de un objeto en el panel
Fig. A.6.- Submenú del botón Numérico
Cuando el ratón se posiciona en algún objeto y se oprime su botón derecho aparece un menú con diferentes opciones de configuración del objeto. En la figura A.8 se ha seleccionado la opción “Representation” para el control Pasos, la cuál a su vez presenta un submenú con diferentes tipos de valores numéricos. En nuestro
caso se selecciona un entero largo (Unsigned Fig. A.8.- Menú de configuración Long de32 bits) sin signo, tal y como se muestra para controles e indicadores en la figura A.8.
El indicador de salida Lamda se coloca en el panel de una manera similar a la descrita, pero ahora en el menú se selecciona el icono del indicador digital (figura A.6). En el panel también se deben colocar las variables locales, que en este caso son dos: el arreglo Código y el apuntador Ap. Para colocar el arreglo, ahora se debe posicionar el ratón en el correspondiente botón del Menú de Controles (Array & Cluster de la figura A.5), y en el respectivo submenú se debe seleccionar la opción de “Array”.
En la figura A.9 se muestra el prototipo del panel y el diagrama a bloques después de insertar los objetos que requerimos: 4 controles como entradas del VI, dos controles internos, y un indicador como salida, con sus respectivas etiquetas. El VI creado hasta ahora se guarda con el nombre Mueve el Motor.vi
Fig. A.9.- Prototipos del panel y del diagrama del VI que se esta creando
A.7A
LAMBRADO DELD
IAGRAMAAntes de iniciar el alambrado del diagrama veamos el Menú de Herramientas que se invoca desde el menú principal con Windows>>Show Tools Palette. Las botones de éste Menú de Herramientas para el panel y el diagrama, se describen en la siguiente figura. Cuando se selecciona una herramienta, el apuntador del ratón toma la forma del icono de la herramienta seleccionada. Las diferentes herramientas del menú se pueden cambiar progresivamente con la tecla Tab, el apuntador del ratón indica la herramienta seleccionada [25,27].
Sirve para operar los controles y funciones del panel
Selecciona objetos, los posiciona y cambia su tamaño
resenta un menú para los objetos
Mueve las ventas sin utilizar las barras laterales de Windows
bre la trayectoria de los alambres Crea cuadros de texto y edita texto
Herramienta para alambrar objetos en el diagrama a bloques
P
Inserta y quita puntos de paro
Crea puntos de prueba so
Copia el color de un objeto a otro
Cambia el color de un objeto
n el panel se puede invocar Así como e
un Menú de Controles e Indicadores, en el diagrama
rece el bjeto seleccionado, tal y como se
l objeto se presenta con su contorno en líneas
critos.
se puede invocar un Menú de Funciones con el botón derecho del ratón, ó con la opción Windows>>Show Functions Palette del menú principal. Según el planteamiento de la solución (sección A.5) se requiere una sentencia case. En la figura A.10 se muestra el Menú de Funciones con su botón de Estructuras seleccionado. En el submenú de Estructuras se escoge la estructura case. Cuando el ratón apunta en la opción deseada y se oprime su botón izquierdo, se ocultan las ventanas de los dos menús y en el diagrama apa
o
muestra en la siguiente figura.
Fig. A.10.- Menú de Funciones E
punteadas y puede ser movido a cualquier parte del diagrama, su tamaño puede ser modificado fácilmente con la herramienta selectora de objetos. El objeto se incrusta en el panel con el botón izquierdo del ratón. De acuerdo a la solución propuesta, para cada valor de la estructura case se debe ejecutar una sentencia for cuyo icono se coloca en el diagrama de una manera similar a la descrita para la estructura case. La sentencia case se debe controlar con la variable entera sentido y las sentencias for, dentro de cada case, se deben repetir el número dado de la variable entera Pasos. En las dos siguientes figuras se muestran las dos sentencias case y el alambrado entre los objetos des
Para conectar los objetos se utiliza la herramienta para alambrar (icono de carrete) del Menú de Herramientas. El carrete aparece como apuntador del ratón, el cuál se debe colocar sobre el objeto que se desea alambrar. Cuando de oprime el botón izquierdo del ratón se inicia la conexión y el ratón debe ser desplazado hasta el otro objeto con el cuál se desea hacer la conexión. Cuando se oprime nuevamente el botón izquierdo del ratón, la conexión finaliza.
En cada repetición de las sentencias for, es decir para cada paso, se debe calcular un nuevo valor de λ y enviar el código apropiado al puerto paralelo para mover el motor un paso. El valor de λ se calcula con un subVI descrito más adelante (sección A..8). Para mover al motor un paso se debe actualizar el valor del apuntador (Ap) para después enviar el siguiente código del arreglo Código[Ap] hacia el puerto paralelo. El proceso
implica un riguroso orden de ejecución. En LabVIEW se pueden utilizar secuencias para asegurar este orden [25.26.27]. En el Menú de Funciones y submenú de Estructuras se selecciona con el ratón el icono de secuencia (ver figura A.10) que debe ser colocado dentro del for, tal y como se muestra en la figura que aparece a la derecha. Para añadir una secuencia se debe posicionar al ratón en el icono de la secuencia y oprimir su botón derecho. Con esta operación aparece
un submenú de opciones para la secuencia donde ahora, con el ratón se debe seleccionar la opción “Add Frame After” y oprimir su botón izquierdo. El resultado se presenta en las dos siguientes figuras, donde el orden de ejecución de las dos secuencias es primero la 0(0..1) y después la 1(0..1).
En las siguientes figuras se presenta una propuesta para actualizar el valor del apuntador Ap cuando el valor de Sentido es 0. Esta propuesta debe incluirse dentro de la primera secuencia 0(0..1). En las figuras, el valor de Ap+1 se compara con 4 y el resultado lógico controla la ejecución de una sentencia if (case lógico). Si el resultado es falso el valor de Ap se actualiza incrementándose en 1 (figura izquierda), si el resultado es verdadero el valor del
apuntador se actualiza a cero (figura derecha). Si el valor se Sentido es 1, la primera secuencia de su for tiene un formato similar, pero ahora el valor de Ap se decrementa en 1 y se compara con –1.
Los iconos de Ap indican variables locales de lectura (contorno más grueso) y de escritura (contorno más delgado). Las variables locales, se seleccionan con el Menú de Funciones, submenú de Estructuras y el icono de “Local” (ver figura A.10). Después de crear el objeto en el diagrama se posiciona el ratón en su icono y oprimiendo el botón derecho aparece un submenú. Si se escoge “Select Item” aparece una lista de todas las variables locales, donde se selecciona con el ratón la variable deseada. La función de incrementar en 1, así como las constantes 0 y 4, se encuentran en el submenú del botón Numérico del Menú de Funciones, la operación de comparación se localiza en el submenú del botón de Comparación del Menú de Funciones. Ambos submenús se muestran a continuación:
Submenú de Funciones Numéricas submenú de
Funciones de Comparación
Otros botones que contiene el Menú de Funciones presentan submenús similares para realizar funciones boleanas, de cadenas, de arreglos, E/S de archivos, comunicaciones, E/S de instrumentos, adquisición de datos, análisis, entre otras.
Regresando a los diagramas a bloques anteriores, en la siguiente secuencia 1(0..1) de la sentencia for, se debe enviar el código apropiado hacia el puerto paralelo para mover al motor un paso. Para ambos sentidos ambas secuencias son iguales y tienen la forma que se presenta en la figura de la derecha, donde se utiliza una función de arreglos que regresa el valor del arreglo
Código con índice Ap. La función es “Indedx Array”
localizada en el submenú que se presenta cuando se selecciona el botón de Arreglos del Menú de Funciones. El código apropiado se envía al puerto paralelo con dirección 378h por medio del subVI “Out Port.vi” proporcionado en las librerías del Menú de Funciones de LabVIEW.
Finalmente, dentro de la sentencia for para cada paso, se debe calcular el valor de lamda para ese paso, y producir además un retardo en ms. Para realizar estos procedimientos se propone el diagrama que se muestra en seguida:
El icono del metrónomo es una función de retardo localizada en el submenú del botón “Time & Dialog” del Menú de Funciones y que produce un tiempo de espera en ms dado por la relación 500/velocidad. Para calcular el valor de lamda se utiliza el instrumento “Calcula Lamda.vi” como subVI, con tres entradas (i, Sentido y Lamda0) y una salida (Lamda).
A.8S
UB.VIC
ALCULAL
AMDA.
VIPara calcular el valor de λ se debe resolver la ecuación A.1 (sección A.4) λ = λo ± (Res *
Pasos) para cada paso que avanza el motor, y de acuerdo al sentido para determinar si λ
crece ó disminuye. Como entradas al bloque “Calcula Lamda” se tienen: lamda0, Sentido y el contador “i” del for para cada Paso, y Lamda es la salida. La constante Res es una variable global que se declara en un VI exclusivo para variables locales [25.26]. En el panel de un nuevo VI se deben colocar los controles de las 3 entradas y el indicador de salida, un ejemplo se muestra en la figura de la derecha.
En el diagrama, las terminales de los objetos y las funciones