在Qt中关闭串口之前发送串口消息
Posted
技术标签:
【中文标题】在Qt中关闭串口之前发送串口消息【英文标题】:Send a serial message before closing the serial port in Qt 【发布时间】:2020-03-16 13:51:56 【问题描述】:我正在尝试在 Qt 中为一个学术项目开发一个用户界面,它将串行消息发送到微控制器。不过,我正在努力关闭串行端口:用户界面应在关闭串行端口之前向微控制器发送串行消息。这是管理此操作的代码部分:
device->write(QString("ABORT___").toStdString().c_str());
displayMessage("Disconnected");
deviceIsConnected = false;
device->close();
ui->PortComboBox->setEnabled(true);
ui->tabWidget->setEnabled(false);
ui->ConnectButton->setText("Connect");
ui->ConnectionStatus->setText("<span style=\" color:#e1d41f;\">DISCONNECTED</span>");
问题是这段代码在实际发送消息之前关闭了端口,事实上,如果我尝试评论这一行device->close();
,代码会按预期工作。似乎在发送消息之前端口已关闭,即使管理端口关闭的行在之后。
即使我尝试在某些 if 语句中嵌套 device->close();
行,问题仍然存在。
你能帮帮我吗?
【问题讨论】:
您能否在调试器中检查device->write
在您的情况下是否返回-1
?
感谢您的评论。我检查了device->write
是否使用以下代码qDebug() << device->write(QString("ABORT___").toStdString().c_str());
返回-1
,它返回8
【参考方案1】:
bytesWritten
信号发出后,您应该关闭端口
您也可以致电waitForBytesWritten
对于缓冲设备,此函数会一直等待,直到缓冲写入数据的有效负载已写入设备并且已发出 bytesWritten() 信号,或者直到 msecs 毫秒过去。如果 msecs 为 -1,则此函数不会超时。对于无缓冲的设备,它会立即返回。
【讨论】:
以上是关于在Qt中关闭串口之前发送串口消息的主要内容,如果未能解决你的问题,请参考以下文章
ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收