Como enviar dados para máquinas a partir de dispositivos de borda usando tags Node-RED e Tulip
  • 04 Nov 2023
  • 9 Minutos para Ler
  • Contribuintes

Como enviar dados para máquinas a partir de dispositivos de borda usando tags Node-RED e Tulip


Resumo do artigo

Saiba como usar Tulip Tags no Node-RED para enviar dados de forma nativa de Edge Devices para Tulip Machines

A partir do OS 50.1, a Tulip suporta nativamente o uso de Tulip Edge Devices como fontes de dados de máquinas.

Usando o Node RED, você pode criar "tags" arbitrárias com o novo nó tulip-tag e enviar dados para essas tags. Essas tags aparecerão automaticamente no Edge Device específico como uma fonte de dados ao mapear os atributos da máquina.

Recomenda-se usar Tulip Tags em vez da Machine API em novos fluxos. As Tulip Tags permitem que você relate dados da máquina usando fluxos reutilizáveis que podem ser compartilhados entre dispositivos sem nenhuma modificação específica do dispositivo e eliminam a necessidade de copiar e colar informações de atributos da máquina nos nós da Machine API.

Visão geral

Este artigo descreverá como enviar dados do Node-RED para as máquinas Tulip usando o novo nó Tulip Tag que vem pré-instalado nos dispositivos Tulip Edge.

Este guia abordará as seguintes etapas:

Requisitos

Para criar Tulip Tags, você deve ter um Tulip Edge Device que

  • seja compatível com o Node-RED (Edge MC ou Edge IO)
  • tenha o Node-RED ativado
  • esteja em uma versão de firmware >= OS50

Guia do usuário

Este guia percorrerá o fluxo de trabalho no Node-RED para criar uma tag, enviar dados para ela e, em seguida, demonstrar como mapear essa tag para um atributo de máquina no Tulip. Também descreveremos como gravar em várias tags simultaneamente (somente OS 51 e posteriores).

Criação de tags no Node-RED

  1. Abra o Node-RED em seu Tulip Edge Device e faça o login.

    1. *Para referência sobre como acessar o Node-RED: Usando o Node-RED no Edge IO
    2. Se você estiver no OS50 ou posterior, verá o nó Tulip Tag na barra lateral esquerda do editor do Node-RED.

  1. Arraste e solte o nó tulip-tag no editor e clique duas vezes nele para abrir o editor de nós. Você deverá ver a propriedade "Tag List" (Lista de tags) que é necessária - você precisará criar uma lista de tags que contenha todas as tags para esse Edge Device. Você só deve criar uma Tag List por Edge Device. Clique em Edit para criar a nova Tag List, destacada abaixo.

  1. No nó Tag List, você poderá criar quantas tags quiser. Clique em +add para criar uma tag.

  1. Cada tag tem três partes: um ID, um rótulo e um tipo.

    1. ID da tag: esse é um identificador semelhante a um código que identifica a tag. Depois de criada, ela não deve ser alterada. Os caracteres válidos são letras, dígitos (não podem começar com um dígito) e sublinhados. Exemplos: part_count, myState1.
    2. Rótulo da etiqueta: Esse é o rótulo legível por humanos que você pode atribuir à tag. Para renomear a tag, basta atualizar o rótulo (não a ID). Exemplo: "Part Count" (Contagem de peças).
    3. Type (Tipo): O tipo de dados - String, Integer, Float ou Boolean. Deve corresponder ao tipo do atributo de máquina mapeado.

  1. Quando terminar de adicionar tags, clique em Add (Adicionar ) para confirmar as alterações e retornar ao editor de nós anterior. Certifique-se de que não haja erros antes de salvar.

:::(Info) (OBSERVAÇÃO) "Não mapeado" não é um erro, apenas um aviso de que você ainda não mapeou a tag para um atributo de máquina no Tulip. :::

Envio de dados para tags no Node-RED

Depois de criar uma lista de tags, o menu suspenso Selecionar tag é preenchido automaticamente com todas as tags (pelos rótulos legíveis por humanos).

  1. Selecione a tag para esse nó.

  1. Para gravar dados nessa tag, agora você precisará enviar mensagens para esse nó de tag tulipa. A carga útil de qualquer mensagem enviada ao nó (ou seja, msg.payload) será gravada na tag.

Por exemplo, abaixo, vinculamos um nó Inject com msg.payload=0 que gravará o número inteiro 0 na tag Part Count.

Mapeamento de tags para atributos de máquina

Por fim, para visualizar os dados no Tulip, você deve visitar o site do Tulip e mapear a tag para um atributo de máquina.

  1. Navegue até a página de suas máquinas, selecione a máquina para a qual deseja enviar os dados e abra a guia Configuration (Configuração). Você deverá ver uma lista de atributos de máquina; clique em um atributo para mapeá-lo. Você deverá ver o Edge Device (por número de série) como uma fonte de dados. Não é necessário criar essa fonte de dados, ela será criada automaticamente quando você implantar um fluxo com uma lista de tags.
  2. Clique no dispositivo de borda na barra lateral direita e expanda a pasta Node-RED. Você deverá ver todos os atributos do mesmo tipo que o atributo. Clique no botão de link ao lado do atributo relevante para mapeá-lo.

  1. O atributo agora é exibido como mapeado, com o rótulo da tag mapeada como o sinal.

  1. Além disso, no Node-RED, o status do nó da tag Tulip deve ter mudado de "Unmapped" (não mapeado) para "Connected" (conectado).

  1. A gravação de dados na tag (ou seja, clicando no nó "Inject" neste exemplo) agora faz com que os dados apareçam para o atributo mapeado.

Envio de dados para várias tags (avançado)

:::(Info) (OBSERVAÇÃO) Esse recurso só está disponível no OS51 e posteriores :::

É possível fazer gravações em lote em várias tags de uma só vez.

  1. No Node-RED, crie um nó de tag Tulip e desmarque a opção Select Tag from List (Selecionar tag da lista).

  1. O payload da mensagem de entrada para esse nó deve conter um mapa de IDs de tag para os valores a serem gravados. Por exemplo, se você quiser gravar uma contagem de peças de 0 na tag inteira com id part_count e um estado de "Running" em uma tag de string com id state, sua mensagem deverá ser

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

Exemplo: Gerenciamento do estado da máquina e da contagem de peças com Edge IO e Node-RED

Este exemplo é uma versão atualizada do fluxo da biblioteca do Node RED descrito neste artigo, que você deve consultar para a configuração do hardware: Gerenciando estados de máquina e contagens de peças com Edge IO e Node-RED.

O fluxo foi atualizado abaixo para usar o nó Tulip Tag em vez do nó Machine Attribute. Esse fluxo pode ser implementado em muitos dispositivos Edge sem modificações.

  1. No Node-RED, importe e implemente o seguinte fluxo:


## 65CCB8", "icon": "font-awesome/fa-arrows-v"},{"id": "d99ec5b3.e9dfb8", "type": "function", "z": "85d16074.518e2", "name": "Converter valores com escala/deslocamento", "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": "Visibilidade da máquina com pinça de corrente e breakbeam", "disabled":false, "info": "Esse fluxo de biblioteca é um aplicativo básico de monitoramento de máquina para obter visibilidade do estado da máquina e da contagem de peças usando uma pinça de corrente e um breakbeam. Ele rastreia as duas entradas de E/S do Edge a seguir:\n\n \* **Contagem** de peças: Começa em 0 e faz a contagem crescente sempre que o Pino 1 do GPIO é elevado, por exemplo, quando um breakbeam é acionado. Pode ser redefinido para 0 pelo nó "Reset Part Count". Envia a contagem de peças atual para um atributo de máquina Tulip sempre que a contagem de peças for alterada. \ **Status da máquina**: Envia a corrente RMS de uma máquina que está sendo monitorada por um grampo de corrente CR-3111 para o ADC diferencial Edge IO. A leitura RMS é fornecida para um buffer de 1s de dados obtidos a 1kHz, amostrados uma vez a cada 5s. Um limite pode ser definido no Node-RED ou no Tulip para determinar o estado ligado/desligado da 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,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 contagem de peças", "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": "Definir contagem de peças = 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": "Inicia com Part Count = 0 e faz a contagem crescente sempre que o Pino 1 do GPIO é elevado. A contagem de peças pode ser redefinida para 0 clicando no nó "Reset Part Count". Envia a contagem de peças atual para o atributo de máquina Tulip configurado sempre que a contagem de peças for alterada. ", "x":130, "y":40, "wires":[]},{"id": "9ff956ce.4ee9b8", "type": "comment", "z": "71c9f8f2.7adf08", "name": "Monitor RMS Current", "info": "Envia a corrente RMS de uma máquina que está sendo monitorada por um grampo de corrente CR-3111 para o ADC diferencial Edge IO. A leitura RMS é fornecida para um buffer de 1s de dados obtidos a 1kHz, amostrados uma vez a cada 5s. Um limite pode ser definido no Node-RED ou no Tulip para determinar o estado ligado/desligado da máquina. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name": "Filtrar 1/5 leituras", "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": "Subfluxo para calcular o estado da máquina", "info": "Esse subfluxo pode ser ativado para calcular se a máquina está ligada ou desligada com base no valor de limite configurado.\n\nO estado calculado é enviado como uma cadeia de caracteres para um atributo de máquina. Esse atributo de máquina precisa ser configurado no Tulip para ser um atributo de texto, e o atributo deviceInfo deve ser copiado e colado no nó 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": "Etiquetas de máquinas de fabricação de peças", "tags":[{"id": "part\_count", "label": "Part Count", "type": "integer"},{"id": "current", "label": "Current (RMS)", "type": "float"},{"id": "state", "label": "State", "type": "string"}]}]


``` 2. O fluxo aparece da seguinte forma:


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


O fluxo também tem a seguinte lista de tags do 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. Esse Edge Device aparece no Tulip como uma fonte de dados com três tags:


	1. Part Count: Incrementado sempre que o pino de entrada 1 do GPIO fica alto. Pressupõe que um feixe de interrupção esteja conectado a esse pino.
	2. Current (RMS): grava a leitura de corrente RMS (em ampères) a cada 5 segundos do CR3111-3000. Pressupõe que esse sensor de corrente esteja conectado ao ADC diferencial.
	3. Estado: Informa "ON" se a corrente for >100mA e "OFF" se a corrente for <=100mA.Você pode mapear essas tags para os atributos de máquina correspondentes no 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. Você verá os dados aparecerem quando o feixe de interrupção alternar ou quando as leituras de corrente forem atualizadas a 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=""}




---


Encontrou o que estava procurando?


Você também pode acessar [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) para postar sua pergunta ou ver se outras pessoas tiveram uma pergunta semelhante! 


Este artigo foi útil?