Come inviare i dati alle macchine dai dispositivi edge utilizzando i tag Node-RED e Tulip
  • 04 Nov 2023
  • 8 Minuti da leggere
  • Contributori

Come inviare i dati alle macchine dai dispositivi edge utilizzando i tag Node-RED e Tulip


Sommario dell'articolo

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

  1. Aprire Node-RED sul dispositivo Tulip Edge e accedere.

    1. *Per un riferimento sull'accesso a Node-RED: Utilizzo di Node-RED su Edge IO
    2. Se si è su OS50 o successivo, si vedrà il nodo Tulip Tag nella barra laterale sinistra dell'editor Node-RED.

  1. 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.

  1. Nel nodo Elenco tag è possibile creare tutti i tag desiderati. Fare clic su +aggiungi per creare un tag.

  1. Ogni tag è composto da tre parti: un ID, un'etichetta e un tipo.

    1. 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.
    2. 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".
    3. Tipo: Il tipo di dati: stringa, intero, variabile o booleano. Deve corrispondere al tipo dell'attributo macchina mappato.

  1. 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).

  1. Selezionare il tag per questo nodo.

  1. 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.

  1. 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.
  2. 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.

  1. L'attributo viene ora visualizzato come mappato, con l'etichetta del tag mappato come segnale.

  1. Inoltre, in Node-RED, lo stato del nodo Tulip Tag dovrebbe essere cambiato da "Non mappato" a "Connesso".

  1. 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.

  1. In Node-RED, creare un nodo Tulip Tag e deselezionare l'opzione Seleziona tag dall'elenco.

  1. 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 id state, 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.

  1. 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! 


Questo articolo è stato utile?