Eine SCADA-Überwachungsdemo mit FUXA erstellen

Zuletzt aktualisiert:

In diesem Tutorial erstellen Sie mit simulierten Tankfüllständen einen kleinen SCADA-Überwachungsbildschirm. Mosquitto empfängt MQTT-Nachrichten, und FUXA zeigt die Werte und ihren Verlauf an. Anschließend richten Sie einen Niedrigstandsalarm ein.

Dies ist eine reine Softwaredemo. Sie verbindet keine SPS, steuert keine Pumpe und prüft keine reale Anlagensteuerung. Schließen Sie zuvor die FUXA-Installationsanleitung in dieser Kategorie ab.

Voraussetzungen

  • Ein reComputer RK3576 mit FUXA im Container fuxa-rk3576 aus der Installationsanleitung.
  • SSH-Zugriff auf den RK3576 und ein Browser im selben vertrauenswürdigen Netzwerk.
  • Mosquitto Broker sowie mosquitto_pub / mosquitto_sub auf dem RK3576. Die folgenden Befehle installieren sie bei Bedarf.

Die Installationsanleitung verwendet den Netzwerkmodus host. Prüfen Sie, ob der Container läuft und diesen Modus nutzt, damit er den Broker unter 127.0.0.1:1883 erreicht:

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

Wenn der zweite Befehl nicht host ausgibt, passen Sie vor dem Fortfahren das Containernetzwerk und die Broker-Adresse an Ihre Konfiguration an.

Schritt 1: Lokalen MQTT-Broker vorbereiten

Führen Sie auf dem RK3576 aus:

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 sollte active ausgeben. Beschränken Sie den Broker für diese lokale Demo auf die Loopback-Schnittstelle und stellen Sie einen MQTT-Dienst ohne Authentifizierung nicht ins Internet. Wenn bereits ein authentifizierter Broker vorhanden ist, verwenden Sie dessen Verbindungseinstellungen.

Schritt 2: Beispieldaten veröffentlichen und prüfen

Ein MQTT-Topic enthält drei Tankfüllstände. Veröffentlichen Sie eine gespeicherte JSON-Nachricht, damit FUXA sie auch bei einem späteren Abonnement erhält:

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

Der Abonnent sollte sofort Topic und JSON ausgeben. Verwenden Sie im Folgenden immer dieselben Namen tank1, tank2 und tank3.

Schritt 3: FUXA mit MQTT verbinden

Öffnen Sie http://<RK3576_IP>:1881/editor. Klicken Sie oben links auf das Zahnrad, öffnen Sie Connections und fügen Sie eine MQTT-Verbindung hinzu:

FeldWert
NameRK3576 MQTT
TypeMQTTclient
Address (mqtt://[server]:[port])mqtt://127.0.0.1:1883
EnableEin

Lassen Sie Polling leer. Klicken Sie auf OK und prüfen Sie die grüne Verbindungsanzeige. Eine Verbindung genügt: Die drei Füllstände sind Felder desselben Topics.

Klicken Sie auf das Verknüpfungssymbol der Verbindung, um die Seite für Tags und Abonnements zu öffnen. Geben Sie unter Browser Topics on broker rk3576/fuxa/demo/tanks ein und starten Sie die Suche. Wählen Sie das Topic aus und tragen Sie denselben Pfad unter Topic path ein, falls das Feld leer ist. Wählen Sie json statt raw und klicken Sie auf Subscribe. Prüfen Sie, ob die Zahlenfelder tank1, tank2 und tank3 erscheinen.

Schritt 4: Überwachungsansicht erstellen

Öffnen Sie im Editor unter Views die Ansicht MainView und fügen Sie eine Überschrift wie RK3576 Tank Monitor hinzu.

  1. Ziehen Sie die Zahlenanzeige (Symbol ## unter Controls) auf die Arbeitsfläche. Verknüpfen Sie sie mit dem numerischen Tag tank1, nicht mit dem gesamten JSON-Topic. Fügen Sie zwei weitere Anzeigen für tank2 und tank3 hinzu. Sie sollten 7500, 1500 und 3000 anzeigen.
  2. Ziehen Sie Chart (Liniendiagrammsymbol unter Controls) auf die Arbeitsfläche. Öffnen Sie Chart settings → Chart to show → New Chart. Klicken Sie in der Diagrammkonfiguration auf + und erstellen Sie Tank Levels.
  3. Wählen Sie im ⋮-Menü des neuen Diagramms Add Line und verknüpfen Sie die Linie mit tank1. Bei Bedarf fügen Sie Linien für tank2 und tank3 hinzu. Wählen Sie Tank Levels unter Chart to show.
  4. Speichern Sie mit dem Diskettensymbol und prüfen Sie mit der Wiedergabe-/Vorschau-Schaltfläche die drei Werte und das Diagramm.

Verwenden Sie die im FUXA-Tag-Auswahldialog angezeigten Namen. Der Pfad kann Verbindungsname und MQTT-Topic enthalten.

Schritt 5: Wertänderungen beobachten

Führen Sie den folgenden Simulator in einem zweiten RK3576-Terminal im Vordergrund aus. Beenden Sie ihn mit 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

Prüfen Sie, ob sich die Zahlen ändern und das Diagramm neue Punkte erhält. Stoppen Sie den Simulator vor dem Alarmtest, sonst überschreibt die nächste Nachricht den Testwert.

Schritt 6: Niedrigstandsalarm hinzufügen und testen

Klicken Sie im Editor oben links auf das Zahnrad, öffnen Sie Alarms und fügen Sie einen Alarm hinzu:

FeldWert
NameTank 1 low level
TagNumerisches Tag tank1 unter RK3576 MQTT
Low → EnabledEin
Low → Check interval (seconds)1
Low → Min / Max0 / 1000
Low → Time in Min-Max range (seconds)1
Low → TextTank 1 low level

Klicken Sie auf OK und speichern Sie das Projekt. Prüfintervall und Verweildauer im Bereich werden in Sekunden angegeben: Tragen Sie 1 ein, nicht 1000. High und High High werden hier nicht benötigt.

Veröffentlichen Sie bei gestopptem Simulator einen niedrigen Wert:

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

Öffnen Sie http://<RK3576_IP>:1881/. Prüfen Sie, ob die erste Anzeige 800 zeigt, die Glocke oben rechts eine rote Markierung trägt und unter Alarms Tank 1 low level mit Priorität Low und Status Active erscheint. Klicken Sie auf die Glocke, falls der Bereich geschlossen ist.

Stellen Sie nach dem Test einen normalen Wert wieder her:

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

Ergebnis und Grenzen

Die Demo ist abgeschlossen, wenn das MQTT-Abonnement verbunden ist, Zahlen und Diagramm auf Änderungen reagieren und bei tank1 gleich 800 der Alarm erscheint. Der Publisher ist eine Testschleife im Vordergrund, keine produktive Datenquelle. Eine gespeicherte MQTT-Nachricht hält nach dem Stoppen den letzten Wert vor; eine unveränderte Anzeige belegt keinen weiteren Datenempfang.

Verwenden Sie für den produktiven Betrieb eine authentifizierte Datenquelle, beschränken Sie den Zugriff auf FUXA und Broker und prüfen Sie Alarme sowie Steueraktionen an der echten Anlage. Verbinden Sie dieses Beispiel nicht direkt mit sicherheitskritischen Maschinen.

Referenzen