Async Pro没有正确关闭com端口?

时间:2013-09-09 20:24:37

标签: windows visual-c++ asynchronous serial-port c++builder

我正在将几个软件移植到Windows 7/8并且遇到了一些麻烦。有问题的代码最后一次更新于1997年左右,并用C ++编写。一个用VC ++编写,另一个用Borland C ++ Builder编写(我现在使用RAD Studio 2009),并使用Async Pro。我已将这两个项目更新并在Win7下构建,并且它们可以单独工作。两个应用程序都与我的雇主制作的设备进行通信,但每个应用程序都收集不同的数据。它们都被降级为Java应用程序调用的后端程序。

我现在遇到的问题是: 在运行使用Borland / Async Pro编写的程序之前,用VC ++编写的程序能够毫无问题地与设备通信。之后,它可以成功打开端口,我看到TX上的活动LED亮起,但应用程序实际上并没有与设备通信。此时,Async Pro应用程序,Tera Term和Java应用程序都能够在同一端口上与设备通信。如果我使用的端口是USB串行桥,我可以拔掉它并恢复VC ++应用程序的功能。我试图通话的设备上的循环电源什么也没做。

下面是打开com端口的VC ++代码。据我所知,这就是你应该如何在VC ++中打开COM端口。

std::ostringstream comCatString;
comCatString << "\\\\.\\COM" << (int)CommPort;

// Try to open the serial port.
hPort = CreateFile( TEXT(comCatString.str().c_str()),
                    GENERIC_READ | GENERIC_WRITE,
                    0, 
                    NULL, 
                    OPEN_EXISTING,
                    0,
                    NULL);

if ( hPort == INVALID_HANDLE_VALUE )
{
    //clear strstream
    comCatString.str("");
    comCatString.clear();
    comCatString << "Unable to open serial port " << (int)CommPort << ". \r\nError: " << GetLastError();

    MessageBox (NULL, TEXT(comCatString.str().c_str()), TEXT("Error"), MB_OK);
    return FALSE;
}

以下是从AsyncPro应用程序关闭com端口的代码:

ApdComPort->Open = false;
ApdComPort->DonePort();

我花了大部分时间在Google和StackExchange上搜索,并没有真正找到任何与此问题相似的内容。似乎大多数人的问题是他们的Async Pro应用程序将挂起端口关闭。

我怀疑VC ++和Async Pro应用程序,但我不知道实际上是哪个问题因为:

  1. 当我没有运行Async Pro应用程序时,VC ++应用程序正常工作,
  2. 我尝试过的其他应用程序似乎在Async Pro应用程序运行后正常工作。
  3. 我还怀疑目标设备被Async Pro应用程序留在了某种奇怪的状态,但是在它上面循环上电可以解决这个问题。

    我在这里做错了吗?还有其他我应该测试的东西,还是某些缺少的终结或初始化代码?什么在XP和早期版本的Windows中运行良好,但已被修复或删除?

    我还没有尝试在Windows 8上运行这些应用程序中的任何一个,因为我的开发机器是Windows 7.当我朝这个方向前进时,是否还有其他问题需要注意?

    谢谢!

    编辑: 当有问题的端口是FT232或笔记本电脑底座中的串口时,会发生这种情况。

    编辑2: 问题解决了。原来是一个握手问题。

0 个答案:

没有答案