Module pyModbusTCP.server

pyModbusTCP Server

This module provide the class for the modbus server, it’s data handler interface and finally the data bank.

class ModbusServer

class pyModbusTCP.server.ModbusServer(host='localhost', port=502, no_block=False, ipv6=False, data_bank=None, data_hdl=None, ext_engine=None)

Modbus TCP server

__init__(host='localhost', port=502, no_block=False, ipv6=False, data_bank=None, data_hdl=None, ext_engine=None)

Constructor

Modbus server constructor.

Parameters:
  • host (str) – hostname or IPv4/IPv6 address server address (default is ‘localhost’)
  • port (int) – TCP port number (default is 502)
  • no_block (bool) – no block mode, i.e. start() will return (default is False)
  • ipv6 (bool) – use ipv6 stack (default is False)
  • data_bank (DataBank) – instance of custom data bank, if you don’t want the default one (optional)
  • data_hdl (DataHandler) – instance of custom data handler, if you don’t want the default one (optional)
  • ext_engine (callable) – an external engine reference (ref to ext_engine(session_data)) (optional)
class ClientInfo(address='', port=0)

Container class for client information

exception DataFormatError

Exception raise by ModbusServer for data format errors.

exception Error

Base exception for ModbusServer related errors.

class MBAP(transaction_id=0, protocol_id=0, length=0, unit_id=0)

MBAP (Modbus Application Protocol) container class.

class ModbusService(request, client_address, server)
exception NetworkError

Exception raise by ModbusServer on I/O errors.

class PDU(raw=b'')

PDU (Protocol Data Unit) container class.

class ServerInfo

Container class for server information

class SessionData

Container class for server session data.

is_run

Return True if server running.

start()

Start the server.

This function will block (or not if no_block flag is set).

stop()

Stop the server.

class DataHandler

class pyModbusTCP.server.DataHandler(data_bank=None)

Default data handler for ModbusServer, map server threads calls to DataBank.

Custom handler must derive from this class.

__init__(data_bank=None)

Constructor

Modbus server data handler constructor.

Parameters:data_bank (DataBank) – a reference to custom DefaultDataBank
read_coils(address, count, srv_info)

Call by server for reading in coils space

Parameters:
  • address (int) – start address
  • count (int) – number of coils
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

read_d_inputs(address, count, srv_info)

Call by server for reading in the discrete inputs space

Parameters:
  • address (int) – start address
  • count (int) – number of discrete inputs
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

read_h_regs(address, count, srv_info)

Call by server for reading in the holding registers space

Parameters:
  • address (int) – start address
  • count (int) – number of holding registers
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

read_i_regs(address, count, srv_info)

Call by server for reading in the input registers space

Parameters:
  • address (int) – start address
  • count (int) – number of input registers
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

write_coils(address, bits_l, srv_info)

Call by server for writing in the coils space

Parameters:
  • address (int) – start address
  • bits_l (list) – list of boolean to write
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

write_h_regs(address, words_l, srv_info)

Call by server for writing in the holding registers space

Parameters:
  • address (int) – start address
  • words_l (list) – list of word value to write
  • srv_info (ModbusServer.ServerInfo) – some server info
Return type:

Return

class DataBank

class pyModbusTCP.server.DataBank(coils_size=65536, coils_default_value=False, d_inputs_size=65536, d_inputs_default_value=False, h_regs_size=65536, h_regs_default_value=0, i_regs_size=65536, i_regs_default_value=0, virtual_mode=False)

Data space class with thread safe access functions

__init__(coils_size=65536, coils_default_value=False, d_inputs_size=65536, d_inputs_default_value=False, h_regs_size=65536, h_regs_default_value=0, i_regs_size=65536, i_regs_default_value=0, virtual_mode=False)

Constructor

Modbus server data bank constructor.

Parameters:
  • coils_size (int) – Number of coils to allocate (default is 65536)
  • coils_default_value (bool) – Coils default value at startup (default is False)
  • d_inputs_size (int) – Number of discrete inputs to allocate (default is 65536)
  • d_inputs_default_value (bool) – Discrete inputs default value at startup (default is False)
  • h_regs_size (int) – Number of holding registers to allocate (default is 65536)
  • h_regs_default_value (int) – Holding registers default value at startup (default is 0)
  • i_regs_size (int) – Number of input registers to allocate (default is 65536)
  • i_regs_default_value (int) – Input registers default value at startup (default is 0)
  • virtual_mode (bool) – Disallow all modbus data space to work with virtual values (default is False)
get_coils(address, number=1, srv_info=None)

Read data on server coils space

Parameters:
  • address (int) – start address
  • number (int) – number of bits (optional)
  • srv_info (ModbusServer.ServerInfo) – some server info (must be set by server only)
Returns:

list of bool or None if error

Return type:

list or None

get_discrete_inputs(address, number=1, srv_info=None)

Read data on server discrete inputs space

Parameters:
  • address (int) – start address
  • number (int) – number of bits (optional)
  • srv_info (ModbusServerInfo) – some server info (must be set by server only)
Returns:

list of bool or None if error

Return type:

list or None

get_holding_registers(address, number=1, srv_info=None)

Read data on server holding registers space

Parameters:
  • address (int) – start address
  • number (int) – number of words (optional)
  • srv_info (ModbusServerInfo) – some server info (must be set by server only)
Returns:

list of int or None if error

Return type:

list or None

get_input_registers(address, number=1, srv_info=None)

Read data on server input registers space

Parameters:
  • address (int) – start address
  • number (int) – number of words (optional)
  • srv_info (ModbusServerInfo) – some server info (must be set by server only)
Returns:

list of int or None if error

Return type:

list or None

on_coils_change(address, from_value, to_value, srv_info)

Call by server when a value change occur in coils space

This method is provided to be overridden with user code to catch changes

Parameters:
  • address (int) – address of coil
  • from_value (bool) – coil original value
  • to_value (bool) – coil next value
  • srv_info (ModbusServerInfo) – some server info
on_holding_registers_change(address, from_value, to_value, srv_info)

Call by server when a value change occur in holding registers space

This method is provided to be overridden with user code to catch changes

Parameters:
  • address (int) – address of register
  • from_value (int) – register original value
  • to_value (int) – register next value
  • srv_info (ModbusServerInfo) – some server info
set_coils(address, bit_list, srv_info=None)

Write data to server coils space

Parameters:
  • address (int) – start address
  • bit_list (list) – a list of bool to write
  • srv_info (ModbusServerInfo) – some server info (must be set by server only)
Returns:

True if success or None if error

Return type:

bool or None

Raises:

ValueError – if bit_list members cannot be converted to bool

set_discrete_inputs(address, bit_list)

Write data to server discrete inputs space

Parameters:
  • address (int) – start address
  • bit_list (list) – a list of bool to write
Returns:

True if success or None if error

Return type:

bool or None

Raises:

ValueError – if bit_list members cannot be converted to bool

set_holding_registers(address, word_list, srv_info=None)

Write data to server holding registers space

Parameters:
  • address (int) – start address
  • word_list (list) – a list of word to write
  • srv_info (ModbusServerInfo) – some server info (must be set by server only)
Returns:

True if success or None if error

Return type:

bool or None

Raises:

ValueError – if word_list members cannot be converted to int

set_input_registers(address, word_list)

Write data to server input registers space

Parameters:
  • address (int) – start address
  • word_list (list) – a list of word to write
Returns:

True if success or None if error

Return type:

bool or None

Raises:

ValueError – if word_list members cannot be converted to int