news 2026/5/19 17:39:49

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/5/1 7:48:11

【开题答辩全过程】以 基于spring boot的国学诗词网站设计与实现--为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/5/3 9:05:04

三星SCX-4321打印机驱动下载:新手通用教程,快速搞定安装

对于需要靠打印机处理文件、完成工作的用户来说,驱动故障就像突然断了的“桥梁”,让原本高效的办公节奏瞬间停滞。小编结合多年行业经验和实测数据,为大家整理了这份三星SCX-4321打印机驱动下载的深度指南,从原因解析到渠道选择&a…

作者头像 李华
网站建设 2026/5/15 4:26:52

SpringBoot+Vue web大学生一体化服务平台管理平台源码【适合毕设/课设/学习】Java+MySQL

系统架构设计### 摘要 随着信息技术的快速发展,高校管理服务逐渐向数字化、智能化方向转型。传统的学生服务管理模式存在效率低、信息孤岛、数据冗余等问题,难以满足现代高校管理的需求。大学生一体化服务平台通过整合教务、生活、社交等功能&#xff0…

作者头像 李华
网站建设 2026/5/12 2:10:10

图扑 HT 实现数字孪生智慧服务器信息安全监控平台

在数字化时代,服务器信息安全监控的智能化、可视化需求日益凸显。图扑软件依托自主研发的 HT for Web 技术栈,打造了数字孪生智慧服务器信息安全监控平台,无需依赖任何第三方前端插件,通过常规前端接口对接方案,实现了…

作者头像 李华
网站建设 2026/5/9 7:21:57

实测!DS File搭载cpolar后,NAS 文件远程访问竟这么简单

DS File 是群晖 NAS 的配套文件管理软件,主要功能包括 NAS 文件的分类存储、一键搜索、跨设备同步,还能联动智能家居设备查看存储的监控录像、家庭照片等,是管理 NAS 文件的核心工具,覆盖了办公文件处理和家庭数据管理的核心场景。…

作者头像 李华
网站建设 2026/5/11 18:47:45

I/ITSEC 2025:XR虚拟训练在国防部署中的应用重点

XR军事训练已经趋于常态化。现在,该技术正在被视为基础设施的一部分,部署、集成和规模预估等实际问题正在成为项目审查中的重要考虑因素。 每年12月,奥兰多都会成为训练和模拟的全球交汇点。I/ITSEC将国防、工业和学术界聚集在一起&#xff0…

作者头像 李华