QSerialPort正确发送多行

时间:2015-02-27 17:27:14

标签: c++ qt serial-port qtserialport

我正在尝试使用QSerialPort(QT 5.3.1)将非常大的文件写入serialport。问题是 - 我不断发送超过设备可以处理的内容。 程序就像这样工作(这个函数在50ms内调用一次):

void MainWindow::sendNext()
{
    if(sending && !paused && port.isWritable())
    {
        if(currentLine >= gcode.size()) //check if we are at the end of array
        {
            sending = false;
            currentLine = 0;
            ui->sendBtn->setText("Send");
            ui->pauseBtn->setDisabled("true");
            return;
        }
        if(sendLine(gcode.at(currentLine))) currentLine++; //check if this was written to a serial port
        ui->filelines->setText(QString::number(gcode.size()) + QString("/") + QString::number(currentLine) + QString(" Lines"));
        ui->progressBar->setValue(((float)currentLine/gcode.size()) * 100);
    }
}

但它最终会有缺陷并且挂起(在设备上,而不是在PC上)。如果我能以某种方式检查设备是否准备好下一行,但我在QSerial文档中找不到类似的东西。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

RS232确实具有一些流量控制功能。 检查您的设备是否使用RTS / CTS,如果是,请更改连接属性以使用硬件流控制。 QSerialPort还允许使用dataTerminalReadyrequestToSend

手动检查流量控制线

答案 1 :(得分:1)

您可以使用QSerialPort::waitForBytesWritten来确保写入字节。但是这个函数会阻塞线程,并且建议在新线程中使用它,否则你的主线程会被阻塞,你的应用程序会定期冻结。