I'm trying to get a 32 bit float from PyModbus. When I "print" the result using decode_32bit_float() I get a floating point number as expected, however when I try to use the value I get the following
Traceback (most recent call last):
File "testing3.py", line 19, in <module>
'float': decoder.decode_32bit_float(),
File "/usr/lib/python2.6/site-packages/pymodbus-1.1.0-py2.6.egg/pymodbus/payload.py", line 305, in decode_32bit_float
return unpack(fstring, handle)[0]
struct.error: unpack requires a string argument of length 4
#!/usr/bin/env python
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.constants import Endian
client = ModbusClient("192.168.1.100", port=502)
client.connect()
rr = client.read_holding_registers(1000, 2, unit=22)
decoder = BinaryPayloadDecoder.fromRegisters(rr.registers, endian=Endian.Little)
#print decoder.decode_32bit_float()
# decoder.decode_32bit_float()
print decoder.decode_32bit_float()
decoded = {
'string': decoder.decode_string(8),
'float': decoder.decode_32bit_float(),
'16uint': decoder.decode_16bit_uint(),
'8int': decoder.decode_8bit_int(),
'bits': decoder.decode_bits(),
}
print "-" * 60
print "Decoded Data"
print "-" * 60
for name, value in decoded.items():
print ("%s\t" % name), value
client.close()