Table des matières
TogglePrésentation des exigences
Ce chapitre porte principalement sur la mise en œuvre d'un processus : l'EG8200 collecte des données provenant du Siemens S7-200 Smart, les convertit au format JSON et les transmet à la plateforme d'application via MQTT ; parallèlement, il peut recevoir des commandes de contrôle émises par la plateforme d'application afin de permettre la commutation à distance. Pour mettre en œuvre ce processus, il convient de préparer à l'avance les éléments suivants :
-
La table des ports et des adresses IP de l'automate à interroger, par exemple :
|
PLC |
S7-200 Smart |
||
|
IP |
192.168.0.24/102 |
||
|
Tableau des points (DB1) |
|||
|
adresse |
type de données |
Attributs |
nom |
|
V0.0 |
Booléen |
en lecture seule |
État de démarrage et d'arrêt du moteur n° 1 |
|
V0.1 |
Booléen |
en lecture seule |
État de démarrage et d'arrêt du moteur n° 2 |
|
V0.2 |
Booléen |
en lecture seule |
État de démarrage et d'arrêt du moteur n° 3 |
|
V0.3 |
Booléen |
en lecture seule |
État de démarrage et d'arrêt du moteur n° 4 |
|
V0.4 |
Booléen |
Lire et écrire |
Commande de démarrage et d'arrêt du moteur n° 1 |
|
V0.5 |
Booléen |
Lire et écrire |
Commande de démarrage et d'arrêt du moteur n° 2 |
|
V0.6 |
Booléen |
Lire et écrire |
Commande de démarrage et d'arrêt du moteur n° 3 |
|
V0.7 |
Booléen |
Lire et écrire |
Commande de démarrage et d'arrêt du moteur n° 4 |
|
VD100 |
Non signé 16 |
en lecture seule |
Tension (V) |
|
VD200 |
Non signé 16 |
en lecture seule |
Courant (A) |
- Paramètres liés à la communication MQTT et exigences relatives au format de données JSON, tels que :
url:1883.dtuip.com:1883
clientID:820000003058164F
identifiant : 19381903226
mot de passe : ZHZK19381903226
Abonnement : 820000003058164F / Publication : 820000003058164F
Format JSON : { "sensorDatas" : [ { "flag" : "em1Status", "switcher" : 1 }, { "flag" : "em2Status", "switcher" : 1 }, { " flag " : " em3Status ", " switcher " : 1 }, { " flag " : " em4Status ", " switcher " : 1 }, { " flag " : " em1Control ", " switcher " : 0 }, { "flag":"em2Control", "switcher":0 }, { "flag":"em3Control", "switcher":0 }, { "flag":"em4Control" , "switcher":0 }, { "flag":"voltage", "value":220,0 }, { "flag":"current", "value":10,2 } ]}
Analyse de la demande
Lors de la création d'un processus, la logique de base est la suivante : pour adapter le processus en fonction de l'évolution des données. Après analyse, on peut en conclure que cette demande se divise principalement en deux parties : la liaison montante et la liaison descendante. Parmi celles-ci, les principales tâches liées à la transmission montante des données comprennent :
-
- Les données de l'automate sont lues via le protocole S7, puis les données obtenues sont stockées en mémoire (
Nœud S7) - Mettre les données au format JSON (
Nœud de fonction) - Établir une connexion MQTT et publier sur le sujet spécifié (
Nœud de publication MQTT)
- Les données de l'automate sont lues via le protocole S7, puis les données obtenues sont stockées en mémoire (
Les principales tâches liées à la transmission descendante des données sont les suivantes :
-
- Abonnez-vous aux sujets MQTT et recevez les données envoyées par la plateforme (
Nœud d'abonnement MQTT) - Analyser les données JSON reçues et les stocker en mémoire (
Nœud de fonction) - Écrivez dans l'automate programmable selon le format requis par S7 (
Nœud S7)
- Abonnez-vous aux sujets MQTT et recevez les données envoyées par la plateforme (

Mise en œuvre des exigences
1. Collecter les données du PLC
-
- Faites glisser un
Nœud de lecture S7et unNœud de débogageissu de la bibliothèque de nœuds.Nœud de débogagesert à visualiser les données lues dans l'automate afin de faciliter la localisation des problèmes.
- Faites glisser un

-
- Double-cliquez
Nœud de lecture S7et renseignez les paramètres de configuration correspondants conformément au récapitulatif des exigences, comme illustré dans la figure suivante :
- Double-cliquez
IP : PLC Port IP : 102 (port par défaut pour la communication via le protocole S7 : 102) Mode : TASP (le S7-200 Smart sélectionne le mode TASP ; les autres modèles sélectionnent le mode Rack/Slot) TSAP local : 1002 (valeur fixe) TSAP à distance : 0301 (valeur fixe) Intervalle de collecte : 1 000 ms (valeur par défaut : 1 000 ms, personnalisable) Délai d'expiration : 2 000 ms (valeur par défaut : 2 000 ms, personnalisable) Configuration des points de données (vous trouverez la relation correspondante dans le document d'aide) V0.0-->DB1,X0.0V0.1 -->DB1, X0,1 V0,2 --> DB1, X0,2 V0,3 --> DB1, X0,3 V0,4 --> DB1, X0,4 V0,5 --> DB1, X0,5 V0,6 -->DB1, X0,6V0,7-->DB1,
Si les paramètres sont corrects, un message de journal s'affichera dans la fenêtre de débogage, indiquant le contenu des données lues.

-
- Il arrive parfois que le nombre de points de données de l'automate soit important, et il est fastidieux de les saisir manuellement un par un. Les nœuds prennent en charge l'importation et l'exportation de points de données :

2. Mise en forme des données
Conformément aux instructions de l'étape 2, vous pouvez voir les données du PLC lues dans la fenêtre de débogage comme suit :

En effet, la plateforme d'application stipule que les données doivent être transmises au format JSON. Ensuite, utilisez Nœud de fonctionCode JavaScript permettant de mettre en forme les données. Voici ce code :
let jsonArray = []jsonArray.push({ "flag": "em1Status", "switcher": msg.payload.em1Status == true ? 1 : 0 })jsonArray.push({ "flag": "em2Status", " switcher": msg.payload.em2Status == true ? 1 : 0 })jsonArray.push({ "flag": "em3Status", "switcher": msg.payload.em3Status == true ? 1 : 0 })jsonArray. push({ "flag" : "em4Status", "switcher" : msg.payload.em4Status == true ? 1 : 0 })jsonArray.push({ "flag": "em1Control", "switcher": msg.payload. em1Control == true ? 1 : 0 })jsonArray.push({ "flag": "em2Control", "switcher": msg.payload.em2Control == true ? 1 : 0 })jsonArray.push({ "flag": "em3Control", "switcher": msg.payload.em3Control == true ? 1 : 0 })jsonArray.push({ "flag": "em4Control", "switcher": msg.payload.em4Control == true ? 1 : 0 })jsonArray.push({ "flag" : "voltage", "value" : msg.payload.voltage / 100 })/*deux décimales*/jsonArray.push({ "flag" : "current", " value": msg.payload.current / 100 })/*deux décimales*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg
Copiez le code ci-dessus et collez-le dans le nœud de fonction. Vous pourrez constater le résultat après le déploiement :

On constate que les données lues depuis l'automate ont été converties au format JSON final conformément aux exigences, et que les données ont fait l'objet d'un certain traitement (deux décimales). Ce n'est là que la partie émergée de l'iceberg en matière de nœuds de fonction. Comme cette plateforme prend en charge la programmation JavaScript, il est possible d'y implémenter pratiquement toutes les fonctions imaginables.

3. Transmettre les données via MQTT
Faites glisser un Nœud de publication MQTT , configurez-le en suivant les instructions à l'écran, saisissez les informations relatives à la connexion MQTT ainsi que le sujet de publication MQTT (voir l'aperçu des exigences pour plus de détails), et vous pourrez alors mettre en place le reporting des données. On constate qu'une fois les données transmises avec succès, la plateforme d'application s'affiche en vert pour indiquer que l'appareil est en ligne et que les données sont normales :

À ce stade, la transmission des données est terminée et peut être effectuée en quelques étapes simples : collecter les données de l'automate programmable (PLC) et les transmettre dans un format JSON personnalisé.
4. Recevoir des données via MQTT
Faites glisser un Nœud d'abonnement MQTT. Remarque : Nœud de publication MQTT et Nœud d'abonnement MQTTpeuvent partager une connexion MQTT. Si vous utilisez la même connexion mais un sujet différent, faites glisser le nœud et sélectionnez la connexion configurée. Si vous choisissez d'ajouter un nouveau nœud de courtier MQTT, cela implique la création d'une nouvelle connexion MQTT.

Sélectionnez un nœud de débogage et cliquez sur le bouton de commande de la plateforme. Vous pouvez voir les instructions émises dans la fenêtre de débogage :

5. Analyse des données
Selon le guide d'aide de la Nœud d'écriture S7. Il faut savoir que pour écrire des données dans l'automate, les données à transmettre comportent deux paramètres, comme suit :

Par conséquent, lors de l'analyse des données, les données envoyées par la plateforme applicative doivent être converties en un message contenant deux variables charge utile et variable transmis à Nœud d'écriture S7. Le code du nœud de fonction est le suivant :
let cmdDate = msg.payload; msg.variable = cmdDate.sensorDatas[0].flag; msg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : false; return msg
Copiez le code ci-dessus, collez-le dans le nœud de fonction, puis configurez le nœud de débogage pour qu'il affiche le message d'origine. Vous verrez s'afficher le contenu suivant :

Vous pouvez constater que les données ont été converties au format requis par le nœud d'écriture de données S7.

6. Écrivez à PLC
Faites glisser unNœud d'écriture S7, se connecter Nœud de calcul de fonction, actionnez le commutateur sur la plateforme d'application et observez le résultat de la démonstration :

Résumer
Ce chapitre présente un processus relativement complexe, dont l'objectif est de décrire les fonctionnalités de la passerelle. Par conséquent, il ne vise pas à optimiser la sécurité, la stabilité, la flexibilité, etc. du programme. En comprenant ce processus, je pense que vous maîtrisez déjà la programmation visuelle de la passerelle. Ensuite, découvrez en détail comment utiliser les fonctions de chaque nœud. En les maîtrisant, vous disposerez d'un plus grand choix et de davantage de possibilités pour créer des processus plus complexes !
Code source
Tous les processus prennent en charge l'importation et l'exportation au format JSON, ce qui facilite le partage des processus terminés avec d'autres personnes. Le fichier JSON d'exemple de ce chapitre se présente comme suit. Une fois copié, sélectionnez « Importer » puis « Coller » dans le coin supérieur droit de la barre de menu. La procédure est identique pour l'exportation.
[{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"Lecture des données de l'automate","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id" : "4abb25e7e75b3447", "type" : "mqtt out", "z" : "2ff624305b8cb30b", "name" : "Libérer les données", "topic":"820000003058164F","qos":"0","retain":"false", "respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker" : "8d85be060cbc6545", "x" : 520, "y" : 180, "wires" : []}, {"id" : "63f2816a781192d5", "type":"mqtt in","z":"2ff624305b8cb30b","name":"Données d'abonnement","topic ":"820000003058164F/ ","qos":"0","datatype":"auto-detect","broker":"8d85be060cbc6545","nl":false,"rap":true,"rh":0 ,"inputs":0,"x":180,"y":260,"wires":[["1b6776e208355720"]]},{"id" : "03f0b9014af25c1d", "type" : "function", " z" : "2ff624305b8cb30b", "name" : "Mise en forme des données", "func " : " let jsonArray = []nnjsonArray.push({ " flag " : " ""em1Status" "



