网站建设的流程和内容,铜陵网站建设,php能做手机网站吗,网站建设宽度串口被占用导致无法访问的解决办法 前言正文1、封装串口打开函数2、解决过程3、实现效果 前言
在项目开发中需要用到串口进行通讯#xff0c;但当有其他串口调试工具、串口助手等打开占用了某一端口#xff0c;打开串口时会导致程序卡死#xff0c;针对这一问题的出现及解决… 串口被占用导致无法访问的解决办法 前言正文1、封装串口打开函数2、解决过程3、实现效果 前言
在项目开发中需要用到串口进行通讯但当有其他串口调试工具、串口助手等打开占用了某一端口打开串口时会导致程序卡死针对这一问题的出现及解决过程进行记录。 图形界面开发PySide2 串口操作serial
正文
1、封装串口打开函数
# 串口打开函数def f_openCom(self, port, baudrate9600, bytesize8, stopbits1, parityN):function: 串口打开函数in: port串口名baud波特率data数据位stop停止位parity校验位out: Nonereturn: trueopened ; falseclosedothers: open serial functionif 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(targetself.f_comRead, args(0.1,)) # 定义串口读取线程self.__m_thread_read.setDaemon(True) # 设置该线程为守护线程表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。self.__m_thread_read.start() # 线程开启return self.serial.isOpen() # 返回True大致实现的功能为
判断串口是否打开如果打开关闭串口并停止接收缓存区的定时器如果未打开则打开串口并开启读取线程。 完整的serial工具通讯类请参考该资源串口通信通用类基于Python和serial类实现可以实现串口刷新、串口打开、串口关闭、串口数据接收、串口数据发送等功能
但在使用过程中发现如果串口被其他的工具如串口助手等打开占用通过 serial.isOpen() 方法获取的都为 False 所以当串口被占用的情况下通过 serial 打开串口会导致 UI 界面的卡死。
2、解决过程 serial 没有提供相关的方法可以对被其他程序占用的端口状态进行访问所以想通过 serial 库本身来解决该问题无法实现 通过查阅资料网上的方法是通过创建串口然后去收集是否会抛出异常来判断串口是否被占用如python检测windows上某串口COM口是否存在和被占用 根据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、实现效果