pymodbus 是一个基于Python的开源Modbus协议实现库,主要用于工业自动化领域的设备通信。它支持Modbus RTU/ASCII over Serial(串口)及Modbus TCP/IP(以太网)协议,提供客户端(主站)和服务器(从站)功能,适用于PLC、传感器、仪表等设备的读写操作。其设计目标是为开发者提供轻量级、高灵活性的Modbus通信解决方案。
典型应用场景
- 工业自动化:与PLC(如西门子、三菱)通信,采集温度、压力数据。
- 能源监控:读取电表、水表的Modbus寄存器数据。
- 物联网网关:通过TCP将串口设备接入云端。
连接设备:
from pymodbus.client import ModbusTcpClient
from pymodbus.bit_read_message import ReadCoilsResponse
from pymodbus.register_read_message import ReadInputRegistersResponse
from pymodbus.exceptions import ConnectionException # 连接失败,用于异常处理
host = '127.0.0.1'#设备IP地址
port = 502
client = ModbusTcpClient(host,port)
if client.connect():
print("Modbus RTU Client Connected")
else:
print("Failed to connect to Modbus RTU Client")
读线圈
response = client.read_coils(address=1, count=5, unit=1)
if not response.isError():
print("coils Values: ", response.bits )
else:
print("Failed to read registers")
写线圈:
write_response = client.write_coil(address=1, value=True, unit=1)#SM
if not write_response.isError():
print("Written successfully")
else:
print("Failed to write coils")
写多个线圈:
values = [True, False, False, True, False]
write_response = client.write_coils(address=1, values=values, unit=1)
if not write_response.isError():
print("Multiple registers written successfully")
else:
print("Failed to write multiple registers")
读寄存器:
response = client.read_holding_registers(address=1, count=5, unit=1)
if not response.isError():
print("Register Values: ", response.registers)
else:
print("Failed to read registers")
写寄存器:
write_response = client.write_register(address=41088, value=25, unit=1)
if not write_response.isError():
print("Written successfully")
else:
print("Failed to write register")
写多个寄存器:
values = [17,23, 40, 60, 80, 100]
write_response = client.write_registers(address=41088, values=values, unit=1)
if not write_response.isError():
print("Multiple registers written successfully")
else:
print("Failed to write multiple registers")