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)