两个定时器实现串口热插拔思路介绍

1.打开软件的同时打开定时器Timer1,

         Timer1主要做搜索串口,如果没搜索到,就提示“未搜索到串口”,如果搜到了,就打开串口,这里可能会连接多个设备,如果要打开指定的设备,就需要遍历串口号去发送一个数据,同时设备要有一个返回值才行,这样就可以打开指定的串口了,打开串口之后打开定时器Timer2

    def detect_serial(self):
        port_list = []
        exist_flag = False
        com_list = []
        com_list.clear()
        port_list.clear()
        com_list = list(serial.tools.list_ports.comports())

        if len(com_list) == 0:
            exist_flag = False
        else:
            exist_flag = True
            for item in com_list:
                com = item.device
                port_list.append(com)

        if exist_flag == True:
            for port in port_list:
                self.m_th.m_ser.port = port
                if self.m_th.m_ser.is_open == True:
                    self.m_th.m_ser.write(b'\x00')  #与单片机串口连接
                else:
                    self.m_th.m_ser.open()
                    self.m_th.m_ser.write(b'\x00')
                time.sleep(0.1)
                rdata = self.m_th.m_ser.read_all()
                print(rdata)
                if rdata == b'\x00':
                    print(rdata)
                    self.serial_timer.stop()
                    if self.judge_serial_timer.isActive() == False:
                        self.judge_serial_timer.start()
                    QtWidgets.QMessageBox.information(self,'提示', '串口已连接!')
                    return
        else:
            QtWidgets.QMessageBox.information(self, '提示', '未找到串口!')

2.定时器搜索到串口打开之后打开定时器Timer2并关闭定时器Timer1

        定时器Timer2主要是搜索串口,如果搜到则什么都不执行,如果搜索到串口数量为0,则打开定时器Timer1并关闭定时器Timer2

    def judge_serial(self):
        com_list = list(serial.tools.list_ports.comports())
        if len(com_list) > 0:
            pass
        else:
            self.judge_serial_timer.stop()
            self.serial_timer.start()

好像只能处理连一个串口时的情况,现在先写这么多,以后有更好的方法再更吧

发布了17 篇原创文章 · 获赞 8 · 访问量 2652

猜你喜欢

转载自blog.csdn.net/qq_39295354/article/details/103255831