python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python pymodbus使用

python pymodbus模块的具体使用

作者:小灰灰搞电子

pymodbus是一个Python实现的Modbus协议库,支持TCP和RTU通信模式,支持读写线圈、离散输入、保持寄存器等数据类型,具有一定的参考价值,感兴趣的可以了解一下

一、详解

pymodbus是一个基于Python的开源库,用于实现Modbus通信协议。Modbus是一种广泛应用于工业自动化领域的串行通信协议,支持主从架构(客户端-服务器模型)。pymodbus库提供了完整的Modbus客户端(主站)和服务器(从站)功能,支持多种传输方式,包括Modbus RTU(串行通信)和Modbus TCP(以太网通信)。

1、 基础概念

Modbus协议定义了一套标准的数据模型和通信规则:

pymodmos库实现了这些概念,支持Python 3.6及以上版本,并兼容多种操作系统(Windows、Linux、macOS)。

2、核心功能

pymodbus提供模块化设计,主要组件包括:

关键优势:

3、安装与设置

安装pymodbus简单,通过pip命令即可:

pip install pymodbus

安装后,导入所需模块:

from pymodbus.client import ModbusTcpClient  # TCP客户端
from pymodbus.server import StartTcpServer    # TCP服务器
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext  # 数据存储

环境要求:

4、使用示例

以下示例展示常见场景,代码基于同步模式(异步模式类似,使用asyncio)。

示例1: Modbus TCP客户端(读取保持寄存器)
作为客户端,连接到服务器并读取数据。

from pymodbus.client import ModbusTcpClient

# 连接到服务器(假设IP: 127.0.0.1, 端口: 502)
client = ModbusTcpClient('127.0.0.1', port=502)
client.connect()

# 读取保持寄存器(地址0,数量2个寄存器)
result = client.read_holding_registers(address=0, count=2, unit=1)  # unit为从站ID
if not result.isError():
    print("读取成功:", result.registers)  # 输出寄存器值列表,如[100, 200]
else:
    print("错误:", result)

client.close()  # 关闭连接

示例2: Modbus TCP服务器(模拟从站)
创建服务器并存储数据。

from pymodbus.server import StartTcpServer
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
from pymodbus.datastore import ModbusSequentialDataBlock

# 初始化数据存储:设置保持寄存器(地址0-9,初始值0)
store = ModbusSlaveContext(
    hr=ModbusSequentialDataBlock(0, [0]*10)  # hr表示保持寄存器
)
context = ModbusServerContext(slaves=store, single=True)  # single模式为单从站

# 启动服务器(端口502)
StartTcpServer(context=context, address=("0.0.0.0", 502))

示例3: Modbus RTU通信(使用串口)
适用于串行设备。

from pymodbus.client import ModbusSerialClient

# 配置串口(端口COM1, 波特率9600)
client = ModbusSerialClient(method='rtu', port='COM1', baudrate=9600)
client.connect()

# 写单个线圈(地址0,值True)
client.write_coil(address=0, value=True, unit=1)

client.close()

5、 高级特性

pymodbus支持更复杂场景:

性能优化建议:

6、注意事项

二、代码示例

1、modbusTCP client

from time import sleep
from pymodbus.client import ModbusTcpClient



client = ModbusTcpClient('127.0.0.1')

client.connect()
while True:
    res = client.read_holding_registers(slave=1,address=0,count=10)

    print(res.registers)

    sleep(0.5)

2、modbusRTU client

from time import sleep
from pymodbus.client import ModbusSerialClient


client = ModbusSerialClient(method='rtu', port='COM1', baudrate=9600, timeout=1)
connection = client.connect()


while True:
    res = client.read_holding_registers(slave=1,address=0,count=10)

    print(res.registers)

    sleep(0.5)

到此这篇关于python pymodbus模块的具体使用的文章就介绍到这了,更多相关python pymodbus使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文