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, device_id=None)

Modbus TCP server

__init__(host='localhost', port=502, no_block=False, ipv6=False, data_bank=None, data_hdl=None, ext_engine=None, device_id=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)

  • device_id (DeviceIdentification) – instance of DeviceIdentification class for read device identification request (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.

property 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

class DeviceIdentification

class pyModbusTCP.server.DeviceIdentification(vendor_name=b'', product_code=b'', major_minor_revision=b'', vendor_url=b'', product_name=b'', model_name=b'', user_application_name=b'', objects_id=None)

Container class for device identification objects (MEI type 0x0E) return by function 0x2B.

__init__(vendor_name=b'', product_code=b'', major_minor_revision=b'', vendor_url=b'', product_name=b'', model_name=b'', user_application_name=b'', objects_id=None)

Constructor

Parameters:
  • vendor_name (bytes) – VendorName mandatory object

  • product_code (bytes) – ProductCode mandatory object

  • major_minor_revision (bytes) – MajorMinorRevision mandatory object

  • vendor_url (bytes) – VendorUrl regular object

  • product_name (bytes) – ProductName regular object

  • model_name (bytes) – ModelName regular object

  • user_application_name (bytes) – UserApplicationName regular object

  • objects_id (dict) – Objects values by id as dict example: {42:b’value’} (optional)