python实现读取串口数据-使用LibModbus库实现一个实时读取串口数据
在工业自动化领域,Modbus协议因其简单、可靠和广泛支持而备受青睐。其中,Modbus RTU(串行通信)以其低成本和易实施性在许多场景中发挥着重要作用。
01
Modbus RTU协议简介
Modbus RTU是一种基于串行通信的Modbus协议,它使用RS-485或RS-232接口,以字节为单位进行数据传输。Modbus RTU协议定义了主从设备之间的通信规则,主设备负责发起请求,从设备则响应请求并返回数据。
02
Python实现Modbus RTU通信的步骤
准备硬件环境 要实现Modbus RTU通信,首先需要准备支持RS-485或RS-232接口的硬件设备,如串口适配器、从设备(如传感器、执行器等)以及连接线材。安装Python库 要实现Modbus RTU通信,我们可以使用Python的第三方库pymodbus。通过pip可以轻松安装该库:
pip install pymodbus
03,导入库文件:
import time
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
注意pymodbus版本下载版本为pymodbus=== 2.5.3
否则导入ModbusSerialClient报错,
新版pymodbus版本导入写法如下:
from pymodbus.client import ModbusSerialClient as ModbusClient
废话不多说,直接上完整代码:
import time
from pymodbus.client.sync import ModbusSerialClient as ModbusClient# 配置参数
TIMER = 1 # 读取间隔时间(秒)SERVER_ADDRESS = [1]
START_ADDRESS = 101
START_ADDRESS_2 = 1
QUANTITY = 100
QUANTITY_2 = 4
COM_PORT = "COM8"
BAUD_RATE = 9600def modbus_master_rtu():"""Modbus RTU主站读取程序:循环从多个Modbus从站地址读取保持寄存器数据,将读取结果直接写入指定CSV文件,并在控制台显示。同时具备异常处理能力。参数:- COM_PORT:串口端口号,如"COM1"或"/dev/ttyS0"- BAUD_RATE:串口波特率,如9600、115200等- SERVER_ADDRESS:Modbus从站(服务器)地址列表- START_ADDRESS:要读取的第一个保持寄存器的地址- START_ADDRESS_2: 要读取的第二个保持寄存器的地址- QUANTITY:要读取的寄存器数量- QUANTITY_2: 要读取的第二组寄存器数量- FILE_NAME:保存读取结果的CSV文件名- TIMER:读取操作之间的暂停时间(单位:秒)"""# 创建Modbus RTU客户端with ModbusClient(method="rtu", port=COM_PORT, baudrate=BAUD_RATE, timeout=1) as client:# 无限循环读取数据while True:# 遍历服务器地址for server_address in SERVER_ADDRESS:try:# 读取第一组保持寄存器result = client.read_holding_registers(START_ADDRESS, QUANTITY, unit=server_address)# 读取第二组保持寄存器result_2 = client.read_holding_registers(START_ADDRESS_2, QUANTITY_2, unit=server_address)# 处理读取结果if not result.isError() and not result_2.isError():# 控制台输出读取到的寄存器值print(", ".join(map(str, result.registers)))print(", ".join(map(str, result_2.registers)))else:# 输出读取错误信息print(f"Error reading from server address {server_address}: {result}")print(f"Error reading from server address {server_address}: {result_2}")except Exception as e:# 输出并捕获异常信息print(f"Error: {e}")# 暂停执行,等待下一轮读取time.sleep(TIMER)if __name__ == "__main__":modbus_master_rtu()
上述中的
这几个参数要根据自己的调整,之后运行界面如下:
相关文章:

python实现读取串口数据-使用LibModbus库实现一个实时读取串口数据
在工业自动化领域,Modbus协议因其简单、可靠和广泛支持而备受青睐。其中,Modbus RTU(串行通信)以其低成本和易实施性在许多场景中发挥着重要作用。 01 Modbus RTU协议简介 Modbus RTU是一种基于串行通信的Modbus协议,…...
类与面向对象编程(Object-Oriented Programming, OOP)
类与面向对象编程(Object-Oriented Programming, OOP)(一) 对象比较:‘is’ 对比 ‘’ 当我还是个孩子的时候,我们的邻居拥有一对双胞胎猫咪。它们看起来几乎一模一样—同样的炭黑色毛发和同样锐利的绿色…...

引用数据类型 栈内存 堆内存
let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因:基本数据类型存储在栈内存中,引用数据类型存储在堆内存中 ,引用数据类型存储在堆内存中会在栈内存中创建一个指针,栈内存中的这个指针指向堆内存中的地…...

【class8】人工智能初步(图像识别-----卷积神经网络)
上节回顾 上节课,我们简单了解了图像识别和深度学习的相关知识。 快速回顾一下吧~ A图像识别是以图像的主要特征为基础的。B. 图像分辨率决定图像的质量。 C. 像素是图像中的最小单位D. 在图像识别的原理上,计算机和人类在本质…...

Node.js安装及环境配置(超详细!保姆级!!)
目录 一、进入官网地址下载安装包 二、安装程序 三、环境配置 四、测试 五、安装淘宝镜像 一、进入官网地址下载安装包 Node.js — Download Node.js (nodejs.org) 选择对应你系统的 node.js 版本,我选择的是Windows系统,64位 点击图中选项&#…...
利用反射如何动态生成sql
一.自定义注解 UpdateWhere Target({ElementType.FIELD}) //作用于类 Retention(RetentionPolicy.RUNTIME) //运行时有效 Documented //可以出现在文档里 Inherited public interface UpdateWhere {}二.创建实体类接受 pu…...
SpringBoot项目中使用Redis,Mybatis和JWT
在Spring Boot项目中,结合Redis,MyBatis和JWT的使用可以提供以下功能: Redis的作用: 1.缓存:Redis可以用作缓存存储,提高应用程序的性能和响应速度。特别是对于频繁读取但不经常更新的数据,如配…...

CSS2(一):CSS选择器
文章目录 1、CSS基础1.1 CSS简介1.2 CSS编写位置1.2.1 行内样式1.2.2 内部样式1.2.3 外部样式1.2.4 样式优先级 1.2.5 CSS代码风格 2、CSS选择器2.1、基本选择器2.1.1 通配选择器2.1.2 元素选择器2.1.3 类选择器2.1.4 ID选择器2.1.5 总结 2.2、CSS复合选择器2.2.1 交集选择器2.…...

LeetCode题练习与总结:不同的二叉搜索树--96
一、题目描述 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n 3 输出:5示例 2: 输入:n 1 输出&…...
第八十一章 将 Web 应用程序与远程 Web 服务器结合使用 - 如果从 Web 服务器提供静态文件
文章目录 第八十一章 将 Web 应用程序与远程 Web 服务器结合使用 - 如果从 Web 服务器提供静态文件如果从 Web 服务器提供静态文件配置 Web 服务器路径将虚拟目录添加到 IIS将别名添加到 Apache 配置 第八十一章 将 Web 应用程序与远程 Web 服务器结合使用 - 如果从 Web 服务器…...

AVL树、红黑树
数据结构、算法总述:数据结构/算法 C/C-CSDN博客 AVL树 定义 空二叉树是一个 AVL 树如果 T 是一棵 AVL 树,那么其左右子树也是 AVL 树,并且 ,h 是其左右子树的高度树高为 平衡因子:右子树高度 - 左子树高度 创建节点…...

Vscode编辑器 js 输入log自动补全
最近换了新电脑,新下载了Vscode,记录一下设置项。 Vscode 版本 想要的效果 js文件中输入log(点击tab键),自动补全为 console.log() Vscode 文件》首选项》设置 搜索:snippets Emmet: Show Suggestions…...

structured concurrency
1. 基于 c executions的异步实现 - 从理论到实践 - 知乎 (zhihu.com)...

【免费】在线识别通用验证码接口
模块优势价格5元1000次,每天免费100次api文档支持 使用量小的完全够用了 <?phpfunction Post_base64($base64_str){$url http://api.95man.com:8888/api/Http/Recog?Taken41******QK&imgtype1&len0 ; $fields array( ImgBase64>$base64_str); $ch…...

如何通过汽车制造供应商协同平台,提高供应链的效率与稳定性?
汽车制造供应商协同是指在汽车制造过程中,整车制造商与其零部件供应商之间建立的一种紧密合作的关系。这种协同关系旨在优化整个供应链的效率,降低成本,提高产品质量,加快创新速度,并最终提升整个汽车产业的竞争力。以…...

使用LangChain创建简易聊天机器人
LangChain 是什么 就是一个框架或者说是一个工具,用来写 AI 应用。对,没有错!AI小白也可以,有手就行! LangChain有几个核心模块:Models、Prompts、Chains、Indexes、Memory、Agents。 这篇主要介绍Models、…...

研究生学习---找工作
规划 研一~研二上学期完成小论文,实习,秋招 竞赛:kaggle? 面试题一般简单且为原题,笔试题目很难,不会出原题 项目 找工作软件...

偶然发现了Python的一个BUG。。。
一般情况下,dict(id1, **{id: 1})这句代码应该报TypeError。但如果在捕获了其他异常的情况下,再来执行这句代码,却是会报KeyError,如下图: Python3.10和Python3.9也能复现该情况,正当我摩拳踩掌,…...

36. 有效的数独 - 力扣(LeetCode)
基础知识要求: Java:方法、for循环、if判断、数组 Python: 方法、for循环、if判断、列表、集合 题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一…...

开源收银系统在服装连锁店中发挥的重要作用
在当今竞争激烈的零售市场中,服装连锁店面临着日益复杂的经营环境和多样化的消费需求。在这样的背景下,开源收银系统成为了服装连锁店管理的关键利器。该系统不仅提供了高效的收银功能,还涵盖了进销存管理、会员管理、门店补货等多方面功能&a…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...