Мы используем конвертер USB-последовательный порт, чтобы установить соединение через последовательный порт. Мы протестировали его на компьютере без последовательного порта и смогли успешно инициализировать и отправить команду через преобразователь на устройство. Как только мы выпускаем файл .exe на другой компьютер с тем же конвертером последовательных портов, он не может открыть com-порт.
Единственное, что мы думали, что нам нужно изменить в коде, это номер порта, который, как мы убедились, был правильным из диспетчера устройств. COM6 на рабочем компьютере и COM11 на нерабочем. Мы также попытались изменить COM11 на COM2 (неиспользуемый номер порта). ПК, на котором мы пытаемся заставить его работать, уже имеет 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.
Любая помощь приветствуется! Спасибо!
Синтаксис имени COM-порта изменяется для COM10 и выше. Вам нужно: «\\. \ COM10»
как задокументировано здесь …
http://support.microsoft.com/kb/115831/en-us
Других решений пока нет …