- Stampa
Come inviare i dati alle macchine dai dispositivi edge utilizzando i tag Node-RED e Tulip
Imparate a usare i tag Tulip in Node-RED per inviare in modo nativo i dati dai dispositivi Edge alle macchine Tulip.
A partire dal sistema operativo 50.1, Tulip supporta in modo nativo l'utilizzo dei dispositivi Edge Tulip come fonti di dati delle macchine.
Utilizzando Node RED, è possibile creare "tag" arbitrari con il nuovo nodo tulip-tag
e inviare dati a tali tag. Questi tag appariranno automaticamente sotto lo specifico dispositivo Edge come origine dati durante la mappatura degli attributi della macchina.
Si consiglia di utilizzare i Tulip Tag rispetto alla Machine API nei nuovi flussi. I tag Tulip consentono di riportare i dati della macchina utilizzando flussi riutilizzabili che possono essere condivisi tra i dispositivi senza modifiche specifiche del dispositivo ed eliminano la necessità di copiare-incollare le informazioni sugli attributi della macchina nei nodi API macchina.
Panoramica
Questo articolo descrive come inviare dati da Node-RED alle macchine Tulip utilizzando il nuovo nodo Tulip Tag preinstallato sui dispositivi Tulip Edge.
La guida illustra i seguenti passaggi:
- Requisiti per l'utilizzo dei tag Tulip come origine dati della macchina
- Guida per l'utente
- Esempio: Gestione dello stato della macchina e del conteggio dei pezzi in Node-RED
Requisiti
Per creare i tag Tulip, è necessario disporre di un dispositivo Edge Tulip che:
- supporti Node-RED (Edge MC o Edge IO)
- abbia il Node-RED abilitato
- abbia una versione del firmware >= OS50
Guida per l'utente
Questa guida illustra il flusso di lavoro in Node-RED per la creazione di un tag, l'invio di dati ad esso e la dimostrazione di come mappare il tag ad un attributo macchina in Tulip. Descriveremo anche come scrivere su più tag contemporaneamente (solo per OS 51 e successivi).
Creare i tag in Node-RED
Aprire Node-RED sul dispositivo Tulip Edge e accedere.
- *Per un riferimento sull'accesso a Node-RED: Utilizzo di Node-RED su Edge IO
- Se si è su OS50 o successivo, si vedrà il nodo Tulip Tag nella barra laterale sinistra dell'editor Node-RED.
- Trascinare il nodo
tulip-tag
nell'editor e fare doppio clic su di esso per aprire l'editor dei nodi. Dovrebbe essere visualizzata la proprietà "Elenco tag", necessaria per creare un elenco di tag che contenga tutti i tag per questo dispositivo Edge. È necessario creare un solo elenco di tag per ogni periferica Edge. Fare clic su Modifica per creare il nuovo elenco di tag, evidenziato di seguito.
- Nel nodo Elenco tag è possibile creare tutti i tag desiderati. Fare clic su +aggiungi per creare un tag.
Ogni tag è composto da tre parti: un ID, un'etichetta e un tipo.
- ID tag: è un identificatore simile a un codice che identifica il tag. Una volta creato, non deve essere modificato. I caratteri validi sono lettere, cifre (non possono iniziare con una cifra) e trattini bassi. Esempi:
part_count
,myState1
. - Etichettadel tag: È l'etichetta leggibile che si può assegnare al tag. Per rinominare il tag, basta aggiornare l'etichetta (non l'ID). Esempio: "Conteggio parti".
- Tipo: Il tipo di dati: stringa, intero, variabile o booleano. Deve corrispondere al tipo dell'attributo macchina mappato.
- ID tag: è un identificatore simile a un codice che identifica il tag. Una volta creato, non deve essere modificato. I caratteri validi sono lettere, cifre (non possono iniziare con una cifra) e trattini bassi. Esempi:
- Una volta terminata l'aggiunta dei tag, fare clic su Aggiungi per confermare le modifiche e tornare all'editor del nodo precedente. Assicurarsi che non vi siano errori prima di salvare.
:::(Info) (NOTA) L'indicazione "Non mappato" non è un errore, ma solo un avvertimento che il tag non è ancora stato mappato su un attributo macchina in Tulipano:
Invio di dati ai tag in Node-RED
Una volta creato un elenco di tag, il menu a tendina Seleziona tag si popola automaticamente con tutti i tag (con le etichette leggibili dall'uomo).
- Selezionare il tag per questo nodo.
- Per scrivere dati su questo tag, è necessario inviare messaggi a questo nodo
tulip-tag
. Il payload di ogni messaggio inviato al nodo (cioèmsg.payload
) sarà scritto nel tag.
Ad esempio, di seguito abbiamo collegato un nodo Inject con msg.payload=0
che scriverà il numero intero 0 nel tag Part Count.
Mappatura dei tag agli attributi della macchina
Infine, per visualizzare i dati in Tulip, è necessario visitare il sito Tulip e mappare il tag su un attributo macchina.
- Navigare nella pagina delle macchine, selezionare la macchina a cui inviare i dati e aprire la scheda Configurazione. Si dovrebbe vedere un elenco di Attributi macchina; fare clic su un attributo per mapparlo. Dovrebbe essere visualizzata la periferica Edge (per numero di serie) come origine dati. Non è necessario creare questa origine dati, verrà creata automaticamente quando si distribuisce un flusso con un elenco di tag.
- Fare clic sul dispositivo edge nella barra laterale destra ed espandere la cartella Node-RED. Dovrebbero essere visualizzati tutti gli attributi dello stesso tipo dell'attributo. Fare clic sul pulsante di collegamento accanto all'attributo in questione per mapparlo.
- L'attributo viene ora visualizzato come mappato, con l'etichetta del tag mappato come segnale.
- Inoltre, in Node-RED, lo stato del nodo Tulip Tag dovrebbe essere cambiato da "Non mappato" a "Connesso".
- La scrittura di dati sul tag (ad esempio facendo clic sul nodo "Inietta" in questo esempio) causa ora la visualizzazione dei dati per l'attributo mappato.
Invio di dati a più tag (avanzato)
:::(Info) (NOTA) Questa funzione è disponibile solo su OS51 e successivi:
È possibile inviare in batch le scritture a più tag contemporaneamente.
- In Node-RED, creare un nodo Tulip Tag e deselezionare l'opzione Seleziona tag dall'elenco.
- Il payload del messaggio di input a questo nodo dovrebbe ora contenere una mappa degli ID dei tag ai valori da scrivere. Ad esempio, se si desidera scrivere un numero di pezzi pari a 0 nel tag intero con id
part_count
e uno stato di"Running"
nel tag stringa con idstate
, il messaggio dovrebbe essere:
msg.payload = { "part_count": 0, "state": "Running" }
Esempio: Gestione dello stato della macchina e del conteggio dei pezzi con Edge IO e Node-RED
Questo esempio è una versione aggiornata del flusso della libreria Node RED descritto in questo articolo, a cui si rimanda per la configurazione dell'hardware: Managing Machine States and Part Counts with Edge IO and Node-RED.
Il flusso è stato aggiornato di seguito per utilizzare il nodo Tulip Tag invece del nodo Machine Attribute. Questo flusso può essere distribuito a molti dispositivi Edge senza modifiche.
- In Node-RED, importare e distribuire il seguente flusso:
## 65CCB8", "icon": "font-awesome/fa-arrows-v"},{"id": "d99ec5b3.e9dfb8", "type": "function", "z": "85d16074.518e2", "name": "Convertire valori con scala/offset", "func": "const scale = env.get('SCALE');\nconst offset = env.get('OFFSET');\nconst prop = env.get('PROPERTY');\nif (Array.isArray(msg[prop])) {\n msg[prop] = msg[prop].map((x) => (scala \* x + offset));\n} else {\n msg[prop] = scala \* msg[prop] + offset;\n}}return msg;", "outputs":1, "noerr":0, "initialize":"", "finalize":"", "x":250, "y":60, "wires":[]]},{"id": "71c9f8f2.7adf08", "type": "tab", "label": "Visibilità della macchina con pinza amperometrica e breakbeam", "disabled":false, "info": "Questo flusso di libreria è un'applicazione di base per il monitoraggio della macchina che consente di ottenere visibilità sullo stato della macchina e sul numero di pezzi utilizzando una pinza amperometrica e un breakbeam. Tiene traccia dei seguenti due ingressi Edge IO:\n\n \* **Conteggio pezzi**: Parte da 0 e conta ogni volta che il pin GPIO 1 viene attivato, ad esempio quando viene attivato un breakbeam. Può essere riportato a 0 dal nodo 'Reset Part Count'. Invia il conteggio corrente a un attributo macchina Tulip ogni volta che il conteggio dei pezzi cambia. \ **Stato macchina**: Invia la corrente RMS di una macchina monitorata da una pinza amperometrica CR-3111 all'ADC differenziale Edge IO. La lettura RMS viene fornita per un buffer di 1s di dati presi a 1kHz, campionati una volta ogni 5s. È possibile impostare una soglia in Node-RED o in Tulip per determinare lo stato di accensione/spegnimento della macchina. "},{"id":"256235b9.3bb72a","type":"subflow:85d16074.518e2","z":"71c9f8f2.7adf08","name":"CR-3111 Scaling","env":[{"name":"PROPERTY","value":"data","type":"str"},{"name":"SCALE","value":"3000","type":"num"},{"name":"OFFSET","value":"0","type":"num"}],"x":800,"y":360,"wires":[["88390763.49ad58", "b594a80b.7f3f18"]]},{"id":"daf59f31.d1ec8","type":"tulip-high-speed-analog","z":"71c9f8f2.7adf08","name":"Differential ADC Readings","analogConfig":"71b68226.a6568c","dataTypeIdx":"2","inputs":0,"mode":"continuous","dataMsgProperty":"data","refreshRate":"1","refreshFrames":"all","x":150,"y":380,"wires":[["96ef65ab.afba78"]]},{"id":"82a0d2e1.62cec","type":"inject","z":"71c9f8f2.7adf08","name":"Reset Part Count","props":[],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":130,"y":100,"wires":[["25bb1de8.b3e502"]]},{"id":"579dcfa3.596ad","type":"tulip-digital-input","z":"71c9f8f2.7adf08", "name": "Monitor Pin 1", "runMode": "continuous", "configMode": "static", "outputMode": "object", "refreshRate":1, "enabledPins":[true,false,false,false,false,false,false], "x":110, "y":160, "wires":["27e78fe6.8e08c"]]},{"id":"27e78fe6.8e08c","type":"switch","z":"71c9f8f2.7adf08","name":"Filter for pinUp","property":"payload","propertyType":"msg","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":300,"y":160,"wires":[["f1b02903.a2f2b8"]]},{"id":"f1b02903.a2f2b8","type":"change","z":"71c9f8f2.7adf08", "nome": "Incremento conteggio parti", "regole":[{"t": "set", "p": "partCount", "pt": "flow", "to":"$flowContext('partCount') + 1", "tot": "jsonata"},{"t":"set","p":"payload","pt":"msg","to":"partCount","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":160,"wires":[["eed4e051.7bc12"]]},{"id":"25bb1de8.b3e502","type":"change","z":"71c9f8f2.7adf08", "name": "Imposta conteggio parti = 0", "rules":[{"t": "set", "p": "partCount", "pt": "flow", "to": "0", "tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":100,"wires":[[]]},{"id":"dcb54611.9f7ca8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitor Part Count", "info": "Inizia con Part Count = 0 e conta fino a quando il pin GPIO 1 viene attivato. Il conteggio dei pezzi può essere riportato a 0 facendo clic sul nodo 'Reset Part Count'. Invia il conteggio corrente all'attributo macchina Tulipano configurato ogni volta che il conteggio dei pezzi cambia. ", "x":130, "y":40, "wires":[]},{"id": "9ff956ce.4ee9b8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitor RMS Current", "info": "Invia la corrente RMS di una macchina monitorata da una pinza amperometrica CR-3111 all'ADC differenziale Edge IO. La lettura RMS viene fornita per un buffer di 1s di dati presi a 1kHz, campionati una volta ogni 5s. È possibile impostare una soglia in Node-RED o in Tulip per determinare lo stato di accensione/spegnimento della macchina. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name": "Filtra 1/5 letture", "property": "numLetture", "propertyType": "flow", "rules":[{"t": "eq", "v":"4","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":390,"y":380,"wires":[["41bac391.9beffc"],["78eb2b71.a4c2c4"]]},{"id":"41bac391.9beffc","type":"change","z":"71c9f8f2.7adf08","name":"Pass message","rules":[{"t":"set","p":"numReadings","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":360,"wires":[["256235b9.3bb72a"]]},{"id":"78eb2b71.a4c2c4","type":"change","z":"71c9f8f2.7adf08", "name": "Drop message & increment", "rules":[{"t": "set", "p": "numReadings", "pt": "flow", "to":"$flowContext('numReadings') + 1", "tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":400,"wires":[[]]},{"id":"88390763.49ad58","type":"switch","z":"71c9f8f2.7adf08","name":"Is Current > 100mA?","property":"data","propertyType":"msg","rules":[{"t":"gt","v":"0.1","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":540,"y":620,"wires":[["b0fc9af.9e90c68"],["b271da6d.f05098"]]},{"id":"53f44746.f831e8","type":"comment","z":"71c9f8f2.7adf08", "name": "Subflow per il calcolo dello stato della macchina", "info": "Questo subflow può essere abilitato per calcolare se la macchina è attiva o disattiva in base al valore di soglia configurato.Lo stato calcolato viene inviato come stringa a un attributo della macchina. Questo attributo macchina deve essere configurato in Tulip come attributo di testo e l'attributo deviceInfo deve essere copiato nel nodo Attributo macchina di Tulip.", "x":240, "y":620, "wires":[]},{"id": "b0fc9af.9e90c68","type":"change","z":"71c9f8f2.7adf08","name":"State = ON","rules":[{"t":"set","p":"payload","pt":"msg","to":"ON","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":600,"wires":[["a197e7f6.0d6c58"]]},{"id":"b271da6d.f05098","type":"change","z":"71c9f8f2.7adf08","name":"State = OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"OFF","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":640,"wires":[["a197e7f6.0d6c58"]]},{"id":"eed4e051.7bc12","type":"tulip-tag","z":"71c9f8f2.7adf08","name":"","tagList":"58dfe1ff.615b","staticTag":true,"tagId":"part\_count","x":730,"y":160,"wires":[[]]},{"id":"b594a80b.7f3f18","type":"tulip-tag","z":"71c9f8f2.7adf08","name":"","tagList":"58dfe1ff.615b","staticTag":true,"tagId":"current","x":1020,"y":360,"wires":[[]]},{"id":"a197e7f6.0d6c58","type":"tulip-tag","z":"71c9f8f2.7adf08","name":"","tagList":"58dfe1ff.615b","staticTag":true,"tagId":"state","x":930,"y":620,"wires":[[]]},{"id":"80b0c03.326c84","type":"inject","z":"71c9f8f2.7adf08", "name": "Initialization", "props":[], "repeat":", "crontab":"", "once":true, "onceDelay":0.1,"topic":"","x":110,"y":440,"wires":[["81df5e3e.f5126"]]},{"id":"81df5e3e.f5126","type":"change","z":"71c9f8f2.7adf08","name":"Initialize numReadings = 0","rules":[{"t":"set","p":"numReadings","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":440,"wires":[[]]},{"id":"71b68226.a6568c", "type": "tulip-high-speed-analog-config", "name": "ADC differenziale RMS @ 1kHZ", "bufferSize": "1000", "frequency": "1000", "adcId":"0", "diffAdcResistor": "200", "enableTime":false, "enableFreq":false, "enableRMS":true, "enablePowerSpec":false},{"id": "58dfe1ff.615b", "type": "tulip-tag-list", "name": "Part-Making Machine Tags", "tags":[{"id": "part\_count", "label": "Part Count", "type": "integer"},{"id": "current", "label": "Current (RMS)", "type": "float"},{"id": "state", "label": "State", "type": "string"}]}]
``` 2. Il flusso appare come segue:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20to%20Send%20Data%20to%20Machines%20from%20Edge%20Devices%20using%20Node-RED%20and%20Tulip%20Tags_566767267.png){height="" width="550"}
Il flusso ha anche il seguente elenco di tag Tulip:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20to%20Send%20Data%20to%20Machines%20from%20Edge%20Devices%20using%20Node-RED%20and%20Tulip%20Tags_566767339.png){height="" width="350"}
1. Questo dispositivo Edge viene visualizzato in Tulip come origine dati con tre tag:
1. Part Count: Incrementato ogni volta che il pin di ingresso GPIO 1 si attiva. Si presume che un raggio di rottura sia collegato a quel pin.
2. Corrente (RMS): scrive la lettura della corrente RMS (in Ampere) ogni 5 secondi del CR3111-3000. Si presuppone che questo sensore di corrente sia collegato all'ADC differenziale.
3. Stato: Riporta "ON" se la corrente è >100mA e "OFF" se la corrente è <=100mA. È possibile mappare questi tag agli attributi macchina corrispondenti in Tulip:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20to%20Send%20Data%20to%20Machines%20from%20Edge%20Devices%20using%20Node-RED%20and%20Tulip%20Tags_566767591.png){height="" width="350"}
1. Si vedranno i dati apparire quando il fascio di luce si alterna o quando le letture di corrente vengono aggiornate ogni 5 secondi:
![](https://cdn.document360.io/7c6ff534-cad3-4fc8-9583-912c4016362f/Images/Documentation/How%20to%20Send%20Data%20to%20Machines%20from%20Edge%20Devices%20using%20Node-RED%20and%20Tulip%20Tags_566767660.png){height="" width=""}
---
Avete trovato quello che cercavate?
Potete anche andare su [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) per postare la vostra domanda o vedere se altri hanno affrontato una domanda simile!