Modbus RTU - Multi Devices

This commit is contained in:
2026-04-14 15:19:00 -05:00
commit fe8acfbc2c
1482 changed files with 182833 additions and 0 deletions

63
main/modbus_rtu.h Normal file
View File

@@ -0,0 +1,63 @@
#ifndef MODBUS_RTU_H
#define MODBUS_RTU_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include "driver/uart.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "modbus_memory.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MODBUS_RTU_MAX_ADU_LEN 256
#define MODBUS_RTU_MAX_DEVICES 16
typedef struct
{
uint8_t unit_id;
modbus_memory_t *mem;
const char *name;
} modbus_rtu_device_t;
typedef struct
{
uart_port_t uart_num;
uint32_t baud_rate;
uint8_t unit_count;
modbus_rtu_device_t devices[MODBUS_RTU_MAX_DEVICES];
} modbus_rtu_ctx_t;
void modbus_rtu_init(modbus_rtu_ctx_t *ctx, uart_port_t uart_num, uint32_t baud_rate);
bool modbus_rtu_add_device(modbus_rtu_ctx_t *ctx,
uint8_t unit_id,
modbus_memory_t *mem,
const char *name);
modbus_rtu_device_t *modbus_rtu_find_device(modbus_rtu_ctx_t *ctx, uint8_t unit_id);
int modbus_rtu_read_frame(modbus_rtu_ctx_t *ctx,
uint8_t *buf,
size_t buf_size,
TickType_t first_byte_timeout);
bool modbus_rtu_process_request(modbus_rtu_ctx_t *ctx,
const uint8_t *req,
size_t req_len,
uint8_t *resp,
size_t resp_size,
size_t *resp_len);
uint16_t modbus_rtu_crc16(const uint8_t *data, size_t len);
#ifdef __cplusplus
}
#endif
#endif /* MODBUS_RTU_H */