Работа с COM и LPT в Win32.

Работа с COM и LPT в Win32.

Олег Титов

Описание

Данное руководство посвящено работе с коммуникационными портами (COM и LPT) в программах для Win32. В нем подробно рассматриваются особенности программирования работы с этими портами, включая функции, специфичные для работы с портами, краткое описание функций работы с файлами (с портами в Win32 работают как с файлами), краткое описание функций многопотоковой обработки и примеры программ. Узнайте, как открыть COM/LPT порт, использовать функции Win32 API, такие как CreateFile, и работать с последовательными и параллельными портами в программах для Windows. Материал подходит для разработчиков, работающих с управляющими устройствами, которые подключаются к компьютеру через RS-232 (COM) или Centronics (LPT). Руководство избегает сложных терминов и фокусируется на практических примерах, помогая читателям быстро освоить тему.

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

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

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

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

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

Сразу хочу оговориться, что Windows требует точного соблюдения аппаратного протока обмена с внешними устройствами. Другими словами, у Вас не получится управлять, например, светодиодом подключенным к одному из выводов параллельного порта. Просто потому, что система будет требовать отработки и сигналов STROBE и ACK. Если Вас это не устраивает, то выход один – писать собственный драйвер вооружившись DDK. Это, конечно, очень интересная тема, но в данной статье я не буду ее касаться.

Как я уже говорил, с последовательными и параллельными портами в 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

Похожие книги

1С: Бухгалтерия 8 с нуля

Алексей Анатольевич Гладкий

Овладейте программой 1С:Бухгалтерия 8 с помощью этого исчерпывающего руководства. Книга детально описывает все аспекты работы с программой, от ввода данных до формирования отчетов. Вы научитесь автоматизировать основные участки бухгалтерии: учет наличных и безналичных средств, основных средств, товарно-материальных ценностей, зарплаты и производства. Подробные уроки с примерами помогут вам быстро освоить все функции программы. Эта книга – ваш надежный помощник в освоении 1С:Бухгалтерия 8.

1С: Управление торговлей 8.2

Алексей Анатольевич Гладкий

Современные торговые предприятия сталкиваются с огромным количеством задач: управление широким ассортиментом товаров, различными условиями продаж (предоплата, скидки), категориями клиентов (VIP, постоянные), складскими операциями, сертификацией и инвентаризацией. Эта книга посвящена автоматизации торговой деятельности с помощью популярного программного продукта "1С: Управление Торговлей 8.2". Вы узнаете, как эффективно использовать возможности программы для управления запасами, закупками, продажами, финансами и маркетингом. Подробно рассматриваются функциональные возможности, особенности работы с информационными базами и пользовательским интерфейсом. Идеальное руководство для начинающих пользователей, стремящихся освоить работу с программой "1С: Управление Торговлей 8.2" и повысить эффективность своего бизнеса.

200 лучших программ для Интернета. Популярный самоучитель

Илья Краинский

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

300 лучших программ на все случаи жизни

Виталий Петрович Леонтьев, Виталий Леонтьев

Эта книга – ваш надежный гид в мире программного обеспечения. Она содержит обзор 300 лучших программ, охватывающих широкий спектр задач: от офисных приложений до системных утилит, графики, музыки, видео, обработки звука, браузеров, почты и антивирусов. В книге вы найдете подробные описания, сравнения и рекомендации по выбору программ, что поможет вам найти оптимальное решение для любой задачи. Книга предназначена для пользователей с разным уровнем опыта, от новичков до профессионалов. Она поможет вам эффективно работать на компьютере, используя самые актуальные и полезные программы.