2015-08-17 3 views
0

Вот COM открытие порта часть:серийный выпуск COM порт @ чтение

portHandle=CreateFileA(portName, GENERIC_READ|GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL); 
if (portHandle == INVALID_HANDLE_VALUE) 
{ 
    return -1; 
} 
COMMCONFIG Win_CommConfig; 
COMMTIMEOUTS Win_CommTimeouts; 
unsigned long confSize = sizeof(COMMCONFIG); 
Win_CommConfig.dwSize = confSize; 
GetCommConfig(portHandle, &Win_CommConfig, &confSize); 
Win_CommConfig.dcb.Parity = 0; 
Win_CommConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE; 
Win_CommConfig.dcb.fOutxCtsFlow = FALSE; 
Win_CommConfig.dcb.fOutxDsrFlow = FALSE; 
Win_CommConfig.dcb.fDtrControl = DTR_CONTROL_DISABLE; 
Win_CommConfig.dcb.fDsrSensitivity = FALSE; 
Win_CommConfig.dcb.fNull=FALSE; 
Win_CommConfig.dcb.fTXContinueOnXoff = FALSE; 
Win_CommConfig.dcb.fInX=FALSE; 
Win_CommConfig.dcb.fOutX=FALSE; 
Win_CommConfig.dcb.fBinary=TRUE; 
Win_CommConfig.dcb.DCBlength = sizeof(DCB); 
if (baudrate != -1) 
{ 
    Win_CommConfig.dcb.BaudRate = baudrate; 
} 
Win_CommConfig.dcb.ByteSize = 8; 
Win_CommTimeouts.ReadIntervalTimeout = 50; 
Win_CommTimeouts.ReadTotalTimeoutMultiplier = 0; 
Win_CommTimeouts.ReadTotalTimeoutConstant = 110; 
Win_CommTimeouts.WriteTotalTimeoutMultiplier = 0; 
Win_CommTimeouts.WriteTotalTimeoutConstant = 110; 
SetCommConfig(portHandle, &Win_CommConfig, sizeof(COMMCONFIG)); 
SetCommTimeouts(portHandle,&Win_CommTimeouts); 
return 0; 

Он соединяется нормально, мне удалось выпустить некоторые AT comamnds и считаны OK \ п> ответы, даже один из верхнего уровня протокол (OBD2: команда 0100\r) получает правильный ответ. Но когда я пытаюсь выполнить другие команды, такие как сканирование поддерживаемых pids (например, 0000\n, 0101\n, 0202\n и т. Д.), Все это либо отгоняет то, что я пишу, либо просто время. Выдача одной и той же последовательности команд из гипертерминала работает правильно. Эти последовательные порты представляют собой виртуальные смоделированные порты, если это имеет значение - http://com0com.sourceforge.net/. Что мне не хватает? Возможно, некоторые чтения/настройки/сброса некоторых из контактов? Прошло некоторое время с тех пор, как я последний раз смешивался с RS232 ... Спасибо!

EDIT: просто попробовал scantool на https://www.scantool.net/downloads/diagnostic-software/, и он тоже работал нормально.

ответ

0

0000 например \ п, 0101 \ п, 0202 \ п

Это был вопрос. Это должно было быть \ r в конце, а не \ n. Hyperterminal работал, потому что ключ вставлял бы здесь в Windows. Вероятно, достоверная проверка ввода была сделана подключенным устройством, и поэтому он работал даже с неправильным символом терминатора.

Смежные вопросы