Entrenamiento en LabVIEW para la comunidad en español

Entrenamiento en LabVIEW con Raspberry PI PICO para la comunidad de habla hispana

View on GitHub

Inicio

Configurando el sistema

Instrucciones para tutor

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’

image

Escribe lo siguiente:

./CTIPicoVISAEmulator.exe

image

El emulador te pedirá elegir una subred.

image

image

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.

image

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.

image

Acomoda las ventanas de la siguiente manera:

image

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.

image

Arrastra el VI Initialize.vi, WriteDO.vi y Close.vi en el diagrama de bloques como se muestra a continuacion.

image

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.

image

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’.

image

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.

image

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.

image

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

image

image

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”.

image

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.

image

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”.

image

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.

image

Podemos consultar el mensaje de error para intentar obtener una pista de por qué todo salió tan mal. A veces incluso puede resultar útil.

image

En este caso, lo es!

image

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.

image

Ahora, presione ‘Run’ nuevamente

El indicador de error mostrará que no hay error, el indicador de identidad habrá cambiado y ahora despliega valores.

image

Pero, algo mas importante es que el LED del hardware se ha encendido!

image

Lección 2 - Ciclos For (For Loops)

Opcional: Configuración de Hardware

Conecte el hardware como la imagen siguiente:

image

image

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.

image

image

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’.

image

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).

image

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).

image

image

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.

image

image

¡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.

image

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:

image

image

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”.

image

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.

image

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á.

image

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á.

image

Ejercicio - Uso de entradas digitales (DI) para detener el ciclo While

Pista: Diagrama de cableado para entrada digital

image

Pista: VI para entrada digital (DI)

image

Lección 4 - Estructura de Eventos - Event Structure

Opcional: Configuración de Hardware Conecte el hardware de la siguiente manera:

image

image

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

image

image

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

image

Conecte el VI Initialize.vi y el VI Close.vi a través de la Estructura del Evento

image

Agregue un nuevo caso de evento haciendo clic derecho en la etiqueta del selector y seleccione “Add Event Case”.

image

Agregue WriteDO.vi abriendo la paleta de funciones, coloque el cursor sobre “Instrument I/O”, “Instr Drivers”, “HandsOnPi2040” y seleccione “WriteDO.vi”.

image

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.

image

Cambie la salida de “NO DO - Error” a “DO1” haciendo clic en la flecha desplegable en la constante de salida.

image

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”

image

Conecte el nuevo control booleano al terminal ‘DO Value’

image

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.

image

Esto abrirá la ventana “Edit Events”. Seleccione “Boolean”.

image

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”.

image

Seleccione ‘Boolean 2’ en la ventana de “Edit Events” (Editar eventos).

image

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.

image

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.

image

image

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”

image

Coloque el ciclo While alrededor de la estructura del evento.

image

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”.

image

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”.

image

Coloque el control “Stop” dentro del nuevo caso.

image

Haga clic derecho en la etiqueta del selector y seleccione “Edit Events Handled by This Case”

image

Cuando aparezca la ventana “Edit Events”, elija la opción “Stop” en la tabla de “Event Sources”.

image

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.

image

Conecte la constante a la condición de ciclo, como se muestra en la imagen a continuación.

image

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:

image

image

image

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

image

image

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.

image

Hay que conectar una constante dando click derecho en el VI ReadAI.vi y seleccionando ‘Create Constant’.

image

Crea un indicador para el valor analógico en el lado derecho del VI.

image

Escribe el programa como la siguiente imagen.

image

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.

image

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.

image

image

Puedes ejecutar el programa ahora y, al girar las perillas analógicas, el valor se mostrará en el panel frontal.

image

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.

image

image

Salida Analógica (Escribir) (Analog Output (Write))

Opcional: Configuración del hardware

Conecte el hardware de la siguiente manera:

hardware11

hardware12

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.

write1

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.

write2

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’.

write3

Elimine el cable conectado al subVI, ya que necesita conectarse al paquete que construyó anteriormente.

write4

Cablee el paquete como se muestra en la siguiente imagen.

write5

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.

write6

Haga clic derecho en el borde del paquete y cree Constantes para “Duty” y “Frequency”.

write7

El panel frontal debería verse como la imagen a continuación. Sin embargo, aún necesita algunos ajustes.

write8

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”.

write10write9

Deberá cambiar la escala del control deslizante “Frequency”. Haga clic derecho en el control deslizante, seleccione “Scale”, “Mapping” y luego “Logarithmic”.

write11

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.

write12write13

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.

write14

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.

write15

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.

write16

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.

write17

Ahora puede ejecutar su programa. Mueva los controles deslizantes hacia arriba y hacia abajo y los resultados se mostrarán en el emulador.

write18

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)’.

read1

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’.

read2

Ahora puede ejecutar el programa y verá los valores de “Duty” y “Frequency” en el Panel Frontal.

read3

Si está utilizando el Simulador, los valores de ambos aparecerán en el Emulador.

read4

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.

Ícono

icon1

Panel de Conectores

icon2

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:

data_types

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.

whileloop

  1. Terminal de Iteración - la terminal de iteración provee la iteración del ciclo actual
  2. 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).

forloop

  1. Ciclo de Iteración - indica el número de iteraciones completadas
  2. 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.

eventstr

  1. La etiqueta del selector de eventos especifica qué eventos hacen que se ejecute el caso mostrado.
  2. 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.
  3. El Nodo de Datos del Evento identifica los datos que LabVIEW devuelve cuando ocurre un evento.