MODBUS SLAVE MONITOR 1.0
Loading...
Searching...
No Matches
Monitor Esclavo Modbus RTU con Sensor RMS

Resumen

Firmware para dispositivo esclavo Modbus RTU sobre ESP32 con ADC ADS1015, calcula valores RMS en tiempo real mediante FIFOs circulares, mantiene historial de mediciones y responde a consultas Modbus RTU sobre RS485 dentro de un entorno FreeRTOS.

Dependencias

  • FreeRTOS: tareas, colas, semáforos y sincronización.
  • Arduino core ESP32 + Wire/I2C + ModbusServerRTU.
  • Adafruit_ADS1X15 para comunicación con ADC.
  • PlatformIO como toolchain recomendada.

Grupos

Flujo general

  1. Arranque: setup() inicializa Serial/I2C, ADS1015, ModbusServerRTU, colas y tareas.
  2. Configuración ADC: establece ganancia, velocidad de muestreo y modo de interrupción del ADS1015.
  3. Adquisición: task_adquisicion gestiona conversiones round-robin entre canales usando interrupciones; encola muestras en queue_adc_samples.
  4. Procesamiento: task_procesamiento consume muestras, actualiza FIFOs circulares con sumas acumulativas y calcula RMS periódicamente usando algoritmos incrementales.
  5. Historial: valores RMS se almacenan en buffers circulares thread-safe protegidos por rms_history_mutex.
  6. Actualización Modbus: dataUpdateTask extrae datos del historial, aplica factor de conversión y actualiza holdingRegisters.
  7. Respuestas Modbus: readHoldingRegistersWorker maneja peticiones de lectura para parámetros de configuración (registros 0-7) y datos RMS (registros 10+).
  8. Depuración: loop() muestra valores RMS periódicamente para verificación del sistema.

Colas y sincronización

Interfaz Modbus

  • Registros 0-7: parámetros de configuración del sensor (sensorID, numberOfChannels, startAddress, etc.).
  • Registros 10+: datos RMS históricos organizados por canal con factor de conversión aplicado.
  • Función 03: lectura de holding registers con validación de direcciones y manejo de errores.
  • Descubrimiento: responde con estructura SensorData para identificación automática por maestros.

Algoritmo RMS

  • FIFO circular: buffer de 320 muestras con sumas acumulativas para eficiencia.
  • Cálculo incremental: media y varianza calculadas sin recorrer todo el buffer.
  • Actualización periódica: valores RMS calculados cada 1000ms.
  • Thread-safe: acceso protegido mediante semáforos para concurrencia segura.