当前位置: 首页 > article >正文

pyserial和pymodbus

pyserial和pymodubus

pyserial 和 pymodbus 是两个常用的 Python 库,分别用于串行通讯和 Modbus 协议通讯,广泛应用于与硬件设备(如传感器、PLC、RS-485 转串行设备等)进行数据交换。

pyserial

pyserial 是一个用于与串行端口(如 RS-232、RS-485 转 USB 适配器)进行通讯的 Python 库。它支持通过串行端口与硬件设备进行数据传输,适用于大多数基于串行接口的设备。
核心功能
打开串行端口:与指定的串行端口(如 /dev/ttyUSB0)进行连接。
读取/写入数据:可以发送和接收字节数据,支持同步和异步通讯。
配置串行端口:设置波特率、数据位、停止位、校验位等。
数据流控制:支持流控制(如 XON/XOFF、RTS/CTS)。

安装 pyserial
你可以通过 pip 安装 pyserial:

pip install pyserial

示例代码
以下是一个简单的 pyserial 示例,展示如何通过串行端口发送和接收数据:

import serial
import time

打开串行端口(比如 /dev/ttyUSB0)

ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)  # 设置波特率为 9600,超时为 1 秒

向串行端口写数据

ser.write(b'Hello, RS-485!\n')  # 向设备发送字节数据

读取串行端口接收到的数据

while True:
    if ser.in_waiting > 0:  # 如果有数据可读
        data = ser.readline()  # 读取一行数据
        print("Received:", data.decode())  # 解码并打印接收到的数据
        break

ser.close()  # 关闭串行端口

常见配置项
baudrate:波特率,例如 9600, 115200 等。
timeout:读取数据的超时时间(秒)。
parity:校验位,常用选项:serial.PARITY_NONE(无校验)、serial.PARITY_EVEN(偶校验)等。
stopbits:停止位,常用值是 1 或 2。

pymodbus

pymodbus 是一个用于 Modbus 协议通讯的 Python 库。Modbus 是一种广泛使用的通讯协议,尤其在工业自动化、PLC 控制系统、传感器和智能电表等领域中被广泛应用。pymodbus 支持 Modbus RTU 和 Modbus TCP 协议,能够让你方便地与支持 Modbus 协议的设备进行通讯。

核心功能
支持 Modbus RTU 和 TCP:可以通过串行(RS-485)或以太网(TCP/IP)与设备通讯。
功能码支持:支持 Modbus 主要的功能码(如读取和写入离散输入、保持寄存器等)。
支持客户端和服务器模式:可以创建 Modbus 客户端和服务器应用。
数据类型支持:支持 Modbus 寄存器类型(如 16 位寄存器、离散输入、线圈等)。
安装 pymodbus
你可以通过 pip 安装 pymodbus:
pip install pymodbus
示例代码(Modbus RTU)
以下是一个使用 pymodbus 进行 Modbus RTU 通讯的简单示例,展示如何使用串行接口通过 Modbus 协议与设备交换数据:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient

创建 Modbus RTU 客户端(串行通讯)

client = ModbusClient(method='rtu', port='/dev/ttyUSB0', baudrate=9600)
client.connect()

读取保持寄存器(假设设备地址为 1,读取从寄存器 0 开始的 2 个寄存器)

result = client.read_holding_registers(0, 2, unit=1)

if result.isError():
    print("Error reading registers:", result)
else:
    print("Registers:", result.registers)  # 输出读取到的寄存器值

关闭连接

client.close()
示例代码(Modbus TCP)
如果你使用的是 Modbus TCP(即通过以太网连接设备),可以像这样配置客户端:
from pymodbus.client.sync import ModbusTcpClient

创建 Modbus TCP 客户端(通过 IP 地址连接)

client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()

读取保持寄存器

result = client.read_holding_registers(0, 2, unit=1)

if result.isError():
    print("Error reading registers:", result)
else:
    print("Registers:", result.registers)

client.close()

常用功能
read_coils:读取线圈(数字输出)。
read_discrete_inputs:读取离散输入(数字输入)。
read_holding_registers:读取保持寄存器(通常用于存储模拟量数据)。
write_coils:写入线圈。
write_registers:写入保持寄存器。

pyserial 与 pymodbus 的关系

pyserial 主要负责低层的串行通讯,允许你通过 RS-485、RS-232 等串行端口进行数据传输。
pymodbus 是一个应用层协议,专门用于与支持 Modbus 协议的设备进行交互。它可以通过 pyserial 来使用串行端口进行 Modbus RTU 通讯,或者通过 TCP/IP 进行 Modbus TCP 通讯。
因此,如果你要使用 Modbus RTU 通过串行口与设备通讯,你需要先用 pyserial 设置好串行端口,再通过 pymodbus 进行 Modbus 协议的高层通讯。

总结

pyserial:提供与串行设备(如 RS-485 转 USB)进行通讯的基础支持,适合做低层的串行通讯。
pymodbus:提供实现 Modbus 协议的支持,适用于与工业设备和传感器之间的通讯,支持 RTU 和 TCP 两种模式。
你可以根据需求结合这两个库,首先用 pyserial 打开串行端口,然后用 pymodbus 实现与 Modbus 设备的高层通讯。


http://www.kler.cn/a/517248.html

相关文章:

  • 【EXCEL_VBA_实战】多工作薄合并深入理解
  • linux系统中的 scp的使用方法
  • 深入理解三高架构:高可用性、高性能、高扩展性的最佳实践
  • 【2024年华为OD机试】(A卷,200分)- 简单的解压缩算法 (JavaScriptJava PythonC/C++)
  • Linux内存管理(Linux内存架构,malloc,slab的实现)
  • 如何实现网页不用刷新也能更新
  • HBase基础shell命令
  • 【深度学习】常见模型-卷积神经网络(Convolutional Neural Networks, CNN)
  • 最新! 在 Linux上搭建Jenkins环境!
  • SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟
  • 信创产品测试包括哪些内容?有哪些常用的信创测试工具?
  • 校验收货地址是否超出配送范围实战3(day09)
  • C# volatile 使用详解
  • 如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)
  • DBO朴素贝叶斯分类预测matlab代码
  • 【吉林乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84无偏移内容测评
  • Redis 缓存穿透、雪崩和击穿问题及解决方案
  • JAVAweb学习日记(七) 分层解耦
  • 软件需求工程中的风险管理
  • C语言-----扫雷游戏
  • 一款专业通用开源的MES生产执行管理系统
  • Unity常用特性(Attribute)用法
  • 睡眠时间影响因素K-Means可视化分析+XGBoost预测
  • 第15个项目:一个有趣的豆瓣电影TOP爬虫
  • ISIS基础知识
  • 2024-2025自动驾驶技术演进与产业破局的深度实践——一名自动驾驶算法工程师的年度技术总结与行业洞察