Indice dei contenuti
TogglePanoramica 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:
-
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) |
- 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:
-
- Leggere i dati del PLC tramite il protocollo S7; i dati ottenuti vengono memorizzati nella memoria (
Nodo S7) - Formatta i dati secondo il formato JSON (
Nodo funzione) - Stabilire una connessione MQTT e pubblicare dati sull'argomento specificato (
Nodo di pubblicazione MQTT)
- Leggere i dati del PLC tramite il protocollo S7; i dati ottenuti vengono memorizzati nella memoria (
I compiti principali del downlink dei dati includono:
-
- Iscriviti agli argomenti MQTT e ricevi i dati inviati dalla piattaforma (
Nodo di sottoscrizione MQTT) - Analizza i dati JSON ricevuti e memorizzali in memoria (
Nodo funzione) - Scrivere al PLC nel formato richiesto dall'S7 (
Nodo S7)
- Iscriviti agli argomenti MQTT e ricevi i dati inviati dalla piattaforma (

Attuazione dei requisiti
1. Raccogliere i dati del PLC
-
- Trascina un
Nodo di lettura S7e unNodo di debugdalla libreria dei nodi.Nodo di debugviene utilizzato per visualizzare i dati letti dal PLC e facilitare l'individuazione dei problemi.
- Trascina un

-
- Fai doppio clic
Nodo di lettura S7e inserire i parametri di configurazione corrispondenti in base alla panoramica dei requisiti, come illustrato nella figura seguente:
- Fai doppio clic
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.

-
- 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:

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:

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:

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.

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:

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.

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

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:

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:

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

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:

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



