ПЛК Я пытаюсь использовать минимальный modbus для write_float, для которого нужно поменять местами слова.
Я уже тестировал оборудование с Modbus Poll, который работает.
Minimal Modbus write_float также работает, но с неправильным порядком слов.
Я проверил решение документации для read_float, который работает с обходным путем.
"Workaround for floats with wrong byte order"
When I try to swap the words before the write_float
I get values that generate an error:
"raise TypeError('The {0} must be numerical.
Given: {1!r}'.format(description, inputvalue))
TypeError: The input value must be numerical.
Given: array([-9.8611155e+32], dtype=float32)"
Попытка обмана с отдельным write_register также приводит к ошибке для отрицательных значений:
plc1.write_register(28676, -5767,0,6,False)
"raise ValueError(errortext.format(value, formatstring))
ValueError: The value to send is probably out of range,
as the num-to-bytestring conversion failed. Value: -5767 Struct format
code is: >H"
Например:
Decimal float value of 123.456
with plc1.write_float(28672, 123.456, 2)
Мне нужно:
Word register 28672 dec-5767 hex word(42 F6)
Word register 28673 dec17142 hex word(E9 79)
Я получаю:
Word register 28672 dec 17142 hex word(E9 79)
Word register 28673 dec-5767 hex word(42 F6)