Skip to main content

A modern, strongly typed Modbus client library.

Project description

tModbus

Homepage Documentation GitHub License Release Python Versions Testing

About

A modern Python Modbus library that is fully typed and well-tested.

Modbus is based on the master/slave communication pattern. We choose to use the terminology client and server instead, as it is more clear.

Features

  • Pure Python library with minimal dependencies
  • Fully typed
  • Full test coverage
  • Support for Modbus TCP, RTU, ASCII and RTU-over-TCP clients
  • Support for TCP over SSL connections
  • Auto reconnect and retry functionality (which can be enabled optionally)
  • Extensible with custom Modbus functions and exception codes
  • Open source (BSD)

Supported function codes

  • Read coils (0x01)
  • Read discrete inputs (0x02)
  • Read holding registers (0x03)
  • Read input registers (0x04)
  • Write single coil (0x05)
  • Write single register (0x06)
  • Read exception status (0x07)
  • Write multiple coils (0x0F)
  • Write multiple registers (0x10)
  • Report server ID (0x11)
  • Read file record (0x14)
  • Write file record (0x15)
  • Mask write register (0x16)
  • Read/write multiple registers (0x17)
  • Read FIFO queue (0x18)
  • Read device identification (0x2B / 0x0E)

Examples

A simple example of an Async TCP client:

import asyncio

from tmodbus import create_async_tcp_client


async def main() -> None:
    """Show example of reading a Modbus register."""
    async with create_async_tcp_client("127.0.0.1", 502, unit_id=1) as client:
        response = await client.read_holding_registers(start_address=100, quantity=2)
        print("Contents of holding registers 100 and 101: ", response)


if __name__ == "__main__":
    asyncio.run(main())

Various examples for Modbus RTU and TCP can be found in the examples folder.

Dependencies

async-serial

This library uses pyserial-asyncio-fast to access the serial port when using async RTU or ASCII.

Use pip install tmodbus[async-serial] to install.

Changelog & releases

This repository keeps a change log using GitHub's releases functionality. The format of the log is based on Keep a Changelog.

Releases are based on Semantic Versioning, and use the format of MAJOR.MINOR.PATCH. In a nutshell, the version will be incremented based on the following:

  • MAJOR: Incompatible or major changes.
  • MINOR: Backwards-compatible new features and enhancements.
  • PATCH: Backwards-compatible bugfixes and package updates.

Contributing

This is an active open-source project. We are always open to people who want to use the code or contribute to it.

We've set up a separate document for our contribution guidelines.

Thank you for being involved! :heart_eyes:

Setting up a development environment

This Python project is fully managed using the uv dependency manager.

You need at least:

  • Python 3.12+
  • uv

To install all packages, including all development requirements:

uv sync  --all-extras --dev

As this repository uses the pre-commit framework, all changes are linted and tested with each commit. You can run all checks and tests manually, using the following command:

uv run pre-commit run --all-files

To run just the Python tests:

uv run pytest

Protocol-Specification

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

tmodbus-0.2.3.tar.gz (90.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tmodbus-0.2.3-py3-none-any.whl (57.4 kB view details)

Uploaded Python 3

File details

Details for the file tmodbus-0.2.3.tar.gz.

File metadata

  • Download URL: tmodbus-0.2.3.tar.gz
  • Upload date:
  • Size: 90.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tmodbus-0.2.3.tar.gz
Algorithm Hash digest
SHA256 3e305d83595c3d63f86a95e12f6dd4c360b2d31fb4b1f8e37d763a2c02659559
MD5 af83d79a32c8519a941fec88c86ae271
BLAKE2b-256 473c665bf9ed6761cdca1b08b66a0688f3b77491ffbcbf1ca2d437a0982d8c1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tmodbus-0.2.3.tar.gz:

Publisher: pypi-publish.yml on wlcrs/tmodbus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tmodbus-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: tmodbus-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 57.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tmodbus-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 48839a5a2ebc53a5e7a0ba46bdc0af4d048a16a485e57f7e4616648397ff19e1
MD5 db9f7d22f0077ba28cd468acc925b5a6
BLAKE2b-256 1c2e41d18483ba1a858906175aae7f6948a616f8365f9f317a5d2943cc448a0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for tmodbus-0.2.3-py3-none-any.whl:

Publisher: pypi-publish.yml on wlcrs/tmodbus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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