pymodbus: создание запроса и получение ответа

Может кто-нибудь объяснить, как создать запрос и получить ответ правильно, используя pymodbus через Modbus TCP/IP?

У меня есть ПЛК, который я хочу использовать в качестве подчиненного, а ПК - в качестве главного.

Я пытаюсь сделать это таким образом:

from pymodbus.client.sync import ModbusTcpClient

host = '192.168.56.9'
port = 502   

client = ModbusTcpClient(host, port)
client.connect()

#Register address 0x102A (4138dec) with a word count of 1
#Value - MODBUS/TCP Connections
#Access - Read
#Description - Number of TCP connections

request = client.read_holding_registers(4138, 1) 
response = client.execute(request)

print response

>>> ReadRegisterResponse (1)

2 ответа

Установить unit аргумент и использовать print(request.registers) вместо print(request),

Вот пример:

request = client.read_holding_registers(4138, 1, unit=1)  # Notice: Set the unit argument.

if not request.isError():
    '''isError() method implemented in pymodbus 1.4.0 and above'''

    result = request.registers  # Your problem is here.
    print(result)

else:
    # Handle Error.
    print('Unable to read or there is the connection problem.')

Вы могли бы выполнить dir(response) чтобы проверить, из чего состоит ответ, но если хозяин pymodbus TCP аналогичен реализации последовательного мастера RTU, тогда данные доступны в поле Registers, поэтому попробуйте напечатать response.Registers вместо response. response.Registers должен быть одноэлементным массивом, содержащим значение регистра, запрошенного вами для чтения.

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