我正在接收这种形式的数据:
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
)。更改时间不会更改收到的数据。
答案 0 :(得分:1)
我的问题的答案是(部分)在这个问题中描述的:External vs internal declaration of QByteArray。我的问题(为什么我没有收到任何进一步的数据)是我没有在输入行之后发送\x00D
,因此设备只是回显我的输入,然后等待Enter
。在输入看起来与第一行完全相同之后,我误解了它只是获得第一行,而没有别的。