# Modbus RTU

## Example

Note

uModbus doesn’t support all the functions defined for Modbus RTU. It currently supports the following functions:

- 01: Read Coils

- 02: Read Discrete Inputs

- 03: Read Holding Registers

- 04: Read Input Registers

- 05: Write Single Coil

- 06: Write Single Register

- 15: Write Multiple Coils

- 16: Write Multiple Registers

    #!/usr/bin/env python
    # scripts/example/simple_rtu_client.py
    import fcntl
    import struct
    from serial import Serial, PARITY_NONE

    from umodbus.client.serial import rtu

    def get_serial_port():
        """ Return serial.Serial instance, ready to use for RS485."""
        port = Serial(port='/dev/ttyS1', baudrate=9600, parity=PARITY_NONE,
                      stopbits=1, bytesize=8, timeout=1)

        fh = port.fileno()

        # A struct with configuration for serial port.
        serial_rs485 = struct.pack('hhhhhhhh', 1, 0, 0, 0, 0, 0, 0, 0)
        fcntl.ioctl(fh, 0x542F, serial_rs485)

        return port

    serial_port = get_serial_port()

    # Returns a message or Application Data Unit (ADU) specific for doing
    # Modbus RTU.
    message = rtu.write_multiple_coils(slave_id=1, address=1, values=[1, 0, 1, 1])

    # Response depends on Modbus function code. This particular returns the
    # amount of coils written, in this case it is.
    response = rtu.send_message(message, serial_port)

    serial_port.close()

## API

umodbus.client.serial.rtu.send_message(adu, serial_port)

  Send ADU over serial to to server and return parsed response.

  Parameters:

    - adu – Request ADU.

    - sock – Serial port instance.

  Returns:

    Parsed response from server.

umodbus.client.serial.rtu.parse_response_adu(resp_adu, req_adu=None)

  Parse response ADU and return response data. Some functions require request ADU to fully understand request ADU.

  Parameters:

    - resp_adu – Resonse ADU.

    - req_adu – Request ADU, default None.

  Returns:

    Response data.

umodbus.client.serial.rtu.read_coils(slave_id, starting_address, quantity)

  Return ADU for Modbus function code 01: Read Coils.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.read_discrete_inputs(slave_id, starting_address, quantity)

  Return ADU for Modbus function code 02: Read Discrete Inputs.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.read_holding_registers(slave_id, starting_address, quantity)

  Return ADU for Modbus function code 03: Read Holding Registers.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.read_input_registers(slave_id, starting_address, quantity)

  Return ADU for Modbus function code 04: Read Input Registers.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.write_single_coil(slave_id, address, value)

  Return ADU for Modbus function code 05: Write Single Coil.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.write_single_register(slave_id, address, value)

  Return ADU for Modbus function code 06: Write Single Register.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.write_multiple_coils(slave_id, starting_address, values)

  Return ADU for Modbus function code 15: Write Multiple Coils.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.

umodbus.client.serial.rtu.write_multiple_registers(slave_id, starting_address, values)

  Return ADU for Modbus function code 16: Write Multiple Registers.

  Parameters:

    slave_id – Number of slave.

  Returns:

    Byte array with ADU.