Python Проблема декодирования строки Modbus - PullRequest
0 голосов
/ 16 июня 2020

У меня проблема со строками в декодере pymodbus. Например, когда я пытаюсь прочитать abcdefg, pymodbus выдает мне badcfehg. Byteorder и wordorder не меняют результат.

Вот мой код:

result=client.read_holding_registers(25000,4)
decoder = BinaryPayloadDecoder.fromRegisters(result.registers,byteorder=Endian.Little,wordorder=Endian.Big)
decoder.decode_string(8)

Может кто-нибудь объяснить, почему порядок не меняет результат? Пробую со строительом, та же проблема. Однако у меня нет этой проблемы, например, с 32-битными числами с плавающей запятой.

Я также пробовал использовать более старую версию pymodbus, и она работает:

decoder = BinaryPayloadDecoder.fromRegisters(registers,endian=Endian.Little)

Примечание: я уже читал следующий topi c: pymodbus: Проблема с чтением строки и нескольких типов данных с устройства Modbus , но у меня нет доступа к серверу Modbus.

1 Ответ

0 голосов
/ 17 июня 2020

Проблема в том, что спецификации Modbus не определяют, в каком порядке отправляются два байта для символьных строк или даже в каком порядке отправляются 16-битные слова для 32-битных типов.

Тогда некоторые устройства Modbus отправлять байты или слова в порядке, а другие делают наоборот.

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

https://en.wikipedia.org/wiki/Endianness

...