PL::ModbusServer class

class ModbusServer : public PL::ModbusBase, public PL::Server

Modbus server class.

Subclassed by PL::BlackBoxModbusServer

Public Functions

ModbusServer(std::shared_ptr<Stream> stream, ModbusProtocol protocol, uint8_t stationAddress, std::shared_ptr<Buffer> buffer)

Creates a stream Modbus server with shared transaction buffer.

Parameters:
  • stream – stream

  • protocol – Modbus protocol

  • stationAddress – station address

  • buffer – transaction buffer

ModbusServer(std::shared_ptr<Stream> stream, ModbusProtocol protocol, uint8_t stationAddress, size_t bufferSize = defaultBufferSize)

Creates an stream Modbus server and allocates transaction buffer.

Parameters:
  • stream – stream

  • protocol – Modbus protocol

  • stationAddress – station address

  • bufferSize – transaction buffer size

ModbusServer(uint16_t port, std::shared_ptr<Buffer> buffer)

Creates a network Modbus server with shared transaction buffer.

Parameters:
  • port – network port

  • buffer – transaction buffer

ModbusServer(uint16_t port, size_t bufferSize = defaultBufferSize)

Creates a network Modbus server and allocates transaction buffer.

Parameters:
  • port – network port

  • bufferSize – transaction buffer size

virtual esp_err_t Lock(TickType_t timeout = portMAX_DELAY) override

Locks the object.

Parameters:

timeout – timeout in FreeRTOS ticks

Returns:

error code

virtual esp_err_t Unlock() override

Unlocks the object.

Returns:

error code

virtual esp_err_t Enable() override

Enables the server.

Returns:

error code

virtual esp_err_t Disable() override

Disables the server.

Returns:

error code

void AddMemoryArea(std::shared_ptr<ModbusMemoryArea> memoryArea)

Adds a Modbus memory area to the server.

Parameters:

memoryArea – memory area

Returns:

error code

void AddMemoryArea(ModbusMemoryType type, uint16_t address, std::shared_ptr<Buffer> buffer)

Adds buffer as a Modbus memory area to the server.

Parameters:
  • type – memory area type

  • address – memory area address

  • buffer – buffer

virtual bool IsEnabled() override

Checks if the server is enabled.

Returns:

true if the server is enabled

uint8_t GetStationAddress()

Gets the Modbus station address.

Returns:

station address

esp_err_t SetStationAddress(uint8_t stationAddress)

Sets the Modbus station address.

Parameters:

stationAddress – station address

Returns:

error code

esp_err_t SetTaskParameters(const TaskParameters &taskParameters)

Sets the server task parameters.

Parameters:

taskParameters – task parameters

Returns:

error code

std::weak_ptr<Server> GetBaseServer()

Gets the base server (StreamServer or TcpServer)

Returns:

base server

ModbusProtocol GetProtocol()

Gets Modbus protocol.

Returns:

protocol

virtual esp_err_t SetProtocol(ModbusProtocol protocol)

Sets Modbus protocol.

Parameters:

protocol – protocol

Returns:

error code

TickType_t GetReadTimeout()

Gets the read operation timeout.

Returns:

timeout in FreeRTOS ticks

esp_err_t SetReadTimeout(TickType_t timeout)

Sets the read operation timeout.

Parameters:

timeout – timeout in FreeRTOS ticks

Returns:

error code

TickType_t GetDelayAfterRead()

Gets the delay between the end of the read operation and unlocking the stream.

Returns:

delay in FreeRTOS ticks

esp_err_t SetDelayAfterRead(TickType_t delay)

Sets the delay between the end of the read operation and unlocking the stream.

Parameters:

delay – delay in FreeRTOS ticks

Returns:

error code

std::string GetName()

Gets the server name.

Returns:

name

void SetName(const std::string &name)

Sets the server name.

Parameters:

name – name

Public Members

Event<Server> enabledEvent

server enabled event

Event<Server> disabledEvent

server disabled event

Public Static Attributes

static const std::string defaultName

Default server name.

static const TickType_t defaultReadTimeout = 2

Default read operation timeout in FreeRTOS ticks.

static const size_t defaultBufferSize = 260

Default transaction buffer size.

static const ModbusProtocol defaultNetworkProtocol = ModbusProtocol::tcp

Default protocol for network interface.

static const uint8_t defaultNetworkStationAddress = 255

Default station address for network interface.

static const uint16_t maxNumberOfModbusBitsToRead = 2000

Maximum number of coils or discrete inputs that can be read in one request.

static const uint16_t maxNumberOfModbusBitsToWrite = 1968

Maximum number of coils that can be written in one request.

static const uint16_t maxNumberOfModbusRegistersToRead = 125

Maximum number of holding or input registers that can be read in one request.

static const uint16_t maxNumberOfModbusRegistersToWrite = 123

Maximum number of holding registers that can be written in one request.

Protected Functions

virtual esp_err_t ReadRtuData(Stream &stream, ModbusFunctionCode functionCode, size_t &dataSize) override

Reads the data for the specified function code (for Modbus RTU protocol).

Parameters:
  • stream – stream to read from

  • functionCode – frame function code

  • dataSize – frame data size

Returns:

error code

virtual esp_err_t HandleRequest(Stream &stream, uint8_t stationAddress, ModbusFunctionCode functionCode, size_t dataSize, uint16_t transactionId)

Handles the Modbus client request.

Parameters:
  • stream – client stream

  • stationAddress – request station address

  • functionCode – request function code

  • dataSize – request data size

  • transactionId – request transaction ID (for Modbus TCP protocol)

Returns:

error code

esp_err_t WriteExceptionFrame(Stream &stream, uint8_t stationAddress, ModbusFunctionCode functionCode, ModbusException exception, uint16_t transactionId)

Writes the Modbus exception frame.

Parameters:
  • stream – client stream

  • stationAddress – frame station address

  • functionCode – frame function code

  • exception – Modbus exception

  • transactionId – frame transaction ID (for Modbus TCP protocol)

Returns:

error code

esp_err_t ReadFrame(Stream &stream, uint8_t &stationAddress, ModbusFunctionCode &functionCode, size_t &dataSize, uint16_t &transactionId)

Reads the Modbus frame.

Parameters:
  • stream – stream to read from

  • stationAddress – frame station address

  • functionCode – frame function code

  • dataSize – frame data size

  • transactionId – frame transaction ID (for Modbus TCP protocol)

Returns:

error code

esp_err_t WriteFrame(Stream &stream, uint8_t stationAddress, ModbusFunctionCode functionCode, size_t dataSize, uint16_t transactionId)

Writes the Modbus frame.

Parameters:
  • stream – stream to write to

  • stationAddress – frame station address

  • functionCode – frame function code

  • dataSize – frame data size

  • transactionId – frame transaction ID (for Modbus TCP protocol)

Returns:

error code

Buffer &GetDataBuffer()

Gets the data part of the transaction buffer with offset and size based on the Modbus protocol.

Returns:

data buffer