How to Use Modbus with Python: Simple Guide and Example
To use
Modbus with Python, install the pymodbus library and create a client to connect to a Modbus server. Use the client methods like read_holding_registers or write_register to communicate with Modbus devices.Syntax
The basic syntax involves importing pymodbus, creating a Modbus client, connecting to the server, and calling read or write methods.
- ModbusTcpClient(host, port): Creates a client for TCP connection.
- connect(): Opens connection to the Modbus server.
- read_holding_registers(address, count): Reads registers starting at
address. - write_register(address, value): Writes a value to a register.
- close(): Closes the connection.
python
from pymodbus.client.sync import ModbusTcpClient client = ModbusTcpClient('192.168.1.10', port=502) client.connect() response = client.read_holding_registers(0, 2) if not response.isError(): print(response.registers) client.close()
Example
This example connects to a Modbus TCP server at IP 192.168.1.10, reads two holding registers starting at address 0, and prints their values.
python
from pymodbus.client.sync import ModbusTcpClient client = ModbusTcpClient('192.168.1.10', port=502) if client.connect(): response = client.read_holding_registers(0, 2) if not response.isError(): print('Register values:', response.registers) else: print('Error reading registers') client.close() else: print('Failed to connect to Modbus server')
Output
Register values: [123, 456]
Common Pitfalls
- Not installing
pymodbusbefore running code (pip install pymodbus). - Using wrong IP address or port (default Modbus TCP port is 502).
- Not checking if connection was successful before reading/writing.
- Ignoring error responses from Modbus server.
- For serial Modbus RTU, using TCP client instead of serial client.
python
from pymodbus.client.sync import ModbusTcpClient client = ModbusTcpClient('192.168.1.10', port=502) # Wrong: Not checking connection response = client.read_holding_registers(0, 2) # Correct: if client.connect(): response = client.read_holding_registers(0, 2) if not response.isError(): print(response.registers) client.close()
Quick Reference
| Command | Description |
|---|---|
| ModbusTcpClient(host, port) | Create a Modbus TCP client to connect to server |
| connect() | Open connection to Modbus server |
| read_holding_registers(address, count) | Read holding registers starting at address |
| write_register(address, value) | Write a value to a register |
| close() | Close the connection |
Key Takeaways
Install pymodbus library to use Modbus with Python.
Always check if the client connects successfully before reading or writing.
Use the correct client type for your Modbus protocol (TCP or RTU).
Handle error responses to avoid silent failures.
Default Modbus TCP port is 502; ensure your device uses this or specify the correct port.