brainelectronics / micropython-modbus

MicroPython Modbus RTU Slave/Master and TCP Server/Slave library
GNU General Public License v3.0
104 stars 45 forks source link

modbus little endian #80

Open patfrench opened 1 year ago

patfrench commented 1 year ago

Description

modbus little endian

Hi,

Your library works perfectly! But I have a device that uses the "little endian byteorder".

How to add :

if lsb_first:
        formatcode = "<" # Little-endian
    else:
        formatcode = ">" # Big-endian

I think I'd have to add a constant for decoding

def read_holding_registers(starting_address: int, quantity: int) -> bytes:
    """
    Create Modbus Protocol Data Unit for reading holding registers.

    :param      starting_address:  The starting address
    :type       starting_address:  int
    :param      quantity:          Quantity of coils
    :type       quantity:          int

    :returns:   Packed Modbus message
    :rtype:     bytes
    """
    if not (1 <= quantity <= 125):
        raise ValueError('Invalid number of holding registers')

    return struct.pack('>BHH',
                       Const.READ_HOLDING_REGISTERS,
                       starting_address,
                       quantity)

I'd like to do it but I'm not sure of my abilities !

Thank you

Reproduction steps

juste a question

MicroPython version

v1.20

MicroPython board

ESP32

MicroPython Modbus version

v2.3.7

Relevant log output

"

User code

"

Additional informations

"