Jak wysyłać dane do maszyn z urządzeń brzegowych za pomocą tagów Node-RED i Tulip
  • 04 Nov 2023
  • 7 Minuty do przeczytania
  • Współtwórcy

Jak wysyłać dane do maszyn z urządzeń brzegowych za pomocą tagów Node-RED i Tulip


Article Summary

Dowiedz się, jak używać tagów Tulip w Node-RED do natywnego wysyłania danych z urządzeń brzegowych do maszyn Tulip.

Począwszy od wersji OS 50.1, Tulip natywnie obsługuje używanie urządzeń brzegowych Tulip jako źródeł danych maszyn.

Korzystając z Node RED, można tworzyć dowolne "tagi" za pomocą nowego węzła tulip-tag i wysyłać dane do tych tagów. Tagi te automatycznie pojawią się pod określonym urządzeniem Edge Device jako źródło danych podczas mapowania atrybutów maszyny.

Zaleca się używanie tagów Tulip zamiast Machine API w nowych przepływach. Tagi Tulip umożliwiają raportowanie danych maszyny przy użyciu przepływów wielokrotnego użytku, które mogą być współdzielone między urządzeniami bez żadnych modyfikacji specyficznych dla urządzenia i eliminują potrzebę kopiowania-wklejania informacji o atrybutach maszyny do węzłów Machine API.

Przegląd

W tym artykule opisano, jak wysyłać dane z Node-RED do Tulip Machines przy użyciu nowego węzła Tulip Tag, który jest fabrycznie zainstalowany na urządzeniach brzegowych Tulip.

Ten przewodnik przeprowadzi przez następujące kroki:

Wymagania

Aby utworzyć tagi Tulip, musisz mieć urządzenie Tulip Edge Device, które

  • obsługuje Node-RED (Edge MC lub Edge IO)
  • ma włączoną funkcję Node-RED
  • posiada oprogramowanie sprzętowe w wersji >= OS50

Podręcznik użytkownika

W tym przewodniku omówimy przepływ pracy w Node-RED, aby utworzyć tag, wysłać do niego dane, a następnie zademonstrować, jak zmapować ten tag do atrybutu maszyny w Tulip. Opiszemy również, jak pisać do wielu tagów jednocześnie (tylko OS 51 i nowsze).

Tworzenie tagów w Node-RED

  1. Otwórz Node-RED na urządzeniu Tulip Edge i zaloguj się.

    1. *Aby uzyskać więcej informacji na temat dostępu do Node-RED: Korzystanie z Node-RED na Edge IO
    2. Jeśli korzystasz z systemu OS50 lub nowszego, zobaczysz węzeł Tulip Tag na lewym pasku bocznym edytora Node-RED.

  1. Przeciągnij i upuść węzeł tulip-tag do edytora, a następnie kliknij go dwukrotnie, aby otworzyć edytor węzłów. Powinieneś zobaczyć wymaganą właściwość "Tag List" - będziesz musiał utworzyć listę tagów, która zawiera wszystkie tagi dla tego urządzenia Edge Device. Należy utworzyć tylko jedną listę tagów na urządzenie brzegowe. Kliknij Edytuj, aby utworzyć nową listę tagów, zaznaczoną poniżej.

  1. W węźle Tag List można utworzyć dowolną liczbę tagów. Kliknij +add, aby utworzyć tag.

  1. Każdy tag składa się z trzech części: ID, etykiety i typu.

    1. Identyfikatortagu: Jest to identyfikator podobny do kodu, który identyfikuje tag. Po utworzeniu nie powinien on ulec zmianie. Prawidłowe znaki to litery, cyfry (nie mogą zaczynać się od cyfry) i podkreślenia. Przykłady: part_count, myState1.
    2. Etykieta tagu: Jest to czytelna dla człowieka etykieta, którą można przypisać do tagu. Aby zmienić nazwę tagu, wystarczy zaktualizować etykietę (nie ID). Przykład: "Part Count".
    3. Typ: Typ danych - String, Integer, Float lub Boolean. Musi być zgodny z typem zmapowanego atrybutu urządzenia.

  1. Po zakończeniu dodawania znaczników kliknij przycisk Add, aby potwierdzić zmiany i powrócić do poprzedniego edytora węzłów. Przed zapisaniem upewnij się, że nie ma żadnych błędów.

:::(Info) (UWAGA) "Unmapped" nie jest błędem, a jedynie ostrzeżeniem, że tag nie został jeszcze zmapowany do atrybutu maszyny w Tulip :::

Wysyłanie danych do tagów w Node-RED

Po utworzeniu listy tagów, rozwijane menu Wybierz tag automatycznie wypełni się wszystkimi tagami (etykietami czytelnymi dla człowieka).

  1. Wybierz tag dla tego węzła.

  1. Aby zapisać dane do tego tagu, należy teraz wysyłać wiadomości do tego węzła tulip-tag. Ładunek każdej wiadomości wysłanej do węzła (tj. msg.payload) zostanie zapisany w tagu.

Na przykład, poniżej połączyliśmy węzeł Inject z msg.payload=0, który zapisze liczbę całkowitą 0 do tagu Part Count.

Mapowanie tagów na atrybuty maszyny

Wreszcie, aby wyświetlić dane w Tulip, musisz odwiedzić witrynę Tulip i zmapować tag do atrybutu maszyny.

  1. Przejdź do strony maszyn, wybierz maszynę, do której chcesz wysłać dane i otwórz zakładkę Konfiguracja. Powinieneś zobaczyć listę atrybutów maszyny; kliknij atrybut, aby go zmapować. Jako źródło danych powinno być widoczne urządzenie brzegowe (według numeru seryjnego). Nie trzeba tworzyć tego źródła danych, zostanie ono automatycznie utworzone po wdrożeniu przepływu z listą znaczników.
  2. Kliknij urządzenie brzegowe na prawym pasku bocznym i rozwiń folder Node-RED. Powinieneś zobaczyć wszystkie atrybuty tego samego typu co atrybut. Kliknij przycisk łącza obok odpowiedniego atrybutu, aby go zmapować.

  1. Atrybut będzie teraz wyświetlany jako zmapowany, z etykietą tagu zmapowanego tagu jako Sygnał.

  1. Dodatkowo, w Node-RED, status węzła Tulip Tag powinien zmienić się z "Unmapped" na "Connected".

  1. Zapisywanie danych do tagu (np. poprzez kliknięcie węzła "Inject" w tym przykładzie) powoduje teraz wyświetlenie danych dla zmapowanego atrybutu.

Wysyłanie danych do wielu tagów (zaawansowane)

:::(Info) (UWAGA) Ta funkcja jest dostępna tylko w systemie OS51 i nowszych. :::

Możliwe jest wsadowe wysyłanie danych do wielu tagów jednocześnie.

  1. W Node-RED utwórz węzeł Tulip Tag i odznacz opcję Wybierz tag z listy.

  1. Ładunek wiadomości wejściowej do tego węzła powinien teraz zawierać mapę identyfikatorów tagów do wartości do zapisania. Na przykład, jeśli chcesz zapisać liczbę części równą 0 do tagu całkowitego o identyfikatorze part_count i stan "Running" do tagu łańcuchowego o identyfikatorze state, twoja wiadomość powinna wyglądać następująco:

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

Przykład: Zarządzanie stanem maszyny i liczbą części za pomocą Edge IO i Node-RED

Ten przykład jest zaktualizowaną wersją przepływu biblioteki Node RED opisanego w tym artykule, do którego należy się odnieść w celu konfiguracji sprzętu: Managing Machine States and Part Counts with Edge IO and Node-RED.

Przepływ został zaktualizowany poniżej, aby używać węzła Tulip Tag zamiast węzła Machine Attribute. Przepływ ten można wdrożyć na wielu urządzeniach Edge bez modyfikacji.

  1. W Node-RED należy zaimportować i wdrożyć następujący przepływ:


## 65CCB8", "icon": "font-awesome/fa-arrows-v"},{"id": "d99ec5b3.e9dfb8", "type": "function", "z": "85d16074.518e2", "name": "Convert values with scale/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) => (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": "Ten przepływ biblioteki jest podstawową aplikacją do monitorowania maszyny w celu uzyskania wglądu w stan maszyny i liczbę części przy użyciu cęgów prądowych i wiązki breakbeam. Śledzi następujące dwa wejścia Edge IO: \n\n \* **Part Count**: Zaczyna się od 0 i zlicza w górę za każdym razem, gdy pin 1 GPIO zostanie przełączony w stan wysoki, na przykład po wyzwoleniu wiązki wyłączającej. Może być zresetowany do 0 przez węzeł "Reset Part Count". Wysyła bieżącą liczbę części do atrybutu maszyny Tulip za każdym razem, gdy liczba części ulegnie zmianie. \ **Status maszyny**: Wysyła wartość RMS prądu maszyny monitorowanej przez zacisk prądowy CR-3111 do różnicowego przetwornika ADC Edge IO. Odczyt RMS jest podawany dla bufora 1s danych pobieranych z częstotliwością 1kHz, próbkowanych raz na 5s. Próg można ustawić w Node-RED lub w Tulip, aby określić stan włączenia/wyłączenia urządzenia. "},{"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", "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": "Zaczyna się od Part Count = 0 i zlicza w górę za każdym razem, gdy pin 1 GPIO zostanie przełączony w stan wysoki. Licznik części można zresetować do 0, klikając węzeł "Reset Part Count". Wysyła bieżącą liczbę części do skonfigurowanego atrybutu maszyny Tulip za każdym razem, gdy liczba części ulegnie zmianie. ", "x":130, "y":40, "wires":[]},{"id": "9ff956ce.4ee9b8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitor RMS Current", "info": "Wysyła prąd RMS maszyny monitorowanej przez cęgi prądowe CR-3111 do różnicowego przetwornika ADC Edge IO. Odczyt RMS jest podawany dla bufora 1s danych pobieranych z częstotliwością 1kHz, próbkowanych raz na 5s. Próg można ustawić w Node-RED lub w Tulip, aby określić stan włączenia/wyłączenia urządzenia. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name": "Filtruj 1/5 odczytów", "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": "Przepływ podrzędny do obliczania stanu maszyny", "info": "Ten przepływ podrzędny można włączyć, aby obliczyć, czy maszyna jest włączona, czy wyłączona na podstawie skonfigurowanej wartości progowej. Obliczony stan jest wysyłany jako ciąg znaków do atrybutu maszyny. Ten atrybut maszyny musi być skonfigurowany w Tulip jako atrybut tekstowy, a atrybut deviceInfo powinien być skopiowany i wklejony do węzła Tulip Machine Attribute.", "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": "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": "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. Przepływ wygląda następująco:


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


Przepływ ma również następującą listę tagów 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. To urządzenie Edge Device pojawia się w Tulip jako źródło danych z trzema tagami:


	1. Part Count: Zwiększany za każdym razem, gdy pin wejściowy GPIO 1 przełącza się w stan wysoki. Zakłada się, że wiązka przerwania jest podłączona do tego pinu.
	2. Current (RMS): Zapisuje odczyt RMS prądu (w amperach) co 5 sekund z CR3111-3000. Zakłada, że ten czujnik prądu jest podłączony do różnicowego przetwornika ADC.
	3. Stan: Raportuje "ON", jeśli prąd jest >100mA, i "OFF", jeśli prąd jest <=100mA.Możesz zmapować te tagi do odpowiednich atrybutów maszyny w 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. Dane pojawią się, gdy wiązka przerwania zostanie przełączona lub gdy odczyty prądu są aktualizowane co 5 sekund:


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




---


Czy znalazłeś to, czego szukałeś?


Możesz również udać się na stronę [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all), aby opublikować swoje pytanie lub sprawdzić, czy inni mieli do czynienia z podobnym pytaniem! 


Czy ten artykuł był pomocny?