Wie man mit Node-RED und Tulip-Tags Daten von Edge-Geräten an Maschinen sendet
  • 04 Nov 2023
  • 8 Minuten zu lesen
  • Mitwirkende

Wie man mit Node-RED und Tulip-Tags Daten von Edge-Geräten an Maschinen sendet


Article Summary

Erfahren Sie, wie Sie Tulip Tags in Node-RED verwenden können, um Daten von Edge Devices nativ an Tulip Machines zu senden

Ab OS 50.1 unterstützt Tulip nativ die Verwendung von Tulip Edge Devices als Maschinendatenquellen.

Mit Node-RED können Sie beliebige "Tags" mit dem neuen Knoten tulip-tag erstellen und Daten an diese Tags senden. Diese Tags erscheinen dann automatisch unter dem spezifischen Edge Device als Datenquelle, wenn Maschinenattribute zugeordnet werden.

Es wird empfohlen, Tulip Tags über die Maschinen-API in neuen Flows zu verwenden. Tulip-Tags ermöglichen es Ihnen, Maschinendaten mit wiederverwendbaren Flows zu melden, die ohne gerätespezifische Änderungen von allen Geräten gemeinsam genutzt werden können, und machen das Kopieren und Einfügen von Maschinenattributinformationen in die Maschinen-API-Knoten überflüssig.

Überblick

In diesem Artikel wird beschrieben, wie Sie Daten von Node-RED an Tulip Maschinen senden können, indem Sie den neuen Tulip Tag-Knoten verwenden, der auf Tulip Edge-Geräten vorinstalliert ist.

Diese Anleitung führt Sie durch die folgenden Schritte:

Anforderungen

Um Tulip Tags zu erstellen, müssen Sie ein Tulip Edge Gerät haben, das:

  • Node-RED unterstützt (Edge MC oder Edge IO)
  • Node-RED aktiviert hat
  • über eine Firmware-Version >= OS50 verfügt

Benutzerhandbuch

In dieser Anleitung wird der Arbeitsablauf in Node-RED beschrieben, um einen Tag zu erstellen, Daten an ihn zu senden und dann zu demonstrieren, wie man diesen Tag einem Maschinenattribut in Tulip zuordnet. Es wird auch beschrieben, wie man in mehrere Tags gleichzeitig schreiben kann (nur OS 51 und später).

Erstellen von Tags in Node-RED

  1. Öffnen Sie Node-RED auf Ihrem Tulip Edge-Gerät und melden Sie sich an.

    1. *Als Referenz für den Zugriff auf Node-RED: Verwendung von Node-RED auf Edge IO
    2. Wenn Sie mit OS50 oder höher arbeiten, sehen Sie den Knoten Tulip Tag in der linken Seitenleiste des Node-RED Editors.

  1. Ziehen Sie den Tulip-Tag-Knoten in den Editor und doppelklicken Sie auf ihn, um den Knoteneditor zu öffnen. Sie sollten die Eigenschaft "Tag List" sehen, die erforderlich ist - Sie müssen eine Tag-Liste erstellen, die alle Tags für dieses Edge Device enthält. Sie sollten nur eine Tag-Liste pro Edge Device erstellen. Klicken Sie auf Bearbeiten, um die neue Tag-Liste zu erstellen, die unten hervorgehoben ist.

  1. Im Knoten Tag-Liste können Sie so viele Tags erstellen, wie Sie möchten. Klicken Sie auf +Hinzufügen, um ein Tag zu erstellen.

  1. Jedes Tag besteht aus drei Teilen: einer ID, einer Bezeichnung und einem Typ.

    1. Tag-ID: Dies ist ein codeähnlicher Bezeichner, der das Tag identifiziert. Einmal erstellt, sollte sie sich nicht mehr ändern. Gültige Zeichen sind Buchstaben, Ziffern (dürfen nicht mit einer Ziffer beginnen) und Unterstriche. Beispiele: part_count, myState1.
    2. Tag-Bezeichnung: Dies ist die von Menschen lesbare Bezeichnung, die Sie der Markierung zuweisen können. Um die Markierung umzubenennen, aktualisieren Sie einfach die Bezeichnung (nicht die ID). Beispiel: "Anzahl der Teile".
    3. Typ: Der Datentyp - String, Integer, Float oder Boolean. Muss mit dem Typ des zugeordneten Maschinenattributs übereinstimmen.

  1. Wenn Sie alle Tags hinzugefügt haben, klicken Sie auf Hinzufügen, um die Änderungen zu bestätigen und zum vorherigen Knoteneditor zurückzukehren. Vergewissern Sie sich vor dem Speichern, dass keine Fehler vorhanden sind.

:::(Info) (HINWEIS) "Nicht zugeordnet" ist kein Fehler, sondern nur eine Warnung, dass Sie das Tag noch nicht einem Maschinenattribut in Tulip zugeordnet haben. :::

Senden von Daten an Tags in Node-RED

Sobald Sie eine Tag-Liste erstellt haben, wird die Dropdown-Liste Tag auswählen automatisch mit allen Tags (mit den für Menschen lesbaren Bezeichnungen) gefüllt.

  1. Wählen Sie das Tag für diesen Knoten aus.

  1. Um Daten in diesen Tag zu schreiben, müssen Sie nun Nachrichten an diesen Tulip-Tag-Knoten senden. Die Nutzlast jeder Nachricht, die an den Knoten gesendet wird (d.h. msg.payload), wird in das Tag geschrieben.

Unten haben wir zum Beispiel einen Inject-Knoten mit msg.payload=0 verknüpft, der die ganze Zahl 0 in das Tag Part Count schreibt.

Zuordnung von Tags zu Maschinenattributen

Um die Daten in Tulip zu sehen, müssen Sie Ihre Tulip-Website besuchen und das Tag einem Maschinenattribut zuordnen.

  1. Navigieren Sie zu Ihrer Maschinenseite, wählen Sie die Maschine aus, an die Sie Daten senden möchten, und öffnen Sie die Registerkarte Konfiguration. Sie sollten eine Liste von Maschinenattributen sehen; klicken Sie auf ein Attribut, um es zuzuordnen. Sie sollten das Edge-Gerät (nach Seriennummer) als Datenquelle sehen. Sie brauchen diese Datenquelle nicht zu erstellen, sie wird automatisch erstellt, wenn Sie einen Fluss mit einer Tag-Liste bereitstellen.
  2. Klicken Sie auf das Edge-Gerät in der rechten Seitenleiste und erweitern Sie den Ordner Node-RED. Sie sollten alle Attribute desselben Typs wie das Attribut sehen. Klicken Sie auf die Verknüpfungsschaltfläche neben dem entsprechenden Attribut, um es zuzuordnen.

  1. Das Attribut wird nun als zugeordnet angezeigt, mit dem Tag-Label des zugeordneten Tags als Signal.

  1. Außerdem sollte sich in Node-RED der Status des Tulip Tag Knotens von "Unmapped" auf "Connected" geändert haben.

  1. Das Schreiben von Daten in den Tag (z.B. durch Anklicken des Knotens "Inject" in diesem Beispiel) führt nun dazu, dass Daten für das zugeordnete Attribut erscheinen.

Senden von Daten an mehrere Tags (Erweitert)

:::(Info) (HINWEIS) Diese Funktion ist nur unter OS51 und höher verfügbar. :::

Es ist möglich, Schreibvorgänge an mehrere Tags auf einmal durchzuführen.

  1. Erstellen Sie in Node-RED einen Tulip Tag-Knoten und deaktivieren Sie die Option Tag aus Liste auswählen.

  1. Die Nutzlast der Eingangsnachricht für diesen Knoten sollte nun eine Zuordnung von Tag-IDs zu den zu schreibenden Werten enthalten. Wenn Sie zum Beispiel eine Teileanzahl von 0 in das Integer-Tag mit der ID part_count und einen Status von "Running" in ein String-Tag mit der ID state schreiben möchten, sollte Ihre Nachricht wie folgt aussehen:

msg.payload = { "part_count": 0, "state": "Running" }

Beispiel: Verwaltung von Maschinenzustand und Teilezählung mit Edge IO und Node-RED

Bei diesem Beispiel handelt es sich um eine aktualisierte Version des in diesem Artikel beschriebenen Ablaufs der Node-RED-Bibliothek, auf die Sie sich bei der Einrichtung der Hardware beziehen sollten: Verwalten von Maschinenzuständen und Teilezählungen mit Edge IO und Node-RED.

Der Fluss wurde unten aktualisiert, um den Tulip Tag-Knoten anstelle des Maschinenattribut-Knotens zu verwenden. Dieser Ablauf kann für viele Edge-Geräte ohne Änderung eingesetzt werden.

  1. Importieren Sie in Node-RED den folgenden Ablauf und setzen Sie ihn ein:


## 65CCB8", "icon": "font-awesome/fa-arrowss-v"},{"id": "d99ec5b3.e9dfb8", "type": "function", "z": "85d16074.518e2", "name": "Werte mit scale/offset umrechnen", "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) => (scale \* x + offset));\n} else {\n msg[prop] = scale \* msg[prop] + offset;\n}\nreturn msg;", "outputs":1, "noerr":0, "initialize":"", "finalize":"", "x":250, "y":60, "wires":[[]]},{"id": "71c9f8f2.7adf08", "type": "tab", "label": "Machine Visibility with Current Clamp and Breakbeam", "disabled":false, "info": "Dieser Bibliotheksablauf ist eine grundlegende Maschinenüberwachungsanwendung, um den Zustand der Maschine und die Anzahl der Teile mithilfe einer Stromzange und eines Breakbeams sichtbar zu machen. Sie verfolgt die folgenden zwei Edge-IO-Eingänge: \* **Teileanzahl**: Beginnt bei 0 und wird hochgezählt, wenn GPIO Pin 1 auf High geschaltet wird, z.B. wenn ein Breakbeam ausgelöst wird. Kann über den Knoten 'Reset Part Count' auf 0 zurückgesetzt werden. Sendet die aktuelle Teilezahl an ein Tulip-Maschinenattribut, wenn sich die Teilezahl ändert. \n \n \* **Maschinenstatus**: Sendet den Effektivstrom einer Maschine, die von einer CR-3111 Stromzange überwacht wird, an den Edge IO differential ADC. Der Effektivwert wird für einen 1s-Puffer von Daten angegeben, die mit 1kHz erfasst und alle 5s abgetastet werden. Ein Schwellenwert kann entweder in Node-RED oder in Tulip eingestellt werden, um den Ein/Aus-Zustand der Maschine zu bestimmen. "},{"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,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", "name": "Increment Part Count", "rules":[{"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": "Set Part Count = 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": "Beginnt mit Part Count = 0 und zählt hoch, sobald GPIO Pin 1 auf High geschaltet wird. Die Teileanzahl kann durch Klicken auf den Knoten 'Teileanzahl zurücksetzen' auf 0 zurückgesetzt werden. Sendet die aktuelle Teilezahl an das konfigurierte Tulip-Maschinenattribut, wenn sich die Teilezahl ändert. ", "x":130, "y":40, "wires":[]},{"id": "9ff956ce.4ee9b8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitor RMS Current", "info": "Sendet den RMS-Strom einer Maschine, die von einer CR-3111-Stromzange überwacht wird, an den Edge IO differential ADC. Der Effektivwert wird für einen 1s-Puffer von Daten angegeben, die mit 1kHz aufgenommen und alle 5s abgetastet wurden. Ein Schwellenwert kann entweder in Node-RED oder in Tulip eingestellt werden, um den Ein/Aus-Zustand der Maschine zu bestimmen. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name": "Filter 1/5 readings", "property": "numReadings", "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 to Calculate Machine State", "info": "Dieser Subflow kann aktiviert werden, um zu berechnen, ob die Maschine auf der Grundlage des konfigurierten Schwellenwerts EIN oder AUS ist.\n\nDer berechnete Zustand wird als String an ein Maschinenattribut gesendet. Dieses Maschinenattribut muss in Tulip als Textattribut konfiguriert werden, und das Attribut deviceInfo sollte in den Tulip-Knoten Maschinenattribut eingefügt werden.", "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": "Initialisierung", "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": "Differential ADC 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": "Teilefertigungsmaschinen-Tags", "tags":[{"id": "part\_count", "label": "Teileanzahl", "type": "integer"},{"id": "current", "label": "Strom (RMS)", "type": "float"},{"id": "state", "label": "State", "type": "string"}]}]


``` 2. Der Fluss sieht wie folgt aus:


![](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"}


Der Fluss hat auch die folgende Tulip Tag-Liste:


![](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. Dieses Edge Device erscheint in Tulip als eine Datenquelle mit drei Tags:


	1. Part Count: Wird jedes Mal erhöht, wenn der GPIO-Eingangspin 1 auf High umschaltet. Es wird davon ausgegangen, dass ein Bremsbalken an diesem Pin angeschlossen ist.
	2. Strom (RMS): Schreibt alle 5 Sekunden den RMS-Stromwert (in Ampere) des CR3111-3000. Es wird davon ausgegangen, dass dieser Stromsensor an den differentiellen ADC angeschlossen ist.
	3. Zustand: Meldet "ON", wenn der Strom >100mA ist, und "OFF", wenn der Strom <=100mA ist.Sie können diese Tags den entsprechenden Maschinenattributen in Tulip zuordnen:


![](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. Sie werden sehen, dass Daten erscheinen, wenn der Bremsbalken umschaltet oder wenn die Strommesswerte alle 5 Sekunden aktualisiert werden:


![](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=""}




---


Haben Sie gefunden, wonach Sie gesucht haben?


Sie können auch auf [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) Ihre Frage stellen oder sehen, ob andere eine ähnliche Frage hatten! 


War dieser Artikel hilfreich?