API Modbus
Limelight OS intègre un serveur Modbus TCP fonctionnant sur (adresse_ip):502
-
Entiers : Les entiers sont SIGNÉS et encodés en complément à deux. Cette méthode est universellement reconnue et garantit une interprétation correcte du signe.
-
Nombres à virgule flottante : Les flottants sont encodés selon la norme IEEE 754. Pour respecter la limitation des registres 16 bits du protocole Modbus, les nombres à virgule flottante sont divisés en deux parties :
- Les 16 bits de poids fort sont stockés dans le second registre, et les 16 bits de poids faible dans le premier registre.
- Le format little-endian assure la compatibilité avec la spécification Modbus.
Les Limelights USB et Ethernet peuvent être testés avec ModbusTool
Modbus permet la prise en charge des cas d'utilisation d'inspection de pièces et d'automatisation industrielle. Pour commencer avec Modbus, vous devez effectuer les étapes suivantes :
-
Connectez-vous à votre Limelight via Ethernet ou USB-C et configurez un pipeline.
- Bien que tous les pipelines produisent des résultats via Modbus, nos pipelines Python snapscript sont extrêmement polyvalents pour les cas d'utilisation industriels car ils prennent en charge les données d'entrée/sortie personnalisées.
-
Attribuez une adresse IP statique à votre Limelight
-
Connectez votre Limelight à un réseau Modbus.
Spécification des registres Modbus
Registres d'entrée / Lecture seule
| Registre | Clé | Type | Description |
|---|---|---|---|
| 0 | hb | int | Valeur de heartbeat. Augmente d'une unité par image |
| 1 | pipelineIndex | int | Index du pipeline actif actuel (0 .. 9). |
| 2 | validTarget | int | 1 si une cible valide existe, 0 sinon. |
| 3 | resultsCount | int | Nombre total de résultats. Inclut toutes les détections de fiducials, détections neuronales, etc. |
| 4 | ID | int | ID / Numéro d'équipe |
| 5 | modbusMode | int | Mode de sortie du serveur Modbus. |
| 6 | cpuTemp | int | Température du CPU en Celsius. |
| 7 | cpuUsage | int | Pourcentage d'utilisation du CPU. |
| 8 | ramUsage | int | Pourcentage d'utilisation de la RAM. |
| 9 | currentFPS | int | Images par seconde actuelles. |
| 10 | captureLatency | int | Latence de capture. (millisecondes) |
| 11 | targetLatency | int | Latence de traitement. (millisecondes) |
| 12-15 | réservé | int |
Si le mode de sortie est défini sur 0 :
| Registre | Clé | Type | Description |
|---|---|---|---|
| 16,17 | tx | float32 | Décalage angulaire horizontal vers la cible en degrés |
| 18,19 | ty | float32 | Décalage angulaire vertical vers la cible en degrés |
| 20,21 | txnc | float32 | Décalage angulaire horizontal vers la cible (relatif au pixel principal) en degrés |
| 22,23 | tync | float32 | Décalage angulaire vertical vers la cible (relatif au pixel principal) en degrés |
| 24,25 | ta | float32 (0-1) | Surface de la cible en pourcentage de la taille de l'image |
| 26 | fiducialID | int | ID AprilTag actuel |
| 27 | classifierClass | int | Index de classe de la sortie du pipeline de classification actuel. -1 si aucun résultat de classificateur |
| 28 | detectorClass | int | Index de classe de la sortie du pipeline de détection actuel. -1 si aucun résultat de détecteur |
| 29 | réservé | int | |
| 30,31 | python[0] | float32 | Tableau de sortie Python personnalisé [0] |
| 32,33 | python[1] | float32 | Tableau de sortie Python personnalisé [1] |
| 34,35 | python[2] | float32 | Tableau de sortie Python personnalisé [2] |
| 36,37 | python[3] | float32 | Tableau de sortie Python personnalisé [3] |
| 38,39 | python[4] | float32 | Tableau de sortie Python personnalisé [4] |
| 40,41 | python[5] | float32 | Tableau de sortie Python personnalisé [5] |
| 42,43 | python[6] | float32 | Tableau de sortie Python personnalisé [6] |
| 44,45 | python[7] | float32 | Tableau de sortie Python personnalisé [7] |
Registres de maintien / Écriture seule
| Registre | Clé | Type | Description |
|---|---|---|---|
| 0 | unlocked | int | Déverrouille le pipeline. Définir sur 1 pour activer le changement de pipeline et les données d'entrée personnalisées |
| 1 | pipeIndex | int | Définit l'index du pipeline si "unlocked" est défini sur 1 |
| 2 | outputMode | int | Définit le mode de sortie. 0 - standard, 1 - rawtargets (en cours de développement) |
| 3 | réservé | int | |
| 4 | réservé | int | |
| 5 | réservé | int | |
| 6 | réservé | int | |
| 7 | réservé | int | |
| 8 | pythonInput[0] | int | Tableau d'entrée Python personnalisé [0] |
| 9 | pythonInput[1] | int | Tableau d'entrée Python personnalisé [1] |
| 10 | pythonInput[2] | int | Tableau d'entrée Python personnalisé [2] |
| 11 | pythonInput[3] | int | Tableau d'entrée Python personnalisé [3] |
| 12 | pythonInput[4] | int | Tableau d'entrée Python personnalisé [4] |
| 13 | pythonInput[5] | int | Tableau d'entrée Python personnalisé [5] |
| 14 | pythonInput[6] | int | Tableau d'entrée Python personnalisé [6] |
| 15 | pythonInput[7] | int | Tableau d'entrée Python personnalisé [7] |
| 16,17 | pythonInput[8] | float32 | Tableau d'entrée Python personnalisé [8] |
| 18,19 | pythonInput[9] | float32 | Tableau d'entrée Python personnalisé [9] |
| 20,21 | pythonInput[10] | float32 | Tableau d'entrée Python personnalisé [10] |
| 22,23 | pythonInput[11] | float32 | Tableau d'entrée Python personnalisé [11] |
| 24,25 | pythonInput[12] | float32 | Tableau d'entrée Python personnalisé [12] |
| 26,27 | pythonInput[13] | float32 | Tableau d'entrée Python personnalisé [13] |
| 28,29 | pythonInput[14] | float32 | Tableau d'entrée Python personnalisé [14] |
| 30,31 | pythonInput[15] | float32 | Tableau d'entrée Python personnalisé [15] |