Skip to main content

Easy-to-use ModbusTCP Server in pure Python

Project description

modbus_server

A ModbusTCP server implementation in pure Python.

Installation

pip install modbus_server

Minimal Example

import modbus_server
s = modbus_server.Server(port=5020)
s.start()
s.set_coil(1,True)

Functions

Server Object

s = modbus_server.Server(host='localhost', port=502, datastore=None, loglevel="INFO", autostart=False)

Initializes a Server instance. If the datastore is not explicitly given, an empty DictDatastore is instantiated and used.

s.start()

s.stop()

Start and stop the server thread which accepts requests. The thread does not block the main thread, but it prevents the program from exiting until s.stop() is called.

Set Coils and Discrete Input

set_coil(address, value)

set_discrete_input(address, value)

Set the coil or discrete_input at address to value. This function can only process one value.

set_coils(start_address, values)

set_discrete_inputs(start_address, values)

Set Input and Holding Registers

set_input_register(address, value, encoding)

set_holding_register(address, value, encoding)

Set the input or holding register at address to value using encoding. This function can only process one value.

set_input_registers(start_address, values, encoding)

set_holding_registers(start_address, values, encoding)

Datastore Object

The modbus_server pulls the data it serves from a datastore. The simplest datastore is just a dictionary that is filled from the Server object using the various set_-functions described below. In that case, the data needs to be ingested directly in the program that starts the server as in the minimal example above.

datastore = modbus_server.DictDatastore()

An alternative is using redis to hold the data. That way, other processes in the system can change the data in the datastore and the modbus_server always has up to data from e.g. a measurement process. In order to link keys in redis with modbus object references (coil, discrete input, input register, and holding register) and addresses, the RedisDatastore object uses a modbus_address_map, a dictionary that follows a special convention.

datastore = modbus_server.RedisDatastore(modbus_address_map={}, redis_host="localhost", redis_port=6379, redis_db=0)

Development:

For testing, install a symlink to the package in the python environment using flit:

flit install . -s

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

modbus_server-0.2.3.tar.gz (11.0 kB view hashes)

Uploaded Source

Built Distribution

modbus_server-0.2.3-py2.py3-none-any.whl (7.9 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page