[Creare un secondo processo attraverso l'interfaccia di programmazione del gateway edge della serie EG

Panoramica dei requisiti

Questo capitolo descrive principalmente un processo: l'EG8200 raccoglie i dati dal Siemens S7-200 Smart, li converte in formato JSON e li trasmette alla piattaforma applicativa tramite MQTT; allo stesso tempo, è in grado di ricevere i comandi di controllo inviati dalla piattaforma applicativa per consentire la commutazione remota. Per mettere in atto questa procedura, è necessario preparare in anticipo i seguenti materiali:

 

  1. La porta IP e la tabella dei punti del PLC da acquisire, ad esempio:

PLC

S7-200 Smart

IP

192.168.0.24/102

Classifica (DB1)

indirizzo

tipo di dati

Attributi

nome

V0.0

Booleano

solo lettura

Stato di avvio e arresto del motore n. 1

V0.1

Booleano

solo lettura

Stato di avvio e arresto del motore n. 2

V0.2

Booleano

solo lettura

Stato di avvio e arresto del motore n. 3

V0.3

Booleano

solo lettura

Stato di avvio e arresto del motore n. 4

V0.4

Booleano

Lettura e scrittura

Controllo n. 1 di avvio e arresto del motore

V0.5

Booleano

Lettura e scrittura

Comando di avvio e arresto del motore n. 2

V0.6

Booleano

Lettura e scrittura

Comando di avvio e arresto del motore n. 3

V0.7

Booleano

Lettura e scrittura

Comando di avvio e arresto del motore n. 4

VD100

Non firmato16

solo lettura

Tensione (V)

VD200

Non firmato16

solo lettura

Corrente (A)

  1. Parametri relativi alla comunicazione MQTT e requisiti relativi al formato dei dati JSON, quali:
url:1883.dtuip.com:1883
clientID:820000003058164F
nome utente:19381903226
password:ZHZK19381903226
Iscriviti:820000003058164F/ Pubblica:820000003058164F
Formato 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":"tensione", "valore":220,0 }, { "flag":"corrente", "valore":10,2 } ]}

Analisi della domanda

Quando si crea un processo, la logica di base è la seguente: per basare il processo sull'andamento dei dati. Dall'analisi emerge che tale richiesta si articola essenzialmente in due parti: il collegamento in salita e il collegamento in discesa. Tra questi, i compiti principali del collegamento ascendente dei dati includono:

    1. Leggere i dati del PLC tramite il protocollo S7; i dati ottenuti vengono memorizzati nella memoria ( Nodo S7)
    2. Formatta i dati secondo il formato JSON ( Nodo funzione)
    3. Stabilire una connessione MQTT e pubblicare dati sull'argomento specificato ( Nodo di pubblicazione MQTT)

I compiti principali del downlink dei dati includono:

    1. Iscriviti agli argomenti MQTT e ricevi i dati inviati dalla piattaforma ( Nodo di sottoscrizione MQTT)
    2. Analizza i dati JSON ricevuti e memorizzali in memoria ( Nodo funzione)
    3. Scrivere al PLC nel formato richiesto dall'S7 ( Nodo S7)

analisi della domanda

Attuazione dei requisiti

1. Raccogliere i dati del PLC

    1. Trascina un Nodo di lettura S7 e un Nodo di debug dalla libreria dei nodi. Nodo di debug viene utilizzato per visualizzare i dati letti dal PLC e facilitare l'individuazione dei problemi.

Raccogliere i dati del PLC

    1. Fai doppio clic Nodo di lettura S7e inserire i parametri di configurazione corrispondenti in base alla panoramica dei requisiti, come illustrato nella figura seguente:
IP: PLC 
Porta IP: 102 (porta predefinita per la comunicazione con protocollo S7: 102) 
Modalità: TASP (il modello S7-200 Smart seleziona TASP, gli altri modelli selezionano Rack/Slot) 
TSAP locale: 1002 (valore fisso) 
TSAP remoto: 0301 (valore fisso) 
Intervallo di raccolta: 1000 ms (impostazione predefinita: 1000 ms, personalizzabile) 
Periodo di timeout: 2000 ms (impostazione predefinita: 2000 ms, personalizzabile) 

Configurazione dei dati (la relazione corrispondente è indicata nel documento di guida) 
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, 

Se le impostazioni sono corrette, nella finestra di debug verrà visualizzato un messaggio di log che riporta il contenuto dei dati letti.

Leggi il contenuto dei dati

    1. A volte i punti dati del PLC sono numerosi ed è complicato inserirli manualmente uno per uno. I nodi supportano l'importazione e l'esportazione di punti dati:

Importazione ed esportazione di nodi

2. Formattazione dei dati

In base alle indicazioni fornite nella fase 2, è possibile visualizzare i dati del PLC letti nella finestra di debug come segue:

Formattazione dei dati

Poiché la piattaforma dell'applicazione prevede che i dati vengano trasmessi in formato JSON. Successivamente, utilizzare Nodo funzioneCodice JavaScript per formattare i dati. Il codice è il seguente:

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

Copia il codice sopra riportato e incollalo nel nodo funzione. Potrai vedere l'effetto dopo la distribuzione:

Formattazione dei dati

Si può notare che i dati PLC letti sono stati convertiti nel formato JSON finale secondo i requisiti e che i dati sono stati calcolati fino a un certo livello di precisione (due cifre decimali). Questa è solo la punta dell'iceberg dei nodi funzione. Poiché supporta la programmazione in JavaScript, qui è possibile implementare praticamente qualsiasi funzione si possa immaginare.

Leggi il contenuto dei dati

3. Invia i dati tramite MQTT

Trascina un Nodo di pubblicazione MQTT , configurarlo seguendo le istruzioni, inserire le informazioni relative alla connessione MQTT e l'argomento di pubblicazione MQTT (per ulteriori dettagli, consultare la panoramica dei requisiti) e sarà possibile implementare la reportistica dei dati. Si può notare che, una volta che i dati sono stati trasmessi con successo, la piattaforma dell'applicazione visualizza un colore verde per indicare che il dispositivo è online e che i dati sono nella norma:

Invia i dati tramite MQTT

A questo punto, la generazione dei report sui dati è stata completata e può essere eseguita in pochi semplici passaggi: raccogliere i dati dal PLC e generarli in un formato JSON personalizzato.

4. Ricevi dati tramite MQTT

Trascina un Nodo di sottoscrizione MQTT. Nota: Nodo di pubblicazione MQTT e Nodo di sottoscrizione MQTTpossono condividere una connessione MQTT. Se si utilizza la stessa connessione ma un argomento diverso, trascinare il nodo e selezionare la connessione configurata. Se si sceglie di aggiungere un nuovo nodo broker MQTT, ciò comporta la creazione di una nuova connessione MQTT.

Ricevi dati tramite MQTT

Seleziona un nodo di debug e fai clic sul pulsante di controllo sulla piattaforma. Nella finestra di debug puoi visualizzare le istruzioni inviate:

Nodo di debug

5. Analisi dei dati

Secondo il documento di aiuto del Nodo di scrittura S7. È importante sapere che, per scrivere dati nel PLC, i dati da trasmettere devono includere due parametri, come segue:

analisi dei dati

Pertanto, durante l'analisi dei dati, i dati inviati dalla piattaforma applicativa devono essere convertiti in un messaggio contenente due variabili carico utile e variabile trasmesso a Nodo di scrittura S7. Il codice del nodo funzione è il seguente:

  let cmdDate = msg.payload; msg.variable = cmdDate.sensorDatas[0].flag; msg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : false; return msg 

Copia il codice sopra riportato, incollalo nel nodo funzione e configura il nodo di debug in modo che visualizzi il messaggio originale. Il contenuto visualizzato sarà il seguente:

Nodo di scrittura dati S7

Come si può notare, i dati sono stati convertiti nel formato richiesto dal nodo di scrittura dati S7.

Gateway DTU/Edge/Piattaforma IoT/Modulo gateway

6. Scrivere a PLC

Trascina unNodo di scrittura S7, connettiti Nodo di calcolo delle funzioni, azionare l'interruttore sulla piattaforma dell'applicazione e osservare l'effetto dimostrativo:

Scrivi a PLC

Riassumere

Questo capitolo introduce un processo relativamente complesso, con l'obiettivo di descrivere le funzionalità del gateway. Pertanto, non ottimizza la sicurezza, la stabilità, la flessibilità, ecc. del programma. Credo che, avendo compreso questo processo, abbiate già familiarità con la programmazione visiva del gateway. Successivamente, approfondisci l'utilizzo delle funzioni di ciascun nodo. Padroneggiarle ti offrirà una scelta più ampia e maggiori possibilità per realizzare processi più complessi!

Codice sorgente

Tutti i processi supportano l'importazione e l'esportazione in formato JSON, facilitando la condivisione dei processi completati con altri utenti. Il file JSON di esempio di questo capitolo è il seguente. Dopo averlo copiato, seleziona “Importa” e incolla nell’angolo in alto a destra della barra dei menu. Lo stesso vale per l’esportazione.

  [{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"Leggi dati PLC","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id":"4abb25e7e75b3447", "type":"mqtt out","z":"2ff624305b8cb30b","name":"Rilascia dati","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":"Dati di sottoscrizione","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":"Formattazione dei dati","func":"let jsonArray = []nnjsonArray.push({ "flag"": ""em1Status""
↑