XP плюёт на мои настройки таймаутов RS232. Что с этим делать ?

Тема в разделе "WASM.WIN32", создана пользователем ACF_muti1atoR, 30 май 2005.

  1. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    Короче понял в чём была проблема в программе. Она просто зацикливалась на ожидании приезжающих данных. (Причём непонятно почему прога висла, ведь приём в одном потоке, а интерфейс - в другом и приоритеты у них одинаковые).



    В 98 работает - потому что он мои настройки таймаутов на чтение из ком порта устанавливает.

    А ХР виснет нахрен 8) потому что для него мои тайм-ауты - филькина грамота. Он почему-то думает: "хочу - не хочу, делаю что хочу".



    Как ХР заставить насильно установить нужные мне таймауты ? (COMMTIMEOUTS), если функцию SetCommTimeouts он игнорирует ?
     
  2. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    ACF_muti1atoR

    Зачем ты новую тему сделал?
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ACF_muti1atoR

    Повторяю: сначала нужно попробовать пообщаться с девайсом через Гипертерминал (есть такая прога в винде) чтоб исключить возможность ошибки в вашем коде. Если через терминал не получится, то можно заподозрить глючность UART, но это крайне маловероятно.



    Вот код, который я когда-то нашёл в борландовской справке, немного доработал и теперь активно использую в своих программах (тестировал на многих машинах):
    Код (Text):
    1. HANDLE hCOM;
    2. DCB dcb;
    3. COMMTIMEOUTS timeouts = {MAXDWORD,0,0,512,512};
    4. #define COMPORT "COM1"
    5.  
    6. // ***
    7.  
    8. if((hCOM = CreateFile(COMPORT,GENERIC_READ | GENERIC_WRITE,
    9.            0,NULL,OPEN_EXISTING,
    10.            0, // асинхронный режим
    11.            NULL)) == INVALID_HANDLE_VALUE)
    12.    MessageBox(NULL,"Порт не открывается :-(",NULL,MB_ICONSTOP);
    13. else{
    14.    GetCommState(hCOM,&dcb);
    15.    dcb.BaudRate = 9600;
    16.    dcb.ByteSize = 8;
    17.    dcb.Parity = NOPARITY;
    18.    dcb.StopBits = ONESTOPBIT;
    19.    if(!SetCommState(hCOM,&dcb))
    20.       MessageBox(NULL,"Порт не конфигурируется :-(",NULL,MB_ICONSTOP);
    21.    else{
    22.       SetCommTimeouts(hCOM,&timeouts);
    23.       PurgeComm(hCOM,PURGE_TXCLEAR | PURGE_RXCLEAR);
    24.  
    25.       // Тут используем порт
    26.  
    27.       PurgeComm(hCOM,PURGE_TXCLEAR | PURGE_RXCLEAR);
    28.       CloseHandle(hCOM);
    29.    }
    30. }
     
  4. ACF_muti1atoR

    ACF_muti1atoR New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    30
    Адрес:
    Провода
    Quantum зачем с девайсом-то общаться ? неработает-то не он(шкаф), а прога 8). И неработает только в ХР.



    Кстати ни в Гипертерменале, ни в ТТY таймауты настраивать нельзя. Так бы я проверил.