Главная страница
Навигация по странице:

  • BuildCommDCB

  • BuilCommDCB

  • GetCommState

  • CreateFile

  • Титов О.Работа с коммуникационными портами (COM и LPT) в программах для Win32. Титов О.Работа с коммуникационными портами (COM и LPT) в програм. Работа с коммуникационными портами (com и lpt) в программах для Win32. Автор Титов Олег


    Скачать 276 Kb.
    НазваниеРабота с коммуникационными портами (com и lpt) в программах для Win32. Автор Титов Олег
    АнкорТитов О.Работа с коммуникационными портами (COM и LPT) в программах для Win32.doc
    Дата22.10.2017
    Размер276 Kb.
    Формат файлаdoc
    Имя файлаТитов О.Работа с коммуникационными портами (COM и LPT) в програм.doc
    ТипДокументы
    #9678
    КатегорияЭлектротехника. Связь. Автоматика
    страница3 из 9
    1   2   3   4   5   6   7   8   9

    Функция BuildCommDCB


    Только что рассмотренная нами структура DCB самая большая из всех, использующихся для настройки последовательных портов. Но она и самая важная. Заполнение всех полей этой структуры может вызвать затруднения, так как надо очень четко представлять, как работает последовательный порт. Поэтому ручную установку полей можно порекомендовать опытным программистам. Если же Вы чувствуете себя не очень уверено, воспользуйтесь функцией BuildCommDCB, которая позволяет заполнить поля структуры DCB на основе строки, по синтаксису аналогичной строке команды mode. Вот как выглядит прототип этой функции:

    BOOL BuildCommDCB(LPCTSTR lpDef, LPDCB lpDCB);

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

    lpDef


    Указатель на строку с конфигурационной информацией в формате команды mode. Например, следующая строка задает скорость 1200, без четности, 8 бит данных и 1 стоповый бит.

    baud=1200 parity=N data=8 stop=1

    lpDCB


    Указатель на заполняемую структуру DCB. При этом структура должна быть уже создана и заполнена нулями, кроме поля DCBlength, которое должно содержать корректное значение. Возможно так же использование уже заполненной структуры DCB, например полученной вызовом одной из функций чтения параметров порта.

    В случае успешного завершения функция BuildCommDCB возвращает не нулевое значение. В случае ошибки возвращается 0.

    Обычно функция BuldCommDCB изменяет только явно перечисленные в строке lpDef поля. Однако существуют два исключения из этого правила:

    • При задании скорости обмена 110 бит в секунду автоматически устанавливается формат обмена с двумя стоповыми битами. Это сделано для совместимости с командой mode из MS-DOS или Windows NT.

    • По умолчанию запрещается программное (XON/XOFF) и аппаратное управление потоком. Вы должны вручную заполнить требуемые поля DCB если требуется управление потоком.

    Функция BuilCommDCB поддерживает как новый, так и старый форматы командной строки mode. Однако, Вы не можете смешивать эти форматы в одной строке.

    Новый формат строки позволяет явно задавать значения для полей DCB отвечающих за управление потоком. При использовании старого формата существуют следующие соглашения:

    • Для строк вида 9600,n,8,1 (не заканчивающихся символами x или p):

    • fInX, fOutX,fOutXDsrFlow, fOutXCtsFlow устанавливаются в FALSE

    • fDtrControl устанавливается в DTR_CONTROL_ENABLE

    • fRtsControl устанавливается в RTS_CONTROL_ENABLE

    • Для строк вида 9600,n,8,1,x (заканчивающихся символом х):

    • fInX, fOutX устанавливаются в TRUE

    • fOutXDsrFlow,fOutXCtsFlow устанавливаются в FALSE

    • fDtrControl устанавливается в DTR_CONTROL_ENABLE

    • fRtsControl устанавливается в RTS_CONTROL_ENABLE

    • Для строк вида 9600,n,8,1,p (заканчивающихся символом p):

    • fInX, fOutX устанавливаются в FALSE

    • fOutXDsrFlow,fOutXCtsFlow устанавливаются TRUE

    • fDtrControl устанавливается в DTR_CONTROL_HANDSHAKE

    • fRtsControl устанавливается в RTS_CONTROL_HANDSHAKE

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

    Функция GetCommState


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

    BOOL GetCommState(

    HANDLE hFile,

    LPDCB lpDCB

    );

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

    hFile


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

    lpDCB


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

    При успешном завершении функция возвращает ненулевое значение. При ошибке нуль. Получить параметры порта можно в любой момент, а не только при начальной настройке.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта