Een SCADA-monitoringdemo bouwen met FUXA

Laatst bijgewerkt:

In deze handleiding bouw je met gesimuleerde tankniveaus een klein SCADA-monitoringscherm. Mosquitto ontvangt MQTT-berichten en FUXA toont de waarden en hun verloop. Daarna stel je een alarm voor een laag niveau in.

Dit is uitsluitend een softwaredemo. Er wordt geen PLC aangesloten, geen pomp bediend en geen besturing van fysieke apparatuur gevalideerd. Voltooi eerst de FUXA-installatiehandleiding in deze categorie.

Benodigdheden

  • Een reComputer RK3576 waarop FUXA draait in de container fuxa-rk3576 uit de installatiehandleiding.
  • SSH-toegang tot de RK3576 en een browser op hetzelfde vertrouwde netwerk.
  • Mosquitto Broker en mosquitto_pub / mosquitto_sub op de RK3576. Met de onderstaande opdrachten installeer je deze zo nodig.

De installatiehandleiding gebruikt de netwerkmodus host. Controleer of de container draait en deze modus gebruikt, zodat FUXA de Broker op 127.0.0.1:1883 kan bereiken:

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

Als de tweede opdracht niet host toont, pas dan eerst het containernetwerk en het Broker-adres aan je configuratie aan.

Stap 1: De lokale MQTT Broker voorbereiden

Voer op de RK3576 het volgende uit:

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 hoort active te tonen. Beperk de Broker voor deze lokale demo tot de loopback-interface en stel een MQTT-service zonder authenticatie niet bloot aan internet. Gebruik bij een bestaande Broker met authenticatie de bijbehorende verbindingsinstellingen.

Stap 2: Voorbeeldgegevens publiceren en controleren

Eén MQTT-topic bevat drie tankniveaus. Publiceer een bewaard JSON-bericht zodat FUXA het ook kan ontvangen wanneer het later abonneert:

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

De abonnee hoort direct het topic en de JSON-gegevens te tonen. Houd de namen tank1, tank2 en tank3 in de volgende stappen exact gelijk.

Stap 3: FUXA verbinden met MQTT

Open http://<RK3576_IP>:1881/editor. Klik linksboven op het tandwiel, open Connections en voeg één MQTT-verbinding toe:

VeldWaarde
NameRK3576 MQTT
TypeMQTTclient
Address (mqtt://[server]:[port])mqtt://127.0.0.1:1883
EnableAan

Laat Polling leeg. Klik op OK en controleer of de verbindingsindicator groen is. Eén verbinding is voldoende: de drie niveaus zijn velden binnen hetzelfde topic.

Klik op het koppelingspictogram van de verbinding om de pagina met tags en abonnementen te openen. Vul bij Browser Topics on broker rk3576/fuxa/demo/tanks in en klik op zoeken. Selecteer het topic en vul dezelfde route in bij Topic path als dit veld leeg is. Kies json in plaats van raw en klik op Subscribe. Controleer of de numerieke velden tank1, tank2 en tank3 verschijnen.

Stap 4: De monitoringweergave maken

Open in de editor MainView onder Views en voeg een kop toe, bijvoorbeeld RK3576 Tank Monitor.

  1. Sleep een numerieke weergave (pictogram ## onder Controls) naar het canvas. Koppel die aan de numerieke tag tank1, niet aan het volledige JSON-topic. Voeg er nog twee toe voor tank2 en tank3. Ze horen 7500, 1500 en 3000 te tonen.
  2. Sleep Chart (het lijngrafiekpictogram onder Controls) naar het canvas. Open Chart settings → Chart to show → New Chart. Klik in de grafiekinstellingen op + en maak Tank Levels.
  3. Kies Add Line in het ⋮-menu van de nieuwe grafiek en koppel de lijn aan tank1. Voeg zo nodig lijnen voor tank2 en tank3 toe. Selecteer Tank Levels bij Chart to show.
  4. Sla op met het diskettepictogram en gebruik afspelen/voorbeeld om de drie waarden en de grafiek te controleren.

Gebruik de exacte tagnamen uit de FUXA-kiezer. Het pad kan ook de verbinding en het MQTT-topic bevatten.

Stap 5: Veranderende waarden bekijken

Voer deze simulator op de RK3576 in een tweede terminal op de voorgrond uit. Stop met 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

Controleer of de waarden veranderen en de grafiek nieuwe punten krijgt. Stop de simulator vóór de alarmtest, anders overschrijft het volgende bericht de testwaarde.

Stap 6: Een alarm voor een laag niveau toevoegen en testen

Klik in de editor linksboven op het tandwiel, open Alarms en voeg een alarm toe:

VeldWaarde
NameTank 1 low level
TagNumerieke tag tank1 onder RK3576 MQTT
Low → EnabledAan
Low → Check interval (seconds)1
Low → Min / Max0 / 1000
Low → Time in Min-Max range (seconds)1
Low → TextTank 1 low level

Klik op OK en sla het project op. Het controle-interval en de tijd binnen het bereik zijn in seconden: vul 1 in, niet 1000. Voor dit voorbeeld zijn High en High High niet nodig.

Publiceer een lage waarde nadat je de simulator hebt gestopt:

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

Open http://<RK3576_IP>:1881/. Controleer of het eerste getal 800 is, de bel rechtsboven een rode badge heeft en Alarms Tank 1 low level met prioriteit Low en status Active toont. Klik op de bel als het paneel gesloten is.

Herstel na de test een normale waarde:

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

Resultaat en beperkingen

De demo is voltooid als het MQTT-abonnement werkt, de waarden en grafiek veranderen en het alarm verschijnt wanneer tank1 800 is. Het publicatieprogramma is een testlus op de voorgrond, geen productiegegevensbron. Een bewaard MQTT-bericht laat de laatste waarde zien nadat de lus stopt; een stilstaand getal bewijst niet dat er nieuwe gegevens binnenkomen.

Gebruik voor productie een gegevensbron met authenticatie, beperk de toegang tot FUXA en de Broker en controleer alarmen en besturingsacties op de echte installatie. Sluit dit voorbeeld niet rechtstreeks aan op veiligheidskritieke machines.

Referenties