定期扫描串口以查看设备是否在QT,QSerialPort中连接

时间:2015-12-25 19:04:41

标签: qt serial-port

我正在尝试定期扫描我的串口,看看我的设备是否已连接。这是我所做的,它运作良好。我想看看是否有更好,更优化的方法。

  1. 我在构造函数中创建了以下计时器,以频繁检查串口。我做了一个方法(scanSerialPorts())并且每1秒调用一次。

    QTimer *timer = new QTimer(this);
    connect(timer,SIGNAL(timeout()),this,SLOT(scanSerialPorts()));
    
    timer->start(1000);
    
  2. 这是我的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();
    }
    
  3. updateSettings(); // Fills up the serial port parameters.

  4. openSerialPort(); //Opens up the serial port.
  5. 我用QT示例来写这个。请让我知道你的想法以及如何让它变得更好。

1 个答案:

答案 0 :(得分:1)

  1. 实际上,您只扫描最后一个端口,因为其余代码在foreach循环之外;
  2. 关闭其他(可能未打开)端口,而不是您正在打开的端口
  3. 最有可能的是,availablePorts在执行期间不会发生变化,因此您可以将其移出扫描功能以节省计时器中的一些处理时间。 updateSettings()
  4. 也是如此