从 QSerialPort 读取所有输入
Read all input from QSerialPort
我正在接收这种形状的数据:
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
作为回应。如何修改我的代码以便能够读取所有输入数据?
更新:
使用此处描述的串行端口脚本对其进行测试时:,一切正常。显然问题是 qt 版本在第一个换行符后停止读取。如果我添加
也会出现此问题
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
)。更改时间不会更改接收到的数据。
这个问题(部分)描述了我的问题的答案:。我的问题(为什么我没有收到任何进一步的数据)是我没有在输入行之后发送 \x00D
,因此设备只是回应我的输入,然后等待 Enter
。输入和第一行一模一样后,我误以为只是得到第一行,没有别的。
我正在接收这种形状的数据:
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
作为回应。如何修改我的代码以便能够读取所有输入数据?
更新:
使用此处描述的串行端口脚本对其进行测试时:,一切正常。显然问题是 qt 版本在第一个换行符后停止读取。如果我添加
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
)。更改时间不会更改接收到的数据。
这个问题(部分)描述了我的问题的答案:\x00D
,因此设备只是回应我的输入,然后等待 Enter
。输入和第一行一模一样后,我误以为只是得到第一行,没有别的。