Zweefanimatie

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

Vereistenoverzicht

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-communicatiegerelateerde parameters en vereisten voor JSON-gegevensindeling, zoals:

  url:1883.dtuip.com:1883clientID:820000003058164Fusername:19381903226password:ZHZK19381903226Subscribe:820000003058164F/ Publish:820000003058164FJSON format:{ "sensorDatas": [ {"vlag":"em1Status", "switcher":1 }, {"vlag":"em2Status", "switcher":1 }, {"vlag":"em3Status", "switcher":1 }, {"vlag":"em4Status", "switcher":1 }, {"vlag":,"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 } ]}

vraaganalyse

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节点)

    2. Formatteer gegevens volgens JSON-indeling ( 函数节点)

    3. Maak een MQTT-verbinding en publiceer naar het opgegeven onderwerp ( MQTT发布节点)

De belangrijkste taken van gegevensdownlink omvatten:

    1. Abonneer je op MQTT-onderwerpen en ontvang gegevens die door het platform worden verzonden ( MQTT订阅节点)

    2. Parseer de ontvangen JSON-gegevens en sla ze op in het geheugen ( 函数节点)

    3. Schrijf naar de PLC in de indeling die wordt vereist door S7 ( S7节点)

vraaganalyse

Eisen realisatie

1. PLC-gegevens verzamelen

    1. Sleep een S7读数据节点en een 调试节点uit de knooppuntenbibliotheek . 调试节点wordt gebruikt om de uitgelezen PLC-gegevens te bekijken, zodat u gemakkelijker problemen kunt lokaliseren.

PLC-gegevens verzamelen

    1. Dubbelklik op S7读数据节点en vul de overeenkomstige instellingsparameters in volgens het vereistenoverzicht, zoals weergegeven in de volgende afbeelding:

 IP: PLC IP-poort: 102 (S7-protocolcommunicatie standaardpoort 102) Modus: TASP (S7-200 Smart selecteert TASP, andere modellen selecteren Rack/Slot) Lokaal TSAP: 1002 (vaste waarde) Remote TSAP: 0301 (vaste waarde) ) Verzamelperiode: 1000ms (standaard 1000ms, aanpasbaar) Time-outperiode: 2000ms (standaard 2000ms, aanpasbaar) Datapuntconfiguratie (de overeenkomstige relatie kan worden gevonden volgens het helpdocument) 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 函数节点Javascript code om de gegevens te formatteren. De code is als volgt:

  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).Dit is slechts het topje van de ijsberg van functieknooppunten. Omdat Javascript programmering ondersteunt, kan bijna elke functie die je kunt bedenken hier worden geïmplementeerd.

Gegevensinhoud lezen

3. Gegevens rapporteren via MQTT

Sleep een MQTT发布节点, configureer het volgens de aanwijzingen, vul de MQTT verbindingsgerelateerde informatie en het MQTT publicatieonderwerp in (zie het vereistenoverzicht voor details) en je kunt gegevensrapportage implementeren. 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订阅节点. Opmerking: MQTT发布节点en MQTT订阅节点kunnen een MQTT-verbinding delen. Als dezelfde verbinding wordt gebruikt maar een ander onderwerp, sleep dan het knooppunt en selecteer de geconfigureerde verbinding.Als je ervoor kiest om een nieuw mqtt-broker knooppunt toe te voegen, betekent dit dat je een nieuwe MQTT verbinding aanmaakt.

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.Gegevens analyse

Volgens het helpdocument van de S7写数据knooppunt, kunt u weten dat om gegevens naar de PLC te schrijven, de gegevens die moeten worden doorgegeven twee parameters hebben, als volgt:

gegevensanalyse

Daarom moeten bij het parsen van gegevens de gegevens die door het applicatieplatform worden verzonden, worden geconverteerd naar een bericht met twee variabelen, nuttige lading en variabele en doorgegeven aan S7写数据节点. 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:

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.Schrijven naar PLC

Sleep een S7写数据knooppunt, verbinden 函数计算knooppunt, bedien de schakelaar op het applicatieplatform en bekijk het demonstratie-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!

Broncode

Alle processen ondersteunen import en export in json-formaat, waardoor het eenvoudig is om voltooide processen met anderen te delen.Het proces json bestand van dit hoofdstuk ziet er als volgt uit. Na het kopiëren, selecteer je importeren en plakken in de rechterbovenhoek van de menubalk. Hetzelfde geldt voor exporteren.

  [{"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""

Neem contact met ons op