Classes | |
| struct | ModbusSensorParam |
| Define los parámetros de configuración de un sensor individual. More... | |
| struct | ModbusSlaveParam |
| Vector global que almacena la configuración y estado de todos los esclavos Modbus descubiertos. More... | |
| struct | ModbusRequestInfo |
| Contexto de una solicitud Modbus en vuelo. More... | |
| struct | ResponseFormat |
| Estructura intermedia para pasar datos desde el callback Modbus a las tareas. More... | |
| struct | SensorSchedule |
| Elemento de planificación para el muestreo de sensores. More... | |
Macros | |
| #define | RX_PIN 13 |
| < Utilidades de memoria (memcpy). | |
| #define | TX_PIN 12 |
| Pin de transmisión UART para RS485. | |
| #define | MAX_MODBUS_RESPONSE_LENGTH 256 |
| Longitud máxima esperada para una respuesta Modbus. | |
Enumerations | |
| enum | DiscoveryOrder { DISCOVERY_GET_COUNT = 1 , DISCOVERY_GET_DATA_OFFSET = 255 , DISCOVERY_READ_SENSOR_PARAM = 8 } |
| Comandos especiales utilizados durante la fase de descubrimiento de sensores. More... | |
| enum | RequestType { REQUEST_UNKNOWN , REQUEST_DISCOVERY , REQUEST_SAMPLING } |
| Clasificación del propósito de una solicitud Modbus. More... | |
Functions | |
| void | addRequest (uint32_t token, uint8_t slaveId, uint8_t sensorId, uint8_t functionCode, RequestType type) |
| Registra una nueva solicitud en el buffer circular. | |
| ModbusRequestInfo * | findRequestByToken (uint32_t token) |
| Busca una solicitud pendiente por su token. | |
| void | initScheduler () |
| Inicializa o actualiza la lista de planificación (Scheduler). | |
| void | handleData (ModbusMessage response, uint32_t token) |
| Callback ejecutado al recibir datos Modbus válidos. | |
| void | handleError (Error error, uint32_t token) |
| Callback ejecutado al ocurrir un error Modbus. | |
| bool | discoverDeviceSensors (uint8_t deviceId) |
| Inicia el proceso de descubrimiento para un dispositivo específico. | |
| void | initialDiscoveryTask (void *pvParameters) |
| Tarea de un solo uso para el descubrimiento inicial de sensores. | |
| void | DataRequestScheduler (void *pvParameters) |
| Tarea principal del Planificador (Scheduler). | |
| bool | getSensorParams (uint8_t slaveId, uint8_t sensorID, uint16_t &startAddr, uint16_t &numRegs) |
| Obtiene los parámetros de configuración de un sensor específico. | |
| uint8_t | getRegistersPerChannel (uint8_t slaveId, uint8_t sensorID) |
| Calcula el número de registros por canal para un sensor. | |
| void | parseAndStoreDiscoveryResponse (const ResponseFormat &response, uint8_t slaveId) |
| Parsea la respuesta de descubrimiento y actualiza la lista de esclavos. | |
| void | EventManager (void *pvParameters) |
| Tarea Gestor de Eventos. | |
Este módulo implementa el cliente Modbus RTU (ESP32/TTGO) y el flujo completo de:
Resumen del flujo:
1) Arranque Modbus
2) Descubrimiento
3) Muestreo periódico
4) Errores Modbus
Advertencias y buenas prácticas:
| #define RX_PIN 13 |
< Utilidades de memoria (memcpy).
< Necesario para definiciones de tipos enteros de tamaño fijo (uint8_t, etc). < Estructura de datos para mapeo de sensores. < Utilizado para la generación de timestamps UNIX.
Pin de recepción UART para RS485.
| enum DiscoveryOrder |
| enum RequestType |
| void addRequest | ( | uint32_t | token, |
| uint8_t | slaveId, | ||
| uint8_t | sensorId, | ||
| uint8_t | functionCode, | ||
| RequestType | type ) |
Registra una nueva solicitud en el buffer circular.
| token | Identificador único. |
| slaveId | ID del esclavo. |
| sensorId | ID del sensor. |
| functionCode | Función Modbus. |
| type | Tipo de solicitud. |
| void DataRequestScheduler | ( | void * | pvParameters | ) |
Tarea principal del Planificador (Scheduler).
Revisa periódicamente qué sensores deben ser muestreados y genera eventos para el EventManager.
| bool discoverDeviceSensors | ( | uint8_t | deviceId | ) |
Inicia el proceso de descubrimiento para un dispositivo específico.
| deviceId | ID Modbus del dispositivo a consultar. |
| void EventManager | ( | void * | pvParameters | ) |
Tarea Gestor de Eventos.
Centraliza las peticiones de las colas (Scheduler y Peripheral) y las convierte en transacciones Modbus reales.
| ModbusRequestInfo * findRequestByToken | ( | uint32_t | token | ) |
Busca una solicitud pendiente por su token.
| token | Token a buscar. |
| uint8_t getRegistersPerChannel | ( | uint8_t | slaveId, |
| uint8_t | sensorID ) |
Calcula el número de registros por canal para un sensor.
| bool getSensorParams | ( | uint8_t | slaveId, |
| uint8_t | sensorID, | ||
| uint16_t & | startAddr, | ||
| uint16_t & | numRegs ) |
Obtiene los parámetros de configuración de un sensor específico.
| slaveId | ID del esclavo. |
| sensorID | ID del sensor. |
| startAddr | Referencia para devolver la dirección de inicio. |
| numRegs | Referencia para devolver el número de registros. |
| void handleData | ( | ModbusMessage | response, |
| uint32_t | token ) |
Callback ejecutado al recibir datos Modbus válidos.
| response | Objeto con la respuesta cruda. |
| token | Token de la solicitud original. |
| void handleError | ( | Error | error, |
| uint32_t | token ) |
Callback ejecutado al ocurrir un error Modbus.
Gestiona la lógica de reintentos y eliminación de esclavos inactivos (Timeout).
| error | Código de error. |
| token | Token de la solicitud fallida. |
| void initialDiscoveryTask | ( | void * | pvParameters | ) |
Tarea de un solo uso para el descubrimiento inicial de sensores.
Itera sobre dispositivosAConsultar, lanza el descubrimiento y luego se autoelimina.
| void initScheduler | ( | ) |
Inicializa o actualiza la lista de planificación (Scheduler).
Recorre slaveList, calcula los intervalos efectivos basados en canales y registros, y puebla scheduleList. Es thread-safe mediante schedulerMutex.
| void parseAndStoreDiscoveryResponse | ( | const ResponseFormat & | response, |
| uint8_t | slaveId ) |
Parsea la respuesta de descubrimiento y actualiza la lista de esclavos.
Decodifica los 8 registros de parámetros y crea o actualiza la entrada en slaveList.
| response | Datos crudos recibidos. |
| slaveId | ID del esclavo que respondió. |