qt在另一个程序打开之后从串口读取数据

时间:2016-02-04 10:43:04

标签: qt

我在Windows 8.1中使用Qt 5.5.1版。 当我运行qtserialport terminal example时, 程序成功连接到端口,但没有收到任何数据。

但是当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 在再次关闭Hercules_3-2-6应用程序和打开终端示例后,该程序将工作并读取数据,直到重新启动计算机。

我多次重复这个过程。

但是重启系统后终端项目没有收到任何数据,直到Hercules_3-2-6应用程序端口打开一次。

端口规格: 名称:COM3, 波特率:9600, 数据位:8, 平价:没有, 停止位:1, 流量控制:无

b

1 个答案:

答案 0 :(得分:1)

只需在打开后配置串口即可。如果您在这些说明后打开端口:

serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
他们被忽略了。您的第二个程序为您配置了串行端口,并在您启动程序时保留配置。 试试这个:

void MainWindow::openSerialPort()
{
    SettingsDialog::Settings p = settings->settings();
    serial->setPortName(p.name);
    if (serial->open(QIODevice::ReadWrite)) {
        serial->setBaudRate(p.baudRate);
        serial->setDataBits(p.dataBits);
        serial->setParity(p.parity);
        serial->setStopBits(p.stopBits);
        serial->setFlowControl(p.flowControl);
        console->setEnabled(true);
        console->setLocalEchoEnabled(p.localEchoEnabled);
        ui->actionConnect->setEnabled(false);
        ui->actionDisconnect->setEnabled(true);
        ui->actionConfigure->setEnabled(false);
        showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
                          .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
                          .arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
    } else {
        QMessageBox::critical(this, tr("Error"), serial->errorString());

        showStatusMessage(tr("Open error"));
    }
}



void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}

配置串口时必须注意,任何选项都可以返回true或false;最佳实践想要检查和管理可以返回的每个错误。