定时扫描串口看设备是不是连接在QT、QSerialPort

Posted

技术标签:

【中文标题】定时扫描串口看设备是不是连接在QT、QSerialPort【英文标题】:Scanning the serial port periodically to see if the device is connected in QT, QSerialPort定时扫描串口看设备是否连接在QT、QSerialPort 【发布时间】:2015-12-25 19:04:41 【问题描述】:

我正在尝试定期扫描我的串行端口以查看我的设备是否已连接。这是我所做的,效果很好。我想看看是否有更好的优化方法。

    我在构造函数中创建了以下计时器来经常检查串行端口。我做了一个方法 (scanSerialPorts()) 并每隔 1 秒调用一次。

    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(scanSerialPorts()));
    
    timer->start(1000);
    

    这是我的scanSerialPorts() 实现:

    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) 
        currentPortName = info.systemLocation();
    
    
    if (currentPortName == "My Desired PortName" ) 
        updateSettings();
    
        if ( !serial->isOpen())
            qDebug() << "Serial Not Open";
            openSerialPort();
         
     else
    
        serial->close();
    
    

    updateSettings(); // Fills up the serial port parameters.

    openSerialPort(); //Opens up the serial port.

我用 QT 例子来写这个。请让我知道您的想法以及我可以如何做得更好。

【问题讨论】:

【参考方案1】:
    实际上,您只扫描最后一个端口,因为其余代码在foreachloop 之外; 您关闭了其他(可能未打开)端口,而不是您正在打开的端口 很可能,availablePorts 在执行期间不会更改,因此您可以将其移到扫描函数之外以节省计时器中的一些处理时间。 updateSettings() 也是如此。

【讨论】:

以上是关于定时扫描串口看设备是不是连接在QT、QSerialPort的主要内容,如果未能解决你的问题,请参考以下文章

STM32怎么接收不定长串口数据

attiny85软串口乱码

BLE 设备在不扫描时是不是会读取广告数据包? (自动连接)

怎样获取串口地址

QT串口不工作

第14章 基于QT5串口设备开发