Python-библиотека и CLI для взаимодействия с Modbus TCP-устройствами. Поддерживает все function codes: чтение/запись coils, discrete inputs, holding/input registers. Используется для тестирования ПЛК, SCADA-систем, промышленных датчиков и систем управления зданиями.
pip install pyModbusTCP # Чтение регистров ПЛК from pyModbusTCP.client import ModbusClient client = ModbusClient(host="192.168.1.10", port=502, auto_open=True) regs = client.read_holding_registers(0, 10)
.. |badge_tests| image:: https://github.com/sourceperl/pyModbusTCP/actions/workflows/tests.yml/badge.svg?branch=master :target: https://github.com/sourceperl/pyModbusTCP/actions/workflows/tests.yml
.. |badge_docs| image:: https://readthedocs.org/projects/pymodbustcp/badge/?version=latest :target: http://pymodbustcp.readthedocs.io/
Простая библиотека клиентов Modbus/TCP для Python. pyModbusTCP написана на чистом Python без каких-либо расширений или внешних зависимостей в виде модулей.
Начиная с версии 0.1.0, также доступен сервер.
Модуль в настоящее время тестируется на Python 3.8, 3.9, 3.10, 3.11 и 3.12.
Для Linux, Mac OS и Windows.
Документация последнего релиза доступна онлайн по адресу https://pymodbustcp.readthedocs.io/.
Вы можете установить этот пакет из:
PyPI, простой способ:
.. code-block — bash
# установка последнего доступного релиза (стабильного)
sudo pip install pyModbusTCP
.. code-block — bash
# установка определенной версии (в данном случае релиз v0.1.10)
sudo pip install pyModbusTCP==v0.1.10
С GitHub:
.. code-block — bash
# установка определенной версии (в данном случае релиз v0.1.10) напрямую с серверов github
sudo pip install git+https://github.com/sourceperl/pyModbusTCP.git@v0.1.10
Примечание по использованию версий:
Со временем некоторые вещи могут измениться. Поэтому хорошей практикой является использование в вашем проекте всегда определенной версии пакета, а не полагаться на поведение по умолчанию. Без уточнения инструменты установки всегда будут устанавливать последнюю доступную версию пакета, что может иметь некоторые недостатки. Например, в pyModbusTCP автоматический режим открытия TCP будет активен по умолчанию начиная с версии 0.2.0. Это не так для предыдущих версий, и его вообще не существует до версии 0.0.12. Это может привести к некоторому странному поведению вашего приложения, если вы не осведомлены об изменении. Смотрите CHANGES <https://github.com/sourceperl/pyModbusTCP/blob/master/CHANGES>_ для детальной информации о доступных версиях.
Полные скрипты смотрите в папке examples/.
включить (для всех примеров) ~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block — python
from pyModbusTCP.client import ModbusClient
module init (TCP always open) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block — python
# TCP автоматическое подключение при первом запросе modbus
c = ModbusClient(host="localhost", port=502, unit_id=1, auto_open=True)
инициализация модуля (TCP открывается/закрывается для каждого запроса) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block — python
# TCP auto connect on modbus request, close after it
c = ModbusClient(host="127.0.0.1", auto_open=True, auto_close=True)
Read 2x 16 bits registers at modbus address 0 : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block — python
regs = c.read_holding_registers(0, 2)
if regs:
print(regs)
else:
print("ошибка чтения")
Записать значения 44 и 55 в регистры по modbus-адресу 10 :
**.. code-block** — python
if c.write_multiple_registers(10, [44,55]):
print("write ok")
else:
print("write error")