【发布时间】:2014-01-27 01:20:54
【问题描述】:
我正在使用 QT 连接到硬件串行设备,我的应用程序大致基于终端示例,但由于通信需要非常同步,串行处理程序位于另一个线程中。通过 2xRS232 到带有 FTDI 芯片组的 USB 适配器进行连接。
串口通讯很好,我可以连接,发送命令等。但是,当我退出并重新加载应用程序时,串口似乎被阻塞了。
设COM1为已连接设备,COM2未连接。
如果我运行程序,与硬件进行一些对话并退出,我将无法在下次运行程序时连接到 COM1(适配器上的数据 LED 不闪烁),除非我尝试首先连接到 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 中)。
【问题讨论】:
标签: windows qt serial-port ftdi