Comment envoyer des données à des machines à partir d'appareils périphériques à l'aide de Node-RED et de balises Tulip
  • 04 Nov 2023
  • 10 Minutes à lire
  • Contributeurs

Comment envoyer des données à des machines à partir d'appareils périphériques à l'aide de Node-RED et de balises Tulip


Article Summary

Apprenez à utiliser les tags Tulip dans Node-RED pour envoyer nativement des données depuis des appareils Edge vers des machines Tulip.

A partir de l'OS 50.1, Tulip supporte nativement l'utilisation des périphériques Tulip Edge comme sources de données pour les machines.

En utilisant Node RED, vous pouvez créer des "tags" arbitraires avec le nouveau nœud tulip-tag et envoyer des données à ces tags. Ces balises apparaîtront automatiquement sous le dispositif Edge spécifique en tant que source de données lors du mappage des attributs de la machine.

Il est recommandé d'utiliser les balises Tulip plutôt que l'API Machine dans les nouveaux flux. Les étiquettes Tulip vous permettent de rapporter des données sur les machines en utilisant des flux réutilisables qui peuvent être partagés entre les appareils sans aucune modification spécifique à l'appareil et éliminent le besoin de copier-coller les informations sur les attributs de la machine dans les nœuds de l'API Machine.

Vue d'ensemble

Cet article décrit comment envoyer des données de Node-RED aux machines Tulip en utilisant le nouveau nœud Tulip Tag qui est préinstallé sur les appareils Tulip Edge.

Ce guide décrit les étapes suivantes :

Exigences

Pour créer des étiquettes Tulip, vous devez disposer d'un appareil Tulip Edge qui :

  • supporte Node-RED (Edge MC ou Edge IO)
  • dont le Node-RED est activé
  • a une version de firmware >= OS50

Guide de l'utilisateur

Ce guide décrit le flux de travail dans Node-RED pour créer une balise, lui envoyer des données, et ensuite démontrer comment mapper cette balise à un attribut de machine dans Tulip. Nous décrirons également comment écrire sur plusieurs balises simultanément (OS 51 et suivants uniquement).

Création de balises dans Node-RED

  1. Ouvrez Node-RED sur votre appareil Tulip Edge et connectez-vous.

    1. *Pour une référence sur l'accès à Node-RED : Utiliser Node-RED sur Edge IO
    2. Si vous êtes sur OS50 ou plus récent, vous verrez le nœud Tulip Tag dans la barre latérale gauche de l'éditeur Node-RED.

  1. Glissez-déposez le nœud tulip-tag dans l'éditeur et double-cliquez dessus pour ouvrir l'éditeur de nœuds. Vous devez voir la propriété " Liste de balises " qui est requise - vous devez créer une liste de balises qui contient toutes les balises de cet appareil Edge. Vous ne devez créer qu'une seule liste d'étiquettes par appareil périphérique. Cliquez sur Modifier pour créer la nouvelle liste de balises, mise en évidence ci-dessous.

  1. Dans le nœud Liste de balises, vous pourrez créer autant de balises que vous le souhaitez. Cliquez sur +add pour créer une balise.

  1. Chaque balise se compose de trois éléments : un identifiant, un libellé et un type.

    1. ID de la balise : il s'agit d'un identifiant de type code qui identifie la balise. Une fois créé, il ne doit pas être modifié. Les caractères valides sont des lettres, des chiffres (qui ne peuvent pas commencer par un chiffre) et des traits de soulignement. Exemples : part_count, myState1.
    2. Tag Label: Il s'agit de l'étiquette lisible par l'homme que vous pouvez attribuer à la balise. Pour renommer l'étiquette, il suffit de mettre à jour l'étiquette (et non l'ID). Exemple : "Part Count".
    3. Type: Le type de données - String, Integer, Float ou Boolean. Il doit correspondre au type de l'attribut machine mappé.

  1. Lorsque vous avez terminé d'ajouter des balises, cliquez sur Ajouter pour confirmer les modifications et revenir à l'éditeur de nœuds précédent. Assurez-vous qu'il n'y a pas d'erreurs avant d'enregistrer.

:::(Info) (NOTE) "Unmapped" n'est pas une erreur, juste un avertissement que vous n'avez pas encore mappé la balise à un attribut machine dans Tulip :: :

Envoi de données aux balises dans Node-RED

Une fois que vous avez créé une liste de balises, le menu déroulant Sélectionner une balise se remplit automatiquement avec toutes les balises (par les étiquettes lisibles par l'homme).

  1. Sélectionnez la balise pour ce nœud.

  1. Pour écrire des données dans cette balise, vous devez maintenant envoyer des messages à ce nœud tulip-tag. La charge utile de tout message envoyé au nœud (c'est-à-dire msg.payload) sera écrite dans la balise.

Par exemple, ci-dessous, nous avons lié un nœud Inject avec msg.payload=0 qui écrira l'entier 0 dans la balise Part Count.

Mappage des balises aux attributs de la machine

Enfin, pour visualiser les données dans Tulip, vous devez vous rendre sur votre site Tulip et associer la balise à un attribut de machine.

  1. Naviguez vers la page de vos machines, sélectionnez la machine vers laquelle envoyer les données, et ouvrez l'onglet Configuration. Vous devriez voir une liste d'attributs de machine ; cliquez sur un attribut pour le mapper. Vous devriez voir le dispositif Edge (par numéro de série) comme source de données. Vous n'avez pas besoin de créer cette source de données, elle sera automatiquement créée lorsque vous déployez un flux avec une liste de balises.
  2. Cliquez sur le dispositif de bordure dans la barre latérale droite et développez le dossier Node-RED. Vous devriez voir tous les attributs du même type que l'attribut. Cliquez sur le bouton de lien situé à côté de l'attribut concerné pour le mapper.

  1. L'attribut s'affiche maintenant comme étant mappé, avec l'étiquette de la balise mappée comme signal.

  1. De plus, dans Node-RED, l'état du nœud de l'étiquette Tulip devrait être passé de " Non mappé " à " Connecté ".

  1. L'écriture de données dans l'étiquette (c'est-à-dire en cliquant sur le nœud " Injecter " dans cet exemple) fait maintenant apparaître des données pour l'attribut mappé.

Envoi de données à plusieurs balises (avancé)

:::(Info) (NOTE) Cette fonctionnalité n'est disponible qu'à partir de OS51 :: :

Il est possible d'écrire par lots sur plusieurs balises à la fois.

  1. Dans Node-RED, créez un nœud d'étiquette Tulip et décochez l'option Sélectionner l'étiquette dans la liste.

  1. La charge utile du message d'entrée de ce nœud devrait maintenant contenir une correspondance entre les identifiants des étiquettes et les valeurs à écrire. Par exemple, si vous souhaitez écrire un nombre de pièces de 0 dans l'étiquette entière avec l'identifiant part_count, et un état de "Running" dans une étiquette de type chaîne avec l'identifiant state, votre message devrait être le suivant :

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

Exemple : Gestion de l'état de la machine et du nombre de pièces avec Edge IO et Node-RED

Cet exemple est une version mise à jour du flux de la bibliothèque Node-RED décrit dans cet article, auquel vous devriez vous référer pour la configuration matérielle : Managing Machine States and Part Counts with Edge IO and Node-RED (Gestion des états de machine et des décomptes de pièces avec Edge IO et Node-RED).

Le flux a été mis à jour ci-dessous pour utiliser le nœud Tulip Tag au lieu du nœud Machine Attribute. Ce flux peut être déployé sur de nombreux appareils Edge sans modification.

  1. Dans Node-RED, importez et déployez le flux suivant :


## 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');\Nsi (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" : "Visibilité de la machine avec une pince de courant et un faisceau de rupture", "disabled":false, "info" : "Ce flux de bibliothèque est une application de surveillance de machine de base permettant d'obtenir une visibilité sur l'état de la machine et le nombre de pièces à l'aide d'une pince de courant et d'un faisceau de rupture. Il suit les deux entrées Edge IO suivantes : \* **Nombre de pièces**: Commence à 0 et compte à rebours chaque fois que la broche GPIO 1 est activée, par exemple lorsqu'un faisceau de lumière est déclenché. Peut être remis à 0 par le nœud "Reset Part Count". Envoie le nombre de pièces actuel à un attribut de machine Tulip chaque fois que le nombre de pièces change. \n \n \* **État de la machine**: Envoie le courant RMS d'une machine surveillée par une pince de courant CR-3111 dans l'ADC différentiel Edge IO. La valeur efficace est donnée pour une mémoire tampon de 1s de données prises à 1kHz, échantillonnées une fois toutes les 5s. Un seuil peut être défini dans Node-RED ou dans Tulip pour déterminer l'état de marche ou d'arrêt de la machine. "},{"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], "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" : "Incrémenter le nombre de pièces", "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" : "Contrôle du nombre de pièces", "info" : "Commence avec le nombre de pièces = 0 et compte à rebours chaque fois que la broche GPIO 1 est activée. Le nombre de pièces peut être remis à 0 en cliquant sur le nœud "Reset Part Count". Envoie le nombre de pièces actuel à l'attribut Tulip Machine configuré chaque fois que le nombre de pièces change. ", "x":130, "y":40, "wires" :[]},{"id" : "9ff956ce.4ee9b8", "type" : "comment", "z" : "71c9f8f2.7adf08", "name" : "Surveiller le courant RMS", "info" : "Envoie le courant RMS d'une machine surveillée par une pince de courant CR-3111 dans l'ADC différentiel Edge IO. La valeur efficace est donnée pour un tampon de 1s de données prises à 1kHz, échantillonnées une fois toutes les 5s. Un seuil peut être défini dans Node-RED ou dans Tulip pour déterminer l'état de marche ou d'arrêt de la machine. ","x":140,"y":320,"wires":[]},{"id":"96ef65ab.afba78","type":"switch","z":"71c9f8f2.7adf08", "name" : "Filtre 1/5 lectures", "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" : "Ce subflow peut être activé pour calculer si la machine est activée ou désactivée en fonction de la valeur seuil configurée.\NL'état calculé est envoyé sous forme de chaîne à un attribut de machine. Cet attribut machine doit être configuré dans Tulip pour être un attribut texte, et l'attribut deviceInfo doit être copié-collé dans le nœud 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" : "Initialisation", "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" : "Tags de machines de fabrication de pièces", "tags" :[{"id" : "part\_count", "label" : "Part Count", "type" : "integer"},{"id" : "current", "label" : "Current (RMS)", "type" : "float"},{"id" : "state", "label" : "State", "type" : "string"}]].


``` 2. Le flux se présente comme suit :


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


Le flux possède également la liste de balises Tulip suivante :


![](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. Ce dispositif Edge apparaît dans Tulip en tant que source de données avec trois balises :


	1. Part Count : Incrémenté à chaque fois que la broche 1 de l'entrée GPIO passe à l'état haut. On suppose qu'un faisceau de rupture est branché sur cette broche.
	2. Current (RMS) : écrit la lecture du courant RMS (en ampères) toutes les 5 secondes du CR3111-3000. On suppose que ce capteur de courant est branché sur l'ADC différentiel.
	3. État : Indique "ON" si le courant est >100mA, et "OFF" si le courant est <=100mA. Vous pouvez associer ces balises aux attributs machine correspondants dans 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. Vous verrez les données apparaître lorsque le faisceau de rupture bascule, ou lorsque les lectures de courant sont mises à jour toutes les 5 secondes :


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




---


Avez-vous trouvé ce que vous cherchiez ?


Vous pouvez également vous rendre sur [community.tulip.co](https://community.tulip.co/?utm_source=intercom&utm_medium=article-link&utm_campaign=all) pour poser votre question ou voir si d'autres personnes ont rencontré une question similaire ! 


Cet article vous a-t-il été utile ?