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())  # 解码并打印接收到的数据breakser.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.mzph.cn/diannao/68555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js `setup()` 函数的使用

Vue.js setup() 函数的使用 今天我们来聊聊 Vue 3 中的 setup() 函数。如果你正在使用 Vue 3,那么对 setup() 函数的理解和掌握将对你的开发工作大有裨益。 什么是 setup() 函数? setup() 函数是 Vue 3 组合式 API(Composition API&#x…

【某大厂一面】HashSet底层怎么实现的

HashSet 是 Java 集合框架中的一个非常常用的集合类,它实现了 Set 接口,并且底层通常是通过 哈希表(HashMap)来实现的。要理解 HashSet 的底层实现,我们需要从哈希表的工作原理开始讲起。下面是对 HashSet 底层实现的详…

是否需要显式使用 epoll_ctl ( fd , EPOLL_CTL_DEL , ... ) 来从红黑树里显式删除过期的套接字

(1)关于 epoll 操作的三大系统函数: epoll_create ( … ) 、 epoll_ctl ( … ) 、 epoll_wait(…)。具体的函数原型略。这些函数完成了 epoll 对象的创建、 套接字往 epoll 红黑树中的添加、修改 与 删除 。 本文的整理…

算法随笔_30: 去除重复字母

上一篇:算法随笔_29:最大宽度坡_方法3-CSDN博客 题目描述如下: 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: …

Vue 3 30天精进之旅:Day 08 - 组件通信

在Vue 3的开发过程中,组件之间的通信是一个至关重要的概念。理解如何在父子组件、兄弟组件以及通过全局事件总线进行通信,将帮助我们构建更为灵活和可维护的应用。在今天的学习中,我们将探讨以下几个方面: 父子组件之间的通信兄弟…

【Hadoop】Hadoop 概述

Hadoop 概述 Hadoop 是什么Hadoop 发展历史Hadoop 三大发行版本Hadoop 优势(4 高)Hadoop 组成(面试重点)HDFS 架构概述YARN 架构概述MapReduce 架构概述HDFS、YARN、MapReduce 三者关系 大数据技术生态体系 Hadoop 是什么 Hadoop…

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言 我从24年11月份开始学习网络爬虫应用开发,经过2个来月的努力,于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志(网络爬虫学习:应用selenium从搜…

关于使用微服务的注意要点总结

一、防止过度设计 微服务的拆分一定要结合团队人员规模来考虑,笔者就曾遇到过一个公司的项目,是从外部采购回来的,微服务划分为十几个应用,我们在此项目基础上进行自行维护和扩展。由于公司业务规模不大,而且二次开发的…

CSS Fonts(字体)

CSS Fonts(字体) 在网页设计中,字体是传达信息情感和风格的关键元素。CSS(层叠样式表)提供了丰富的字体样式和属性,使得网页设计者能够根据需求选择合适的字体,从而提升用户体验。本文将详细介绍CSS字体相关的知识,包括字体的选择、加载、样式设置等。 字体的选择 选…

week08_文本匹配任务

1、文本匹配任务概述 狭义: 给定一组文本,判断其是否语义相似 今天天气不错 match 今儿个天不错呀 √ 今天天气不错 match 你的代码有bug 以分值形式给出相似度 今天天气不错 match 今儿个天不错呀 0.9 今天天气不错 match…

Deepseek技术浅析(一)

DeepSeek 是北京深度求索人工智能基础技术研究有限公司推出的人工智能技术品牌,专注于大语言模型(LLM)的研发与应用。其技术涵盖了从模型架构、训练方法到应用部署的多个层面,展现出强大的创新能力和应用潜力。以下将详细介绍 Dee…

火出圈的DeepSeeK R1详解

各位宝子们,新年好! 模型特性 DeepSeek-R1是一款创新的AI推理模型,具有多项独特特性: 高性能推理能力 :在数学、代码和自然语言推理等任务上表现出色,性能对标OpenAI o1正式版。 强化学习驱动的训练 :采用大规模强化学习技术,仅需极少量标注数据,显著提升推理能力。…

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录 Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)1. 副本的基本概念2. 副本同步和一致性2.1 AR(Assigned Replicas)2.2 ISR(In-Sync Replicas)2.3 OSR(Out-of-Sync Replicas&#xf…

【JavaEE】_MVC架构与三层架构

目录 1. MVC架构 2. 三层架构 3. MVC架构与三层架构的对比 3.1 MVC与三层架构的对比 3.2 MVC与三层架构的共性 1. MVC架构 在前文已介绍关于SpringMAC的设计模式,详见下文: 【JavaEE】_Spring Web MVC简介-CSDN博客文章浏览阅读967次,点…

CAPL与外部接口

CAPL与外部接口 目录 CAPL与外部接口1. 引言2. CAPL与C/C++交互2.1 CAPL与C/C++交互简介2.2 CAPL与C/C++交互实现3. CAPL与Python交互3.1 CAPL与Python交互简介3.2 CAPL与Python交互实现4. CAPL与MATLAB交互4.1 CAPL与MATLAB交互简介4.2 CAPL与MATLAB交互实现5. 案例说明5.1 案…

【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)

1. 简介 柱状图作为科研论文中常用的实验结果对比图,本文采用了3组实验对比的效果展示图,代码已调试好,只需替换数据即可生成相关柱状图,为科研加分。通过获得Nature配色的柱状图,让你的论文看起来档次更高&#xff0…

随机森林例子

完整代码: # 导入必要的库 from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import numpy as np# 加载鸢尾花数…

【QT】 控件 -- 显示类

🔥 目录 [TOC]( 🔥 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 🔥 1. 前言 之前我在上一篇文章【QT】…

SpringBoot中@Valid与@Validated使用场景详解

SpringBoot中Valid与Validated使用场景详解 在实际开发中,参数校验是保证接口安全性和数据完整性的重要手段。Spring Boot提供了Valid和Validated两个核心注解来实现参数校验,但许多开发者对它们的区别和使用场景存在疑惑。本文将深入解析二者的差异&am…

基于PyQt设计的智能停车管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…