pymodbus是一个Python编写的MODBUS通信协议库,支持RTU、ASCII和TCP三种传输方式。本文将介绍如何使用pymodbus进行TCP通信。

  1. 安装pymodbus

可以使用pip安装pymodbus,命令如下:

pip install pymodbus
  1. 创建Modbus TCP客户端

在代码中引入Modbus TCP客户端:

from pymodbus.client.sync import ModbusTcpClient

然后创建Modbus TCP客户端对象:

client = ModbusTcpClient('localhost', port=502)

其中,localhost为Modbus TCP服务器的IP地址,port为Modbus TCP服务器的端口号,默认为502。

  1. 连接Modbus TCP服务器

连接Modbus TCP服务器:

client.connect()

如果连接成功,返回True,否则返回False

  1. 读取线圈状态

读取线圈状态,例如读取线圈0的状态:

result = client.read_coils(0, 1)

其中,0为线圈的地址,1为读取的线圈数量。

如果读取成功,result.bits[0]为线圈0的状态,返回TrueFalse,否则返回一个Exception对象。

  1. 读取离散输入状态

读取离散输入状态,例如读取离散输入0的状态:

result = client.read_discrete_inputs(0, 1)

其中,0为离散输入的地址,1为读取的离散输入数量。

如果读取成功,result.bits[0]为离散输入0的状态,返回TrueFalse,否则返回一个Exception对象。

  1. 读取保持寄存器的值

读取保持寄存器的值,例如读取保持寄存器0的值:

result = client.read_holding_registers(0, 1)

其中,0为保持寄存器的地址,1为读取的保持寄存器数量。

如果读取成功,result.registers[0]为保持寄存器0的值,否则返回一个Exception对象。

  1. 读取输入寄存器的值

读取输入寄存器的值,例如读取输入寄存器0的值:

result = client.read_input_registers(0, 1)

其中,0为输入寄存器的地址,1为读取的输入寄存器数量。

如果读取成功,result.registers[0]为输入寄存器0的值,否则返回一个Exception对象。

  1. 写入单个线圈状态

写入单个线圈状态,例如将线圈0的状态设置为True:

result = client.write_coil(0, True)

其中,0为线圈的地址,True为要写入的状态。

如果写入成功,返回True,否则返回一个Exception对象。

  1. 写入多个线圈状态

写入多个线圈状态,例如将线圈0、1、2的状态设置为True、False、True:

result = client.write_coils(0, [True, False, True])

其中,0为线圈的起始地址,[True, False, True]为要写入的状态列表。

如果写入成功,返回True,否则返回一个Exception对象。

  1. 写入单个保持寄存器的值

写入单个保持寄存器的值,例如将保持寄存器0的值设置为123:

result = client.write_register(0, 123)

其中,0为保持寄存器的地址,123为要写入的值。

如果写入成功,返回True,否则返回一个Exception对象。

  1. 写入多个保持寄存器的值

写入多个保持寄存器的值,例如将保持寄存器0、1、2的值设置为123、456、789:

result = client.write_registers(0, [123, 456, 789])

其中,0为保持寄存器的起始地址,[123, 456, 789]为要写入的值列表。

如果写入成功,返回True,否则返回一个Exception对象。

  1. 断开与Modbus TCP服务器的连接

断开与Modbus TCP服务器的连接:

client.close()

以上就是使用pymodbus进行TCP通信的基本操作。在实际应用中,需要根据具体的需求进行相应的读写操作。


原文地址: https://www.cveoy.top/t/topic/bI7M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录