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

  • GetLastError

  • Титов О.Работа с коммуникационными портами (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
    КатегорияЭлектротехника. Связь. Автоматика
    страница1 из 9
      1   2   3   4   5   6   7   8   9

    Работа с коммуникационными портами (COM и LPT) в программах для Win32.

    Автор: Титов Олег


    Функция CreateFile 1

    Функция CloseHandle 2

    Структура DCB 3

    Функция BuildCommDCB 6

    Функция GetCommState 7

    Функция SetCommState 7

    Структура COMMTIMEOUTS 8

    Функция BuildCommDCBAndTimeouts 9

    Функция GetCommTimeouts 9

    Функция SetCommTimeouts 10

    Структура COMMPROP 11

    Структура COMMCONFIG 15

    Функция GetCommConfig 15

    Функция CommConfigDialog 16

    Функция SetCommConfig 17

    Функции GetDefaultCommConfig и SetDegaultCommConfig 17

    Функция SetupComm 17

    Функцити ReadFile и WriteFile 18

    Функция PurgeComm 19

    Функция FlushFileBuffers 19

    Функция TransmitCommChar 20

    Функции SetCommBreak и ClearCommBreak 20

    Функция EscapeCommFunction 20

    Функция ClearCommError 21

    Структура COMMSTAT 21

    Функция SetCommMask 22

    Функция GetCommMask 23

    Функция WaitCommEvent 23

    Структура OVERLAPPED 24


    Мне часто задают вопросы о работе с СОМ портами из программ, написанных для Windows 95/98/NT. Причем чаще всего спрашивают разработчики всевозможных управляющих устройств. Эти устройства либо были разработаны давно, еще в эпоху MS-DOS, либо разрабатываются сейчас. Но объединяет их одно - устройство должно подключаться к компьютеру, в большинстве случаев через RS-232 (COM), реже, через Centronics (LPT).

    В литературе, чаще всего, управление последовательным и параллельным портами описывается на уровне регистров этих портов, причем примеры программ приводятся на языке Assembler. Это не удивительно. Последовательный порт довольно медленное устройство, к тому же специфическое. Поэтому в программах работающих с портами используются прерывания. Параллельный порт быстрее, но тоже медленный и не менее специфичный. Взять хотя бы возможность этого порта работать в двух направлениях, да еще и с использованием ПДП (DMA).

    Написать программу, управляющую устройством через COM порт, для MS-DOS не так сложно. Это частенько делали не программисты, а сами разработчики устройства. Сложнее было сделать красивый и удобный интерфейс пользователя. Этим обычно занимались профессиональные программисты. С платформой Win32 дело обстоит сложнее. Но только на первый взгляд. Конечно, напрямую работать с регистрами портов нельзя, Windows это не позволяет, зато можно не обращать внимания на тонкости различных реализаций (i8055, 16450, 16550A) и не возиться с обработкой прерываний.

    Описание программирования будет состоять из подробного описания функций, специфических для работы с портами, краткого описания функций работы с файлами (с портами в Win32 работают как с файлами), краткого описания функций многопотоковой обработки и, естественно, примеров программ.

    Функция CreateFile


    Как я уже говорил, с последовательными и параллельными портами в Win32 работают как с файлами. Следовательно, начинать надо с открытия порта как файла. Использовать привычные функции open и fopen при этом нельзя, необходимо воспользоваться функцией CreateFile. Эта функция предоставляется Win32 API. Ее прототип выглядит так:

    HANDLE CreateFile(

    LPCTSTR lpFileName,

    DWORD dwDesiredAccess,

    DWORD dwShareMode,

    LPSECURITY_ATTRIBUTES lpSecurityAttributes,

    DWORD dwCreationDistribution,

    DWORD dwFlagsAndAttributes,

    HANDLE hTemplateFile

    );

    Функция имеет много параметров, большинство из которых нам не нужны. Приведу краткое описание параметров:

    lpFileName


    Указатель на строку с именем открываемого или создаваемого файла. Формат этой строки может быть очень хитрым. В частности можно указывать сетевые имена для доступа к файлам на других компьютерах. Можно открывать логические разделы или физические диски и работать в обход файловой системы. Однако для наших задач это не нужно. Последовательные порты имеют имена "COM1", "COM2", "COM3", "COM4" и так далее. Точно так же они назывались в MS-DOS, так что ничего нового тут нет. Параллельные порты называются "LPT1", "LPT2" и так далее. Учтите, что если у Вас к порту СОМ1 подключена мышь, Windows не даст открыть этот порт. Аналогично не удастся открыть LPT1 если подключен принтер. А вот с модемом дела обстоят немного по другому. Если какая-либо программа использует модем, например вы дозвонились до своего провайдера Internet, то Вашей программе не удастся открыть порт к которому подключен модем. Во всех остальных случаях порт будет открыт и Вы сможете работать с модемом сами, из своей программы.

    dwDesiredAccess


    Задает тип доступа к файлу. Возможно использование следующих значений:

    • 0 Опрос атрибутов устройства без получения доступа к нему.

    • GENERIC_READ Файл будет считываться.

    • GENERIC_WRITE Файл будет записываться.

    • GENERIC_READ|GENERIC_WRITE Файл будет и считываться и записываться.

    dwShareMode


    Задает параметры совместного доступа к файлу. Коммуникационные порты нельзя делать разделяемыми, поэтому данный параметр должен быть равен 0.

    lpSecurityAttributes


    Задает атрибуты защиты файла. Поддерживается только в Windows NT. Однако при работе с портами должен в любом случае равняться NULL.

    dwCreationDistribution


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

    dwFlagsAndAttributes


    Задает атрибуты создаваемого файла. Так же управляет различными режимами обработки. Для наших целей этот параметр должен быть или равным 0, или FILE_FLAG_OVERLAPPED. Нулевое значение используется при синхронной работе с портом, а FILE_FLAG_OVERLAPPED при асинхронной, или другими словами, при фоновой обработке ввода/вывода. Подробнее про асинхронный ввод/вывод я расскажу позже.

    hTemplateFile


    Задает описатель файла-шаблона. При работе с портами всегда должен быть равен NULL.

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


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