我已经在这里看过关于这个主题的几个问题,但没有提供给我一个解决方案。QT串行丢弃数据
通过VM测试,我有传入的数据,长度为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。
有关如何更好地处理此问题的任何建议?
唯一一致的是\ n字符的接收。我可以看到邮件的开头是收到的,最后,但是中间是字符丢失的地方。 我已经尝试了readAll和readLine,它的结果相对相同。 我知道完整的消息正在发送,我只是没有通过这个串口收到它。 我的下一线追索权是什么? – bauervision
@bauervision这是一个重要的信息:它属于问题本身。您需要说服我们确实只接收部分消息:例如使用'qDebug()<< line.toHex();',其中行来自'readLine'。也许你没有使用流量控制,并且你在某个地方超出了缓冲区。最有可能的是,你需要展示一个演示问题的最小代码示例。 –
波特率= 38400,数据位= 8,无奇偶校验,一站式,无流量控制 这些是从管理员给予我的设置,不确定是否在我的末端更改它会很重要,或者它会断开连接。只是还不够了解这个东西。 – bauervision