我们使用USB串口转换器建立串口连接。我们在没有串口的计算机上进行了测试,并且能够通过转换器成功初始化并发送命令到设备。一旦我们将.exe文件发布到具有相同usb-serial转换器的另一台PC,它就无法打开com端口。
我们认为我们需要在代码中更改的唯一内容是端口号,我们从设备管理器确认这是正确的。工作计算机上的COM6和非工作计算机上的COM11。我们还尝试将COM11更改为COM2(未使用的端口号)。我们试图让它工作的PC已经有3个真正的串口(COM1,3和4),但是它们会以某种方式干扰这个端口吗?
我们使用SerialCommHelper.cpp代码初始化端口。
HRESULT CSerialCommHelper:: Init(std::string szPortName, DWORD dwBaudRate,BYTE byParity,BYTE byStopBits,BYTE byByteSize)
{
HRESULT hr = S_OK;
try
{
m_hDataRx = CreateEvent(0,0,0,0);
//open the COM Port
//LPCWSTR _portName =LPCWSTR( szPortName.c_str());
wchar_t* wString=new wchar_t[4096];
MultiByteToWideChar(CP_ACP, 0, szPortName.c_str(), -1, wString, 4096);
m_hCommPort = ::CreateFile(wString,
GENERIC_READ|GENERIC_WRITE,//access ( read and write)
0, //(share) 0:cannot share the COM port
0, //security (None)
OPEN_EXISTING,// creation : open_existing
FILE_FLAG_OVERLAPPED,// we want overlapped operation
0// no templates file for COM port...
);
if ( m_hCommPort == INVALID_HANDLE_VALUE )
{
TRACE ( "CSerialCommHelper : Failed to open COM Port Reason: %d",GetLastError());
ASSERT ( 0 );
std::cout << "This is where the error happens" << std::endl;
return E_FAIL;
}
我们用
来称呼它if( m_serial.Init(comPort, 38400, 0, 1, 8) != S_OK )
哪个comPort设置正确,但Init永远不会返回S_OK。
任何帮助表示赞赏!谢谢!
答案 0 :(得分:0)
COM10端口名称语法随COM10及更高版本而变化。你需要:“\\。\ COM10”
如此处所述...... http://support.microsoft.com/kb/115831/en-us