Créer une démonstration de supervision SCADA avec FUXA
Dernière mise à jour:
Ce tutoriel utilise des niveaux de cuves simulés pour créer un petit écran de supervision SCADA. Mosquitto reçoit les messages MQTT et FUXA affiche les valeurs et leur évolution. Vous configurerez aussi une alarme de niveau bas.
Cette démonstration est entièrement logicielle. Elle ne connecte pas d'automate, ne commande pas de pompe et ne valide pas la commande d'un équipement physique. Suivez d'abord le guide d'installation de FUXA dans cette catégorie.
Prérequis
- Un reComputer RK3576 exécutant FUXA dans le conteneur
fuxa-rk3576du guide d'installation. - Un accès SSH au RK3576 et un navigateur sur le même réseau de confiance.
- Mosquitto Broker et
mosquitto_pub/mosquitto_subsur le RK3576. Les commandes ci-dessous les installent si nécessaire.
Le guide d'installation utilise le réseau host. Vérifiez que le conteneur fonctionne dans ce mode afin d'accéder au Broker sur 127.0.0.1:1883 :
sudo docker ps --filter name=fuxa-rk3576
sudo docker inspect -f '{{.HostConfig.NetworkMode}}' fuxa-rk3576Si la deuxième commande ne renvoie pas host, adaptez le réseau du conteneur et l'adresse du Broker à votre configuration avant de continuer.
Étape 1 : préparer le Broker MQTT local
Sur le RK3576, exécutez :
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 doit afficher active. Pour cette démonstration locale, limitez le Broker à l'interface de boucle locale ; n'exposez pas un service MQTT sans authentification à Internet. Si vous utilisez déjà un Broker authentifié, reprenez ses paramètres de connexion.
Étape 2 : publier et vérifier les données d'exemple
Un seul topic MQTT transporte les trois niveaux. Publiez un message JSON retenu pour que FUXA puisse le recevoir même en s'abonnant plus tard :
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 -vL'abonné doit afficher immédiatement le topic et le JSON. Conservez exactement les noms tank1, tank2 et tank3 dans la suite.
Étape 3 : connecter FUXA à MQTT
Ouvrez http://<RK3576_IP>:1881/editor. Cliquez sur l'engrenage en haut à gauche, ouvrez Connections et ajoutez une connexion MQTT :
| Champ | Valeur |
|---|---|
| Name | RK3576 MQTT |
| Type | MQTTclient |
| Address (mqtt://[server]:[port]) | mqtt://127.0.0.1:1883 |
| Enable | Activé |
Laissez Polling vide. Cliquez sur OK et vérifiez que l'indicateur de connexion est vert. Une seule connexion suffit : les trois niveaux sont des champs du même topic.
Cliquez sur l'icône de lien de la connexion pour ouvrir la page des tags et abonnements. Dans Browser Topics on broker, saisissez rk3576/fuxa/demo/tanks et lancez la recherche. Sélectionnez le topic ; si Topic path est vide, saisissez le même chemin. Choisissez json plutôt que raw, puis Subscribe. Vérifiez la présence des champs numériques tank1, tank2 et tank3.
Étape 4 : créer l'écran de supervision
Dans l'éditeur, ouvrez MainView sous Views et ajoutez un titre comme RK3576 Tank Monitor.
- Faites glisser l'affichage numérique (icône ## sous Controls) sur la page. Associez-le au tag numérique
tank1, et non au topic JSON entier. Ajoutez deux autres affichages pourtank2ettank3. Ils doivent indiquer7500,1500et3000. - Ajoutez Chart (icône de courbe sous Controls). Ouvrez Chart settings → Chart to show → New Chart. Dans la configuration, cliquez sur + et créez un graphique nommé
Tank Levels. - Dans le menu ⋮ du nouveau graphique, choisissez Add Line et associez la courbe à
tank1. Ajoutez aussitank2ettank3si vous souhaitez voir les trois niveaux. ChoisissezTank Levelsdans Chart to show. - Enregistrez avec l'icône de disquette, puis utilisez le bouton lecture/aperçu pour vérifier les trois valeurs et le graphique.
Utilisez les noms exacts affichés dans le sélecteur de tags FUXA. Le chemin peut inclure la connexion et le topic MQTT.
Étape 5 : observer l'évolution des valeurs
Dans un second terminal du RK3576, exécutez ce simulateur au premier plan. Arrêtez-le avec Ctrl+C :
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
doneVérifiez que les valeurs changent et que des points apparaissent sur le graphique. Arrêtez le simulateur avant de tester l'alarme, sinon le message suivant écrasera la valeur de test.
Étape 6 : ajouter et tester une alarme de niveau bas
Dans l'éditeur, cliquez sur l'engrenage en haut à gauche, ouvrez Alarms et ajoutez une alarme :
| Champ | Valeur |
|---|---|
| Name | Tank 1 low level |
| Tag | Tag numérique tank1 de RK3576 MQTT |
| Low → Enabled | Activé |
| Low → Check interval (seconds) | 1 |
| Low → Min / Max | 0 / 1000 |
| Low → Time in Min-Max range (seconds) | 1 |
| Low → Text | Tank 1 low level |
Cliquez sur OK et enregistrez le projet. L'intervalle et la durée dans la plage sont en secondes : saisissez 1, pas 1000. Les conditions High et High High ne sont pas nécessaires.
Après avoir arrêté le simulateur, publiez une valeur basse :
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m '{"tank1":800,"tank2":1500,"tank3":3000}'Ouvrez http://<RK3576_IP>:1881/. Vérifiez que la première valeur est 800, qu'un badge rouge apparaît sur la cloche en haut à droite et que Alarms contient Tank 1 low level avec la priorité Low et l'état Active. Cliquez sur la cloche si le panneau est fermé.
Après le test, rétablissez une valeur normale :
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t rk3576/fuxa/demo/tanks -r \
-m '{"tank1":7500,"tank2":1500,"tank3":3000}'Résultat et limites
La démonstration est terminée lorsque l'abonnement MQTT fonctionne, que les valeurs et le graphique changent et que l'alarme apparaît pour tank1 égal à 800. Le programme de publication est une boucle de test au premier plan, pas une source de données de production. Un message MQTT retenu conserve la dernière valeur après l'arrêt de la boucle ; une valeur immobile ne prouve pas que de nouvelles données arrivent.
Pour un déploiement réel, utilisez une source de données authentifiée, limitez l'accès à FUXA et au Broker, puis vérifiez les alarmes et toute commande avec l'équipement réel. N'utilisez pas cet exemple directement sur une machine critique pour la sécurité.