liblightmodbus 3.0
A lightweight, header-only, hardware-agnostic Modbus RTU/TCP library
Loading...
Searching...
No Matches
slave.impl.h File Reference

Slave's types and basic functions (implementation) More...

#include "slave.h"
#include "slave_func.h"
+ Include dependency graph for slave.impl.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

 ModbusErrorInfomodbusSlaveInit (ModbusSlave *status, ModbusRegisterCallback registerCallback, ModbusSlaveExceptionCallback exceptionCallback, ModbusAllocator allocator, const ModbusSlaveFunctionHandler *functions, uint8_t functionCount)
 Initializes slave device.
 
void modbusSlaveDestroy (ModbusSlave *status)
 Frees memory allocated in the ModbusSlave struct.
 
 ModbusErrorInfomodbusBuildException (ModbusSlave *status, uint8_t function, ModbusExceptionCode code)
 Builds an exception response frame.
 
 ModbusErrorInfomodbusBuildExceptionPDU (ModbusSlave *status, uint8_t function, ModbusExceptionCode code)
 Builds an exception PDU.
 
 ModbusErrorInfomodbusBuildExceptionRTU (ModbusSlave *status, uint8_t address, uint8_t function, ModbusExceptionCode code)
 Builds a Modbus RTU exception.
 
 ModbusErrorInfomodbusBuildExceptionTCP (ModbusSlave *status, uint16_t transactionID, uint8_t unitID, uint8_t function, ModbusExceptionCode code)
 Builds a Modbus TCP exception.
 
 ModbusErrorInfomodbusParseRequest (ModbusSlave *status, const uint8_t *request, uint8_t requestLength)
 Parses provided PDU and generates response honorinng pduOffset and padding set in ModbusSlave during response generation.
 
 ModbusErrorInfomodbusParseRequestPDU (ModbusSlave *status, const uint8_t *request, uint8_t requestLength)
 Parses provided PDU and generates PDU for the response frame.
 
 ModbusErrorInfomodbusParseRequestRTU (ModbusSlave *status, uint8_t slaveAddress, const uint8_t *request, uint16_t requestLength)
 Parses provided Modbus RTU request frame and generates a Modbus RTU response.
 
 ModbusErrorInfomodbusParseRequestTCP (ModbusSlave *status, const uint8_t *request, uint16_t requestLength)
 Parses provided Modbus TCP request frame and generates a Modbus TCP response.
 

Variables

ModbusSlaveFunctionHandler modbusSlaveDefaultFunctions []
 Associates function IDs with pointers to functions responsible for parsing. Length of this array is stored in modbusSlaveDefaultFunctionCount.
 
const uint8_t modbusSlaveDefaultFunctionCount = sizeof(modbusSlaveDefaultFunctions) / sizeof(modbusSlaveDefaultFunctions[0]) - 1
 Stores length of modbusSlaveDefaultFunctions.
 

Detailed Description

Slave's types and basic functions (implementation)

Function Documentation

◆ ModbusErrorInfomodbusBuildException()

ModbusErrorInfomodbusBuildException ( ModbusSlave * status,
uint8_t function,
ModbusExceptionCode code )

Builds an exception response frame.

Parameters
functionfunction that reported the exception
codeModbus exception code
Returns
MODBUS_GENERAL_ERROR(ALLOC) on memory allocation failure
MODBUS_NO_ERROR() on success
Note
If set, exceptionCallback from ModbusSlave is called, even if the response frame is going to be discarded (when the request was broadcast).
Warning
This function expects ModbusSlave::response::pduOffset and ModbusSlave::response::padding to be set properly! If you're looking for a function to manually build an exception please use modbusBuildExceptionPDU(), modbusBuildExceptionRTU() or modbusBuildExceptionTCP()
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusBuildExceptionPDU()

ModbusErrorInfomodbusBuildExceptionPDU ( ModbusSlave * status,
uint8_t function,
ModbusExceptionCode code )

Builds an exception PDU.

Parameters
functionfunction that reported the exception
codeModbus exception code
Returns
MODBUS_GENERAL_ERROR(ALLOC) on memory allocation failure
MODBUS_NO_ERROR() on success
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusBuildExceptionRTU()

ModbusErrorInfomodbusBuildExceptionRTU ( ModbusSlave * status,
uint8_t address,
uint8_t function,
ModbusExceptionCode code )

Builds a Modbus RTU exception.

Parameters
addressslave address to be reported in the excetion
functionfunction that reported the exception
codeModbus exception code
Returns
MODBUS_GENERAL_ERROR(ADDRESS) if address is 0
MODBUS_GENERAL_ERROR(ALLOC) on memory allocation failure
MODBUS_GENERAL_ERROR(LENGTH) if the allocated response has invalid length
MODBUS_NO_ERROR() on success
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusBuildExceptionTCP()

ModbusErrorInfomodbusBuildExceptionTCP ( ModbusSlave * status,
uint16_t transactionID,
uint8_t unitID,
uint8_t function,
ModbusExceptionCode code )

Builds a Modbus TCP exception.

Parameters
transactionIDtransaction ID
unitIDunit ID to be reported in the exception
functionfunction that reported the exception
codeModbus exception code
Returns
MODBUS_GENERAL_ERROR(ALLOC) on memory allocation failure
MODBUS_GENERAL_ERROR(LENGTH) if the allocated response has invalid length
MODBUS_NO_ERROR() on success
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusParseRequest()

ModbusErrorInfomodbusParseRequest ( ModbusSlave * status,
const uint8_t * request,
uint8_t requestLength )

Parses provided PDU and generates response honorinng pduOffset and padding set in ModbusSlave during response generation.

Parameters
requestpointer to the PDU data
requestLengthlength of the PDU (valid range: 1 - 253)
Returns
Any errors from parsing functions
Warning
This function expects ModbusSlave::response::pduOffset and ModbusSlave::response::padding to be set properly! If you're looking for a function to parse PDU and generate a PDU response, please use modbusParseRequestPDU() instead.
The response frame can only be accessed if modbusIsOk() called on the return value of this function evaluates to true.

◆ ModbusErrorInfomodbusParseRequestPDU()

ModbusErrorInfomodbusParseRequestPDU ( ModbusSlave * status,
const uint8_t * request,
uint8_t requestLength )

Parses provided PDU and generates PDU for the response frame.

Parameters
requestpointer to the PDU data
requestLengthlength of the PDU (valid range: 1 - 253)
Returns
MODBUS_REQUEST_ERROR(LENGTH) if length of the frame is invalid
Any errors from parsing functions
Warning
The response frame can only be accessed if modbusIsOk() called on the return value from this function evaluates to true.
The requestLength argument is of type uint8_t and not uint16_t as in case of Modbus RTU and TCP.
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusParseRequestRTU()

ModbusErrorInfomodbusParseRequestRTU ( ModbusSlave * status,
uint8_t slaveAddress,
const uint8_t * request,
uint16_t requestLength )

Parses provided Modbus RTU request frame and generates a Modbus RTU response.

Parameters
slaveAddressID of the slave to match with the request
requestpointer to a Modbus RTU frame
requestLengthlength of the frame (valid range: 4 - 256)
Returns
MODBUS_REQUEST_ERROR(LENGTH) if length of the frame is invalid
MODBUS_REQUEST_ERROR(CRC) if CRC is invalid
MODBUS_REQUEST_ERROR(ADDRESS) if the request is meant for other slave
MODBUS_GENERAL_ERROR(LENGTH) if the resulting response frame has invalid length
Any errors from parsing functions
Warning
The response frame can only be accessed if modbusIsOk() called on the return value of this function evaluates to true.
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusParseRequestTCP()

ModbusErrorInfomodbusParseRequestTCP ( ModbusSlave * status,
const uint8_t * request,
uint16_t requestLength )

Parses provided Modbus TCP request frame and generates a Modbus TCP response.

Parameters
requestpointer to a Modbus TCP frame
requestLengthlength of the frame (valid range: 8 - 260)
Returns
MODBUS_REQUEST_ERROR(LENGTH) if length of the frame is invalid or different from the declared one
MODBUS_REQUEST_ERROR(BAD_PROTOCOL) if the frame is not a Modbus TCP message
MODBUS_GENERAL_ERROR(LENGTH) if the resulting response frame has invalid length
Any errors from parsing functions
Warning
The response frame can only be accessed if modbusIsOk() called on the return value of this function evaluates to true.
+ Here is the call graph for this function:

◆ ModbusErrorInfomodbusSlaveInit()

ModbusErrorInfomodbusSlaveInit ( ModbusSlave * status,
ModbusRegisterCallback registerCallback,
ModbusSlaveExceptionCallback exceptionCallback,
ModbusAllocator allocator,
const ModbusSlaveFunctionHandler * functions,
uint8_t functionCount )

Initializes slave device.

Parameters
registerCallbackCallback function for handling all register operations (may be required by used parsing functions)
exceptionCallbackCallback function for handling slave exceptions (optional)
allocatorMemory allocator to be used (see modbusDefaultAllocator) (required)
functionsPointer to array of supported function handlers (required). The lifetime of this array must not be shorter than the lifetime of the slave.
functionCountNumber of function handlers in the array (required)
Returns
MODBUS_NO_ERROR() on success
Warning
This function must not be called on an already initialized ModbusSlave struct.
See also
modbusDefaultAllocator()
modbusSlaveDefaultFunctions

◆ modbusSlaveDestroy()

void modbusSlaveDestroy ( ModbusSlave * status)

Frees memory allocated in the ModbusSlave struct.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ modbusSlaveDefaultFunctionCount

const uint8_t modbusSlaveDefaultFunctionCount = sizeof(modbusSlaveDefaultFunctions) / sizeof(modbusSlaveDefaultFunctions[0]) - 1

Stores length of modbusSlaveDefaultFunctions.

◆ modbusSlaveDefaultFunctions

ModbusSlaveFunctionHandler modbusSlaveDefaultFunctions[]

Associates function IDs with pointers to functions responsible for parsing. Length of this array is stored in modbusSlaveDefaultFunctionCount.

Note
Contents depend on defined LIGHTMODBUS_FxxS macros!