2017-01-09 21 views
1

これは私のコードです:(私はqextserialportを使用)Qt(4.8)シリアルポート(qextserialport)がデバイスからのデータを2部分で読み込むのはなぜですか?

SerialPort::SerialPort(QString port) 
{ 
    sp=new QextSerialPort; 
    sp->setPortName(port); 
    /*port->setBaudRate(BAUD9600); 
    port->setFlowControl(FLOW_OFF); 
    port->setParity(PAR_NONE); 
    port->setDataBits(DATA_8); 
    port->setStopBits(STOP_2);*/ 
    sp->setBaudRate(BAUD115200); 
    sp->setDataBits(DATA_8); 
    sp->setFlowControl(FLOW_OFF); 
    sp->setParity(PAR_NONE); 
    sp->setStopBits(STOP_1); 
    sp->open(QIODevice::ReadWrite); 
    connect(sp,SIGNAL(readyRead()),this,SLOT(ReadData())); 

} 

void SerialPort::ReadData() 
{ 
    QByteArray ba; 
    ba.resize(512); 
    ba=sp->readAll(); 
    emit DataRecieve(ba); 
} 

このコードは最初にUbuntuの上で実行すると、デバイスから受信したすべてのバイトを示しているが、私はLinuxの組み込み機器でそれをテストしたときに、このコードはからデータを読み込みます2つの部分でシリアルデバイス。 ()はバイトに\ nはありません。

void SerialPort::ReadData() 
{ 
    QByteArray ba; 
    ba.resize(512); 
    if(sp->bytesAvailable()>0 || sp->waitForReadyRead(20000)) 
    { 
    qDebug()<<sp->bytesAvailable(); 
    ba=sp->readAll(); 
    qDebug()<<ba.toHex(); 
    emit DataRecieve(ba); 
    } 
} 

が、再び私の出力は次のとおりです: 私はこのコードにコードを変更

4 "aa5524010400000000000000" 
12 "000000000000000000002801" 

が、それは次のようになります。

"aa5524010400000000000000000000000000000000002801" 

私の出力サイズは多分48バイトまたは512でありますバイト

+0

デバイスのシリアルバッファサイズはどれくらいですか? – eyllanesc

+0

私は512だと思います。送ることができる最大のデータは512バイトです。 –

+0

どのようなデバイスですか? – eyllanesc

答えて

1

シリアルポートドライババッファによって異なります。例えば、1つのレディバイトでreadyRead()シグナルを得ることができます。 受信したバイトを中間バッファに保存し、後で処理する必要があります。

関連する問題