Skip to content

File syn_modbus_master.c

FileList > proto > syn_modbus_master.c

Go to the source code of this file

Non-blocking Modbus RTU Master protocol implementation.

  • #include "syn_modbus_master.h"
  • #include "../util/syn_assert.h"
  • #include "../util/syn_crc.h"
  • #include "../util/syn_pack.h"
  • #include <string.h>

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.

Public Static Functions

Type Name
uint16_t read_u16_be (const uint8_t * p)
SYN_Status send_request (SYN_ModbusMaster * m, uint8_t slave_addr, uint8_t fc, uint16_t addr, uint16_t count, const uint16_t * write_vals)
Internal request dispatch helper.
void write_u16_be (uint8_t * p, uint16_t val)

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.


Public Static Functions Documentation

function read_u16_be

static inline uint16_t read_u16_be (
    const uint8_t * p
) 

function send_request

Internal request dispatch helper.

static SYN_Status send_request (
    SYN_ModbusMaster * m,
    uint8_t slave_addr,
    uint8_t fc,
    uint16_t addr,
    uint16_t count,
    const uint16_t * write_vals
) 

Parameters:

  • m Master instance.
  • slave_addr Target slave address.
  • fc Function code.
  • addr Register address.
  • count Quantity / write value.
  • write_vals Optional array of write values for FC 0x10.

Returns:

SYN_OK on success, SYN_BUSY if transaction in progress.


function write_u16_be

static inline void write_u16_be (
    uint8_t * p,
    uint16_t val
) 


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