news 2026/4/18 2:27:31

Python pymodbus模块详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python pymodbus模块详解

好的,我们来详细讲解一下 Python 的pymodbus模块。

概述

pymodbus是一个用纯 Python 实现的 Modbus 协议栈。Modbus 是一种广泛应用于工业自动化领域的串行通信协议,常用于连接 PLC(可编程逻辑控制器)、传感器、仪表等设备。pymodbus支持 Modbus TCP(基于 TCP/IP)和 Modbus RTU/ASCII(基于串行线路,如 RS-232/RS-485)两种主要传输方式。

核心功能与概念

  1. 协议类型:

    • Modbus TCP: 使用 TCP/IP 协议进行通信,端口号通常为 502。
    • Modbus RTU: 使用串行通信(RS-232/485),数据以二进制形式传输。
    • Modbus ASCII: 使用串行通信,数据以 ASCII 字符形式传输(较少见)。
  2. 角色:

    • Client (主站/Master): 发起请求的设备。通常由上位机(如运行 Python 程序的 PC)充当。
    • Server (从站/Slave): 响应请求的设备。通常是 PLC、传感器等现场设备。pymodbus也可以用来模拟从站设备。
  3. 数据模型 (寄存器类型):

    • 线圈 (Coils): 1 位,可读写。通常表示开关量输出状态(如继电器开/关)。
    • 离散输入 (Discrete Inputs): 1 位,只读。通常表示开关量输入状态(如按钮按下/松开)。
    • 保持寄存器 (Holding Registers): 16 位,可读写。通常存储设备参数、设定值等。
    • 输入寄存器 (Input Registers): 16 位,只读。通常存储设备采集的实时数据(如温度、压力)。
  4. 常用功能码:

    • 01 (0x01): 读取线圈状态。
    • 02 (0x02): 读取离散输入状态。
    • 03 (0x03): 读取保持寄存器。
    • 04 (0x04): 读取输入寄存器。
    • 05 (0x05): 写单个线圈。
    • 06 (0x06): 写单个保持寄存器。
    • 15 (0x0F): 写多个线圈。
    • 16 (0x10): 写多个保持寄存器。

安装

pip install pymodbus

使用示例

作为客户端 (Client) - 读取数据

Modbus TCP 示例 (同步)
from pymodbus.client import ModbusTcpClient # 连接到 Modbus TCP 服务器 (假设地址为 192.168.1.100, 端口 502) client = ModbusTcpClient('192.168.1.100', port=502) connection = client.connect() # 建立连接 if connection: try: # 读取从站地址为 1 的设备上的保持寄存器 (功能码 03) # 起始地址 = 0, 读取数量 = 5 个寄存器 response = client.read_holding_registers(address=0, count=5, slave=1) if not response.isError(): # 获取寄存器值列表 (每个寄存器是 16 位无符号整数) registers = response.registers print(f"读取到的寄存器值: {registers}") else: print(f"读取错误: {response}") finally: client.close() # 关闭连接 else: print("无法连接到 Modbus 服务器")

http://my.tv.sohu.com/us/442093011/697362370.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjM3MC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362554.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU1NC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362556.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU1Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362557.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU1Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362559.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU1OS5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362464.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjQ2NC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362615.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjYxNS5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362572.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU3Mi5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362574.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjU3NC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362619.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjYxOS5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362396.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjM5Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362637.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjYzNy5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362710.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjcxMC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362812.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjgxMi5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362653.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY1My5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362816.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjgxNi5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362657.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY1Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362661.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY2MS5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362663.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY2My5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362740.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjc0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362684.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY4NC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362698.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjY5OC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362753.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjc1My5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362840.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjg0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362934.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MjkzNC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362764.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjc2NC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362768.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjc2OC5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697362946.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2Mjk0Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697363023.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MzAyMy5zaHRtbA==.html
http://my.tv.sohu.com/us/442093011/697363039.shtml
https://tv.sohu.com/v/dXMvNDQyMDkzMDExLzY5NzM2MzAzOS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351510.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTUxMC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351283.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTI4My5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351634.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTYzNC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351640.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTY0MC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351712.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTcxMi5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351757.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTc1Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697351929.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MTkyOS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352133.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjEzMy5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352092.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjA5Mi5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352150.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjE1MC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352000.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjAwMC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352189.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjE4OS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352278.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjI3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352447.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjQ0Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352507.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjUwNy5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352380.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjM4MC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352634.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjYzNC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697352393.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MjM5My5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353030.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MzAzMC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353771.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzc3MS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353773.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzc3My5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353911.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MzkxMS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353778.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzc3OC5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353915.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1MzkxNS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353797.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzc5Ny5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697354043.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1NDA0My5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697354106.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1NDEwNi5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353886.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzg4Ni5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697354109.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1NDEwOS5zaHRtbA==.html
http://my.tv.sohu.com/us/438920216/697353947.shtml
https://tv.sohu.com/v/dXMvNDM4OTIwMjE2LzY5NzM1Mzk0Ny5zaHRtbA==.html

Modbus RTU 示例 (同步)
from pymodbus.client import ModbusSerialClient # 连接到串口设备 (例如 COM3, 波特率 9600, 8N1) # method='rtu' 表示使用 RTU 模式 client = ModbusSerialClient( port='COM3', baudrate=9600, bytesize=8, parity='N', stopbits=1, method='rtu' ) connection = client.connect() if connection: try: # 读取从站地址为 1 的设备上的输入寄存器 (功能码 04) # 起始地址 = 100, 读取数量 = 3 个寄存器 response = client.read_input_registers(address=100, count=3, slave=1) if not response.isError(): registers = response.registers print(f"读取到的输入寄存器值: {registers}") else: print(f"读取错误: {response}") finally: client.close()

作为服务器 (Server) - 提供数据

Modbus TCP 服务器示例
from pymodbus.server import StartTcpServer from pymodbus.datastore import ModbusSequentialDataBlock from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext # 定义数据存储 # 初始化各个数据区域 (起始地址, 初始值列表) coils = ModbusSequentialDataBlock(0, [False] * 100) # 100 个线圈,初始为 False discrete_inputs = ModbusSequentialDataBlock(0, [True] * 100) # 100 个离散输入,初始为 True holding_registers = ModbusSequentialDataBlock(0, [0] * 100) # 100 个保持寄存器,初始为 0 input_registers = ModbusSequentialDataBlock(0, [0] * 100) # 100 个输入寄存器,初始为 0 # 创建从站上下文 (Slave Context),关联数据块 slave_context = ModbusSlaveContext( di=discrete_inputs, # 离散输入 co=coils, # 线圈 hr=holding_registers, # 保持寄存器 ir=input_registers, # 输入寄存器 ) # 创建服务器上下文 (Server Context),可以包含多个从站 (这里只定义了一个从站,地址为 1) context = ModbusServerContext(slaves={1: slave_context}, single=False) # 启动 TCP 服务器,监听所有接口 (0.0.0.0) 的 502 端口 StartTcpServer(context=context, address=("0.0.0.0", 502))

高级特性

  • 异步客户端: 使用AsyncModbusTcpClientAsyncModbusSerialClient,配合asyncio库进行异步编程,提高并发性能。
  • 数据解析: 寄存器通常存储 16 位数据。对于 32 位浮点数、64 位整数等,需要将多个寄存器组合起来并按特定字节序解析。pymodbus提供了payload模块中的工具(如BinaryPayloadBuilder,BinaryPayloadDecoder)来帮助处理这些复杂数据类型。
  • 自定义数据存储: 可以继承ModbusSparseDataBlock或实现自己的存储类,用于更灵活地管理数据。
  • 回调: 服务器端可以设置回调函数,在数据被读取或写入时执行自定义逻辑。

注意事项

  1. 地址偏移: Modbus 协议中的寄存器地址通常从 0 开始。但有些设备手册或软件习惯使用从 1 开始的地址(如 40001 代表保持寄存器地址 0)。使用pymodbus时,传入的address参数通常是基于 0 的索引。务必查阅设备文档确认地址映射规则。
  2. 字节序 (Endianness): 处理多寄存器数据(如浮点数)时,必须了解设备使用的字节序(大端序 Big-Endian / 小端序 Little-Endian)和字序(高低字顺序)。
  3. 超时: 在创建客户端时设置合理的timeout参数,避免网络或设备响应慢导致程序长时间阻塞。
  4. 错误处理: 始终检查response.isError()并处理可能的异常(如超时、连接失败、Modbus 异常响应)。
  5. 资源释放: 使用try...finally确保连接 (client.close()) 或服务器 (StopTcpServer()/StopSerialServer()) 被正确关闭。

总结

pymodbus是一个功能强大且灵活的 Python Modbus 库,适用于开发需要与工业设备通信的应用程序。通过理解 Modbus 协议基础、数据模型和pymodbus提供的接口,开发者可以高效地实现主站(数据采集、控制)或从站(模拟设备、数据提供)功能。务必参考官方文档和示例代码以获取更详细的信息:https://pymodbus.readthedocs.io/。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 1:31:10

【总结】25年最常用的10个AI工具推荐

进入26年,一直想做一个25年使用的AI工具盘点,毕竟在25年真的用了不少的AI工具,但是有很多其实都是一时兴起尝试的,能留下来的少之又少,留下来的都是默默帮助我把工作做得漂亮的,希望今年你也能够用上顺手的…

作者头像 李华
网站建设 2026/4/16 13:35:51

机器学习中都有哪些经典的模型调优方法?

推荐直接网站在线阅读:https://aicoting.cn 模型调优是机器学习中提升模型性能的重要环节,其核心目标是通过优化模型的超参数和结构,使模型在训练数据上学习充分,同时在未见过的数据上具有良好的泛化能力。 调优通常包括 超参数搜…

作者头像 李华
网站建设 2026/4/16 13:32:31

嵌入式C语言阶段复习——排序方法

一、冒泡排序 冒泡排序通过重复比较相邻元素并交换位置完成排序。每一轮将最大&#xff08;或最小&#xff09;元素“冒泡”到数组 末尾。 void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j 0; j < n - i - 1; j) {if (arr[j] > arr…

作者头像 李华
网站建设 2026/4/16 13:36:07

Product Hunt 每日热榜 | 2026-01-29

1. DataFast 标语&#xff1a;“以收入为导向的分析” 介绍&#xff1a;了解哪些营销渠道能吸引客户&#xff0c;从而快速推动你的业务增长。 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; View on Product Hunt 关键词&#xff1a;数据分析, 营收优先, 市场渠…

作者头像 李华
网站建设 2026/4/17 18:00:23

AI开发平台的“三化”融合与场景落地新范式

站在2025年展望2026&#xff0c;AI技术的演进正深刻塑造着AI开发平台的形态与使命。单一功能的工具将迅速被淘汰&#xff0c;平台之争将聚焦于“三化”融合的深度。理解这一趋势&#xff0c;是做好2026年AI开发平台怎么选的前提&#xff0c;也将重新定义AI应用如何落地的范式。…

作者头像 李华
网站建设 2026/4/16 13:41:40

性价比高的新能源线全功能处理机生产厂家

在新能源汽车、储能系统及充电设施产业高速发展的当下&#xff0c;新能源线束作为能量传输与信号控制的“血管”&#xff0c;其加工质量直接关系到终端产品的性能与安全。新能源线全功能处理机作为线束加工的核心装备&#xff0c;其选择至关重要。如何在保证高性能与高可靠性的…

作者头像 李华