0

QExtSerialPort を使用して USB デバイスを読み取っていますが、シリアル ポート経由で送信されるデータの読み取りに問題があります。データは 100 ~ 1000 Hz のレートで送信され、データがまとまらない場合があります。たとえば、データのサイズが 18 バイトの場合、ほとんどの場合は 18 バイトとして読み取られますが、36 バイトまたは 54 バイトなどを読み取る場合もあります。これは特に、コンピューターに他のことをさせたときに発生します。私が使用するコードは次のとおりです。

QextSerailPort port = new QextSerialPort("COM11")
QByteArray data;

connect(port, SIGNAL(readyRead()),this, SLOT(DataAvailable()));

void MainWindow::DataAvailable()
{
    while(!(port->bytesAvailable()));
    data = port->readAll();

    qDebug() << data.toHex();
}

誰にも解決策がありますか?

4

1 に答える 1

2

TCP リンクと同様に、シリアル ポートはバイト ストリームです。メッセージ、文字列、構造体、または 1 バイトを超えるものは転送できません。

メッセージ/バイトストリームから何でも解析できるプロトコルが必要です。他に方法はありません。

于 2012-11-21T10:12:34.493 に答える