繁体   English   中英

时序问题:QT写入串行端口,然后读取

[英]Timing issues: QT write to serial port followed by read

我正在制作一个Qt数据采集GUI,以代替LabVIEW代替我的实验室中的应用程序。

我希望GUI上的按钮将一些数据写入串行端口(至微控制器),然后等待数据采集完成(微控制器完成),然后通过串行端口取回数据以进行保存,绘图等。 。

以下void检查传入的串行数据。 它打印串行缓冲区中的字节数。

现在,当我运行程序时,我单击按钮并在第一次单击时获得“ 0”。 第二次单击为我提供了正确的可用字节数。

直到下次单击按钮时,我才能获得输入的串行数据。 为什么是这样?

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已在运行时无法启动。

查看Qt串行端口文档,您似乎想使用QIODevice :: readyRead信号连接到会话 ,当新字节到达端口时,该信号将引发。

还有一个关于如何使用此事件的SO 问题/答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM