Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Титов О.Работа с коммуникационными портами (COM и LPT) в программах для Win32.doc
Скачиваний:
305
Добавлен:
22.08.2013
Размер:
282.62 Кб
Скачать

Функция GetCommState

Заполнить DCB можно еще одним способом. Вызовом функции GetCommState. Эта функция заполняет DCB информацией о текущем состоянии устройства, точнее о его настройках. Вот как она выглядит:

BOOL GetCommState(

HANDLE hFile,

LPDCB lpDCB

);

Функция очень проста и имеет всего два параметра:

hFile

Описатель открытого файла коммуникационного порта. Этот описатель возвращается функцией CreateFile. Следовательно, прежде чем получить параметры порта, Вы должны его открыть. Для функцииBuildCommDCBэто не требовалось.

lpDCB

Указатель на DCB. ДляDCBдолжен быть выделен блок памяти.

При успешном завершении функция возвращает ненулевое значение. При ошибке нуль. Получить параметры порта можно в любой момент, а не только при начальной настройке.

Функция SetCommState

Заполнив DCBможно приступать к собственно конфигурированию порта. Это делается с помощью функцииSetCommState:

BOOL SetCommState(

HANDLE hFile,

LPDCB lpDCB

);

Эта функция имеет точно такие же параметры, как GetCommState. Различается только направление передачи информации.GetCommStateсчитывает информацию из внутренних управляющих структур и регистров порта, аSetCommStateнаоборот заносит ее. Следует быть осторожным при вызове функцииSetCommState, поскольку она изменит параметры даже в том случае, если очереди приема/передачи не пусты, что может вызвать искажение потока передаваемых или принимаемых данных.

Еще одна тонкость этой функции заключается в том, что она завершится с ошибкой, если поля XonCharиXoffCharвDCBсодержат одинаковые значения.

Как всегда, в случае успешного завершения возвращается отличное от нуля значение, а в случае ошибки - нуль.

Структура commtimeouts

Следующей важной управляющей структурой является COMMTIMEOUTS. Она определяет параметры временных задержек при приеме и передаче. Значения, задаваемые полями этой структуры, оказывают большое влияние на работу функций чтения/записи.

typedef struct _COMMTIMEOUTS {{

DWORD ReadIntervalTimeout;

DWORD ReadTotalTimeoutMultiplier;

DWORD ReadTotalTimeoutConstant;

DWORD WriteTotalTimeoutMultiplier;

DWORD WriteTotalTimeoutConstant;

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

Поля структуры COMMTIMEOUTS имеют следующие значения:

ReadIntervalTimeout

Максимальное время, в миллисекундах, допустимое между двумя последовательными символами, считываемыми с коммуникационной линии. Во время операции чтения временной период начинает отсчитываться с момента приема первого символа. Если интервал между двумя последовательными символами превысит заданное значение, операция чтения завершается и все данные, накопленные в буфере, передаются в программу. Нулевое значение данного поля означает, что данный тайм-аут не используется. Значение MAXDWORD, вместе с нулевыми значениями полей ReadTotalTimeoutConstantиReadTotalTimeoutMultiplier, означает немедленный возврат из операции чтения с передачей уже принятого символа, даже если ни одного символа не было получено из линии.

ReadTotalTimeoutMultiplier

Задает множитель, в миллисекундах, используемый для вычисления общего тайм-аута операции чтения. Для каждой операции чтения данное значение умножается на количество запрошеных для чтения символов.

Соседние файлы в предмете Проектирование электроприборов
  • #
    22.08.20133.39 Mб28Сворень Р. - Шаг за шагом. Усилители и радиоузлы (1965).djvu
  • #
    22.08.201312.78 Mб20Скляр Б.Цифровая связь.Теоретические основы и практическое применение.2003.djvu
  • #
    22.08.20135.15 Mб38Соклоф С. Аналоговые интегральные схемы; 1988.djvu
  • #
    22.08.2013975.61 Кб20Соколов С.Н. - Задачи для радиолюбителей (1970).djvu
  • #
    22.08.201312.6 Mб21Соколовский М.И. и др. - Управляемые энергетические установки на твердом ракетном топливе (2003).djvu
  • #
  • #
    23.08.20133.13 Mб37Фернер В.Пневмоавтоматические приборы низкого давления.1964.djvu
  • #
    23.08.20135.39 Mб52Хаммел Р.Л.Последовательная передача данных.1996.djvu
  • #
    22.08.20133.78 Mб18Хаушильд В., Мош В. (Hauschild W., Mosch W.) - Статистика для электротехников в приложении к технике высоких напряжений (Эн.djv
  • #
    23.08.20133.32 Mб28Холуянов Ф.И.Трансформаторы однофазного и трёхфазного тока.1934.djvu
  • #
    23.08.20136.79 Mб31Хоровиц П.Искусство схемотехники.т1.1986.djvu