我已經在這裏看過關於這個主題的幾個問題,但沒有提供給我一個解決方案。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