[Quick Start Tutorial] Creëer een tweede proces via de programmeerinterface van de EG Series Edge Gateway

Requirements Overview

In dit hoofdstuk wordt voornamelijk een proces geïmplementeerd: EG8200 verzamelt gegevens van Siemens S7-200 Smart, stelt ze samen in JSON-formaat en rapporteert ze via MQTT aan het applicatieplatform; tegelijkertijd kan het besturingscommando's ontvangen die door het applicatieplatform worden uitgegeven om schakelen op afstand te realiseren. Om dit proces te implementeren, moeten de volgende materialen van tevoren worden voorbereid:

 

  1. Bijvoorbeeld de IP-poort en puntentabel van de PLC die moet worden opgehaald:

PLC

S7-200 Smart

IP

192.168.0.24/102

Puntentabel (DB1)

adres

soort gegevens

Attributen

naam

V0.0

Booleaans

alleen lezen

Start- en stopstatus van nr. 1 motor

V0.1

Booleaans

alleen lezen

Nr. 2 motor start en stop status

V0.2

Booleaans

alleen lezen

Nr. 3 motor start en stop status

V0.3

Booleaans

alleen lezen

Nr. 4 motor start en stop status

V0.4

Booleaans

Lezen en schrijven

Nr. 1 motor start- en stopregeling

V0.5

Booleaans

Lezen en schrijven

Nr. 2 motor start- en stopregeling

V0.6

Booleaans

Lezen en schrijven

Nr. 3 motor start- en stopregeling

V0.7

Booleaans

Lezen en schrijven

Nr. 4 motor start- en stopregeling

VD100

Unsigned16

alleen lezen

Spanning (V)

VD200

Unsigned16

alleen lezen

Stroom (A)

  1. MQTT communication-related parameters and JSON data format requirements, such as:
url:1883.dtuip.com:1883
clientID:820000003058164F
username:19381903226
password:ZHZK19381903226
Subscribe:820000003058164F/ Publish:820000003058164F
JSON format:{ "sensorDatas": [ { "fla g":"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 } ]}

Demand Analysis

Bij het maken van een proces is de basislogica om het proces te baseren op de gegevenstrend. Na analyse kan worden geconcludeerd dat deze vraag voornamelijk is verdeeld in twee delen: data uplink en data downlink. De belangrijkste taken van data uplink zijn onder andere:

    1. PLC-gegevens lezen via het S7-protocol en de verkregen gegevens worden opgeslagen in het geheugen ( S7 Node)
    2. Formatteer gegevens volgens JSON-indeling ( Function Node)
    3. Maak een MQTT-verbinding en publiceer naar het opgegeven onderwerp ( MQTT-publicatieknooppunt)

De belangrijkste taken van gegevensdownlink omvatten:

    1. Abonneer je op MQTT-onderwerpen en ontvang gegevens die door het platform worden verzonden ( MQTT-abonnementsnode)
    2. Parseer de ontvangen JSON-gegevens en sla ze op in het geheugen ( Function Node)
    3. Schrijf naar de PLC in de indeling die wordt vereist door S7 ( S7 Node)

vraaganalyse

Requirements Realization

1. PLC-gegevens verzamelen

    1. Sleep een S7 Read Node en een Debug-knooppunt uit de knooppuntenbibliotheek. Debug-knooppunt wordt gebruikt om de uitgelezen PLC-gegevens te bekijken, zodat u gemakkelijker problemen kunt lokaliseren.

PLC-gegevens verzamelen

    1. Dubbelklik op S7 Read Nodeen vul de overeenkomstige instellingsparameters in volgens het vereistenoverzicht, zoals weergegeven in de volgende afbeelding:
IP: PLC 
IP port: 102 (S7 protocol communication default port 102) 
Mode: TASP (S7-200 Smart selects TASP, other models select Rack/Slot) 
Local TSAP: 1002 (fixed value) 
Remote TSAP: 0301 (fixed value) 
Collection period: 1000ms (default 1000ms, customizable) 
Timeout period: 2000ms (default 2000ms, customizable) 

Data point configuration (the corresponding relationship can be found according to the help document) 
V0.0-->DB1,X0.0V0.1 -->DB1,X0.1V0.2-->DB1,X0.2V0.3-->DB1,X0.3V0.4-->DB1,X0.4V0.5-->DB1,X0.5V0.6 -->DB1, X0.6V0.7-->DB1, 

Als de instellingen correct zijn, wordt er een log afgedrukt in het foutopsporingsvenster, met de inhoud van de gelezen gegevens.

Gegevensinhoud lezen

    1. Soms zijn er veel PLC-gegevenspunten en is het lastig om deze één voor één handmatig in te voeren. Knooppunten ondersteunen het importeren en exporteren van gegevenspunten:

Knooppunten importeren en exporteren

2. Opmaak van gegevens

Volgens de aanwijzingen in stap 2 ziet u de gelezen PLC-gegevens als volgt in het foutopsporingsvenster:

Opmaak van gegevens

Omdat het applicatieplatform heeft bepaald dat gegevens in JSON-formaat moeten worden gerapporteerd. Gebruik vervolgens Function NodeJavaScript code to format the data. The code is as follows:

  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 })/*twee decimalen*/jsonArray.push({"flag": "current", " value": msg.payload.current / 100 })/*twee decimalen*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg 

Kopieer de bovenstaande code en plak deze in het functieknooppunt. Je kunt het effect zien na de implementatie:

Opmaak van gegevens

Het is te zien dat de gelezen PLC-gegevens zijn geconverteerd naar de uiteindelijke JSON-indeling volgens de vereisten en dat de gegevens tot op zekere hoogte zijn berekend (twee cijfers achter de komma). This is just the tip of the iceberg of function nodes. Because it supports JavaScript programming, almost any function you can think of can be implemented here.

Gegevensinhoud lezen

3. Gegevens rapporteren via MQTT

Sleep een MQTT-publicatieknooppunt , configure it according to the prompts, fill in the MQTT connection-related information and the MQTT publishing topic (see the requirements overview for details), and you can implement data reporting. Het is te zien dat nadat de gegevens succesvol zijn gerapporteerd, het applicatieplatform groen weergeeft om aan te geven dat het apparaat online is en dat de gegevens normaal zijn:

Gegevens rapporteren via MQTT

Op dit punt is de gegevensrapportage voltooid en kan deze in een paar eenvoudige stappen worden gerealiseerd: verzamel PLC-gegevens en rapporteer deze in een aangepaste JSON-indeling.

4. Gegevens ontvangen via MQTT

Sleep een MQTT-abonnementsnode. Opmerking: MQTT-publicatieknooppunt en MQTT-abonnementsnodekunnen een MQTT-verbinding delen. Als dezelfde verbinding wordt gebruikt maar een ander onderwerp, sleep dan het knooppunt en selecteer de geconfigureerde verbinding. If you choose to add a new MQTT-broker node, it means creating a new MQTT connection.

Gegevens ontvangen via MQTT

Selecteer een foutopsporingsknooppunt en klik op de besturingsknop op het platform. Je kunt de uitgegeven instructies zien in het foutopsporingsvenster:

Debug-knooppunt

5. Data analysis

Volgens het helpdocument van de S7 Write Node. You can know that to write data to the PLC, the data that needs to be passed carries two parameters, as follows:

gegevensanalyse

Daarom moeten bij het parsen van gegevens de gegevens die door het applicatieplatform worden verzonden, worden geconverteerd naar a message carrying two variables nuttige lading en variabele passed to S7 Write Node. De code van het functieknooppunt is als volgt:

  laat cmdDate = msg.payloadmsg.variable = cmdDate.sensorDatas[0].flagmsg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : falserreturn msg 

Kopieer de bovenstaande code, plak deze in het functie-knooppunt en stel het debug-knooppunt in om het oorspronkelijke bericht uit te voeren. Je kunt de afgedrukte inhoud als volgt zien:

S7 schrijf data knooppunt

Je kunt zien dat de gegevens zijn geconverteerd naar het formaat dat wordt vereist door het S7 Write Data Node.

DTU/Edge Gateway/IoT-platform/Gateway-module

6. Write to PLC

Sleep eenS7 Write Node, connect Function Compute Node, operate the switch on the application platform, and see the demonstration effect:

Schrijven naar PLC

Samenvatten

Dit hoofdstuk introduceert een relatief complex proces, met als doel de mogelijkheden van de gateway te beschrijven. Daarom worden de veiligheid, stabiliteit, flexibiliteit, enz. van het programma niet geoptimaliseerd. Door dit proces te begrijpen, denk ik dat je al bekend bent met de visuele programmering van de gateway. Leer vervolgens het functiegebruik van elke node. Als je deze onder de knie hebt, heb je meer keuzes en mogelijkheden om complexere processen te maken!

Source Code

Alle processen ondersteunen het importeren en exporteren in JSON-formaat, waardoor het eenvoudig is om voltooide processen met anderen te delen. The process JSON file of this chapter is as follows. After copying, select import and paste in the upper right corner of the menu bar. The same goes for exporting.

  [{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"Read PLC data","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id":"4abb25e7e75b3447", "type":"mqtt out","z":"2ff624305b8cb30b","name":"Release data","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":"Subscription data","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":"functie","z":"2ff624305b8cb30b","naam":"Gegevensopmaak","func":"let jsonArray = []nnjsonArray.push({"flag": ""em1Status""
About Me
e87d0ef219292bb40d6f120e7d321bcb?s=150&d=mp&r=g
More Posts