QSerialPortを使用して、デバイスから送信されたデータを読み取る必要があります。デバイスは毎回4000データバイトのフレームを送信します。私は次の単純なコードで試してみますQSerialPortは512バイト以上のデータを読み取ることができますか?
QSerialPort *serialPort;
char receivedData[4000];
int numRead = 0;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
/* Initialize serial port*/
serialPort = new QSerialPort(this);
QString portName = "COM6";
qint32 baudRate = 460800;
serialPort->setPortName(portName);
serialPort->setBaudRate(baudRate);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
serialPort->setReadBufferSize(4000);
if (!serialPort->open(QIODevice::ReadOnly)) {
qDebug() << "Cannot open comport";
}
connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialReceived()));
}
void MainWindow::serialReceived()
{
numRead = serialPort->read(receivedData, 4000);
serialPort->flush();
}
問題は、常に512バイトしか読み込まれないことを示しています。 4000バイトのデータフレーム全体をどのように読み取ることができますか? (私はこの4000バイトのフレームを読むためにMatlabを使用していますが、正常に動作しています)
[回答](http://stackoverflow.com/a/29151336/2257050)を参照してください。あなたは、あなたが期待している特定のサイズが満たされるまで、データを読む独自のバッファを作成しなければなりません。 [QSerialPort :: bytesAvailable'](http://doc.qt.io/qt-5/qserialport.html#bytesAvailable)メソッドを使用して、使用可能なバイト数を確認することもできます。 – thuga
こんにちは、私は 'QSerialPort :: bytesAvailable'をチェックするためにループを使い、それは常に512バイトを示します。 – bienle
チェックの間にデータを読んでいますか? – thuga