Skip to content

Decoding Holding Registers to binary format #634

@fess1100

Description

@fess1100

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions