Qt串口通信接收數據不完整的解決方法


在使用串口接收數據時,當數據量大的時候會出現數據接收不完整的情況。因為串口數據獲取函數readAll()由readyRead()信號觸發,但readyRead()信號在串口讀到起始標志時立即發送,並不保證一定是當前所發數據的起始部分。因此串口通信雙方在通信前應制定好通信協議,規定好數據的起始和結束標志,串口當讀到完整的起始和結束標志之后,才認定讀完一條完整的數據。

    本例中用串口定時發送當前時間,用"#"表示數據的結尾,定時時間為0毫秒,即能發多快就發多快。

//發送

1     <span style="font-size:18px;">void Widget::slotSendData()  
2     {  
3         QByteArray temp;  
4         temp.append(getCurrentTime());  
5         temp.append("#");  
6         serialPort->write(temp);  
7     }</span>  

 

//接收

 1     <span style="font-size:18px;">void Widget::slotReadData()  
 2     {  
 3         QByteArray temp = serialPort->readAll();  
 4       
 5         if(!temp.isEmpty())  
 6         {  
 7             byteArray.append(temp);  
 8             if(byteArray.contains("#"))  
 9             {  
10                 ui->textEditReceive->setText(byteArray.split('#').at(0));  
11                 byteArray = byteArray.right(byteArray.length()-byteArray.indexOf('#')-1);  
12             }  
13         }  
14     }</span> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM