-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Description
Versions
- Python: 3.9.1
- OS: Windows 10 Pro 2004
- Pymodbus: 2.5.1
- Modbus Hardware (if used):
Pymodbus Specific
- Client: rtu
Description
Need help with decoding Holding Registers to binary format. When reading, I get a value from 8 to 15 bits. I can't read the value from 0 to 7 bits. Thanks
Modbus Slave: ID:1 F:03
0: -47,2 (float32)
1:
2: -7565 (int)
3: -3 (int)
4: 4581 (uint)
5: 5555 (uint)
6: 67 (uint)
7: 76 (uint)
8: 0000 0001 0101 1001 (bool)
9: 0000 0100 0110 0011 (bool)
Code and Logs
# code
from pymodbus.client.sync import ModbusSerialClient
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.constants import Endian
client = ModbusSerialClient(method='rtu', port='COM5', baudrate=19200, timeout=3, parity='N', stopbits=1, bytesize=8)
if client.connect():
res1 = client.read_holding_registers(0, 10, unit=1)
res2 = client.read_holding_registers(0, 2, unit=1)
res3 = client.read_holding_registers(2, 1, unit=1)
res4 = client.read_holding_registers(3, 1, unit=1)
res5 = client.read_holding_registers(8, 1, unit=1)
if not res3.isError():
print(res1)
print(res1.registers)
print("-" * 60)
print(BinaryPayloadDecoder.fromRegisters(res2.registers, Endian.Big, Endian.Big).decode_32bit_float())
print(BinaryPayloadDecoder.fromRegisters(res3.registers, Endian.Big, Endian.Little).decode_16bit_int())
print(BinaryPayloadDecoder.fromRegisters(res4.registers, Endian.Big, Endian.Little).decode_16bit_int())
print(BinaryPayloadDecoder.fromRegisters(res5.registers, Endian.Big, Endian.Little).decode_bits())
else:
print(res3, 'Error')
# print('\n')
print("-" * 60)
else:
print('Cannot connect Modbus Server/Slave')
# logs
ReadHoldingRegistersResponse (10)
[49724, 52429, 57971, 65533, 4581, 5555, 67, 76, 345, 1123]
------------------------------------------------------------
-47.20000076293945
-7565
-3
[True, False, False, False, False, False, False, False]
------------------------------------------------------------
Process finished with exit code 0