Re[3]: Чтение с ком-порта
От: snowlight Россия  
Дата: 18.04.03 05:44
Оценка:
Здравствуйте, XorNeT, Вы писали:

XNT>Платформа в2к читаю реадфайлом предварительно вызывая SetCommState() & SetCommTimeouts()

XNT>if(hCom!= INVALID_HANDLE_VALUE){
XNT> DCB dCB;
XNT> ::GetCommState(hCom,&dCB);
XNT> dCB.DCBlength = sizeof(DCB);
XNT> dCB.BaudRate = CBR_9600;
XNT> dCB.fParity = TRUE;
XNT> dCB.Parity = NOPARITY;
XNT> dCB.ByteSize = 8;
XNT> dCB.StopBits = ONESTOPBIT;
XNT> if(!::SetCommState(hCom,&dCB)){
XNT> TRACE("Error:SetComstate(rt)-%d\n",GetLastError());
XNT> }
XNT> }
XNT> COMMTIMEOUTS pCT;
XNT> pCT.ReadIntervalTimeout = MAXDWORD;
XNT> pCT.ReadTotalTimeoutConstant = 0;
XNT> pCT.ReadTotalTimeoutMultiplier = 0;
XNT> pCT.WriteTotalTimeoutConstant = 0;
XNT> pCT.WriteTotalTimeoutMultiplier =0;

Приходилось с СОМ-портом работать этими же функциями. Ты не написал, как CreateFile вызываешь. У меня было так:
    // Вызов CreateFile для открытия СОМ-порта
    TCHAR sPort[10] = _T("\\\\.\\COM");
    sPort[7] = ((TCHAR)nPort) + '0';
    sPort[8] = 0;
    
    // Открываем порт
    m_hComm = CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 0, 
      NULL, OPEN_EXISTING, 0, NULL);
    if (m_hComm == INVALID_HANDLE_VALUE)
        return XDCP_PORTNOTOPENED;

    // Получаем текущее состояние до того как изменить его
    DCB dcb;
    dcb.DCBlength = sizeof(DCB);
    if ( !GetCommState(m_hComm, &dcb) )
        return XDCP_CANTGETSTATE;

    // Ставим свои параметры
    dcb.BaudRate = dwBaud; // Частота передачи
    dcb.ByteSize = 8; // Биты данных
    dcb.Parity = NOPARITY; // Паритет
    dcb.StopBits = ONESTOPBIT; // Стоповые биты

    // Делаем изменения в настройках порта
    if ( !SetCommState(m_hComm, &dcb) )
        return XDCP_CANTSETSTATE;

    // Устанавливаем таймауты
    COMMTIMEOUTS touts;
    touts.ReadIntervalTimeout = 250; // Таймаут между символами
    touts.ReadTotalTimeoutConstant = 250; // Таймаут добавляющийся к таймауту посылки
    touts.ReadTotalTimeoutMultiplier = 25; // Множитель таймаута для каждого символа
    touts.WriteTotalTimeoutConstant = 0;
    touts.WriteTotalTimeoutMultiplier = 0;
    if ( !SetCommTimeouts(m_hComm, &touts) )
        return XDCP_CANTSETTIMEOUTS;

Это работало.
void Me() { return Me(); } — познай себя!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.