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.
Parameters:
mMaster instance.byteReceived byte.
function syn_modbus_master_init¶
Initialize a Modbus Master instance.
Parameters:
mMaster instance.timeout_msResponse 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:
mMaster instance.slave_addrTarget slave address (1–247).reg_addrRegister address.and_maskAND mask.or_maskOR mask.
Returns:
SYN_OK on success, SYN_BUSY if transaction in progress.
function syn_modbus_master_process¶
Non-blocking state machine processor.
Parameters:
mMaster instance.current_tick_msCurrent system tick in milliseconds.
Returns:
Current Master state.
function syn_modbus_master_queue_init¶
Initialize a Modbus Master transaction queue.
Parameters:
qPointer to queue handle.max_retriesNumber 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:
qPointer to queue.queryPointer 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:
mMaster handle.qQueue handle.now_msCurrent 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting coil address.countNumber 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting input address.countNumber 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:
mMaster instance.slave_addrTarget slave address (1–247).fifo_addrFIFO 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting register address.countNumber 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting register address.countNumber 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.
Parameters:
mMaster instance.slave_addrTarget 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting register address.countNumber of registers (1–121).valuesArray 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:
mMaster instance.slave_addrTarget slave address (1–247).start_addrStarting coil address.countNumber of coils (1–1968).coil_bytesPacked 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:
mMaster instance.slave_addrTarget slave address (1–247).reg_addrRegister address.valueValue 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:
mMaster instance.slave_addrTarget slave address (1–247).coil_addrCoil address.stateCoil 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¶
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:
mMaster instance.slave_addrTarget slave address.fcFunction code.addrRegister address.countQuantity / write value.write_valsOptional array of write values for FC 0x10.
Returns:
SYN_OK on success, SYN_BUSY if transaction in progress.
function write_u16_be¶
The documentation for this class was generated from the following file src/syntropic/proto/syn_modbus_master.c