从QSerialPort读取所有输入

时间:2015-10-25 17:12:27

标签: qt serial-port

我正在接收这种形式的数据:

Q1\n
9.70E-6\n
OK>

从外部设备通过QSerialPort,但我的阅读程序

QString request = "Hello";
qDebug() << "TransAction started!";
QByteArray requestData = request.toLocal8Bit();
qDebug() << "Writing data: " << requestData;
serial->write(requestData);
qDebug() << "Data written";
if(serial->waitForBytesWritten(waitTimeout))
{
     if(serial->waitForReadyRead(waitTimeout))
                {
                    qDebug() << "Waiting for data!";
                    QByteArray responseData = serial->readAll();
                    while(serial->waitForReadyRead(100))
                        responseData += serial->readAll();
                    responseData.replace('\n', ' ');
                    QString response(responseData);
                    QByteArray response_arr = response.toLocal8Bit();
                    qDebug() << "Response is: " << response_arr.toHex();
                    emit this->response(response);
                }
                else
                {
                    qDebug() << "Wait read response timeout";
                    emit this->timeout(tr("Wait read response timeout %1").arg(QTime::currentTime().toString()));
                }
            }
            else
            {
                qDebug() << "Wait write request timeout!";
                emit this->timeout(tr("Wait write request timeout %1").arg(QTime::currentTime().toString()));
            }

我只得到

Q1

作为回应。如何修改我的代码,以便能够读取所有输入数据? 更新:
使用此处描述的串行端口脚本测试它时:https://stackoverflow.com/a/7654527/2546099,一切正常。显然问题是qt-version在第一次换行后停止读取。如果我添加

,也会出现此问题
char buffer[1000];
                    for(int i = 0; i < 1000; i++)
                    {
                        int tmp = serial->read(buffer, 1000);
                        if(tmp > 0)
                            qDebug() << buffer;
                    }

直接在

之后
qDebug() << "Waiting for data!";

然后我仍然只得到第一行(没有\n)。更改时间不会更改收到的数据。

1 个答案:

答案 0 :(得分:1)

我的问题的答案是(部分)在这个问题中描述的:External vs internal declaration of QByteArray。我的问题(为什么我没有收到任何进一步的数据)是我没有在输入行之后发送\x00D,因此设备只是回显我的输入,然后等待Enter。在输入看起来与第一行完全相同之后,我误解了它只是获得第一行,而没有别的。