Преобразование ответа Modbus с использованием pymodbus - PullRequest
1 голос
/ 13 июня 2019

Я хочу соединить ПК с интеллектуальным счетчиком , который обеспечивает связь по протоколу Modbus TCP, ПК будет основным, и мне просто нужно прочитать регистры хранения и показать их в формате с плавающей запятой. Я использую Python с PyModbus 2.2.0 Мой код:

from pymodbus.client.sync import ModbusTcpClient

client = ModbusTcpClient('169.254.00.10')

result = client.read_holding_registers(1845,1,unit=0x01)
print('**************************************************************')
print(result)
client.close()

что я получаю:

DEBUG:pymodbus.transaction:Current transaction state - IDLE
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.transaction:SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x7 0x35 0x0 0x1
DEBUG:pymodbus.client.sync:New Transaction state 'SENDING'
DEBUG:pymodbus.transaction:Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
DEBUG:pymodbus.transaction:Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
DEBUG:pymodbus.transaction:RECV: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x6 0xc
DEBUG:pymodbus.framer.socket_framer:Processing: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x3 0x2 0x6 0xc
DEBUG:pymodbus.factory:Factory Response[ReadHoldingRegistersResponse: 3]
DEBUG:pymodbus.transaction:Adding transaction 1
DEBUG:pymodbus.transaction:Getting transaction 1
DEBUG:pymodbus.transaction:Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
**************************************************************
ReadRegisterResponse (1)

Знаете ли вы, как решить эту проблему с помощью pymodbus 2.2.0?

1 Ответ

0 голосов
/ 13 июня 2019

Вы должны извлечь регистры из своего ответа, попробуйте это:

print(result.registers)

Или, если вы хотите их один за другим:

for reg in result:
    print(reg)

Если вы не увереныесли ваш сервер работает, его IP-адрес или порт, рекомендуется использовать автономный инструмент для тестирования, если вы работаете в Windows, вы можете использовать QModMaster , чтобы убедиться в правильности настроек и сопоставления.

И обратите внимание, что только с одним регистром Modbus вы не можете получить число с плавающей запятой, потому что регистр Modbus имеет 16-битные целые числа.Если вы хотите получить число с плавающей запятой, вам нужно прочитать два регистра.

Если, с другой стороны, вы хотите проверить только свой код на стороне клиента, вы можете запустить этот пример на вашемкомпьютер одновременно с вашим клиентским кодом.Конечно, вы должны изменить IP-адрес в вашем скрипте на localhost, порт на 5020 и номер регистра, который вы читаете, на меньший номер (или увеличить размер хранилища данных сервера).Если вы работаете в Windows, вам может потребоваться отключить или создать правило на брандмауэре.

...