【Python学习笔记(十)】串口被占用导致无法访问的解决办法

串口被占用导致无法访问的解决办法

    • 前言
    • 正文
    • 1、封装串口打开函数
    • 2、解决过程
    • 3、实现效果

前言

在项目开发中需要用到串口进行通讯,但当有其他串口调试工具、串口助手等打开占用了某一端口,打开串口时会导致程序卡死,针对这一问题的出现及解决过程进行记录。
图形界面开发:PySide2
串口操作:serial

正文

1、封装串口打开函数

# 串口打开函数def f_openCom(self, port, baudrate=9600, bytesize="8", stopbits="1", parity="N"):"""function:  串口打开函数in:  port:串口名baud:波特率data:数据位stop:停止位parity:校验位out:  Nonereturn:  true:opened ; false,closedothers:  open serial function"""if self.serial.isOpen():  # 如果串口已经打开self.timer_send.stop()  # 关闭计时器self.f_closeCom()  # 关闭串口return self.serial.isOpen()  # 返回Falseelse:  # 如果串口未打开# self.__m_Lock.acquire()self.__f_initCOM(port, baudrate, bytesize, stopbits, parity)  # 配置串口self.serial.timeout = 0.5  # 设置读超时时间为0.5sself.serial.open()  # 打开串口# self.__m_Lock.release()self.__m_thread_read = threading.Thread(target=self.f_comRead, args=(0.1,))  # 定义串口读取线程self.__m_thread_read.setDaemon(True)  # 设置该线程为守护线程,表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。self.__m_thread_read.start()  # 线程开启return self.serial.isOpen()  # 返回True

大致实现的功能为:

  1. 判断串口是否打开;
  2. 如果打开,关闭串口,并停止接收缓存区的定时器;
  3. 如果未打开,则打开串口,并开启读取线程。
    完整的serial工具通讯类请参考该资源:串口通信通用类,基于Python和serial类实现,可以实现串口刷新、串口打开、串口关闭、串口数据接收、串口数据发送等功能

但在使用过程中发现,如果串口被其他的工具,如串口助手等打开占用,通过 serial.isOpen() 方法获取的都为 False ,所以当串口被占用的情况下通过 serial 打开串口,会导致 UI 界面的卡死。

2、解决过程

  1. serial 没有提供相关的方法可以对被其他程序占用的端口状态进行访问,所以想通过 serial 库本身来解决该问题无法实现;

  2. 通过查阅资料,网上的方法是通过创建串口,然后去收集是否会抛出异常来判断串口是否被占用,如python:检测windows上某串口(COM口)是否存在和被占用

  3. 根据2中的方法,在串口打开时使用 try except 语句去捕获异常,并通过 PySide2 的 QMessageBox 弹出提示框即可提示用户串口被占用。

                if self.ui.cbbSerial.currentText() != "":try:ir = self.rtu.f_openCom(self.ui.cbbSerial.currentText(),self.ui.cbbBaud.currentText(),self.ui.cbbData.currentText(),self.ui.cbbStop.currentText(),self.ui.cbbParity.currentText())except Exception as e:QMessageBox.critical(self.ui, "警告", f"{self.srl.port}被占用,拒绝访问!")
    

3、实现效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581406.shtml

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

相关文章

苹果手机打开Microsoft Outlook日历ics文件方法

作为一名经常需要处理各种日程安排的苹果用户,我深知ics文件的重要性。ics文件通常来自于我们日常使用的日历应用,比如Microsoft Outlook,是日程信息的标准格式。但很多时候,当我们尝试打开这些ics文件时,却会遇到种种…

gulimall-002 分布式基础概念

1、微服务概念 微服务是一种非常流行的架构风格。 拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行。 每个服务运行在自己的单个进程使用轻量级机制通信可以使用不同的编程语言编写以及不同的数据存储技术 2、集群&分布式&…

pyCharm 打印控制台中文乱码解决办法

解决方法 在 "File" -> "Settings" 中的控制台设置: 在 "File" -> "Settings" 中,你可以找到 "Editor" -> "General" -> "Console"。在这里,你可能会找到…

docker学习(十八、network介绍)

[TOC]添加链接描述 首先,我们要知道什么是 Docker 网络。简单来说,它就是 Docker 中用于实现容器间通信的一个东西。 network相关内容: docker学习(十八、network介绍) docker学习(十九、network使用示例br…

【快速全面掌握 WAMPServer】03.玩转安装和升级

网管小贾 / sysadm.cc 大多数情况我们在了解和学习任何一款软件之前都会先去尝试一下软件的安装,毕竟只有安装好了软件,再通过使用它来进一步学习和掌握。 那么同样的道理,我们要学习和掌握如何动手搭建 PHP 的调试环境,那么作为…

启明智显开源项目分享|基于Model 3c芯片的86中控面板ZX3D95CM20S-V11项目软硬件全开源

前言: 本文为4寸 480*480 RGB接口IPS全面触屏的86中控面板(RT-ThreadLVGL)软硬件开源干货内容,该项目是综合性非常强的RTOS系列项目!项目主控芯片使用 Model 3c,整体实现了简化版本的86中控面板的功能需求…

“2023年的技术发展与个人成长:回顾与展望“

文章目录 每日一句正能量前言工作生活未来展望后记 每日一句正能量 凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。 前言 在这快速发展的信息时代,技术的进步和创新不…

[MySQL] MySQL 高级(进阶) SQL 语句

一、高效查询方式 1.1 指定指字段进行查看 事先准备好两张表 select 字段1,字段2 from 表名; 1.2 对字段进行去重查看 SELECT DISTINCT "字段" FROM "表名"; 1.3 where条件查询 SELECT "字段" FROM 表名" WHERE "条件…

计算机组成原理-多处理器系统的基本概念(SISD SIMD MISD MIMD)

文章目录 总览先看这个再往下看 SISDSIMDMISDMIMD向量处理器共享内存多处理器和多核处理器 总览 先看这个 再往下看 SISD 并发就是;先执行一下该指令序列,再执行一下另外一个指令序列 并行就是:两个指令序列同时进行 在某个时间段内只能处理…

java设计模式学习之【状态模式】

文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动,播放器可能处于不同的状态:播放、暂停、缓冲或结束。每个状态下,播放…

ActiveMQ漏洞合集

目录 介绍CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞漏洞介绍 & 环境准备漏洞发现Nuclei❌Vulmap✅漏洞验证漏洞利用 CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞漏洞发现Nuclei✅Vulmap✅MSF✅第三方工具1(漏洞探测…

腾讯云轻量应用服务器购买流程、搭建网站全流程超详细

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…

数据结构与算法:基于比较的排序算法:选择、冒泡、插入、归并的动图演示和java代码,排序时间复杂度、空间复杂度、稳定性总结表格

选择排序 选择排序是先在0~N-1上选择一个最小值排到最前面&#xff0c;然后再在1到N-1上选一个次小的&#xff0c;以此类推。 public static selectionSort(int[] arr){if(arrnull||arr.length<2){return;} //每次从i n-1 选一个最小的放前面for(int i0;i<arr.length-…

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…

基于 AForge.Net 框架的扑克牌计算机视觉识别

© Conmajia 2012, Nazmi Altun 2011 Init. 24 May 2012 SN: 125.1 本文为翻译文章&#xff0c;已获原作者 Nazmi Altun 授权。 下载资源&#xff1a; 源代码&#xff08;148.6 KB&#xff09;、Demo&#xff08;3.1 MB&#xff09; 简介 &#xff08;图片上的字&#xf…

【Spring实战】09 MyBatis Generator

文章目录 1. 依赖2. 配置文件3. 生成代码4. 详细介绍 generatorConfig.xml5. 代码详细总结 Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具&#xff0c;它能够基于数据库表结构自动生成 MyBatis 持久层的代码&#xff0c;包括实体类、Mapper 接口和 XML 映射文…

WPF项目创建HTTP WEB服务,不使用IIS业务 WPF桌面程序WebApi WPF 集成WebApi C# 创建HTTP Web API服务

在C# WPF应用程序中直接创建HTTP服务或WebAPI服务有以下优点&#xff1a; 自托管服务&#xff1a; 简化部署&#xff1a;无需依赖外部服务器或IIS&#xff08;Internet Information Services&#xff09;&#xff0c;可以直接在应用程序内部启动和运行Web服务。 集成紧密&…

工具系列:TimeGPT_(8)使用不规则时间戳进行时间序列预测

文章目录 介绍不规则时间戳的单变量时间预测不规则时间戳的外生变量时间预测 介绍 在处理时间序列数据时&#xff0c;时间戳的频率是一个关键因素&#xff0c;可以对预测结果产生重大影响。像每日、每周或每月这样的常规频率很容易处理。然而&#xff0c;像工作日这样的不规则…

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操作,例如编程、擦除、调试等。 工具链接: https://ww…

可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程

源码简介 Leadshop是一款出色的开源电商系统&#xff0c;具备轻量级、高性能的特点&#xff0c;并提供持续更新和迭代服务。该系统采用前后端分离架构&#xff08;uniappyii2.0&#xff09;&#xff0c;以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、V…