2017-03-19 30 views
0

Qtとシリアルプログラミングの初心者です。 rhel 7サーバーでQt 5.3を使用しています。Qt QSerialPortは一度に8バイトしか読み込みません。

シリアルポートで75バイトのパケットを受信しました。 QSerialPort::readAll()機能を使用してパケットを読み取ると、一度に8バイトしか読み込まれません。 QSerialPort::bytesAvailable()の機能をチェックすると、8バイトが表示されます。

Googleでは、QSerialPort::readAll()は1バイトで512バイトを読み取ることができます。

明示的に指定する必要があるものがありませんか?

ありがとうございました

答えて

0

これは、特定のシリアルポートFIFOバッファ設定の問題です。たとえば、デバイスマネージャでそのシステム設定を変更しようとする可能性があります。しかし、私はそれに頼ってQSerialPort::readyRead()信号に接続してデータを読んで、それをユーザー定義のバッファーに入れないことをお勧めします。

QByteArray _MyBuffer; 
void MyReadHandler() { 
    _MyBuffer.append(readAll()); 
    if (_MyBuffer.count() >= 75) { 
     // Do something with your data... 
    } else { 
     // Wait for more data... 
    } 
} 

このスロットでは、後で処理する前に特定の量のデータを待つことができます。

0

シリアルプログラミング(および一般的な通信プログラミング)では、部分読み出しが常に可能です。シリアルポートも遅く、「パケット」という概念もありません。オペレーティングシステムは、到着時に文字を送ります。これを最適化する方法はありますが、コードやプロトコルが通信のタイミングや失敗に対処する必要がなくなります。

パケットを徐々に構築してチェックしてから処理するタイマーでコードが完成する可能性があります。

関連する問題