关闭串口的正确方法QT

您所在的位置:网站首页 如何关闭串口 关闭串口的正确方法QT

关闭串口的正确方法QT

2023-04-13 21:19| 来源: 网络整理| 查看: 265

我正在使用QT连接到硬件串行设备,我基于我的应用程序大致围绕终端示例,但由于通信需要非常同步,因此串行处理程序生活在另一个线程。该连接通过一个2xRS232连接到带有FTDI芯片组的USB适配器。关闭串口的正确方法QT

串行通信很好,我可以连接,发送命令等。但是,当我退出并重新加载应用程序时,串行端口似乎被阻止。

让COM1为连接的设备,COM2未连接。

如果我运行该程序,做一些与硬件通话并退出,下一次运行程序(数据LED不会在适配器上闪烁)时不能再连接到COM1,除非我尝试首先连接到COM2。一旦我尝试过,我可以像往常一样连接回COM1。在硬件的参考实用程序中没有看到这种行为,因此必须以某种方式处理端口。

我身边的代码是:

void mydevice::closeSerialPort() { this->stop(); serial->close(); emit serialClosed(); emit log("Serial port closed."); }

serial是QTSerialPort。首先发送一个停止命令来关闭硬件(与问题无关,这只是一种方便),然后我发送一个关闭命令给串口。

我有我的主窗口中的子类的QWidget,要求退出该命令:

/* In the constructor */ connect(this, SIGNAL(WindowClosed()), mydevice, SLOT(closeSerialPort())); void mainwindow::closeEvent(QCloseEvent *event) { emit WindowClosed(); event->accept(); }

没有任何理由为这种行为?我假设我以某种方式阻止港口开放,但肯定会抱怨它已经开放。

另一个奇怪的问题是,说设备是在COM1上,我在我的应用程序中打开它,COM1在其他实用程序中无响应,设备出现在COM2上。但是,当我切换回我的程序并拨弄一下时,设备再次出现在COM1上(尽管总是在另一个应用程序的COM2中)。

来源

2014-01-27 Josh



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3