Pymodbus is a full Modbus protocol implementation offering client/server with synchronous/asynchronous API and simulators.
Our releases is defined as X.Y.Z, and we have strict rules what to release when:
- Z, No API changes! bug fixes and smaller enhancements.
- Y, API changes, bug fixes and bigger enhancements.
- X, Major changes in API and/or method to use pymodbus
Upgrade examples:
- 3.8.1 -> 3.8.5: just plugin the new version, no changes needed.
- 3.7.1 -> 3.8.0: Smaller changes to the pymodbus calls might be needed
- 2.5.4 -> 3.0.0: Major changes in the application might be needed
Current release is 3.8.6.
Bleeding edge (not released) is dev.
Waiting for v3.9.0 (not released) is wait_next_api. This contains dev + merged pull requests that have API changes, and thus have to wait.
All changes are described in release notes and all API changes are documented
A big thanks to all the volunteers that helps make pymodbus a great project.
Source code on github
Full documentation for newest releases as well as the bleeding edge (dev) readthedocs
Pymodbus consist of 5 parts:
- client, connect to your favorite device(s)
- server, simulate your favorite device(s)
- repl, a commandline text based client/server simulator
- simulator, an html based server simulator
- examples, showing both simple and advances usage
- Full modbus standard protocol implementation
- Support for custom function codes
- support serial (rs-485), tcp, tls and udp communication
- support all standard frames: socket, rtu, rtu-over-tcp, tcp and ascii
- does not have third party dependencies, apart from pyserial (optional)
- very lightweight project
- requires Python >= 3.10
- thorough test suite, that test all corners of the library
- automatically tested on Windows, Linux and MacOS combined with python 3.10 - 3.13
- strongly typed API (py.typed present)
The modbus protocol specification: Modbus_Application_Protocol_V1_1b3.pdf can be found on modbus org
- asynchronous API and synchronous API for applications
- very simple setup and call sequence (just 6 lines of code)
- utilities to convert int/float to/from multiple registers
- encoder/decoder to help with standard python data types
- asynchronous implementation for high performance
- synchronous API classes for convenience
- simulate real life devices
- full server control context (device information, counters, etc)
- different backend datastores to manage register values
- callback to intercept requests/responses
- work on RS485 in parallel with other devices