Cómo enviar datos a máquinas desde dispositivos periféricos utilizando etiquetas Node-RED y Tulip
  • 04 Nov 2023
  • 9 Minutos para leer
  • Colaboradores

Cómo enviar datos a máquinas desde dispositivos periféricos utilizando etiquetas Node-RED y Tulip


Article Summary

Aprende a utilizar Tulip Tags en Node-RED para enviar datos de forma nativa desde Edge Devices a Tulip Machines.

Comenzando con OS 50.1, Tulip soporta nativamente el uso de Tulip Edge Devices como Machine Data Sources.

Usando Node RED, puedes crear "etiquetas" arbitrarias con el nuevo nodo tulip-tag y enviar datos a esas etiquetas. Estas etiquetas aparecerán automáticamente bajo el Edge Device específico como fuente de datos al mapear los atributos de la máquina.

Se recomienda utilizar Tulip Tags en lugar de Machine API en los nuevos flujos. Los Tulip Tags le permiten reportar datos de máquina usando flujos reutilizables que pueden ser compartidos a través de dispositivos sin ninguna modificación específica del dispositivo y elimina la necesidad de copiar y pegar información de atributos de máquina en los nodos API de Máquina.

Visión general

Este artículo describirá cómo enviar datos desde Node-RED a Tulip Machines utilizando el nuevo nodo Tulip Tag que viene preinstalado en Tulip Edge Devices.

Esta guía recorrerá los siguientes pasos:

Requisitos

Para crear Tulip Tags, debes tener un Tulip Edge Device que:

  • soporte Node-RED (Edge MC o Edge IO)
  • tenga Node-RED habilitado
  • tenga una versión de firmware >= OS50

Guía del Usuario

Esta guía le guiará a través del flujo de trabajo en Node-RED para crear una etiqueta, enviar datos a ella, y luego demostrar cómo asignar esa etiqueta a un atributo de la máquina en Tulip. También describiremos cómo escribir en varias etiquetas simultáneamente (sólo OS 51 y posteriores).

Creación de etiquetas en Node-RED

  1. Abre Node-RED en tu dispositivo Tulip Edge e inicia sesión.

    1. *Para referencia sobre cómo acceder a Node-RED: Uso de Node-RED en Edge IO
    2. Si estás en OS50 o posterior, verás el nodo Tulip Tag en la barra lateral izquierda del editor Node-RED.

  1. Arrastra y suelta el nodo tulip-tag en el editor, y haz doble clic sobre él para abrir el editor de nodos. Deberá ver la propiedad "Tag List" que se requiere - necesitará crear una lista de etiquetas, que contenga todas las etiquetas para este Edge Device. Sólo debe crear una Lista de Etiquetas por Dispositivo de Borde. Haga clic en Editar para crear la nueva Lista de Etiquetas, resaltada a continuación.

  1. En el nodo Tag List, podrá crear tantas etiquetas como desee. Haga clic en +añadir para crear una etiqueta.

  1. Cada etiqueta tiene tres partes: un ID, una etiqueta y un tipo.

    1. ID de etiqueta**:** es un identificador en forma de código que identifica la etiqueta. Una vez creado, no debe cambiar. Los caracteres válidos son letras, dígitos (no pueden empezar por un dígito) y guiones bajos. Ejemplos: part_count, myState1.
    2. Etiqueta: Es la etiqueta legible que puede asignar a la etiqueta. Para cambiar el nombre de la etiqueta, basta con actualizar la etiqueta (no el ID). Ejemplo: "Recuento de piezas".
    3. Tipo: El tipo de datos - Cadena, Entero, Flotante o Booleano. Debe coincidir con el tipo del atributo de máquina asignado.

  1. Una vez que haya terminado de añadir etiquetas, haga clic en Añadir para confirmar los cambios y volver al editor de nodos anterior. Asegúrese de que no hay errores antes de guardar.

:::(Info) (NOTA) "Sin asignar" no es un error, sólo un aviso de que aún no ha asignado la etiqueta a un atributo de máquina en Tulip. :::

Envío de datos a etiquetas en Node-RED

Una vez creada una lista de etiquetas, el desplegable Seleccionar etiqueta se rellena automáticamente con todas las etiquetas (por las etiquetas legibles por humanos).

  1. Seleccione la etiqueta para este nodo.

  1. Para escribir datos en esta etiqueta, tendrá que enviar mensajes a este nodo tulip-tag. La carga útil de cualquier mensaje enviado al nodo (es decir, msg.payload) se escribirá en la etiqueta.

Por ejemplo, abajo, hemos enlazado un nodo Inject con msg. payload=0 que escribirá el entero 0 en la etiqueta Part Count.

Asignación de Etiquetas a Atributos de Máquina

Finalmente, para ver los datos en Tulip, debes visitar tu sitio Tulip y mapear la etiqueta a un Atributo de Máquina.

  1. Navegue a su página de máquinas, seleccione la Máquina a la que desea enviar los datos y abra la pestaña Configuración. Deberías ver una lista de Atributos de Máquina; haz clic en un atributo para asignarlo. Usted debe ver el Dispositivo de Borde (por número de serie) como una fuente de datos. No necesita crear esta fuente de datos, se creará automáticamente cuando despliegue un flujo con una lista de etiquetas.
  2. Haga clic en el dispositivo de borde en la barra lateral derecha y expanda la carpeta Node-RED. Debería ver todos los atributos del mismo tipo que el atributo. Haga clic en el botón de enlace situado junto al atributo correspondiente para asignarlo.

  1. El atributo se mostrará ahora como asignado, con la Etiqueta de la etiqueta asignada como Señal.

  1. Además, en Node-RED, el estado del nodo Tulip Tag debería haber cambiado de "Sin asignar" a "Conectado".

  1. Al escribir datos en la etiqueta (es decir, haciendo clic en el nodo "Inyectar" en este ejemplo), ahora aparecen datos para el atributo asignado.

Envío de datos a varias etiquetas (Avanzado)

:::(Info) (NOTA) Esta función sólo está disponible en OS51 y posteriores. :::

Es posible escribir por lotes en varias etiquetas a la vez.

  1. En Node-RED, cree un nodo Tulip Tag y desactive la opción Seleccionar etiqueta de la lista.

  1. Por ejemplo, si desea escribir un recuento de piezas de 0 en la etiqueta entera con id part_count, y un estado de "En ejecución" en una etiqueta de cadena con id state, su mensaje debería ser:

msg.payload = { "part_count": 0, "state": "En ejecución" }

Ejemplo: Gestión del estado de la máquina y recuento de piezas con Edge IO y Node-RED

Este ejemplo es una versión actualizada del flujo de la librería Node RED descrito en este artículo, al que deberías referirte para la configuración del hardware: Managing Machine States and Part Counts with Edge IO and Node-RED.

El flujo se ha actualizado a continuación para utilizar el nodo Tulip Tag en lugar del nodo Machine Attribute. Este flujo puede desplegarse en muchos Dispositivos Edge sin modificación.

  1. En Node-RED, importa y despliega el siguiente flujo:


## 65CCB8", "icon": "font-awesome/fa-arrows-v"},{"id": "d99ec5b3.e9dfb8", "type": "function", "z": "85d16074.518e2", "name": "Convertir valores con escala/desplazamiento", "func": "const scale = env.get('SCALE');\nconst offset = env.get('OFFSET');\nconst prop = env.get('PROPERTY');\nif (Array.isArray(msg[prop])) {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": "Visibilidad de máquina con pinza de corriente y breakbeam", "disabled":false, "info": "Este flujo de biblioteca es una aplicación básica de monitorización de máquina para obtener visibilidad del estado de la máquina y el recuento de piezas utilizando una pinza de corriente y un breakbeam. Realiza un seguimiento de las dos entradas Edge IO siguientes:\* **Recuento de piezas**: Comienza en 0 y cuenta hacia arriba cada vez que el pin GPIO 1 se activa, por ejemplo, cuando se dispara un breakbeam. Puede ser reiniciado a 0 por el nodo 'Reiniciar Conteo de Partes'. Envía el conteo de partes actual a un Atributo de Máquina Tulip cada vez que el conteo de partes cambia. \ **Estado de la Máquina**: Envía la corriente RMS de una máquina que está siendo monitoreada por una pinza de corriente CR-3111 al ADC diferencial Edge IO. La lectura RMS se da para un buffer de 1s de datos tomados a 1kHz, muestreados una vez cada 5s. Se puede establecer un umbral en Node-RED o en Tulip para determinar el estado de encendido/apagado de la máquina. "},{"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": "Incrementar número de piezas", "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": "Monitoriza el recuento de piezas", "info": "Comienza con recuento de piezas = 0 y cuenta hacia arriba cada vez que el pin GPIO 1 se activa. El recuento de piezas se puede restablecer a 0 haciendo clic en el nodo "Restablecer recuento de piezas". Envía el conteo de partes actual al Atributo de Máquina Tulipán configurado cada vez que el conteo de partes cambia. ", "x":130, "y":40, "wires":[]},{"id": "9ff956ce.4ee9b8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitorizar Corriente RMS", "info": "Envía la corriente RMS de una máquina que está siendo monitorizada por una pinza de corriente CR-3111 en el ADC diferencial Edge IO. La lectura RMS se da para un buffer de 1s de datos tomados a 1kHz, muestreados una vez cada 5s. Se puede establecer un umbral en Node-RED o en Tulip para determinar el estado de encendido/apagado de la máquina. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name": "Filtrar 1/5 lecturas", "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": "Subflujo para calcular el estado de la máquina", "info": "Este subflujo puede activarse para calcular si la máquina está encendida o apagada en función del valor umbral configurado. Este atributo de máquina debe configurarse en Tulip para que sea un atributo de texto, y el atributo deviceInfo debe copiarse y pegarse en el nodo 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": "Inicialización", "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 diferencial 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": "Etiquetas de máquina de fabricación de piezas", "tags":[{"id": "part\_count", "label": "Recuento de piezas", "type": "integer"},{"id": "current", "label": "Corriente (RMS)", "type": "float"},{"id": "state", "label": "Estado", "type": "string"}]}].


``` 2. El flujo tiene el siguiente aspecto:


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


El flujo también tiene la siguiente lista Tulip Tag:


![](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. Este Edge Device aparece en Tulip como una fuente de datos con tres etiquetas:


	1. Part Count: Se incrementa cada vez que el pin de entrada GPIO 1 conmuta a alto. Asume que una viga de ruptura está conectada a ese pin.
	2. Corriente (RMS): Escribe la lectura de corriente RMS (en Amperios) cada 5 segundos del CR3111-3000. Asume que este sensor de corriente está conectado al ADC diferencial.
	3. Estado: Informa "ON" si la corriente es >100mA, y "OFF" si la corriente es <=100mA.Puede asignar estas etiquetas a los atributos correspondientes de la máquina en 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. Verá que los datos aparecen cuando el haz de rotura cambia, o cuando las lecturas de corriente se actualizan cada 5 segundos:


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




---


¿Has encontrado lo que buscabas?


También puedes dirigirte a [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) para publicar tu pregunta o ver si otras personas se han enfrentado a una pregunta similar. 


¿Te ha sido útil este artículo?