Crear una demostración de supervisión SCADA con FUXA

Última actualización:

En este tutorial crearás una pantalla SCADA con niveles simulados de tres depósitos. Mosquitto recibe los mensajes MQTT y FUXA muestra los valores y su tendencia. También configurarás una alarma de nivel bajo.

Esta demostración utiliza solo software. No conecta ningún PLC, no acciona bombas ni valida el control de equipos físicos. Completa primero la guía de instalación de FUXA de esta categoría.

Requisitos

  • Un reComputer RK3576 con FUXA ejecutándose en el contenedor fuxa-rk3576 de la guía de instalación.
  • Acceso SSH al RK3576 y un navegador en la misma red de confianza.
  • Mosquitto Broker y mosquitto_pub / mosquitto_sub en el RK3576. Los comandos siguientes los instalan si es necesario.

La guía de instalación utiliza la red host. Comprueba que el contenedor esté en marcha y utilice ese modo para acceder al Broker en 127.0.0.1:1883:

bash
sudo docker ps --filter name=fuxa-rk3576
sudo docker inspect -f '{{.HostConfig.NetworkMode}}' fuxa-rk3576

Si el segundo comando no muestra host, ajusta la red del contenedor y la dirección del Broker según tu configuración antes de continuar.

Paso 1: Preparar el Broker MQTT local

En el RK3576, ejecuta:

bash
sudo apt update
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
systemctl is-active mosquitto
sudo ss -ltnp | grep ':1883'

systemctl is-active debe mostrar active. Para esta demostración, mantén el Broker limitado a la interfaz local; no expongas un servicio MQTT sin autenticación a Internet. Si ya utilizas un Broker autenticado, usa sus parámetros de conexión.

Paso 2: Publicar y comprobar los datos de ejemplo

Un único tema MQTT transporta los tres niveles. Publica un mensaje JSON retenido para que FUXA pueda leerlo aunque se suscriba después:

bash
mosquitto_pub -h 127.0.0.1 -p 1883 \
  -t rk3576/fuxa/demo/tanks -r \
  -m '{"tank1":7500,"tank2":1500,"tank3":3000}'

mosquitto_sub -h 127.0.0.1 -p 1883 \
  -t rk3576/fuxa/demo/tanks -C 1 -v

El suscriptor debe imprimir enseguida el tema y el JSON. Mantén exactamente los nombres tank1, tank2 y tank3 en los pasos siguientes.

Paso 3: Conectar FUXA a MQTT

Abre http://<RK3576_IP>:1881/editor. Haz clic en el engranaje superior izquierdo, entra en Connections y crea una conexión MQTT:

CampoValor
NameRK3576 MQTT
TypeMQTTclient
Address (mqtt://[server]:[port])mqtt://127.0.0.1:1883
EnableActivado

Deja Polling sin configurar. Haz clic en OK y confirma que aparece un indicador verde. Solo hace falta una conexión: los tres niveles son campos de un mismo tema.

Haz clic en el icono de enlace de la conexión para abrir la página de etiquetas y suscripciones. En Browser Topics on broker, escribe rk3576/fuxa/demo/tanks y pulsa el icono de búsqueda. Selecciona el tema; si Topic path está vacío, escribe la misma ruta. Elige json, no raw, y pulsa Subscribe. Comprueba que aparecen los campos numéricos tank1, tank2 y tank3.

Paso 4: Crear la pantalla de supervisión

Vuelve al editor, abre MainView en Views y añade un título como RK3576 Tank Monitor.

  1. Arrastra el control numérico (icono ## de Controls) al lienzo. Vincúlalo a la etiqueta numérica tank1, no al tema JSON completo. Añade otros dos controles para tank2 y tank3. Deben mostrar 7500, 1500 y 3000.
  2. Arrastra Chart (icono de gráfica de líneas en Controls). Abre Chart settings → Chart to show → New Chart. En la configuración, pulsa + y crea la gráfica Tank Levels.
  3. En el menú ⋮ de la nueva gráfica, selecciona Add Line y vincula la línea a tank1. Si quieres mostrar los tres niveles, añade otras líneas para tank2 y tank3. Selecciona Tank Levels en Chart to show.
  4. Guarda con el icono de disco y utiliza el botón de reproducción/vista previa para verificar los tres números y la gráfica.

Usa los nombres que muestre el selector de etiquetas de FUXA; la ruta puede incluir la conexión y el tema MQTT.

Paso 5: Observar los cambios de valor

En otra terminal del RK3576, ejecuta este simulador en primer plano. Para detenerlo, pulsa Ctrl+C:

bash
tank1=7500
tank2=1500
tank3=3000

while true; do
  mosquitto_pub -h 127.0.0.1 -p 1883 \
    -t rk3576/fuxa/demo/tanks -r \
    -m "{\"tank1\":$tank1,\"tank2\":$tank2,\"tank3\":$tank3}"

  tank1=$((tank1 - 100))
  tank2=$((tank2 + 60))
  tank3=$((tank3 + 40))

  if [ "$tank1" -le 0 ]; then
    tank1=7500
    tank2=1500
    tank3=3000
  fi
  sleep 2
done

Comprueba que los valores se actualizan y la gráfica recibe puntos. Detén el simulador antes de probar la alarma; de lo contrario, el siguiente mensaje sobrescribirá el valor de prueba.

Paso 6: Añadir y probar una alarma de nivel bajo

En el editor, haz clic en el engranaje superior izquierdo, abre Alarms y añade una alarma:

CampoValor
NameTank 1 low level
TagEtiqueta numérica tank1 de RK3576 MQTT
Low → EnabledActivado
Low → Check interval (seconds)1
Low → Min / Max0 / 1000
Low → Time in Min-Max range (seconds)1
Low → TextTank 1 low level

Pulsa OK y guarda el proyecto. El intervalo y el tiempo dentro del rango se expresan en segundos: introduce 1, no 1000. No hacen falta condiciones High ni High High.

Con el simulador detenido, publica un valor bajo:

bash
mosquitto_pub -h 127.0.0.1 -p 1883 \
  -t rk3576/fuxa/demo/tanks -r \
  -m '{"tank1":800,"tank2":1500,"tank3":3000}'

Abre http://<RK3576_IP>:1881/. Comprueba que el primer número es 800, la campana superior derecha muestra una insignia roja y el panel Alarms contiene Tank 1 low level con prioridad Low y estado Active. Haz clic en la campana si el panel está cerrado.

Después de la prueba, restablece un valor normal:

bash
mosquitto_pub -h 127.0.0.1 -p 1883 \
  -t rk3576/fuxa/demo/tanks -r \
  -m '{"tank1":7500,"tank2":1500,"tank3":3000}'

Resultado y limitaciones

La demostración termina cuando la suscripción MQTT funciona, los números y la gráfica cambian y la alarma aparece con tank1 en 800. El publicador es un bucle de prueba en primer plano, no una fuente de datos de producción. Un mensaje MQTT retenido conserva el último valor tras detener el bucle; un número estático no demuestra que sigan llegando datos.

En producción, usa una fuente de datos autenticada, restringe el acceso a FUXA y al Broker, y verifica alarmas y acciones de control con el equipo real. No conectes este ejemplo directamente a maquinaria crítica para la seguridad.

Referencias