Saltar al contenido principal

API de Modbus

Limelight OS incluye un servidor Modbus TCP ejecutándose en (dirección_ip):502

  • Enteros: Los enteros son CON SIGNO y están codificados usando complemento a dos. Este método es universalmente reconocido y asegura una correcta interpretación del signo.

  • Números de Punto Flotante: Los flotantes están codificados usando el estándar IEEE 754. Para cumplir con la limitación de registros de 16 bits del protocolo Modbus, los números de punto flotante se dividen en dos partes:

    • Los 16 bits de orden superior se almacenan en el segundo registro, y los 16 bits de orden inferior en el primer registro.
    • El formato little-endian asegura la compatibilidad con la especificación Modbus.

Los Limelights USB y Ethernet pueden ser probados con ModbusTool

Modbus permite el soporte para casos de uso de inspección de piezas y automatización industrial. Para comenzar con Modbus, necesitas hacer lo siguiente:

  1. Conectarte a tu Limelight vía Ethernet o USB-C y configurar un pipeline.

    • Aunque todos los pipelines enviarán resultados a través de modbus, nuestros pipelines de snapscript en python son extremadamente versátiles para casos de uso industrial ya que soportan datos de entrada y salida personalizados.
  2. Asignar una dirección IP estática a tu Limelight

  3. Conectar tu Limelight a una red modbus.

Especificación de Registros Modbus

Registros de Entrada / Solo Lectura

RegistroClaveTipoDescripción
0hbintValor de latido. Aumenta una vez por frame
1pipelineIndexintÍndice del pipeline activo actual (0 .. 9).
2validTargetint1 si existe un objetivo válido, 0 en caso contrario.
3resultsCountintConteo total de resultados. Incluye todas las detecciones fiduciales, detecciones neurales, etc
4IDintID / Número de Equipo
5modbusModeintModo de Salida del Servidor Modbus.
6cpuTempintTemperatura de CPU en Celsius.
7cpuUsageintPorcentaje de uso de CPU.
8ramUsageintPorcentaje de uso de RAM.
9currentFPSintFrames por segundo actuales.
10captureLatencyintLatencia de captura. (milisegundos)
11targetLatencyintLatencia de procesamiento. (milisegundos)
12-15reservadoint

Si el Modo de Salida está configurado a 0:

RegistroClaveTipoDescripción
16,17txfloat32Desplazamiento angular horizontal al objetivo en grados
18,19tyfloat32Desplazamiento angular vertical al objetivo en grados
20,21txncfloat32Desplazamiento angular horizontal al objetivo (relativo al píxel principal) en grados
22,23tyncfloat32Desplazamiento angular vertical al objetivo (relativo al píxel principal) en grados
24,25tafloat32 (0-1)Área del objetivo como porcentaje del tamaño de la imagen
26fiducialIDintID actual del AprilTag
27classifierClassintÍndice de clase de la salida actual del pipeline clasificador. -1 si no hay resultados del Clasificador
28detectorClassintÍndice de clase de la salida actual del pipeline detector. -1 si no hay resultados del Detector
29reservadoint
30,31python[0]float32Array de salida personalizado de python [0]
32,33python[1]float32Array de salida personalizado de python [1]
34,35python[2]float32Array de salida personalizado de python [2]
36,37python[3]float32Array de salida personalizado de python [3]
38,39python[4]float32Array de salida personalizado de python [4]
40,41python[5]float32Array de salida personalizado de python [5]
42,43python[6]float32Array de salida personalizado de python [6]
44,45python[7]float32Array de salida personalizado de python [7]

Registros de Retención / Solo Escritura

RegistroClaveTipoDescripción
0unlockedintDesbloquea el pipeline. Establecer a 1 para habilitar el cambio de pipeline y datos de entrada personalizados
1pipeIndexintEstablece el índice del pipeline si "unlocked" está configurado a 1
2outputModeintEstablece el modo de salida. 0 - estándar, 1 - objetivos crudos (En desarrollo)
3reservadoint
4reservadoint
5reservadoint
6reservadoint
7reservadoint
8pythonInput[0]intArray de entrada personalizado de python [0]
9pythonInput[1]intArray de entrada personalizado de python [1]
10pythonInput[2]intArray de entrada personalizado de python [2]
11pythonInput[3]intArray de entrada personalizado de python [3]
12pythonInput[4]intArray de entrada personalizado de python [4]
13pythonInput[5]intArray de entrada personalizado de python [5]
14pythonInput[6]intArray de entrada personalizado de python [6]
15pythonInput[7]intArray de entrada personalizado de python [7]
16,17pythonInput[8]float32Array de entrada personalizado de python [8]
18,19pythonInput[9]float32Array de entrada personalizado de python [9]
20,21pythonInput[10]float32Array de entrada personalizado de python [10]
22,23pythonInput[11]float32Array de entrada personalizado de python [11]
24,25pythonInput[12]float32Array de entrada personalizado de python [12]
26,27pythonInput[13]float32Array de entrada personalizado de python [13]
28,29pythonInput[14]float32Array de entrada personalizado de python [14]
30,31pythonInput[15]float32Array de entrada personalizado de python [15]