Python Modbus RTU через TCP

Я пытаюсь читать и записывать данные через Modbus TCP с помощью python. Когда я использую ModbusPoll со следующей настройкой, все работает.

Сейчас я пытаюсь прочитать данные с помощью python, и для этого я использую библиотеку pymodbus .Мой код выглядит так:

      from pymodbus.client.sync import ModbusTcpClient
from pymodbus.transaction import ModbusRtuFramer as ModbusFramer

client = ModbusTcpClient("192.168.0.7", port=502, framer=ModbusFramer)
success = client.connect()

read = client.read_holding_registers(address=4000)
read.registers

Но я всегда получаю следующую ошибку:

ModbusIOException(InvalidMessageReceivedException('Ответ не получен, ожидается не менее 2 байтов (получено 0)'), 1)

2 ответа

Для чтения регистра временного хранения требуется устройство для правильного чтения сообщения.

      read = client.read_holding_registers(address=4000, unit=1)

Это то, что помогло мне.

Проверьте slave_ID вашего устройства (unit=slave_ID). Необязательно 1 или 0. В моем случае - 240, например.

      result = client.read_holding_registers(address=0x0010, count = 2, **unit=240**)

В документации говорится:

          def write_register(self, address, value, **kwargs):
    '''

    :param address: The starting address to write to
    :param value: The value to write to the specified address
    **:param unit: The slave unit this request is targeting**
    :returns: A deferred response handle
    '''

И:

          def read_holding_registers(self, address, count=1, **kwargs):
    '''

    :param address: The starting address to read from
    :param count: The number of registers to read
    **:param unit: The slave unit this request is targeting**
    :returns: A deferred response handle
    '''

Посмотрите файл "common.py" или нажмите Ctrl+B, пока курсор находится на функции.

Другие вопросы по тегам