Я пытаюсь преобразовать данные из собственного регистра Modbus (со знаком) в 32-битное число с плавающей запятой с заменой байтов с прямым порядком байтов в Python, но, похоже, мне не удалось выполнить преобразование правильно. Я попробовал несколько разных подходов, но ни один из них пока не сработал, и я не уверен, кроется ли проблема в моем методе или в самих данных.
В моей ссылке первоначальный тип данных — «Собственный регистр Modbus — со знаком». Преобразование, которого я пытаюсь достичь, - это преобразование этого типа в «32-битное число с плавающей запятой — замена байтов с прямым порядком байтов». Вот пример входных и ожидаемых выходных значений:
Код: Выделить всё
SlewEncoder_input_and_output = [
(2100, -1533, -601.2821),
(2100, -1533, -3395.887),
(1592, -1502, 19834.04),
(-305, 1807, -106.4646),
(-463, -1566, -1045.991)
]
У меня также есть другая ссылка, содержащая некоторые образцы данных, которые, похоже, находятся в 32-битном формате обмена байтами с прямым порядком байтов (результат). Однако я не совсем уверен в исходном типе данных; он похож на предыдущий (родной регистр Modbus — подписанный), но объединен в одно подписанное значение регистра:
Код: Выделить всё
SlewEncoder_input_and_output = [
(1505910957, -0.963)
]
Вот последнее, что я пробовал (безуспешно, результат представляет собой просто огромное значение):
Код: Выделить всё
upper = 2100
lower = -1533
int_value = ((upper & 0xFFFF)
Подробнее здесь: [url]https://stackoverflow.com/questions/79121602/native-modbus-register-signed-to-32-bit-float-with-little-endian-byte-swap[/url]