Inhaltsübersicht
Umschalten aufÜbersicht über die Anforderungen
In diesem Kapitel wird im Wesentlichen ein Prozess implementiert: Der EG8200 erfasst Daten von der Siemens S7-200 Smart, wandelt diese in das JSON-Format um und übermittelt sie über MQTT an die Anwendungsplattform; gleichzeitig kann er von der Anwendungsplattform ausgegebene Steuerbefehle empfangen, um eine Fernsteuerung zu ermöglichen. Um diesen Prozess durchzuführen, müssen die folgenden Materialien im Voraus bereitgestellt werden:
-
Die IP-Port- und Punkt-Tabelle der zu erfassenden SPS, zum Beispiel:
|
PLC |
S7-200 Smart |
||
|
IP |
192.168.0.24/102 |
||
|
Punktetabelle (DB1) |
|||
|
Adresse |
Datentyp |
Attribute |
Name |
|
V0.0 |
Boolesch |
nur lesen |
Status des Starts und Stopps von Motor Nr. 1 |
|
V0.1 |
Boolesch |
nur lesen |
Status des Starts und Stopps von Motor Nr. 2 |
|
V0.2 |
Boolesch |
nur lesen |
Status des Starts und Stopps von Motor Nr. 3 |
|
V0.3 |
Boolesch |
nur lesen |
Status des Starts und Stopps von Motor Nr. 4 |
|
V0.4 |
Boolesch |
Lesen und Schreiben |
Steuerung Nr. 1 für das Starten und Stoppen des Motors |
|
V0.5 |
Boolesch |
Lesen und Schreiben |
Steuerung zum Starten und Stoppen von Motor Nr. 2 |
|
V0.6 |
Boolesch |
Lesen und Schreiben |
Steuerung zum Starten und Stoppen von Motor Nr. 3 |
|
V0.7 |
Boolesch |
Lesen und Schreiben |
Steuerung zum Starten und Stoppen des Motors Nr. 4 |
|
VD100 |
Unsigniert16 |
nur lesen |
Spannung (V) |
|
VD200 |
Unsigniert16 |
nur lesen |
Strom (A) |
- Parameter im Zusammenhang mit der MQTT-Kommunikation und Anforderungen an das JSON-Datenformat, wie zum Beispiel:
url:1883.dtuip.com:1883
clientID:820000003058164F
Benutzername:19381903226
Passwort:ZHZK19381903226
Abonnieren:820000003058164F/ Veröffentlichen:820000003058164F
JSON-Format:{ "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 } ]}
Bedarfsanalyse
Bei der Erstellung eines Prozesses lautet die grundlegende Logik wie folgt: den Prozess auf der Grundlage der Datentrends zu gestalten. Nach einer Analyse lässt sich feststellen, dass sich dieser Bedarf im Wesentlichen in zwei Teile gliedert: Daten-Uplink und Daten-Downlink. Zu den wichtigsten Aufgaben des Daten-Uplinks gehören unter anderem:
-
- Die SPS-Daten werden über das S7-Protokoll ausgelesen, und die erhaltenen Daten werden im Speicher abgelegt (
S7-Knoten) - Daten im JSON-Format formatieren (
Funktionsknoten) - Stellen Sie eine MQTT-Verbindung her und veröffentlichen Sie Daten im angegebenen Topic (
MQTT-Publish-Knoten)
- Die SPS-Daten werden über das S7-Protokoll ausgelesen, und die erhaltenen Daten werden im Speicher abgelegt (
Zu den Hauptaufgaben der Datenübertragung gehören:
-
- Abonnieren Sie MQTT-Themen und empfangen Sie die von der Plattform gesendeten Daten (
MQTT-Abonnement-Knoten) - Die empfangenen JSON-Daten analysieren und im Speicher ablegen (
Funktionsknoten) - Schreiben Sie die Daten im von S7 geforderten Format in die SPS (
S7-Knoten)
- Abonnieren Sie MQTT-Themen und empfangen Sie die von der Plattform gesendeten Daten (

Umsetzung der Anforderungen
1. PLC-Daten erfassen
-
- Ziehe ein
S7-Lese-Knotenund einDebug-Knotenaus der Knotenbibliothek.Debug-Knotendient zur Anzeige der ausgelesenen SPS-Daten, um die Fehlersuche zu erleichtern.
- Ziehe ein

-
- Doppelklick
S7-Lese-Knotenund geben Sie die entsprechenden Einstellungsparameter gemäß der Anforderungsübersicht ein, wie in der folgenden Abbildung dargestellt:
- Doppelklick
IP: SPS IP-Port: 102 (Standardport 102 für die Kommunikation über das S7-Protokoll) Modus: TASP (S7-200 Smart wählt TASP aus, andere Modelle wählen „Rack/Slot“) Lokales TSAP: 1002 (Festwert) Remote-TSAP: 0301 (fester Wert) Erfassungszeitraum: 1000 ms (Standardwert 1000 ms, anpassbar) Timeout-Dauer: 2000 ms (Standardwert 2000 ms, anpassbar) Konfiguration der Datenpunkte (die entsprechende Zuordnung finden Sie im Hilfedokument) 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,
Wenn die Einstellungen korrekt sind, wird im Debugging-Fenster ein Protokollausgabe angezeigt, das den Inhalt der gelesenen Daten enthält.

-
- Manchmal gibt es sehr viele SPS-Datenpunkte, und es ist mühsam, diese einzeln von Hand einzugeben. Knoten unterstützen den Import und Export von Datenpunkten:

2. Datenformatierung
Gemäß der Anleitung in Schritt 2 können Sie die ausgelesenen SPS-Daten wie folgt im Debugging-Fenster einsehen:

Da die Anwendungsplattform vorschreibt, dass Daten im JSON-Format übermittelt werden müssen. Verwenden Sie als Nächstes FunktionsknotenJavaScript-Code zur Formatierung der Daten. Der Code lautet wie folgt:
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 })/*zwei Dezimalstellen*/jsonArray.push({ "flag": "current", " value": msg.payload.current / 100 })/*zwei Dezimalstellen*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg
Kopieren Sie den obigen Code und fügen Sie ihn in den Funktionsknoten ein. Nach der Bereitstellung können Sie das Ergebnis sehen:

Es ist ersichtlich, dass die ausgelesenen SPS-Daten gemäß den Anforderungen in das endgültige JSON-Format konvertiert und bis zu einem bestimmten Grad (zwei Dezimalstellen) berechnet wurden. Das ist nur die Spitze des Eisbergs, was Funktionsknoten angeht. Da JavaScript-Programmierung unterstützt wird, lässt sich hier nahezu jede erdenkliche Funktion umsetzen.

3. Daten über MQTT melden
Ziehen Sie ein MQTT-Publish-Knoten , konfigurieren Sie es gemäß den Anweisungen, geben Sie die Informationen zur MQTT-Verbindung sowie das MQTT-Veröffentlichungsthema ein (Einzelheiten finden Sie in der Übersicht über die Anforderungen), und schon können Sie die Datenübermittlung einrichten. Es ist zu erkennen, dass die Anwendungsplattform nach der erfolgreichen Übermittlung der Daten grün angezeigt wird, um anzuzeigen, dass das Gerät online ist und die Daten in Ordnung sind:

Zu diesem Zeitpunkt ist die Datenübermittlung abgeschlossen und lässt sich in wenigen einfachen Schritten durchführen: Sammeln Sie die SPS-Daten und übermitteln Sie diese in einem benutzerdefinierten JSON-Format.
4. Daten über MQTT empfangen
Ziehen Sie ein MQTT-Abonnement-Knoten. Anmerkung: MQTT-Publish-Knoten und MQTT-Abonnement-Knotenkönnen sich eine MQTT-Verbindung teilen. Wenn dieselbe Verbindung verwendet wird, aber ein anderes Thema, ziehen Sie den Knoten hinein und wählen Sie die konfigurierte Verbindung aus. Wenn Sie einen neuen MQTT-Broker-Knoten hinzufügen, bedeutet dies, dass eine neue MQTT-Verbindung hergestellt wird.

Wählen Sie einen Debugging-Knoten aus und klicken Sie auf die Schaltfläche auf der Plattform. Die ausgegebenen Befehle werden im Debugging-Fenster angezeigt:

5. Datenanalyse
Laut die Hilfe-Dokumentation der S7-Schreibknoten. Sie sollten wissen, dass beim Schreiben von Daten in die SPS die zu übermittelnden Daten zwei Parameter enthalten, und zwar wie folgt:

Daher müssen beim Parsen der Daten die von der Anwendungsplattform gesendeten Daten in eine Nachricht, die zwei Variablen enthält Nutzlast und Variable weitergeleitet an S7-Schreibknoten. Der Code des Funktionsknotens lautet wie folgt:
let cmdDate = msg.payload; msg.variable = cmdDate.sensorDatas[0].flag; msg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : false; return msg
Kopieren Sie den obigen Code, fügen Sie ihn in den Funktionsknoten ein und konfigurieren Sie den Debug-Knoten so, dass die ursprüngliche Meldung ausgegeben wird. Der ausgegebene Inhalt sieht wie folgt aus:

Sie können sehen, dass die Daten in das vom S7-Schreibdatenknoten geforderte Format konvertiert wurden.

6. Schreiben Sie an PLC
Ziehe einS7-Schreibknoten, verbinden Funktions-Rechenknoten, betätigen Sie den Schalter auf der Anwendungsplattform und sehen Sie sich den Demonstrationseffekt an:

Zusammenfassend
In diesem Kapitel wird ein relativ komplexer Prozess vorgestellt, der darauf abzielt, die Funktionen des Gateways zu beschreiben. Daher wird dabei nicht auf die Optimierung der Sicherheit, Stabilität, Flexibilität usw. des Programms geachtet. Da Sie diesen Vorgang verstanden haben, gehe ich davon aus, dass Sie bereits mit der visuellen Programmierung des Gateways vertraut sind. Als Nächstes lernen Sie die Funktionsweise der einzelnen Knoten im Detail kennen. Wenn Sie diese beherrschen, stehen Ihnen mehr Optionen und Möglichkeiten zur Verfügung, um komplexere Abläufe zu erstellen!
Quellcode
Alle Prozesse unterstützen den Import und Export im JSON-Format, wodurch sich abgeschlossene Prozesse problemlos mit anderen teilen lassen. Die JSON-Datei für dieses Kapitel sieht wie folgt aus. Nach dem Kopieren wählen Sie oben rechts in der Menüleiste „Importieren“ und „Einfügen“ aus. Das Gleiche gilt für den Export.
[{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"SPS-Daten lesen","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id":"4abb25e7e75b3447", "type":"MQTT-Ausgang","z":"2ff624305b8cb30b","name":"Daten freigeben","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":"Abonnementdaten","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":"Datenformatierung","func":"let jsonArray = []nnjsonArray.push({ "flag"": ""em1Status""
- iot-de



