Skip to content

File syn_modbus_master.h

FileList > proto > syn_modbus_master.h

Go to the source code of this file

Non-blocking Modbus RTU Master / Client protocol engine.

  • #include "../common/syn_defs.h"
  • #include "syn_modbus.h"

Classes

Type Name
struct SYN_ModbusMaster
Modbus Master instance configuration & transaction state.
struct SYN_ModbusMasterQuery
struct SYN_ModbusMasterQueue

Public Types

Type Name
typedef void(* SYN_ModbusMasterCallback
enum SYN_ModbusMaster_State
Modbus Master transaction state.

Public Functions

Type Name
void syn_modbus_master_feed (SYN_ModbusMaster * m, uint8_t byte)
Feed a received byte into the Master RX stream buffer.
void syn_modbus_master_init (SYN_ModbusMaster * m, uint32_t timeout_ms)
Initialize a Modbus Master instance.
SYN_Status syn_modbus_master_mask_write_register (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t reg_addr, uint16_t and_mask, uint16_t or_mask)
Issue a Mask Write Register (FC 0x16) request.
SYN_ModbusMaster_State syn_modbus_master_process (SYN_ModbusMaster * m, uint32_t current_tick_ms)
Non-blocking state machine processor.
void syn_modbus_master_queue_init (SYN_ModbusMasterQueue * q, uint8_t max_retries)
Initialize a Modbus Master transaction queue.
SYN_Status syn_modbus_master_queue_push (SYN_ModbusMasterQueue * q, const SYN_ModbusMasterQuery * query)
Push a query request into the transaction queue.
SYN_Status syn_modbus_master_queue_step (SYN_ModbusMaster * m, SYN_ModbusMasterQueue * q, uint32_t now_ms)
Process queue advancement and dispatch active queries to Master.
SYN_Status syn_modbus_master_read_coils (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count)
Issue a Read Coils (FC 0x01) request.
SYN_Status syn_modbus_master_read_discrete_inputs (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count)
Issue a Read Discrete Inputs (FC 0x02) request.
SYN_Status syn_modbus_master_read_fifo_queue (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t fifo_addr)
Issue a Read FIFO Queue (FC 0x18) request.
SYN_Status syn_modbus_master_read_holding (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count)
Issue a Read Holding Registers (FC 0x03) request.
SYN_Status syn_modbus_master_read_input (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count)
Issue a Read Input Registers (FC 0x04) request.
SYN_Status syn_modbus_master_report_server_id (SYN_ModbusMaster * m, uint8_t slave_addr)
Issue a Report Server ID (FC 0x11) request.
SYN_Status syn_modbus_master_write_multiple (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count, const uint16_t * values)
Issue a Write Multiple Registers (FC 0x10) request.
SYN_Status syn_modbus_master_write_multiple_coils (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t start_addr, uint16_t count, const uint8_t * coil_bytes)
Issue a Write Multiple Coils (FC 0x0F) request.
SYN_Status syn_modbus_master_write_single (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t reg_addr, uint16_t value)
Issue a Write Single Register (FC 0x06) request.
SYN_Status syn_modbus_master_write_single_coil (SYN_ModbusMaster * m, uint8_t slave_addr, uint16_t coil_addr, bool state)
Issue a Write Single Coil (FC 0x05) request.

Macros

Type Name
define SYN_MODBUS_QUEUE_SIZE 16

Public Types Documentation

typedef SYN_ModbusMasterCallback

typedef void(* SYN_ModbusMasterCallback) (uint8_t slave_addr, uint8_t func_code, const uint16_t *data, uint16_t count, SYN_Status status, void *user_ctx);

enum SYN_ModbusMaster_State

Modbus Master transaction state.

enum SYN_ModbusMaster_State {
    SYN_MB_MASTER_STATE_IDLE = 0,
    SYN_MB_MASTER_STATE_WAITING_RESPONSE,
    SYN_MB_MASTER_STATE_COMPLETE,
    SYN_MB_MASTER_STATE_TIMEOUT,
    SYN_MB_MASTER_STATE_ERROR
};


Public Functions Documentation

function syn_modbus_master_feed

Feed a received byte into the Master RX stream buffer.

void syn_modbus_master_feed (
    SYN_ModbusMaster * m,
    uint8_t byte
) 

Parameters:

  • m Master instance.
  • byte Received byte.

function syn_modbus_master_init

Initialize a Modbus Master instance.

void syn_modbus_master_init (
    SYN_ModbusMaster * m,
    uint32_t timeout_ms
) 

Parameters:

  • m Master instance.
  • timeout_ms Response timeout in milliseconds (e.g. 500 ms).

function syn_modbus_master_mask_write_register

Issue a Mask Write Register (FC 0x16) request.

SYN_Status syn_modbus_master_mask_write_register (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t reg_addr,
    uint16_t and_mask,
    uint16_t or_mask
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • reg_addr Register address.
  • and_mask AND mask.
  • or_mask OR mask.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_process

Non-blocking state machine processor.

SYN_ModbusMaster_State syn_modbus_master_process (
    SYN_ModbusMaster * m,
    uint32_t current_tick_ms
) 

Parameters:

  • m Master instance.
  • current_tick_ms Current system tick in milliseconds.

Returns:

Current Master state.


function syn_modbus_master_queue_init

Initialize a Modbus Master transaction queue.

void syn_modbus_master_queue_init (
    SYN_ModbusMasterQueue * q,
    uint8_t max_retries
) 

Parameters:

  • q Pointer to queue handle.
  • max_retries Number of retry attempts on timeout (e.g. 2).

function syn_modbus_master_queue_push

Push a query request into the transaction queue.

SYN_Status syn_modbus_master_queue_push (
    SYN_ModbusMasterQueue * q,
    const SYN_ModbusMasterQuery * query
) 

Parameters:

  • q Pointer to queue.
  • query Pointer to query parameters.

Returns:

SYN_OK on success, SYN_ERROR if queue is full.


function syn_modbus_master_queue_step

Process queue advancement and dispatch active queries to Master.

SYN_Status syn_modbus_master_queue_step (
    SYN_ModbusMaster * m,
    SYN_ModbusMasterQueue * q,
    uint32_t now_ms
) 

Parameters:

  • m Master handle.
  • q Queue handle.
  • now_ms Current system tick in milliseconds.

Returns:

SYN_OK on normal operation.


function syn_modbus_master_read_coils

Issue a Read Coils (FC 0x01) request.

SYN_Status syn_modbus_master_read_coils (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting coil address.
  • count Number of coils to read (1–2000).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_read_discrete_inputs

Issue a Read Discrete Inputs (FC 0x02) request.

SYN_Status syn_modbus_master_read_discrete_inputs (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting input address.
  • count Number of inputs to read (1–2000).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_read_fifo_queue

Issue a Read FIFO Queue (FC 0x18) request.

SYN_Status syn_modbus_master_read_fifo_queue (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t fifo_addr
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • fifo_addr FIFO register address.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_read_holding

Issue a Read Holding Registers (FC 0x03) request.

SYN_Status syn_modbus_master_read_holding (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting register address.
  • count Number of registers to read (1–125).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_read_input

Issue a Read Input Registers (FC 0x04) request.

SYN_Status syn_modbus_master_read_input (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting register address.
  • count Number of registers to read (1–125).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_report_server_id

Issue a Report Server ID (FC 0x11) request.

SYN_Status syn_modbus_master_report_server_id (
    SYN_ModbusMaster * m,
    uint8_t slave_addr
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_write_multiple

Issue a Write Multiple Registers (FC 0x10) request.

SYN_Status syn_modbus_master_write_multiple (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count,
    const uint16_t * values
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting register address.
  • count Number of registers (1–121).
  • values Array of register values to write.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_write_multiple_coils

Issue a Write Multiple Coils (FC 0x0F) request.

SYN_Status syn_modbus_master_write_multiple_coils (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t start_addr,
    uint16_t count,
    const uint8_t * coil_bytes
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • start_addr Starting coil address.
  • count Number of coils (1–1968).
  • coil_bytes Packed byte array containing coil states.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_write_single

Issue a Write Single Register (FC 0x06) request.

SYN_Status syn_modbus_master_write_single (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t reg_addr,
    uint16_t value
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • reg_addr Register address.
  • value Value to write.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function syn_modbus_master_write_single_coil

Issue a Write Single Coil (FC 0x05) request.

SYN_Status syn_modbus_master_write_single_coil (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint16_t coil_addr,
    bool state
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address (1–247).
  • coil_addr Coil address.
  • state Coil state (true = ON / 0xFF00, false = OFF / 0x0000).

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


Macro Definition Documentation

define SYN_MODBUS_QUEUE_SIZE

#define SYN_MODBUS_QUEUE_SIZE `16`


The documentation for this class was generated from the following file src/syntropic/proto/syn_modbus_master.h