Modbus TCP - Multi Devices
This commit is contained in:
131
main/modbus_memory.h
Normal file
131
main/modbus_memory.h
Normal file
@@ -0,0 +1,131 @@
|
||||
#ifndef MODBUS_MEMORY_H
|
||||
#define MODBUS_MEMORY_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
typedef enum
|
||||
{
|
||||
MB_MEM_COIL = 0,
|
||||
MB_MEM_DISCRETE_INPUT,
|
||||
MB_MEM_INPUT_REGISTER,
|
||||
MB_MEM_HOLDING_REGISTER
|
||||
} modbus_mem_type_t;
|
||||
|
||||
typedef struct modbus_db modbus_db_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
modbus_db_t *db;
|
||||
} modbus_memory_t;
|
||||
|
||||
/* ---------------------------------------------------- */
|
||||
/* Init / deinit */
|
||||
/* ---------------------------------------------------- */
|
||||
|
||||
bool modbus_memory_init(modbus_memory_t *mem, modbus_db_t *db);
|
||||
void modbus_memory_deinit(modbus_memory_t *mem);
|
||||
|
||||
/* Clear all runtime point values back to 0 */
|
||||
void modbus_memory_reset(modbus_memory_t *mem);
|
||||
|
||||
/* ---------------------------------------------------- */
|
||||
/* Single-point access helpers */
|
||||
/* ---------------------------------------------------- */
|
||||
|
||||
bool modbus_memory_read_coil(modbus_memory_t *mem, uint16_t offset, uint8_t *value);
|
||||
bool modbus_memory_write_coil(modbus_memory_t *mem, uint16_t offset, uint8_t value);
|
||||
|
||||
bool modbus_memory_read_discrete_input(modbus_memory_t *mem, uint16_t offset, uint8_t *value);
|
||||
bool modbus_memory_write_discrete_input(modbus_memory_t *mem, uint16_t offset, uint8_t value);
|
||||
|
||||
bool modbus_memory_read_input_register(modbus_memory_t *mem, uint16_t offset, uint16_t *value);
|
||||
bool modbus_memory_write_input_register(modbus_memory_t *mem, uint16_t offset, uint16_t value);
|
||||
|
||||
bool modbus_memory_read_holding_register(modbus_memory_t *mem, uint16_t offset, uint16_t *value);
|
||||
bool modbus_memory_write_holding_register(modbus_memory_t *mem, uint16_t offset, uint16_t value);
|
||||
|
||||
/* ---------------------------------------------------- */
|
||||
/* Generic access helpers */
|
||||
/* ---------------------------------------------------- */
|
||||
|
||||
bool modbus_memory_read_bit(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t offset,
|
||||
uint8_t *value);
|
||||
|
||||
bool modbus_memory_write_bit(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t offset,
|
||||
uint8_t value);
|
||||
|
||||
bool modbus_memory_read_reg(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t offset,
|
||||
uint16_t *value);
|
||||
|
||||
bool modbus_memory_write_reg(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t offset,
|
||||
uint16_t value);
|
||||
|
||||
/* ---------------------------------------------------- */
|
||||
/* Multi-point access helpers */
|
||||
/* ---------------------------------------------------- */
|
||||
|
||||
bool modbus_memory_read_coils(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
uint8_t *dest);
|
||||
|
||||
bool modbus_memory_write_coils(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
const uint8_t *src);
|
||||
|
||||
bool modbus_memory_read_discrete_inputs(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
uint8_t *dest);
|
||||
|
||||
bool modbus_memory_write_discrete_inputs(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
const uint8_t *src);
|
||||
|
||||
bool modbus_memory_read_input_registers(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
uint16_t *dest);
|
||||
|
||||
bool modbus_memory_write_input_registers(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
const uint16_t *src);
|
||||
|
||||
bool modbus_memory_read_holding_registers(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
uint16_t *dest);
|
||||
|
||||
bool modbus_memory_write_holding_registers(modbus_memory_t *mem,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity,
|
||||
const uint16_t *src);
|
||||
|
||||
/* ---------------------------------------------------- */
|
||||
/* Utility helpers */
|
||||
/* ---------------------------------------------------- */
|
||||
|
||||
bool modbus_memory_valid_bit_range(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity);
|
||||
|
||||
bool modbus_memory_valid_reg_range(modbus_memory_t *mem,
|
||||
modbus_mem_type_t type,
|
||||
uint16_t start_offset,
|
||||
uint16_t quantity);
|
||||
|
||||
#endif /* MODBUS_MEMORY_H */
|
||||
Reference in New Issue
Block a user