- Configurando el sistema
- Lección 1 – LabVIEW “Hello World” LED On/Off
- Lección 2 – Ciclos For (For Loops)
- Lección 3 – Ciclos While (While Loop)
- Lección 4 – Estructura de Eventos (Event Structure)
- Lección 5 – Números, Gráficas y Tablas
- Conceptos Generales
Configurando el sistema
Para usar el emulador, clona el repositorio y cargalo navegando a /root/Desktop/GettingStartedLabVIEW1-Spanish-main/3) LabVIEW Instrument Emulator/builds/HandsOn/CTIPicoVISAEmulator/
Da click derecho y selecciona ‘Open Terminal Here’
Escribe lo siguiente:
./CTIPicoVISAEmulator.exe
El emulador te pedirá elegir una subred.
Después simplemente esperará por una conexión. “Connecting” será mostrado en la barra de estado.
Lección 1 – LabVIEW “Hello World” LED On/Off
Opcional: Configurando el Hardware
Si tienes el hardware para este curso, necesitaras configurarlo y conectarlo como lo muestra la siguiente imagen. Si no, avanza a Instrucciones.
Instrucciones
El equivalente en LabVIEW de un programa “Hello World” es hacer que una pieza de hardware haga algo básico, usualmente es hacer un led parpadear (ON-Off). Arranca LabVIEW y selecciona New VI.
Acomoda las ventanas de la siguiente manera:
En LabVIEW un VI (Virtual Instrument) es el equivalente a una función o un módulo en otros lenguajes de programación. Un programa en LabVIEW esta hecho por uno o mas VIs.
En el diagrama de bloques (Block Diagram) da click derecho y navega a HandsOnPi2040 Driver Palette.
Arrastra el VI Initialize.vi, WriteDO.vi y Close.vi en el diagrama de bloques como se muestra a continuacion.
Observa que la flecha para ejecutar esta rota (esta flecha está en la esquina superior izquierda), si la presionas, la ventana de errores aparecerá y vendrán todas las razones por las cuales no se puede ejecutar el código.
LabVIEW no le permitirá ejecutar el código fuente hasta que se solucionen estos errores. Cierre la Lista de errores y seleccione todos los Vis. (Haga clic con el botón izquierdo y arrastre el mouse).
Seleccione los tres subVIs que están en el diagram de bloques. Presione ‘Ctrl+Espacio’ para abrir ‘Quick Drop’ y presione ‘Ctrl+W’ para conectar los VIs. Quick drop es una herramienta de productividad extremadamente útil que viene con LabVIEW. Le permite automatizar tareas repetitivas con algunas combinaciones de teclas. Si los subVIs no se conectan es porque no los seleccionó antes de activar ‘Quick Drop’.
Si presiona la flecha Ejecutar, notará que solo hay 2 problemas enumerados, ¡buen trabajo!
Presione Ctrl-H para abrir la ventana de ayuda contextual. Pase el cursor sobre Initialize.vi.
Observe que algunas entradas estan en negrita, como ‘Visa Resource Name’. Esto significa que esta entrada es obligatoria.
Haga clic derecho en ‘VISA Resource Name’ del VI Initialize.vi y seleccione ‘Create Constant’.
Si presiona la flecha Ejecutar ahora, notará que solo queda 1 error a resolver.
Este VI necesita su cableado de salida y valor DO (verdadero). Así que creemos constantes para ellos. Utilice la flecha de la derecha para seleccionar una salida
Es bueno que se muestre la etiqueta constante para los booleanos.
Haga clic derecho en la constante booleana “True”. Aparecerá una ventana desplegable, coloque el cursor sobre “Visible Items” y seleccione “Label”.
Las constantes son terminales en el diagrama de bloques que suministran valores de datos fijos al diagrama. Discutiremos los tipos de datos, etc. más adelante en la sesión.
Finalmente conectemos un par de salidas.
Haga clic derecho en IDN para Initialize.vi y seleccione “Create Indicator”. Luego necesitamos eliminar un error, así que haga clic derecho en la parte inferior de Close.vi y seleccione “Create Indicator”.
Observe cómo aparecen los indicadores en el panel frontal. Discutiremos los diagramas de bloques y los paneles frontales en un momento.
¡Ahora tenemos un programa listo para ejecutar!
Sin embargo, notarás que tendremos un error.
Podemos consultar el mensaje de error para intentar obtener una pista de por qué todo salió tan mal. A veces incluso puede resultar útil.
En este caso, lo es!
Los VIs no saben con qué hardware están vinculándose. Para solucionar este problema, los usuarios de hardware deben configurar la referencia VISA correcta en el cuadro desplegable ‘VISA’. Para los usuarios del emulador, haga clic en el botón ‘Copy’, como se ve en la imagen a continuación y pegue la referencia, si tiene hardware apriete el botón de ‘Refresh’ y seleccione la referencia ASRL.
Ahora, presione ‘Run’ nuevamente
El indicador de error mostrará que no hay error, el indicador de identidad habrá cambiado y ahora despliega valores.
Pero, algo mas importante es que el LED del hardware se ha encendido!
Lección 2 - Ciclos For (For Loops)
Opcional: Configuración de Hardware
Conecte el hardware como la imagen siguiente:
Instrucciones
Un ciclo For ejecuta un sub-diagrama un número determinado de veces. En este caso, aprenderás a construir un programa que hace parpadear un LED 10 veces antes de detenerse.
Agrande su espacio de trabajo para dejar espacio para agregar objetos. Utilice Ctrl y luego arrastre para expandir.
Alternativamente, seleccione los objetos que necesita mover con la herramienta de selección y arrástrelos a donde desee con el mouse o usando las flechas.
Nota: presione Mayús y una tecla de flecha para mover los elementos seleccionados más rápido.
Ahora inserte un ciclo For: para hacerlo, haga clic derecho en cualquier lugar del diagrama de bloques para abrir la paleta de funciones. Seleccione ‘Structures’ y luego ‘For Loop’.
Sólo necesitará colocar el ciclo For alrededor del WriteDO SubVI (y las constantes adjuntas a él).
Una vez que se haya colocado el ciclo For, verá una ‘N’ en la esquina superior izquierda, este es el número de iteraciones que realizará el ciclo For.
Haga clic derecho en la N y seleccione “Crear una constante”. Para esta tarea necesitará que el número de bucles sea 20 (10 veces activado y 10 veces desactivado).
Para que el programa “parpadee” correctamente, necesitará saber qué se ha ejecutado en la iteración anterior, por lo que necesitará un registro de desplazamiento (Shift Register).
Haga clic derecho en el borde del ciclo For y seleccione “Add Shift Register”. Conecte la constante verdadera a los registros de desplazamiento y al terminal del cable DO (valor).
Si ejecutara el programa en este punto, el LED se iluminaría, pero no “parpadearía”.
Para un LED parpadeante necesitarás invertir el valor booleano después de cada iteración. Para hacer esto, haga clic derecho en cualquier lugar para abrir la paleta de funciones. Pase el cursor sobre “Booleano” y luego seleccione el booleano “Not”. Conecte esto al registro de desplazamiento.
¡El programa ahora funcionará! Sin embargo, se ejecutará muy rápido y no podrá ver el LED parpadeando, por lo que necesitas reducir la velocidad del ciclo.
Haga clic derecho dentro del ciclo For y coloque el cursor sobre “Timing”. Allí verá muchas opciones de tiempo diferentes. Para ello utilizarás la función ‘Wait (ms)’. Seleccionala y coloca dentro del bucle.
Cree una constante haciendo clic derecho en el lado izquierdo de la función “Wait (ms)”. La función “Wait (ms)” se ejecuta en milisegundos, por lo tanto, para ralentizar el ciclo medio segundo, escriba 500.
Ahora ejecute el programa. Ha utilizado con éxito un ciclo For para hacer parpadear la salida digital.
Lección 3 - Ciclos While - While Loops
Opcional: Configuración del Hardware Conecta el hardware de la siguiente manera:
Instrucciones
El ciclo While ejecuta el subdiagrama hasta que ocurre una condición específica. Siempre se ejecutará al menos una vez.
En este caso, deseamos que el LED parpadee continuamente hasta que se presione el botón “Stop”. Puede crear esto utilizando el programa creado previamente con el ciclo For.
En primer lugar, haga clic derecho en el borde del ciclo For y seleccione “Replace with While Loop”.
Ahora que el ciclo For ha sido reemplazado, el Loop Count (N) no está conectado. Esto no es necesario para un ciclo While y se puede eliminar.
Para agregar un booleano ‘Stop’, cambie a la ventana del panel frontal y haga clic derecho donde desea colocar el botón. Aparecerá la paleta “Controls”, seleccione “Boolean” y elija un botón. El ejemplo utiliza un “botón pulsador” (Push Button), pero cualquiera funcionará.
De vuelta en el diagrama de bloques, mueva el nuevo control booleano al ciclo While y conéctelo al terminal condicional en la esquina inferior derecha. Si se presiona el botón en el panel frontal cuando el programa se está ejecutando, el bucle finalizará y el LED “parpadeante” se detendrá.
Ejercicio - Uso de entradas digitales (DI) para detener el ciclo While
Pista: Diagrama de cableado para entrada digital
Pista: VI para entrada digital (DI)
Lección 4 - Estructura de Eventos - Event Structure
Opcional: Configuración de Hardware Conecte el hardware de la siguiente manera:
Instrucciones
Una estructura de eventos espera hasta que ocurra un determinado evento y luego ejecuta el caso apropiado para manejar ese evento. En este ejemplo, queremos presionar un botón y la luz correspondiente para encenderla.
Primero, eliminemos el ciclo while y su contenido. Haga clic en el bucle While y presione la tecla Eliminar. Haga lo mismo con la constante “True”. Luego retire los cables rotos con Ctrl+B
Haga clic derecho para abrir la paleta de funciones, coloque el cursor sobre “Structures” y luego seleccione “Event Structure”. Coloque la estructura de eventos en el diagrama de bloques
Conecte el VI Initialize.vi y el VI Close.vi a través de la Estructura del Evento
Agregue un nuevo caso de evento haciendo clic derecho en la etiqueta del selector y seleccione “Add Event Case”.
Agregue WriteDO.vi abriendo la paleta de funciones, coloque el cursor sobre “Instrument I/O”, “Instr Drivers”, “HandsOnPi2040” y seleccione “WriteDO.vi”.
Arrastre el sub VI dentro de la estructura del evento y conéctelo. Haga clic derecho en la terminal de “Output” y cree una Constante.
Cambie la salida de “NO DO - Error” a “DO1” haciendo clic en la flecha desplegable en la constante de salida.
A continuación necesitamos agregar un botón para la Salida Digital. Vaya al Panel Frontal y haga clic derecho en cualquier lugar para abrir la Paleta de Controles. Pase el cursor sobre “Boolean” y seleccione “Push Button”
Conecte el nuevo control booleano al terminal ‘DO Value’
Haga clic derecho en el selector de etiquetas, y seleccione “Edit Events Handled by This Case”, pues necesitamos editar los eventos manejados por cada caso.
Esto abrirá la ventana “Edit Events”. Seleccione “Boolean”.
Este caso de evento ya está completo. Necesitaremos 3 Casos de Eventos más, cada uno correspondiente a un LED. La forma más sencilla de hacerlo es hacer clic derecho en el selector de etiquetas y seleccionar “Duplicate Event Case”.
Seleccione ‘Boolean 2’ en la ventana de “Edit Events” (Editar eventos).
Es importante cambiar la constante DO cuando el caso se ha duplicado. (DO1 para booleano, DO2 para booleano 2, etc.) Duplique este caso 2 veces más para DO3 y DO4.
En este punto, su panel frontal puede verse un poco desordenado; tómese un tiempo para limpiarlo. Esto hará que sea más fácil de usar cuando haya terminado de crear el programa.
Podrá ejecutar el programa ahora; sin embargo, se detendrá después de seleccionar un valor booleano. Podemos hacer esto más eficiente.
De vuelta en el diagrama de bloques necesitaremos agregar un ciclo While. Haga clic derecho para abrir la paleta de funciones, coloque el cursor sobre “Structures” y seleccione “While Loop”
Coloque el ciclo While alrededor de la estructura del evento.
Vaya al Panel frontal, para que podamos agregar un botón “Stop” que conectaremos a la condición del ciclo. Haga clic derecho para abrir la paleta de controles, coloque el cursor sobre “Boolean” y luego seleccione “Stop Button”.
También necesitaremos crear un nuevo Caso de evento para este botón de “Stop”. Haga clic derecho en la etiqueta del selector y seleccione “Add Event Case”.
Coloque el control “Stop” dentro del nuevo caso.
Haga clic derecho en la etiqueta del selector y seleccione “Edit Events Handled by This Case”
Cuando aparezca la ventana “Edit Events”, elija la opción “Stop” en la tabla de “Event Sources”.
Nuestro último paso es conectar una constante “True” a la condición de ciclo. Haga clic derecho para abrir la paleta de funciones, coloque el cursor sobre “Boolean” y seleccione “True Constant”. Coloque la Constante dentro de la Estructura del Evento.
Conecte la constante a la condición de ciclo, como se muestra en la imagen a continuación.
El programa ahora se ejecutará exitosamente. Podrá encender y apagar los LED tantas veces como quieras. Puede utilizar el botón Stop para detener la ejecución del programa.
Lección 5 - Números, Gráficas y Tablas
Opcional: Configuración del Hardware
Conecte el hardware de la siguiente manera:
Instrucciones
Entrada Analógica (Analog Input)
Hasta ahora has realizado programas usando entradas y salidas digitales, es momento de revisar las entradas y salidas analógicas. En esta lección nos enfocaremos en las entradas analógicas
De igual manera que las lecciones anteriores, hay que comenzar con los VIs Initialize.vi y Close.vi en un nuevo diagrama de bloques (Block Diagram).
De click derecho para sacar la paleta de funciones (Functions Palette). Revisa la siguiente imagen para ubicar el VI ReadAI.vi y coloca el VI en el diagrama de bloques.
Hay que conectar una constante dando click derecho en el VI ReadAI.vi y seleccionando ‘Create Constant’.
Crea un indicador para el valor analógico en el lado derecho del VI.
Escribe el programa como la siguiente imagen.
El programa se ejecutará exitosamente, pero se ejecutará una sola vez, obteniendo solo una lectura del canal analógico seleccionado.
Para resolver este problema, podemos agregar un ciclo While. Da click derecho para abrir la paleta de funciones, luego navega a ‘Structures’ y selecciona ‘While Loop’. Colócalo alrededor de el VI ReadAI.vi y deja espacio para otras funciones.
Un ciclo While no funcionara sin una condición de paro. En muchos casos se utiliza un simple botón de “Stop” boleano, da click derecho en la condición de paro del While loop y selecciona ‘Create Control’, esto creara un boton en el panel frontal
Esto añadirá automáticamente un “Stop” booleano en el panel frontal.
Puedes ejecutar el programa ahora y, al girar las perillas analógicas, el valor se mostrará en el panel frontal.
Si estas utilizando el hardware fisico, notaras que el valor analógico leído estará brincando de un valor a otro, esto es hasta cierto punto normal y está relacionado al ruido electromagnético en el equipo.
Sin embargo, también es posible reemplazar el indicador numérico por un Waveform Chart, el cual desplegará los datos de manera continua. Da click derecho en el indicador ‘Value’, y navega hasta la opcion de reemplazar, aparecera la paleta de controles y ahi podras elegir un Waveform Chart.
Salida Analógica (Escribir) (Analog Output (Write))
Opcional: Configuración del hardware
Conecte el hardware de la siguiente manera:
Comienze con un diagrama de bloques con Initialize.vi y Close.vi. Haga clic derecho para abrir la Paleta de Funciones. Siga la imagen a continuación y agregue WriteAO.vi al diagrama.
Conecte los 3 VIs entre sí.
Haga clic derecho en la terminal ‘Analog Output’ y cree una constante. Para este ejercicio, la salida analógica producirá 2 datos numéricos diferentes, por lo tanto, 2 constantes se agruparán.
Necesitará crear un Paquete (Bundle). Haga clic derecho en el diagrama de bloques para abrir la Paleta de Funciones, coloque el cursor sobre ‘Cluster, Class & Variant’, luego seleccione ‘Bundle By Name’.
Elimine el cable conectado al subVI, ya que necesita conectarse al paquete que construyó anteriormente.
Cablee el paquete como se muestra en la siguiente imagen.
Una vez conectado el paquete, notará que el paquete tiene la etiqueta “Duty”. Expanda el paquete hacia abajo para que la etiqueta “Frequency” sea visible.
Haga clic derecho en el borde del paquete y cree Constantes para “Duty” y “Frequency”.
El panel frontal debería verse como la imagen a continuación. Sin embargo, aún necesita algunos ajustes.
Usar el “Control numérico” (Numeric Control) puede resultar un poco complicado cuando se ejecuta el programa, por lo que en este caso los cambiará por “Desplazamientos de puntero vertical” (Vertical Pointer Slides).
Haga clic derecho en el control “Duty” y coloque el cursor sobre “Replace”. Seleccione “Numeric” y luego “Vertical Pointer Slide”. Haga lo mismo con el control “Frequency”.
Deberá cambiar la escala del control deslizante “Frequency”. Haga clic derecho en el control deslizante, seleccione “Scale”, “Mapping” y luego “Logarithmic”.
Una escala logarítmica es útil cuando los datos que se muestran son mucho menores o mucho mayores que el resto de los datos, o cuando las diferencias porcentuales entre valores son importantes.
El control deslizante “Duty” puede permanecer como una escala lineal.
Ahora necesita configurar los puntos superiores e inferiores en los controles deslizantes. Sólo necesitará cambiar el punto más alto por ‘Duty’. Configúrelo en ‘1’. Para “Frequency”, el punto más bajo debe ser “10” y el más alto “500,000”.
Ahora volvamos al diagrama de bloques y terminemos de construir el programa.
Abra la paleta de funciones haciendo clic derecho en el diagrama de bloques, coloque el cursor sobre ‘Structures’ y seleccione un ciclo For. Coloque el ciclo For alrededor de WriteAO.vi.
Un ciclo For necesita un ‘Conteo de ciclos’. Elija un número que le permita usar los diales y ver cómo se ejecuta en el Waveform Chart.
Necesitará reducir la velocidad del programa antes de ejecutarlo. Abra la paleta de funciones, seleccione “Timing” y coloque la función “Wait (ms)” dentro del ciclo For.
Haga clic derecho en la terminal izquierda en la función “Wait (ms)” y cree una Constante. Escriba “100”. Esto ralentizará el programa lo suficiente como para que pueda ver los resultados.
Ahora puede ejecutar su programa. Mueva los controles deslizantes hacia arriba y hacia abajo y los resultados se mostrarán en el emulador.
Salida Analógica (Leer) (Analog Output (Read))
Si desea una representación más precisa de los controles deslizantes “Duty” y “Frequency”, puede utilizar ReadAOs.vi.
Coloque ReadAOs.vi dentro del ciclo For repitiendo el mismo proceso que aprendió al comienzo de la lección ‘Analog Ouput (Write)’.
Conecte el subVI como se muestra en la imagen a continuación. Haga clic derecho en la terminal ‘AnalogOutput’ y cree una constante, luego cree un indicador para ‘AnOutValues’.
Ahora puede ejecutar el programa y verá los valores de “Duty” y “Frequency” en el Panel Frontal.
Si está utilizando el Simulador, los valores de ambos aparecerán en el Emulador.
Conceptos Generales
VIs (Virtual Instruments) (Instrumentos Virtuales)
Los programas en LabVIEW se denominan VI (Instrumentos virtuales). En otros lenguajes de programación, un VI es similar a una función o una subrutina. Un VI incluye un Panel Frontal y un Diagrama de Bloques, el ícono del VI y su Panel de Conectores.
Panel Frontal
La ventana del panel frontal es la interfaz de usuario del VI. Usted crea la ventana con controles e indicadores, estos son los terminales interactivos de entrada y salida del VI.
Diagrama de Bloques
El diagrama de bloques es donde creará el código para su programa. El diagrama de bloques implementará representaciones gráficas de funciones para controlar los objetos en el panel frontal. Los objetos en el panel frontal aparecerán como terminales en el diagrama de bloques.
Íconos, Panel de Conectores, y SubVIs
El ícono y panel de conectores le permite usar y ver el VI en otro VI. Esto se llama SubVI; para utilizar un SubVI debe crear un panel conector. Se recomienda personalizar el ícono para ayudar a leer y comprender el programa.
-
El ícono se muestra en la esquina superior derecha del VI, es una representación gráfica del VI. El ícono se puede personalizar con texto e imágenes para ayudar a identificar lo que hace el VI.
-
El panel de conectores es un conjunto de terminales en el ícono que corresponde a los controles e indicadores del VI.
Ícono
Panel de Conectores
Tipos de Datos
Cada variable de un programa debe tener un tipo de datos. Los tipos de datos determinan qué tipo de valor contendrá la variable.
Los tipos de variables son los siguientes:
- Numéricas:
- Entera (int) - números enteros (por ejemplo, -700, 0, 700).
- De punto flotante (float) - números con fracciones o decimales (por ejemplo, 700.0, 0.7).
- Booleana - representa dos estados (por ejemplo, verdadero o falso, 1 o 0).
- Texto (String) - secuencia de caracteres, dígitos y símbolos - siempre tratado como texto (por ejemplo, ‘hola’).
- Tipo enumerado - valores únicos predefinidos (pueden ser números o textos) (por ejemplo, rock (0) jazz (1)).
- Carácter - una sola letra, dígito, signo de puntuación, símbolo o espacio en blanco.
- Arreglo - almacena múltiples elementos en un orden específico. Nota: negro significa que no se seleccionó ningún tipo de datos. Coloque otro tipo de datos en la matriz para crear una matriz de ese tipo de datos.
Nota: haga clic derecho en un terminal de tipo de datos y seleccione ‘Ver como icono’ según su preferencia. (La segunda fila muestra los terminales como iconos).
Ciclos While
Los ciclos While permiten que partes de un programa se ejecuten repetidamente hasta que se cumpla una determinada condición.
- Terminal de Iteración - la terminal de iteración provee la iteración del ciclo actual
- Terminal Condicional - evalúa un valor de entrada booleano al final de cada iteración del ciclo, si la terminal condicional se cumple entonces el ciclo termina.
Ciclos For
Un ciclo For ejecuta un subdiagrama un determinado número de veces. Este valor está conectado al terminal de conteo (N).
- Ciclo de Iteración - indica el número de iteraciones completadas
- Terminal de Conteo - Especifíca el número de veces que se ejecutará el código dentro del ciclo For
Estructuras de Eventos
Una estructura de eventos espera a que un evento ocurra, y luego ejecuta el caso apropiado para manejar ese evento.
- La etiqueta del selector de eventos especifica qué eventos hacen que se ejecute el caso mostrado.
- Las terminales de tiempo de espera especifican el número de milisegundos que se deben esperar por un evento antes de que se agote el tiempo.
- El Nodo de Datos del Evento identifica los datos que LabVIEW devuelve cuando ocurre un evento.