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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ Return ADU for Modbus function code 06: Write Single Register.
Parameters: slave_id – Number of slave. Returns: Byte array with ADU.