Ir al contenido

← Todas las funcionalidades

Banco de ensayo de fusiblesRaspberry PLC 19RGPIOHMI / Dashboard

Un HMI táctil en Tkinter puro, balizas incluidas

Un HMI Tkinter en un Raspberry PLC no necesita stack web ni licencia SCADA — solo el Python que trae Raspberry Pi OS. Este ejemplo renderiza una interfaz a pantalla completa de 850×550 con displays en vivo de corriente, caída de tensión y temperatura refrescados cada 500 ms, botones de modo grandes para manejar con el dedo y balizas de columna luminosa verde/ámbar/roja gobernadas por los relés R0.1, R0.2 y R0.8 del PLC. El layout proviene de un banco de ensayo de fusibles real en producción.

Modo kiosco para un panel de operario

La ventana se abre con atributos de pantalla completa en una pantalla táctil dedicada: sin escritorio, sin marcos de ventana, nada que pulsar por error. Los displays usan tipografía de 42 pt en negrita legible desde el otro lado del banco, y los tres botones de acción — modo directo, modo automático, paro — ocupan todo el ancho con dos líneas de texto de altura.

Refresco con after(), no con hilos

Todos los valores de proceso se actualizan mediante el planificador after() de Tkinter: el hilo de la GUI lee las últimas medidas cada 500 ms y repinta. Sin hilos en segundo plano tocando widgets ni condiciones de carrera — el clásico escollo de Tkinter, evitado por diseño mientras los módulos de adquisición hacen el trabajo lento.

Las balizas reflejan el estado de la máquina

La columna luminosa es el HMI de todo el que no está frente a la pantalla: ámbar al arrancar (listo), verde mientras corre un ensayo, rojo enclavado ante cualquier fallo. Un helper conmuta los relés de forma exclusiva, de modo que nunca pueden lucir dos colores a la vez y el estado es inequívoco desde la otra punta del taller.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el Raspberry PLC 19R — cópialo libremente:

def set_beacon(active_color):
    """Turn on a single beacon and switch off the rest (exclusive state)."""
    for color, relay in BEACONS.items():
        state = rpiplc.HIGH if color == active_color else rpiplc.LOW
        rpiplc.digital_write(relay, state)

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Por qué Tkinter en lugar de un dashboard web?

Cero dependencias y fiabilidad total sin conexión. El banco debe funcionar sin red y sobrevivir a reinstalaciones del SO; Tkinter está en la biblioteca estándar, arranca en menos de un segundo y funciona durante semanas.

¿Bloquea la GUI la secuencia de ensayo?

No. La lógica de la secuencia corre en el mismo bucle de eventos mediante callbacks de after(), y la E/S pesada (SCPI, I2C) se completa en milisegundos. En ensayos de una hora el bucle simplemente se reprograma a sí mismo.

¿Puedo gobernar columnas luminosas reales directamente desde los relés del PLC?

Sí, esa es la gracia del Raspberry PLC. Las salidas R0.x son relés de contacto seco aptos para balizas de señalización a 24 V, así que las luces se cablean directamente a los bornes sin placas de relés externas.

Funcionalidades relacionadas