Порты - статьи


         

аутов вполне хватает для уверенного



dcb.StopBits = 1;

SetCommState(handle, &dcb);

CommTimeOuts.ReadIntervalTimeout= 10;

CommTimeOuts.ReadTotalTimeoutMultiplier = 1;

// значений этих тайм – аутов вполне хватает для уверенного приема

// даже на скорости 110 бод

CommTimeOuts.ReadTotalTimeoutConstant = 100;

// используется в данном случае как время ожидания посылки

CommTimeOuts.WriteTotalTimeoutMultiplier = 0;

CommTimeOuts.WriteTotalTimeoutConstant = 0;

SetCommTimeouts(handle, &CommTimeOuts);

PurgeComm(handle, PURGE_RXCLEAR);

PurgeComm(handle, PURGE_TXCLEAR);

После открытия порта первым делом необходимо сбросить его, так как в буферах приема и передачи может находиться “мусор”. Поэтому в конце примера мы применили ранее не известную нам функцию PurgeComm:

BOOL PurgeComm(

HANDLE hFile,

DWORD dwFlags

);

Эта функция может выполнять две задачи: очищать очереди приема-передачи в драйвере или же завершать все операции ввода-вывода. Какие именно действия выполнять, задается другим параметром:

  • PURGE_TXABORT — немедленно прекращает все операции записи, даже если они не завершены;
  • PURGE_RXABORT — немедленно прекращает все операции чтения, даже если они не завершены;
  • PURGE_TXCLEAR — очищает очередь передачи в драйвере;
  • PURGE_RXCLEAR — очищает очередь приема в драйвере.
    Эти значения можно комбинировать с помощью побитовой операции OR. Очищать буферы рекомендуется также после ошибок приема-передачи и после завершения работы с портом.


Настало время для рассмотрения непосредственно операций чтения-записи для порта. Как и для работы с файлами, используются функции ReadFile и WriteFile. Вот их прототипы:

BOOL ReadFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumOfBytesToRead,

LPDWORD lpNumOfBytesRead,

LPOVERLAPPED lpOverlapped

);

BOOL WriteFile(

HANDLE hFile,

LPVOID lpBuffer,

DWORD nNumOfBytesToWrite,

LPDWORD lpNumOfBytesWritten,

LPOVERLAPPED lpOverlapped

);

Рассмотрим назначение параметров этих функций:

  • hFile — описатель открытого файла коммуникационного порта;
  • lpBuffer — адрес буфера.

    Содержание  Назад  Вперед