Как я могу интерпретировать вывод регистров, используя pymodbus? - PullRequest
0 голосов
/ 24 марта 2020

Я использую pymodbus для получения значений нескольких регистров через Modbus. У меня есть связь и результаты, но я не понимаю, как интерпретировать результаты. Мой код:

from pymodbus.client.sync import ModbusTCPClient

client = ModbusTcpClient(host ="192.168.0.42", port= 502)
client.conect()
rr = client.read_input_registers(0,2, unit=42)
print(rr.registers)

Результат, который я получаю [37139,16190]. Документация по инструменту, с которым я работаю, гласит: «Эти регистры по 16 битов в каждом ... Все значения представлены в виде 32-битного стандарта IEEE 754 с плавающей запятой. При этом используются 2 последовательных регистра, в первую очередь младшие 16 бит. " Означает ли это, что полученное число с плавающей запятой равно 1619037139? Результат должен быть в диапазоне 0,2-0,4 (округлено). Я ценю любую помощь!

1 Ответ

1 голос
/ 25 марта 2020

IEEE 754 - средство кодирования чисел с плавающей запятой, а "младшие 16 бит в первую очередь" - кодирование с прямым порядком байтов; pymodbus может помочь вам расшифровать этот формат:

from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder

registers = [37139,16190]
decoder = BinaryPayloadDecoder.fromRegisters(registers, wordorder=Endian.Little)
print ("Result: " + str(decoder.decode_32bit_float()))

( попробуйте - результат 0,18659807741641998, что соответствует вашим ожиданиям).

Обратите внимание, что - полезный инструмент для получения необработанных (шестнадцатеричных) результатов запроса Modbus и их декодирования несколькими способами.

...