Невозможно открыть / инициализировать последовательный порт в C ++ с помощью SerialCommHelper

0

Мы используем USB-последовательный преобразователь портов, чтобы установить соединение с последовательным портом. Мы протестировали его на компьютере без последовательного порта и смогли успешно инициализировать и отправить команду через конвертер на устройство. После того как мы выпустим файл.exe на другой компьютер с тем же USB-последовательным преобразователем, он не сможет открыть 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.

Любая помощь приветствуется! Спасибо!

Теги:
serialization
usbserial

1 ответ

0

Синтаксис имени порта COM-порта изменяется для COM10 и выше. Вам нужно: "\\.\COM10"

как описано здесь... http://support.microsoft.com/kb/115831/en-us

Ещё вопросы

Сообщество Overcoder
Наверх
Меню