pymodbus启动一个简单的modbus tcp client
前言
pymodbus是一个用Python实现的Modbus协议库,支持Modbus RTU、ASCII和TCP/IP通信。它提供了客户端(主站)和服务器(从站)的实现,适用于工业自动化、物联网(IoT)等场景。12
主要功能:
- 协议支持:兼容Modbus RTU、ASCII、TCP/IP。
- 同步/异步操作:支持同步和异步(基于asyncio)通信模式。
- 客户端与服务器:提供ModbusClient(主站)和ModbusServer(从站)的实现。
- 功能码覆盖:支持常用功能码如读取线圈(Read Coils)、写入寄存器(Write Registers)等。
实现
from pymodbus.client import ModbusTcpClient
import time
# PCL 设备的 IP 地址和端口号
ip_address = "192.168.3.4"
port = 502
# 建立 Modbus TCP 连接
client = ModbusTcpClient(host=ip_address, port= port)
if client.connect():
print("Modbus TCP client is running...")
read_bool_data_x = 0
write_bool_data_x = True
for i in range(10):
print("读取和写入循环第 %d 次" % (i + 1))
slave_address = 1 # 设备的从站地址
start_address = 300 # 起始地址
num_registers = 1 # 要读取的寄存器数量
try:
read_response = client.read_coils(address = start_address, count = num_registers, device_id = slave_address)
print(read_response)
if not read_response.isError():
read_bool_data_x = read_response.bits[0]
print("读取的数据: %d", read_bool_data_x)
else:
print("读取数据时出错:", read_response)
except Exception as e:
print("发生异常:", str(e))
try:
write_response = client.write_coil(address = start_address, value = write_bool_data_x, device_id = slave_address)
print(write_response)
if not write_response.isError():
# data = response.registers
print("写入的数据: %d", write_bool_data_x)
else:
print("写入数据时出错:", write_response)
except Exception as e:
print("发生异常:", str(e))
if write_bool_data_x == False :
write_bool_data_x = True
else:
write_bool_data_x = False
time.sleep(2)
# 关闭连接
client.close()
else:
print("无法连接到设备")
运行程序
"Python312\python.exe" e:/.../modbus_tcp_test/modbus_tcp_client.py
Modbus TCP client is running...
测试
这里使用Mthings作为modbus调试助手。3