0

ラボのアプリケーション用に LabVIEW を置き換える Qt データ取得 GUI を作成しています。

GUI のプッシュボタンでデータをシリアル ポート (マイクロコントローラー) に書き込み、データの取得が完了するのを待ち (マイクロコントローラーがこれを行います)、保存、プロットなどのためにシリアル ポート経由でデータを取得します。 .

次の void は、着信シリアル データをチェックします。シリアル バッファ内のバイト数を出力します。

ここで、プログラムを実行すると、ボタンをクリックすると、最初のクリックで「0」が表示されます。2 回目のクリックで、利用可能な正しいバイト数が表示されます。

次にプッシュボタンをクリックするまで、受信シリアルデータを利用できないようです。どうしてこれなの?

void MainWindow::on_run_PushButton_clicked(){

sendserialData("go");

quint64 availablebytes = 0; 
int i=0;
while(availablebytes < 4 ){ // less than 4 bytes on the incoming serial buffer
    availablebytes = microcontroller->bytesAvailable();
    qDebug() << availablebytes;
    i++;
    if(i==4){break;}
}

参考までに、シリアルポートのプロパティは次のとおりです。

if(microcontroller_is_available){
   // open and configure serialport
    microcontroller->setPortName(microcontroller_port_name);
    microcontroller->open(QSerialPort::ReadWrite);
    microcontroller->setBaudRate(QSerialPort::Baud115200);
    microcontroller->setDataBits(QSerialPort::Data8);
    microcontroller->setParity(QSerialPort::NoParity);
    microcontroller->setStopBits(QSerialPort::OneStop);
    microcontroller->setFlowControl(QSerialPort::NoFlowControl);

}
else{
    QMessageBox::warning(this, "Port error", "Cannot connect to the microcontroller.");
}

2016 年 11 月 14 日更新

他の人の提案に従って、次のコードは適切に機能し、プッシュボタンを押すとすぐにデータを読み取ります。readyRead 信号を readData に接続しました。

connect(microcontroller, &QSerialPort::readyRead, this, &MainWindow::readData);

void MainWindow::on_run_PushButton_clicked()
{
ui->run_PushButton->blockSignals(true);
serialData="";
sendserialData("go");
}

void MainWindow::sendserialData(QString command)
{
if(microcontroller->isWritable()){
    microcontroller->write(command.toStdString().c_str());
}else{
    qDebug() << "Cannot write to the microcontroller";
}
}

void MainWindow::readData()
{
serialData += microcontroller->readAll();
qDebug() << serialData;
ui->run_PushButton->blockSignals(false);
}

blockSignals の使用に注意してください。そのため、すでに実行中の DAQ を開始することはできません。

4

1 に答える 1