QT串行丢弃数据

QT Serial dropping data

本文关键字:数据 QT      更新时间:2023-10-16

我已经看了关于这个主题的几个问题,但没有什么能为我提供解决方案。

在虚拟机上测试时,我收到了47、80或31个字符长的传入数据。

串行端口的readyRead连接到:

void MainWindow::readData(){
QString buf; 
myByteArray = serial->readAll();
for(int i = 0; i < myByteArray.size(); ++i){
if(myByteArray.at(i) == 'n'){
buf.append(myByteArray.at(i));
qDebug() << buf << endl;
buf.clear();
else{
buf.append(myByteArray.at(i)); 
}

我知道每条消息都以"\r\n"结尾,所以我们用它作为结束当前消息的点。

我遇到的问题是,我可能每50个人就会收到一条干净的信息。它正在左右删除字符。我有一个文本文件,显示了通过串行发送的消息,这样我就可以与收到的消息进行比较,它们的糟糕程度令人恶心。

我在其他线程中尝试过readLine()以及其他一些建议,结果总是一样的。

我的想法是检查收到的消息是否符合我预期的长度,47、80或31个字符,然后忽略不匹配的消息。问题是,我每2分钟就会收到一条干净的消息。。。。大概

如果我一得到数据就把它转储掉,结果与缓冲数据时没有什么不同。

我遇到的另一个问题是,我收到的每一条信息,我总共会错过3-4条。

关于如何更好地处理这个问题,有什么建议吗?

readAll返回当前可用的内容。无法保证所有数据都已收到。我的猜测是,当你打电话时,你的数据仍在传输中。

您需要读取数据,直到收到rn

根据您的需要,您可能会发现readLine更易于使用。