在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-&gt;close();,代码会按预期工作。似乎在发送消息之前端口已关闭,即使管理端口关闭的行在之后。 即使我尝试在某些 if 语句中嵌套 device-&gt;close(); 行,问题仍然存在。

你能帮帮我吗?

【问题讨论】:

您能否在调试器中检查device-&gt;write 在您的情况下是否返回-1 感谢您的评论。我检查了device-&gt;write 是否使用以下代码qDebug() &lt;&lt; device-&gt;write(QString("ABORT___").toStdString().c_str()); 返回-1,它返回8 【参考方案1】:

bytesWritten 信号发出后,您应该关闭端口

您也可以致电waitForBytesWritten

对于缓冲设备,此函数会一直等待,直到缓冲写入数据的有效负载已写入设备并且已发出 bytesWritten() 信号,或者直到 msecs 毫秒过去。如果 msecs 为 -1,则此函数不会超时。对于无缓冲的设备,它会立即返回。

【讨论】:

以上是关于在Qt中关闭串口之前发送串口消息的主要内容,如果未能解决你的问题,请参考以下文章

android串口消息

QT串口通讯

web如何接收qt的消息

ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

qt串口设置停止位出现