venv added, updated
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
Authors
|
||||
=======
|
||||
All these versions would not be possible without volunteers!
|
||||
|
||||
This is a complete list for each major version.
|
||||
|
||||
A big "thank you" to everybody who helped out.
|
||||
|
||||
Pymodbus version 3 family
|
||||
-------------------------
|
||||
Thanks to
|
||||
|
||||
- AKJ7
|
||||
- Alex
|
||||
- Alex Ruddick
|
||||
- Alexander Lanin
|
||||
- Alexandre CUER
|
||||
- Alois Hockenschlohe
|
||||
- Arjan
|
||||
- André Srinivasan
|
||||
- andrew-harness
|
||||
- banana-sun
|
||||
- Blaise Thompson
|
||||
- CapraTheBest
|
||||
- cgernert
|
||||
- corollaries
|
||||
- Chandler Riehm
|
||||
- Chris Hung
|
||||
- Christian Krause
|
||||
- dhoomakethu
|
||||
- doelki
|
||||
- DominicDataP
|
||||
- Dominique Martinet
|
||||
- Dries
|
||||
- duc996
|
||||
- efdx
|
||||
- Esco441-91
|
||||
- Farzad Panahi
|
||||
- Fredo70
|
||||
- Gao Fang
|
||||
- Ghostkeeper
|
||||
- Hangyu Fan
|
||||
- Hayden Roche
|
||||
- Iktek
|
||||
- Ilkka Ollakka
|
||||
- Jakob Ruhe
|
||||
- Jakob Schlyter
|
||||
- James Braza
|
||||
- James Cameron
|
||||
- James Hilliard
|
||||
- jan iversen
|
||||
- Jerome Velociter
|
||||
- Joe Burmeister
|
||||
- John Miko
|
||||
- Jonathan Reichelt Gjertsen
|
||||
- julian
|
||||
- Justin Standring
|
||||
- Kenny Johansson
|
||||
- Martyy
|
||||
- Matthias Straka
|
||||
- laund
|
||||
- Logan Gunthorpe
|
||||
- Marko Luther
|
||||
- Logan Gunthorpe
|
||||
- Marko Luther
|
||||
- Matthias Straka
|
||||
- Mickaël Schoentgen
|
||||
- Pavel Kostromitinov
|
||||
- peufeu2
|
||||
- Philip Couling
|
||||
- Qi Li
|
||||
- Sebastian Machuca
|
||||
- Sefa Keleş
|
||||
- Steffen Beyer
|
||||
- sumguytho
|
||||
- Thijs W
|
||||
- Totally a booplicate
|
||||
- WouterTuinstra
|
||||
- wriswith
|
||||
- Yohrog
|
||||
- yyokusa
|
||||
|
||||
|
||||
Pymodbus version 2 family
|
||||
-------------------------
|
||||
Thanks to
|
||||
|
||||
- alecjohanson
|
||||
- Alexey Andreyev
|
||||
- Andrea Canidio
|
||||
- Carlos Gomez
|
||||
- Cougar
|
||||
- Christian Sandberg
|
||||
- dhoomakethu
|
||||
- dices
|
||||
- Dmitri Zimine
|
||||
- Emil Vanherp
|
||||
- er888kh
|
||||
- Eric Duminil
|
||||
- Erlend Egeberg Aasland
|
||||
- hackerboygn
|
||||
- Jian-Hong Pan
|
||||
- Jose J Rodriguez
|
||||
- Justin Searle
|
||||
- Karl Palsson
|
||||
- Kim Hansen
|
||||
- Kristoffer Sjöberg
|
||||
- Kyle Altendorf
|
||||
- Lars Kruse
|
||||
- Malte Kliemann
|
||||
- Memet Bilgin
|
||||
- Michael Corcoran
|
||||
- Mike
|
||||
- sanjay
|
||||
- Sekenre
|
||||
- Siarhei Farbotka
|
||||
- Steffen Vogel
|
||||
- tcplomp
|
||||
- Thor Michael Støre
|
||||
- Tim Gates
|
||||
- Ville Skyttä
|
||||
- Wild Stray
|
||||
- Yegor Yefremov
|
||||
|
||||
|
||||
Pymodbus version 1 family
|
||||
-------------------------
|
||||
Thanks to
|
||||
|
||||
- Antoine Pitrou
|
||||
- Bart de Waal
|
||||
- bashwork
|
||||
- bje-
|
||||
- Claudio Catterina
|
||||
- Chintalagiri Shashank
|
||||
- dhoomakethu
|
||||
- dragoshenron
|
||||
- Elvis Stansvik
|
||||
- Eren Inan Canpolat
|
||||
- Everley
|
||||
- Fabio Bonelli
|
||||
- fleimgruber
|
||||
- francozappa
|
||||
- Galen Collins
|
||||
- Gordon Broom
|
||||
- Hamilton Kibbe
|
||||
- Hynek Petrak
|
||||
- idahogray
|
||||
- Ingo van Lil
|
||||
- Jack
|
||||
- jbiswas
|
||||
- jon mills
|
||||
- Josh Kelley
|
||||
- Karl Palsson
|
||||
- Matheus Frata
|
||||
- Patrick Fuller
|
||||
- Perry Kundert
|
||||
- Philippe Gauthier
|
||||
- Rahul Raghunath
|
||||
- sanjay
|
||||
- schubduese42
|
||||
- semyont
|
||||
- Semyon Teplitsky
|
||||
- Stuart Longland
|
||||
- Yegor Yefremov
|
||||
|
||||
|
||||
Pymodbus version 0 family
|
||||
-------------------------
|
||||
Thanks to
|
||||
|
||||
- Albert Brandl
|
||||
- Galen Collins
|
||||
|
||||
Import to github was based on code from:
|
||||
|
||||
- S.W.A.C. GmbH, Germany.
|
||||
- S.W.A.C. Bohemia s.r.o., Czech Republic.
|
||||
- Hynek Petrak
|
||||
- Galen Collins
|
||||
@@ -0,0 +1 @@
|
||||
pip
|
||||
@@ -0,0 +1,23 @@
|
||||
Copyright 2008-2023 Pymodbus
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,420 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: pymodbus
|
||||
Version: 3.7.2
|
||||
Summary: A fully featured modbus protocol stack in python
|
||||
Author: Galen Collins, Jan Iversen
|
||||
Maintainer: dhoomakethu, janiversen
|
||||
License: BSD-3-Clause
|
||||
Project-URL: Homepage, https://github.com/pymodbus-dev/pymodbus/
|
||||
Project-URL: Source Code, https://github.com/pymodbus-dev/pymodbus
|
||||
Project-URL: Bug Reports, https://github.com/pymodbus-dev/pymodbus/issues
|
||||
Project-URL: Docs: Dev, https://pymodbus.readthedocs.io/en/latest/?badge=latest
|
||||
Project-URL: Discord, https://discord.gg/vcP8qAz2
|
||||
Keywords: modbus,asyncio,scada,client,server,simulator
|
||||
Platform: 'Linux'
|
||||
Platform: 'Mac OS X'
|
||||
Platform: 'Win'
|
||||
Classifier: Development Status :: 5 - Production/Stable
|
||||
Classifier: Environment :: Console
|
||||
Classifier: Framework :: AsyncIO
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Operating System :: POSIX :: Linux
|
||||
Classifier: Operating System :: Unix
|
||||
Classifier: Operating System :: MacOS :: MacOS X
|
||||
Classifier: Operating System :: OS Independent
|
||||
Classifier: Operating System :: Microsoft
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.9
|
||||
Classifier: Programming Language :: Python :: 3.10
|
||||
Classifier: Programming Language :: Python :: 3.11
|
||||
Classifier: Programming Language :: Python :: 3.12
|
||||
Classifier: Topic :: System :: Networking
|
||||
Classifier: Topic :: Utilities
|
||||
Requires-Python: >=3.9.0
|
||||
Description-Content-Type: text/x-rst
|
||||
License-File: LICENSE
|
||||
License-File: AUTHORS.rst
|
||||
Provides-Extra: all
|
||||
Requires-Dist: pymodbus[development,documentation,repl,serial,simulator] ; extra == 'all'
|
||||
Provides-Extra: development
|
||||
Requires-Dist: build >=1.2.1 ; extra == 'development'
|
||||
Requires-Dist: codespell >=2.3.0 ; extra == 'development'
|
||||
Requires-Dist: coverage >=7.6.0 ; extra == 'development'
|
||||
Requires-Dist: mypy >=1.10.1 ; extra == 'development'
|
||||
Requires-Dist: pylint >=3.2.5 ; extra == 'development'
|
||||
Requires-Dist: pytest >=8.2.2 ; extra == 'development'
|
||||
Requires-Dist: pytest-asyncio >=0.23.8 ; extra == 'development'
|
||||
Requires-Dist: pytest-cov >=5.0.0 ; extra == 'development'
|
||||
Requires-Dist: pytest-profiling >=1.7.0 ; extra == 'development'
|
||||
Requires-Dist: pytest-timeout >=2.3.1 ; extra == 'development'
|
||||
Requires-Dist: pytest-xdist >=3.6.1 ; extra == 'development'
|
||||
Requires-Dist: pytest-aiohttp >=1.0.5 ; extra == 'development'
|
||||
Requires-Dist: ruff >=0.5.3 ; extra == 'development'
|
||||
Requires-Dist: twine >=5.1.1 ; extra == 'development'
|
||||
Requires-Dist: types-Pygments ; extra == 'development'
|
||||
Requires-Dist: types-pyserial ; extra == 'development'
|
||||
Provides-Extra: documentation
|
||||
Requires-Dist: recommonmark >=0.7.1 ; extra == 'documentation'
|
||||
Requires-Dist: Sphinx >=7.3.7 ; extra == 'documentation'
|
||||
Requires-Dist: sphinx-rtd-theme >=2.0.0 ; extra == 'documentation'
|
||||
Provides-Extra: repl
|
||||
Requires-Dist: pymodbus-repl >=2.0.4 ; extra == 'repl'
|
||||
Provides-Extra: serial
|
||||
Requires-Dist: pyserial >=3.5 ; extra == 'serial'
|
||||
Provides-Extra: simulator
|
||||
Requires-Dist: aiohttp >=3.8.6 ; (python_version < "3.12") and extra == 'simulator'
|
||||
Requires-Dist: aiohttp >=3.9.5 ; (python_version == "3.12") and extra == 'simulator'
|
||||
|
||||
PyModbus - A Python Modbus Stack
|
||||
================================
|
||||
.. image:: https://github.com/pymodbus-dev/pymodbus/actions/workflows/ci.yml/badge.svg?branch=dev
|
||||
:target: https://github.com/pymodbus-dev/pymodbus/actions/workflows/ci.yml
|
||||
.. image:: https://readthedocs.org/projects/pymodbus/badge/?version=latest
|
||||
:target: https://pymodbus.readthedocs.io/en/latest/?badge=latest
|
||||
:alt: Documentation Status
|
||||
.. image:: https://pepy.tech/badge/pymodbus
|
||||
:target: https://pepy.tech/project/pymodbus
|
||||
:alt: Downloads
|
||||
|
||||
Pymodbus is a full Modbus protocol implementation offering client/server with synchronous/asynchronous API a well as 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.6.1 -> 3.6.9: just plugin the new version, no changes needed.
|
||||
- 3.6.1 -> 3.7.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.7.2 <https://github.com/pymodbus-dev/pymodbus/releases/tag/v3.7.2>`_.
|
||||
|
||||
Bleeding edge (not released) is `dev <https://github.com/pymodbus-dev/pymodbus/tree/dev>`_.
|
||||
|
||||
Waiting for v3.8.0 (not released) is `wait_next_API <https://github.com/pymodbus-dev/pymodbus/tree/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 <https://pymodbus.readthedocs.io/en/latest/source/changelog.html>`_
|
||||
and all API changes are `documented <https://pymodbus.readthedocs.io/en/latest/source/api_changes.html>`_
|
||||
|
||||
A big thanks to all the `volunteers <https://pymodbus.readthedocs.io/en/latest/source/authors.html>`_ that helps make pymodbus a great project.
|
||||
|
||||
Source code on `github <https://github.com/pymodbus-dev/pymodbus>`_
|
||||
|
||||
Pymodbus in a nutshell
|
||||
----------------------
|
||||
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
|
||||
|
||||
Common features
|
||||
^^^^^^^^^^^^^^^
|
||||
* 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.9
|
||||
* thorough test suite, that test all corners of the library
|
||||
* automatically tested on Windows, Linux and MacOS combined with python 3.9 - 3.12
|
||||
* strongly typed API (py.typed present)
|
||||
|
||||
The modbus protocol specification: Modbus_Application_Protocol_V1_1b3.pdf can be found on
|
||||
`modbus org <https://modbus.org>`_
|
||||
|
||||
|
||||
Client Features
|
||||
^^^^^^^^^^^^^^^
|
||||
* 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
|
||||
* payload builder/decoder to help with complex data
|
||||
|
||||
`Client documentation <https://pymodbus.readthedocs.io/en/latest/source/client.html>`_
|
||||
|
||||
|
||||
Server Features
|
||||
^^^^^^^^^^^^^^^
|
||||
* 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
|
||||
|
||||
`Server documentation <https://pymodbus.readthedocs.io/en/latest/source/library/server.html>`_
|
||||
|
||||
|
||||
REPL Features
|
||||
^^^^^^^^^^^^^
|
||||
- server/client commandline emulator
|
||||
- easy test of real device (client)
|
||||
- easy test of client app (server)
|
||||
- simulation of broken requests/responses
|
||||
- simulation of error responses (hard to provoke in real devices)
|
||||
|
||||
`REPL documentation <https://github.com/pymodbus-dev/repl>`_
|
||||
|
||||
|
||||
Simulator Features
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
- server simulator with WEB interface
|
||||
- configure the structure of a real device
|
||||
- monitor traffic online
|
||||
- allow distributed team members to work on a virtual device using internet
|
||||
- simulation of broken requests/responses
|
||||
- simulation of error responses (hard to provoke in real devices)
|
||||
|
||||
`Simulator documentation <https://pymodbus.readthedocs.io/en/dev/source/simulator.html>`_
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
The client is the most typically used. It is embedded into applications,
|
||||
where it abstract the modbus protocol from the application by providing an
|
||||
easy to use API. The client is integrated into some well known projects like
|
||||
`home-assistant <https://www.home-assistant.io>`_.
|
||||
|
||||
Although most system administrators will find little need for a Modbus
|
||||
server, the server is handy to verify the functionality of an application.
|
||||
|
||||
The simulator and/or server is often used to simulate real life devices testing
|
||||
applications. The server is excellent to perform high volume testing (e.g.
|
||||
houndreds of devices connected to the application). The advantage of the server is
|
||||
that it runs not only a "normal" computers but also on small ones like Raspberry PI.
|
||||
|
||||
Since the library is written in python, it allows for easy scripting and/or integration into their existing
|
||||
solutions.
|
||||
|
||||
For more information please browse the project documentation:
|
||||
|
||||
https://readthedocs.org/docs/pymodbus/en/latest/index.html
|
||||
|
||||
|
||||
|
||||
Install
|
||||
-------
|
||||
The library is available on pypi.org and github.com to install with
|
||||
|
||||
- :code:`pip` for those who just want to use the library
|
||||
- :code:`git clone` for those who wants to help or just are curious
|
||||
|
||||
Be aware that there are a number of project, who have forked pymodbus and
|
||||
|
||||
- seems just to provide a version frozen in time
|
||||
- extended pymodbus with extra functionality
|
||||
|
||||
The latter is not because we rejected the extra functionality (we welcome all changes),
|
||||
but because the codeowners made that decision.
|
||||
|
||||
In both cases, please understand, we cannot offer support to users of these projects as we do not known
|
||||
what have been changed nor what status the forked code have.
|
||||
|
||||
A growing number of Linux distributions include pymodbus in their standard installation.
|
||||
|
||||
You need to have python3 installed, preferable 3.11.
|
||||
|
||||
Install with pip
|
||||
^^^^^^^^^^^^^^^^
|
||||
You can install using pip by issuing the following
|
||||
commands in a terminal window::
|
||||
|
||||
pip install pymodbus
|
||||
|
||||
If you want to use the serial interface::
|
||||
|
||||
pip install pymodbus[serial]
|
||||
|
||||
This will install pymodbus with the pyserial dependency.
|
||||
|
||||
Pymodbus offers a number of extra options:
|
||||
|
||||
- **repl**, needed by pymodbus.repl
|
||||
- **serial**, needed for serial communication
|
||||
- **simulator**, needed by pymodbus.simulator
|
||||
- **documentation**, needed to generate documentation
|
||||
- **development**, needed for development
|
||||
- **all**, installs all of the above
|
||||
|
||||
which can be installed as::
|
||||
|
||||
pip install pymodbus[<option>,...]
|
||||
|
||||
It is possible to install old releases if needed::
|
||||
|
||||
pip install pymodbus==3.5.4
|
||||
|
||||
|
||||
Install with github
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
On github, fork https://github.com/pymodbus-dev/pymodbus.git
|
||||
|
||||
Clone the source, and make a virtual environment::
|
||||
|
||||
|
||||
git clone git://github.com/<your account>/pymodbus.git
|
||||
cd pymodbus
|
||||
python3 -m venv .venv
|
||||
|
||||
Activate the virtual environment, this command needs repeated in every new terminal::
|
||||
|
||||
source .venv/bin/activate
|
||||
|
||||
To get a specific release::
|
||||
|
||||
git checkout v3.5.2
|
||||
|
||||
or the bleeding edge::
|
||||
|
||||
git checkout dev
|
||||
|
||||
Some distributions have an old pip, which needs to be upgraded:
|
||||
|
||||
pip install --upgrade pip
|
||||
|
||||
Install required development tools::
|
||||
|
||||
pip install ".[development]"
|
||||
|
||||
Install all (allows creation of documentation etc):
|
||||
|
||||
pip install ".[all]"
|
||||
|
||||
Install git hooks, that helps control the commit and avoid errors when submitting a Pull Request:
|
||||
|
||||
cp githooks/* .git/hooks
|
||||
|
||||
This installs dependencies in your virtual environment
|
||||
with pointers directly to the pymodbus directory,
|
||||
so any change you make is immediately available as if installed.
|
||||
|
||||
The repository contains a number of important branches and tags.
|
||||
* **dev** is where all development happens, this branch is not always stable.
|
||||
* **master** is where are releases are kept.
|
||||
* **vX.Y.Z** (e.g. v2.5.3) is a specific release
|
||||
|
||||
|
||||
Example Code
|
||||
------------
|
||||
For those of you that just want to get started fast, here you go::
|
||||
|
||||
from pymodbus.client import ModbusTcpClient
|
||||
|
||||
client = ModbusTcpClient('MyDevice.lan')
|
||||
client.connect()
|
||||
client.write_coil(1, True)
|
||||
result = client.read_coils(1,1)
|
||||
print(result.bits[0])
|
||||
client.close()
|
||||
|
||||
We provide a couple of simple ready to go clients:
|
||||
|
||||
- `async client <https://github.com/pymodbus-dev/pymodbus/blob/dev/examples/simple_async_client.py>`_
|
||||
- `sync client <https://github.com/pymodbus-dev/pymodbus/blob/dev/examples/simple_sync_client.py>`_
|
||||
|
||||
For more advanced examples, check out `Examples <https://pymodbus.readthedocs.io/en/dev/source/examples.html>`_ included in the
|
||||
repository. If you have created any utilities that meet a specific
|
||||
need, feel free to submit them so others can benefit.
|
||||
|
||||
Also, if you have a question, please `create a post in discussions q&a topic <https://github.com/pymodbus-dev/pymodbus/discussions/new?category=q-a>`_,
|
||||
so that others can benefit from the results.
|
||||
|
||||
If you think, that something in the code is broken/not running well, please `open an issue <https://github.com/pymodbus-dev/pymodbus/issues/new>`_,
|
||||
read the Template-text first and then post your issue with your setup information.
|
||||
|
||||
`Example documentation <https://pymodbus.readthedocs.io/en/dev/source/examples.html>`_
|
||||
|
||||
|
||||
Contributing
|
||||
------------
|
||||
Just fork the repo and raise your Pull Request against :code:`dev` branch.
|
||||
|
||||
We always have more work than time, so feel free to open a discussion / issue on a theme you want to solve.
|
||||
|
||||
If your company would like your device tested or have a cloud based device
|
||||
simulation, feel free to contact us.
|
||||
We are happy to help your company solve your modbus challenges.
|
||||
|
||||
That said, the current work mainly involves polishing the library and
|
||||
solving issues:
|
||||
|
||||
* Fixing bugs/feature requests
|
||||
* Architecture documentation
|
||||
* Functional testing against any reference we can find
|
||||
|
||||
There are 2 bigger projects ongoing:
|
||||
|
||||
* rewriting the internal part of all clients (both sync and async)
|
||||
* Add features to and simulator, and enhance the web design
|
||||
|
||||
|
||||
Development instructions
|
||||
------------------------
|
||||
The current code base is compatible with python >= 3.9.
|
||||
|
||||
Here are some of the common commands to perform a range of activities::
|
||||
|
||||
source .venv/bin/activate <-- Activate the virtual environment
|
||||
./check_ci.sh <-- run the same checks as CI runs on a pull request.
|
||||
|
||||
|
||||
Make a pull request::
|
||||
|
||||
git checkout dev <-- activate development branch
|
||||
git pull <-- update branch with newest changes
|
||||
git checkout -b feature <-- make new branch for pull request
|
||||
... make source changes
|
||||
git commit <-- commit change to git
|
||||
git push <-- push to your account on github
|
||||
|
||||
on github open a pull request, check that CI turns green and then wait for review comments.
|
||||
|
||||
Test your changes::
|
||||
|
||||
cd test
|
||||
pytest
|
||||
|
||||
you can also do extended testing::
|
||||
|
||||
pytest --cov <-- Coverage html report in build/html
|
||||
pytest --profile <-- Call profile report in prof
|
||||
|
||||
Internals
|
||||
^^^^^^^^^
|
||||
|
||||
There are no documentation of the architecture (help is welcome), but most classes and
|
||||
methods are documented:
|
||||
|
||||
`Pymodbus internals <https://pymodbus.readthedocs.io/en/dev/source/internals.html>`_
|
||||
|
||||
|
||||
Generate documentation
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**Remark** Assumes that you have installed documentation tools:;
|
||||
|
||||
pip install ".[documentation]"
|
||||
|
||||
to build do::
|
||||
|
||||
cd doc
|
||||
./build_html
|
||||
|
||||
The documentation is available in <root>/build/html
|
||||
|
||||
Remark: this generates a new zip/tgz file of examples which are uploaded.
|
||||
|
||||
|
||||
License Information
|
||||
-------------------
|
||||
|
||||
Released under the `BSD License <https://github.com/pymodbus-dev/pymodbus/blob/dev/LICENSE>`_
|
||||
@@ -0,0 +1,135 @@
|
||||
../../../bin/pymodbus.simulator,sha256=xsTxg2p5JdmErh6GOD1bDWUwGX1RmN4PsTRohcrLVwE,250
|
||||
pymodbus-3.7.2.dist-info/AUTHORS.rst,sha256=xQE9DZOIQ5nGAp3erZvJ9KP1XX-q5XfU9fhk7nz6pAU,2695
|
||||
pymodbus-3.7.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
pymodbus-3.7.2.dist-info/LICENSE,sha256=R_kEJJFy55Wmsy3pH0cQcyl77__XThfK_CiNNIpVly4,1367
|
||||
pymodbus-3.7.2.dist-info/METADATA,sha256=A6tCF1P4h39XcyRZcqNS2pqpdtc3ganjlHTXQ5uIc2s,15288
|
||||
pymodbus-3.7.2.dist-info/RECORD,,
|
||||
pymodbus-3.7.2.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
|
||||
pymodbus-3.7.2.dist-info/entry_points.txt,sha256=-ig4bOfoNwZ2C3GqUWs2DgArzF8YzgdlmcWOUa1EjTc,75
|
||||
pymodbus-3.7.2.dist-info/top_level.txt,sha256=HJWcaj1-eMuBze0N2TieOGTgQD6XNXgTaqG7Ik6oxw0,9
|
||||
pymodbus-3.7.2.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
||||
pymodbus/__init__.py,sha256=LSp2a7A2pJ1MyyP4golTLH_mbznKLUsNNjreZRq3sSI,512
|
||||
pymodbus/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/constants.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/device.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/events.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/exceptions.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/factory.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/logging.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/payload.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/transaction.cpython-312.pyc,,
|
||||
pymodbus/__pycache__/utilities.cpython-312.pyc,,
|
||||
pymodbus/client/__init__.py,sha256=fkvpNNXZfVpLtYbDHpf7cAIcHq-iNtrMLljySOD-Sds,603
|
||||
pymodbus/client/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/base.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/mixin.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/modbusclientprotocol.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/serial.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/tcp.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/tls.cpython-312.pyc,,
|
||||
pymodbus/client/__pycache__/udp.cpython-312.pyc,,
|
||||
pymodbus/client/base.py,sha256=l483WHE_qMrus_xp9ukeBN1mzeV9CuDXUDyccmbT92Y,10462
|
||||
pymodbus/client/mixin.py,sha256=s_FHrYdVAJjM4sx_gqowioN9yRtVhkwWYNR2DOrZTuk,18025
|
||||
pymodbus/client/modbusclientprotocol.py,sha256=ihiSdRTFjsdU8ErCvW5UDeishGWxu_XmqBjYi3slkoo,2770
|
||||
pymodbus/client/serial.py,sha256=dOds9RrVVUOKKL0ya1EjYaOD36ERa-Kh6sH1cferdww,10489
|
||||
pymodbus/client/tcp.py,sha256=hVDsksoKoRTgj07TPRshISx2jdRwq930Ipb7AaH2jpE,10355
|
||||
pymodbus/client/tls.py,sha256=EAl6rl7OYZsm42WBEFDvyAZYxnhWz7v5LJqe8qdlI9E,7854
|
||||
pymodbus/client/udp.py,sha256=_V9j7J9A8r248nV25YUnFAhRI0rLL0PfH3nUXwouAXU,6915
|
||||
pymodbus/constants.py,sha256=SY8UeXMtCiNrzPidW8drNmv07PuNsConfrsI6CEcNs8,3499
|
||||
pymodbus/datastore/__init__.py,sha256=7DoMjoxfHQYq_7Sn9buUq4dOOHzNot113AmrwgEHliE,491
|
||||
pymodbus/datastore/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/datastore/__pycache__/context.cpython-312.pyc,,
|
||||
pymodbus/datastore/__pycache__/remote.cpython-312.pyc,,
|
||||
pymodbus/datastore/__pycache__/simulator.cpython-312.pyc,,
|
||||
pymodbus/datastore/__pycache__/store.cpython-312.pyc,,
|
||||
pymodbus/datastore/context.py,sha256=eICS-XBGrumZw81rpd7_WuRXllzU6qJNXEZjOoWpc_U,9061
|
||||
pymodbus/datastore/remote.py,sha256=3NbJWbFc3NOgHuIV4jFtxY0tCKjUTuaZM9eXI3luz80,4418
|
||||
pymodbus/datastore/simulator.py,sha256=H-5Y_6UiYF3kpo0-IY3e-BxMaSSJVyvyabjcS16WDIs,30931
|
||||
pymodbus/datastore/store.py,sha256=-XRkFlbj6igeSU7WXf754fJJg53OwlSTvO2g9LgzHt0,12036
|
||||
pymodbus/device.py,sha256=FP76VC0jxhTLiWNUbSB1QaF4AYAKCLI6lFde8futaN8,22313
|
||||
pymodbus/events.py,sha256=6CReszGaobVN-4lXPcUmd3KbPQb-lYRHnxrOZNyJPQA,6420
|
||||
pymodbus/exceptions.py,sha256=cxHWXIj9LWBa8Ckvvbki3J36jySB0fFJiyEd9h5bkv4,3189
|
||||
pymodbus/factory.py,sha256=qTLpStniWXMByimWNDB3HdljxW1sJl4k4E_ymv4T4-8,12214
|
||||
pymodbus/framer/__init__.py,sha256=wOKJsY3ft1xlAgxyXBW8Xe2aU14o54i-N2pfbcLA75I,764
|
||||
pymodbus/framer/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/ascii.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/base.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/framer.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/old_framer_ascii.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/old_framer_base.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/old_framer_rtu.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/old_framer_socket.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/old_framer_tls.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/raw.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/rtu.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/socket.cpython-312.pyc,,
|
||||
pymodbus/framer/__pycache__/tls.cpython-312.pyc,,
|
||||
pymodbus/framer/ascii.py,sha256=BPgnq2jzClDt5yZBEUU3oNJnnWXyptTM6HF3ByUEaXM,2924
|
||||
pymodbus/framer/base.py,sha256=tVVgAVS8CoQThh-GNmENnuRK0tjEH8TCRaZW1lNjM_M,1078
|
||||
pymodbus/framer/framer.py,sha256=uZ9L8St9LhdZJdFfacSgywMSVcPIlfh7ro8vnKRvJF8,3881
|
||||
pymodbus/framer/old_framer_ascii.py,sha256=whTBxK44Q1bnK2aTva3YR8esE7_qclsPcSxbgUiymHk,2535
|
||||
pymodbus/framer/old_framer_base.py,sha256=j371lSflmjmXhkuUAjI7r0vjv8-MdTbsgNUirkzRxyo,5385
|
||||
pymodbus/framer/old_framer_rtu.py,sha256=3RPjfqN9GU5NAxIiWWs3hCYCdDpr_srQEngYK06BotQ,9421
|
||||
pymodbus/framer/old_framer_socket.py,sha256=GynFudHSDmx3lplIXJXv9P-wK4fKGsH3KJiaiNOcHAI,3425
|
||||
pymodbus/framer/old_framer_tls.py,sha256=qdBUbEe-oeqUg_AGOK34biHN3urCVydvG_zSi8ac2sk,2261
|
||||
pymodbus/framer/raw.py,sha256=MLWIDng4T7KsrzoDwYPbpAdOukE6tXGh1SE_gsp4XPY,970
|
||||
pymodbus/framer/rtu.py,sha256=JXQPKR7eS3LE4ypzato7ml8htdNMJxMElQWFtiadOO8,5441
|
||||
pymodbus/framer/socket.py,sha256=cO9qRXvDwPlKix0kCqn4jbsHgJOtdsCk2WMn_ktQiIo,1432
|
||||
pymodbus/framer/tls.py,sha256=SY-9wHE0r75dpdaT9NOHdjHrE5bgDCwOcPbexZvDvFk,492
|
||||
pymodbus/logging.py,sha256=cfYnB5qswx28V3AVhRGhq8o6Q5z0x4D-NMVacCTslHs,3926
|
||||
pymodbus/payload.py,sha256=dyjjfhCjueg1PIrdiTufJPaq1jxSu7VD-KiICzS6C-w,15487
|
||||
pymodbus/pdu/__init__.py,sha256=BFTQv0r2cLjU8ZnUDjbZEFTCbjnKAWNjdnnSeY5pOOE,328
|
||||
pymodbus/pdu/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/bit_read_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/bit_write_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/diag_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/file_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/mei_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/other_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/pdu.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/register_read_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/__pycache__/register_write_message.cpython-312.pyc,,
|
||||
pymodbus/pdu/bit_read_message.py,sha256=Wwiv3tXR7BCdADT1_Nbfcq-AaWoQsYTywuxScMJOx2k,9520
|
||||
pymodbus/pdu/bit_write_message.py,sha256=9MkkSlBymXK1WKQyxltrWJYb866xorTbTCe8CfaXOpw,9459
|
||||
pymodbus/pdu/diag_message.py,sha256=jIyeNiL_crTlZv6qhRqgW1J4ASq1IIcD_nsoynytGKA,30195
|
||||
pymodbus/pdu/file_message.py,sha256=I5cfoSvbCYLzQV2RnQkjqiACvMHjp9IdhTnalypD9lA,15064
|
||||
pymodbus/pdu/mei_message.py,sha256=N0Wimf6ja94ozMlkrMVV27OctN3LLvpwUBYicGrH9_c,7891
|
||||
pymodbus/pdu/other_message.py,sha256=ej_FsUXmDiVT5ypKhspUOEhLCGtDfOnZdG_9Vlw_u-4,15703
|
||||
pymodbus/pdu/pdu.py,sha256=_AUFqTk-82HL8SCdkj1AJP5wUPTItNFJEXMb7ymUVyA,7926
|
||||
pymodbus/pdu/register_read_message.py,sha256=RV3CVYFNFjG5M5g8a653gk7e8oxP7p-X8vK57i62Qy8,13265
|
||||
pymodbus/pdu/register_write_message.py,sha256=ZeNs6VUu7lvgwr4D-oh4WhEJm8HDQ2EirWbHfL3JBPA,12499
|
||||
pymodbus/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
pymodbus/server/__init__.py,sha256=q6EiG-hXtjtj-OP5a39qmUPlFiF18HuAnk7J0j3JNJE,996
|
||||
pymodbus/server/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/server/__pycache__/async_io.cpython-312.pyc,,
|
||||
pymodbus/server/async_io.py,sha256=g_nZY1a0jS-EtPwwFF9GGObsw3KoEdNrUVRTUuyvnFU,26436
|
||||
pymodbus/server/simulator/__init__.py,sha256=TkIbeFNGu-JC0VbN64G4ImZOZdWUTZyXY0x1IQY0OQk,18
|
||||
pymodbus/server/simulator/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/server/simulator/__pycache__/custom_actions.cpython-312.pyc,,
|
||||
pymodbus/server/simulator/__pycache__/http_server.cpython-312.pyc,,
|
||||
pymodbus/server/simulator/__pycache__/main.cpython-312.pyc,,
|
||||
pymodbus/server/simulator/custom_actions.py,sha256=96R3tp7u5yGF5P4gNvIde9pY3M5KhlkEgGstHzg-Szk,187
|
||||
pymodbus/server/simulator/http_server.py,sha256=MhJt98tdyiMv5rOjEAPeNqJbRLGG1PGfS-wXm8gcBjo,31617
|
||||
pymodbus/server/simulator/main.py,sha256=kKceLq968V7u2mnFMpsnn2O-aFeHde6evCEH00A98S4,4200
|
||||
pymodbus/server/simulator/setup.json,sha256=SG-qrG50Nh1zM_YHPKm0QIo2gh-zjKorGzsbPLsvODU,7643
|
||||
pymodbus/server/simulator/web/apple120.png,sha256=kymnXpkuOnlk13QIlBHZ30RXqYL0Mep6PQ7BMHhON14,11369
|
||||
pymodbus/server/simulator/web/apple152.png,sha256=56hV4HGeyfnBlbHgnMt_shWuVTJB7dKXx7EQpt9rjEc,15391
|
||||
pymodbus/server/simulator/web/apple60.png,sha256=2YegT0ZTkBCQ3v32S8dmUOqCLdXXg2UnFp4QKYMWGrQ,4817
|
||||
pymodbus/server/simulator/web/apple76.png,sha256=LDrwW4YW1ijbx1k2i384wka05U9NvBW5yvNfCTEXDe0,6344
|
||||
pymodbus/server/simulator/web/favicon.ico,sha256=-eUdKiH2TBpF3HHawVjLnIaP_Y1oqe2t_hS0dOCY2ZY,12014
|
||||
pymodbus/server/simulator/web/generator/calls,sha256=Lr7tTaTf8M7XT2vlrvROqLjyA07miMOExdsi7tmu60A,4314
|
||||
pymodbus/server/simulator/web/generator/log,sha256=D-lDQKT0SZoNzTGZL-B05RdjvPdRF_6WxB5mJrpnaGc,1132
|
||||
pymodbus/server/simulator/web/generator/pymodbus_icon_original.png,sha256=0VIAZ8wS-SP9qUfBVHaChzcNrAQzojyacFnizcieLIY,5850
|
||||
pymodbus/server/simulator/web/generator/registers,sha256=7qD_pRY8szWJp9miATGVdCrUSkV1m0U7ZcRGVPsuq2U,2710
|
||||
pymodbus/server/simulator/web/generator/server,sha256=lvkxOEA9HtP9cWhcabWK4veFIiNDpg4HunyvcedVul0,893
|
||||
pymodbus/server/simulator/web/index.html,sha256=TQO1qDFdCAvEF5t2yS2xJ-IUuvg1EcYAP_0qTxvex2c,1944
|
||||
pymodbus/server/simulator/web/pymodbus.css,sha256=0Nc2PYZ6bEgvOnvvSXICJvAhFJI-m7XOFDrCNIfcieA,919
|
||||
pymodbus/server/simulator/web/welcome.html,sha256=6VLVyWdXMIVawjE56IkXITlotkXG-kJhu5zjjzZOXuI,710
|
||||
pymodbus/transaction.py,sha256=YK5QRbNGgBbkp7lqU-OJlE3MMqt9c_OCYa0GoE6-ZhA,18636
|
||||
pymodbus/transport/__init__.py,sha256=H9lHMyh5as-OlNnfSUYbaa8pFjf1D7QZt0skOWX_C0A,225
|
||||
pymodbus/transport/__pycache__/__init__.cpython-312.pyc,,
|
||||
pymodbus/transport/__pycache__/serialtransport.cpython-312.pyc,,
|
||||
pymodbus/transport/__pycache__/transport.cpython-312.pyc,,
|
||||
pymodbus/transport/serialtransport.py,sha256=bWQ-HjFLrWHVmRZXiwOVmHR2IoAvj0eM9SVUTOmigAQ,6223
|
||||
pymodbus/transport/transport.py,sha256=sntfWp3swP-oNCkhyMNepVBmm1qzMcM2Y2jGGor3aXo,22907
|
||||
pymodbus/utilities.py,sha256=TYXT2kfqb4Zg6Q1npTPvd9qsOTe6DCTHu2cUyh83Ips,5495
|
||||
@@ -0,0 +1,5 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: setuptools (73.0.1)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[console_scripts]
|
||||
pymodbus.simulator = pymodbus.server.simulator.main:main
|
||||
@@ -0,0 +1 @@
|
||||
pymodbus
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user