Интернет Windows Android

Программирование уровня сигнала com порта материнской платы. Распиновка COM порта(RS232)

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

Использование

Итак, перед тем как подробнее поговорить о том, что такое COM-порт, необходимо заглянуть в прошлое для понимания его значения. Буквально 15 лет назад использовался способ подключения устройств к компьютеру посредством специального стандартного разъема, расположенного на задней панели системного блока с применением специального сериального кабеля RS-232. У этого способа имеется множество недостатков. Такой кабель, по современным меркам, предоставляет крайне низкую скорость передачи данных - примерно сотню килобит в секунду. Помимо того, когда производилось физическое соединение разъемов, необходимо было осуществлять выключение оборудования, а сами они крепились друг к другу при помощи винтов, обеспечивающих надежность, при этом их размеры отличались немалой величиной.

Немного истории

COM-порт на тогдашних компьютерах традиционно носил номер 1 или 2, так как обычно их было не больше двух. Можно было установить дополнительные порты, если в этом возникала необходимость. Когда пользователем производилась настройка программного обеспечения, требовалось не перепутать и правильно установить именно тот, к которому обеспечивалось подключение нужного оборудования. Каждый COM-порт требовал правильной настройки скорости а также ряда иных загадочных параметров, о которых было известно только узкому кругу специалистов. Чтобы подключение аппаратуры было успешным, все необходимые параметры требовалось откуда-то узнать либо экспериментально подобрать, так как в этом случае отсутствовало какое-либо автоматическое конфигурирование. Помимо этого, подключение через COM-порт допускало соединение любого программного обеспечения с произвольным внешним оборудованием, даже совершенно несовместимым, из-за чего в процессе настроек и возникало огромное количество ошибок.

Современность

Сейчас соединение через COM-порт полностью вытеснено более современным методом, который не требует особых знаний для реализации, а именно посредством USB-порта. Этот метод лишен всех недостатков, упомянутых ранее. Однако современные стандарты совместимости соединения всевозможного GPS-оборудования и весьма разнородного программного обеспечения сформировались довольно давно вокруг концепции COM-портов, ставших на текущий момент архаичными.

Это сопряжено с тем, что изначально практически любое оборудование, в том числе и GPS, было внешним, а его соединение с компьютером производилось посредством серийного кабеля, подключенного к одному из аппаратных портов. От пользователя в процессе настройки требовалось правильно подобрать номер порта и скорость трансляции данных по нему. В то время возник основной стандарт передачи данных от GPS-приемника к программе, который теперь называется NMEA-0183. Фактически данный стандарт предписывает всем разработчикам даже современнейшей аппаратуры и программного обеспечения обмениваться данными посредством COM-портов. И все это в условиях того, что на современных компьютерах, а также на КПК, уже давно главным является стандарт USB. А еще одна особенность состоит в том, что в последнее время GPS-приемники все чаще стали устанавливать непосредственно внутрь корпуса устройства, то есть между ним и основным девайсом вообще отсутствует какой-либо соединительный кабель.

Виртуальные КОМ-порты

Выход из положения был придуман, а именно разработаны «виртуальные» COM-порты. Получается, что внутреннее устройство КПК, к примеру, GPS-приемник, программно имитируется в виде COM-порта, при этом в аппаратном плане таковым не являясь. При этом программе, которая рассчитана на сопряжение посредством подобного стандарта, нет разницы, как он реализован. Тут допускается наличие виртуальной имитации, а не обязательное присутствие аппаратной реализации. Так и удается обеспечить совместимость GPS-программ старого образца с современным оборудованием.

Внесенные изменения

При этом управление COM-портом существенно не изменилось. Пользователь по старинке должен производить сложную настройку чуть ли не вручную. Однако современный COM-порт представляет собой уже не то громоздкое приспособление, размещавшееся на задней панели системного блока, а совсем иное устройство. И тут все дело в том, что с программной точки зрения все их реализации выглядят безлико, то есть нет разницы между виртуальными и реальными портами. Для программного обеспечения порты различаются только номерами, которые им присвоены производителями КПК на совершенно случайной основе. К примеру, приемник от ASUS обычно находится на COM5, а PocketLOOX 560 показывает приемник на COM8. Получается, что программа, которая желает получать от GPS-приемника данные, не имеет изначально никакой достоверной информации об условном номере, под которым фигурирует порт, прописанный соответствующим для приемника на данном КПК.

Как все это работает?

При том, что среди всех имеющихся COM-портов можно провести автоматический поиск подходящего, процедура такого опроса является довольно ненадежной и достаточно громоздкой. Связано это с тем, что устройства, отображаемые в системе в качестве COM-портов, могут быть довольно разнообразными и не иметь отношения к GPS, они могут совершенно непредсказуемо ответить на такой опрос. К примеру, на КПК бывают порты, сопряженные с внутренним сотовым модемом, с USB, с инфракрасным портом, а также с иными элементами. Обращение к ним программы, предназначенной для работы с конкретным приспособлением, может привести к совершенно непредсказуемой реакции, а также к различным сбоям в работе, что часто становится причиной зависания КПК. Именно поэтому попытка открыть COM-порт может привести к неожиданным ситуациям вплоть до включения Bluetooth или А могут быть и более непонятные случаи.

Работа COM-порта

Для COM-портов в качестве основы используется микросхема асинхронного универсального приемопередатчика. Эта микросхема существует в нескольких разновидностях: Intel 16550A, 16550, 16450, 8250. Для каждого COM-порта она содержит регистры приемника и передатчика данных, а также ряд управляющих регистров, к которым есть доступ через программы BIOS, Windows и MS DOS. У последних версий микросхемы имеется набор буферов для временного хранения передаваемых и получаемых данных. Благодаря такой возможности можно реже прерывать работу центрального процессора, а также согласовать скорость трансляции данных.

Основные параметры

Устройство COM-порта предполагает наличие таких характерных особенностей:

Базового адреса порта для ввода и вывода информации;

Номера аппаратного прерывания;

Размера одного блока информации;

Скорости, с которой передаются данные;

Режима детектирования честности;

Способа управления потоками информации;

Количества стоповых бит.

Как проверить COM-порт компьютера? На что обратить внимание?

Как уже было сказано ранее, этот тип порта представляет собой двунаправленный интерфейс для на битовом уровне последовательным способом. Отличительной характеристикой в сравнении с параллельным портом тут является передача данных бит за битом. Анатомия COM-порта такова, что на компьютере не он один использует последовательный способ передачи данных. Например, такие интерфейсы, как Ethernet или USB, тоже используют аналогичный принцип, но так сложилось исторически, что последовательным принято называть именно порт стандарта RS232.

Очень часто требуется открыть COM-порт для проведения ремонта и диагностики компьютера, при этом его также необходимо проверить на работоспособность. Сжечь элемент ведь очень просто. Чаще всего это происходит по вине пользователя, который производит отключение устройства неправильно, выдергивая разъем при подключенном интерфейсе. Простейшим способом проверки работоспособности интерфейса является подключение к нему мышки. Однако так сложно получить полную картину, так как манипулятор задействует только половину сигнальных линий из восьми имеющихся. Только использование специальной заглушки и программы позволит провести проверку работоспособности. Для этих целей уже существует специально разработанное программное обеспечение.

Компьютер + мобильник: эффективное взаимодействие Гольцман Виктор Иосифович

Порты COM и USB

Порты COM и USB

Порты – устройства, через которые компьютер может обмениваться информацией с внешним оборудованием. Строго говоря, сами порты – это микросхемы, находящиеся внутри компьютера, а на заднюю стенку системного блока выведены подключенные к ним разъемы (рис. 1.3).

Рис. 1.3. Разъемы портов.

Сначала в компьютерах появился последовательный (serial) порт. Иначе он называется COM-порт или RS-232. К COM-порту подключают кабель, состоящий из нескольких проводов, оканчивающийся 9-штырьковым разъемом. Информация через этот порт передается в виде последовательности электрических импульсов. По одному проводу (Tx) компьютер передает информацию внешнему устройству, а по другому (Rx) – принимает.

Стандарт RS-232 остается неизменным уже более десяти лет. На материнской плате компьютера предусмотрено два последовательных порта – COM1 и COM2. На задней стенке любого системного блока присутствует хотя бы один разъем последовательного порта (COM1). Второй порт (COM2) в современных компьютерах обычно просто не выведен на заднюю стенку, хотя на материнской плате соединительная колодка для него сделана.

Подключать устройства к последовательному порту рекомендуется, пока компьютер выключен. На практике это требование обычно игнорируют, что иногда приводит к выходу из строя или подключаемого устройства, или самого порта.

Параметры COM-портов можно настроить следующим образом.

1. Запустите Диспетчер устройств . Для этого нажмите кнопку Пуск и выберите пункт Панель управления. Дважды щелкните кнопкой мыши на значке Система . На вкладке Оборудование нажмите кнопку Диспетчер устройств.

2. Дважды щелкните на пункте Порты COM и LPT.

3. Выберите порт, параметры которого нужно изменить, и выполните команду Свойства . Откроется окно (рис. 1.4).

Рис. 1.4. Параметры порта.

На вкладке Параметры порта окна Свойства: Последовательный порт (СОМ2) доступно несколько параметров. Из них нам может понадобиться первый параметр Скорость (бит/с) , определяющий, с какой скоростью порт способен передавать и принимать данные. По умолчанию задано значение 9600 бит/с. Предполагается, что с такой скоростью способно работать любое устройство, подключаемое к порту. Однако многие современные устройства, в том числе модемы и data-кабели для сотовых телефонов, могут обмениваться данными с компьютером с гораздо большей скоростью. Поэтому, если при низкой скорости передачи подключенное устройство работает устойчиво, можно попробовать увеличить значение до 57 600 или 115 200 бит/с – данные будут передаваться гораздо быстрее.

4. Выберите из списка нужное значение скорости порта и нажмите кнопку OK .

Остальные настройки последовательных портов обычно изменять не нужно. Вернуть все настройки порта к первоначальным значениям можно, нажав кнопку Восстановить умолчания.

Порты шины USB (universal serial bus – универсальная последовательная шина) обязательно присутствуют в любом современном компьютере (см. рис. 1.2). Этот стандарт подключения внешних устройств постепенно пришел на смену последовательному порту. Данные здесь, как и через COM-порт, передаются по двум проводам. По третьему проводу на подключаемые устройства подается напряжение питания +5 В.

Максимальная скорость обмена данными через порт USB почти в 1000 раз выше, чем через последовательный порт. Правда, при подключении телефона, который является большим «тугодумом», это несущественно. Важнее то, что стандартом гарантирована возможность «горячего», во время работы компьютера, подключения устройств к портам USB. Кроме того, USB-порты не требуют настройки. В Диспетчере устройств отображаются сведения о токе, который потребляет каждое устройство, подключенное к USB-портам.

Существует три типа разъемов USB, различающиеся только формой и размером (рис. 1.5).

«Обычный», плоский разъем типа A служит для подключения кабеля к компьютеру. Таким же разъемом оснащены миниатюрные адаптеры, которые вставляются непосредственно в порт USB на системном блоке. Особенно удобно подключать такой адаптер, когда дополнительные порты выведены на переднюю панель системного блока. Если на передней панели разъемов USB нет, а подбираться к задней стенке компьютера каждый раз затруднительно, поможет кабель-удлинитель с разъемами типа А на обоих концах.

Рис. 1.5. Разъемы USB.

Разъем типа B используют для соединения кабеля с периферийными устройствами: принтерами и модемами.

Для подключения к портативным устройствам (телефонам, камерам) применяют разъем мини-USB или мини-B.

Из книги Компьютер + мобильник: эффективное взаимодействие автора Гольцман Виктор Иосифович

Порты COM и USB Порты – устройства, через которые компьютер может обмениваться информацией с внешним оборудованием. Строго говоря, сами порты – это микросхемы, находящиеся внутри компьютера, а на заднюю стенку системного блока выведены подключенные к ним разъемы (рис.

Из книги Железо ПК [Популярный самоучитель] автора Пташинский Владимир

Глава 10 Шины расширения: слоты и порты Шина-шина опа, шина-шина най… Некогда популярная песенка о компьютерах В предыдущих главах мы познакомились с различными внутренними и внешними компонентами компьютера. Теперь рассмотрим то, с помощью чего все эти компоненты

Из книги Linux-сервер своими руками автора

1.7.6. Порты и демоны Дальнейшее изложение материала построено, исходя из того, что вы уже знаете, что такое сервер и какие службы вам придется настраивать. В пункте Как устроена книга (п. 1.5) было подробно описано, в каких главах описана настройка той или иной службы. Здесь же

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

2.2.8. Дополнительные USB-порты USB (Universal Serial Bus) - универсальная последовательная шина. К USB подключаются многие устройства: USB-диски, цифровые фотокамеры, цифровые видеокамеры, принтеры, сканеры, модемы, даже есть USB-клавиатуры и USB-мыши.Понятно, что при таком разнообразии

Из книги Asterisk™: будущее телефонии Второе издание автора Меггелен Джим Ван

Как найти порты FXO и FXS на плате TDM400P На рис. 4.1 представлена плата TDM400P с модулями FXS и FXO. Фото черно-белое, поэтому невозможно различить цвета, но под номером 1 -FXS-модуль зеленого цвета, а под номером 2 - FXO-модуль, оранжево- красный. В нижнем правом углу рисунка можно увидеть

Из книги Тайны и секреты компьютера автора Орлов Антон А

Глава 10. Порты. Прокси. Файерволл Когда большинство пользователей компьютерных технологий видят слово «порт», то обычно с ним ассоциируются такие аббревиатуры, как COM, LPT, PS/2. То есть - попросту названия «гнезд», куда можно присоединить какие - либо периферийные

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Порты завершения ввода/вывода В главе 14 описываются порты завершения ввода/вывода, которые предоставляют другой механизм, позволяющий избежать состязательности между потоками путем ограничения их количества. Порты завершения ввода/вывода дают возможность небольшому

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

ГЛАВА 14 Асинхронный ввод/вывод и порты завершения Операциям ввода и вывода присуща более медленная скорость выполнения по сравнению с другими видами обработки. Причиной такого замедления являются следующие факторы: Задержки, обусловленные затратами времени на поиск

Из книги Технологии программирования автора Камаев В А

Порты завершения ввода/вывода Порты завершения ввода/вывода, поддерживаемые лишь на NT-платформах, объединяют в себе возможности перекрывающегося ввода/вывода и независимых потоков и используются чаще всего в серверных программах. Чтобы выяснить, какими требованиями

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Пример: сервер, использующий порты завершения ввода/вывода Программа 14.4 представляет видоизмененный вариант программы serverNP (программа 11.3), в котором используются порты завершения ввода/вывода. Этот сервер создает небольшой пул серверных потоков и больший пул

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Из книги Ноутбук [секреты эффективного использования] автора Пташинский Владимир

10.2.5 Порты приложения Клиент должен идентифицировать службу, к которой он хочет получить доступ. Это выполняется через спецификацию IP-адреса службы хоста и его номера порта TCP. Как и для UDP, номера портов TCP находятся в диапазоне от 0 до 65 535. Порты в диапазоне от 0 до 1023

Из книги автора

6.4. СИСТЕМЫ ИЗ ПРОГРАММ, ОБМЕНИВАЮЩИХСЯ ДАННЫМИ ЧЕРЕЗ ПОРТЫ Такой обмен обычно реализуется при многопроцессорной (многомашинной) обработке. Порт каждой из программ представляет программу накопления и верификации как входных, так и выходных данных в соответствующих

Из книги автора

СИСТЕМНО-ЗАВИСИМЫЕ СРЕДСТВА: ПОРТЫ ВВОДА-ВЫВОДА МИКРОПРОЦЕССОРОВ INTEL 8086/8088 Рассмотрим различные устройства ввода-вывода, поскольку теперь мы хотим обсудить вопрос о том, как приспособить реализацию компилятора с языка Си к требованиям конкретной вычислительной

Из книги автора

7.3.4. Последовательные порты Файл /proc/tty/driver/serial содержит конфигурационную и статистическую информацию о последовательных портах. Эти порты нумеруются начиная с нуля. Работать с настройками порта позволяет также команда setserial, но файл /proc/tty/driver/serial, помимо всего прочего,

Из книги автора

Разъемы и порты Все современные ноутбуки оснащены USB-портами, к которым можно подключить практически все современные периферийные устройства. Интерфейс USB 2.0 обеспечивает передачу данных со скоростью до 60 Мбит/c и обладает обратной совместимостью с USB 1.1. Этот мудреный

StopBits - задает количество стоповых бит. Поле может
принимать следующие значения:


  • ONESTOPBIT - один стоповый бит;
  • ONE5STOPBIT - полтора стоповых бита (практически не
    используется);
  • TWOSTOPBIT - два стоповых бита.

После того как все поля структуры DCB заполнены, необходимо
произвести конфигурирование порта, вызвав функцию SetCommState:

BOOL SetCommState(

HANDLE hFile,

LPDCB lpDCB

В случае успешного завершения функция вернет отличное от нуля
значение, а в случае ошибки - нуль.

Второй обязательной структурой для настройки порта является
структура COMMTIMEOUTS. Она определяет параметры временных задержек
при приеме-передаче. Вот описание этой структуры:

typedef struct _COMMTIMEOUTS {

DWORD ReadIntervalTimeout;

DWORD ReadTotalTimeoutMultiplier;

DWORD ReadTotalTimeoutConstant;

DWORD WriteTotalTimeoutMultiplier;

DWORD WriteTotalTimeoutConstant;

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

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


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


    умножается на количество запрошенных для чтения символов.
  • ReadTotalTimeoutConstant - задает константу (в

    операции чтения. Для каждой операции чтения данное значение
    плюсуется к результату умножения ReadTotalTimeoutMultiplier на
    количество запрошенных для чтения символов. Нулевое значение полей
    ReadTotalTimeoutMultiplier и ReadTotalTimeoutConstant означает,
    что общий тайм-аут для операции чтения не используется.
  • WriteTotalTimeoutMultiplier - задает множитель (в
    миллисекундах), используемый для вычисления общего тайм-аута

    умножается на количество записываемых символов.
  • WriteTotalTimeoutConstant - задает константу (в
    миллисекундах), используемую для вычисления общего тайм-аута
    операции записи. Для каждой операции записи данное значение
    прибавляется к результату умножения WriteTotalTimeoutMultiplier на
    количество записываемых символов. Нулевое значение полей
    WriteTotalTimeoutMultiplier и WriteTotalTimeoutConstant означает,
    что общий тайм-аут для операции записи не используется.

Немного поподробнее о тайм-аутах. Пусть мы считываем из порта 50
символов со скоростью 9 600 бит/с. Если при этом используется 8 бит
на символ, дополнение до четности и один стоповый бит, то на один
символ в физической линии приходится 11 бит (включая стартовый бит).
Значит, 50 символов на скорости 9 600 бит/с будут приниматься

50×11/9600=0,0572916 с

или примерно 57,3 миллисекунды, при условии нулевого интервала
между приемом последовательных символов. Если же интервал между
символами составляет примерно половину времени передачи одного
символа, т. е. 0,5 миллисекунд, то время приема будет

50×11/9600+49×0,0005=0,0817916 с

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

Формула для вычисления общего тайм-аута операции, например,
чтения, выглядит так:

NumOfChar x ReadTotalTimeoutMultiplier +
ReadTotalTimeoutConstant

где NumOfChar - число символов, запрошенных для операции чтения.

В нашем случае тайм-ауты записи можно не использовать и
установить их равными нулю.

После заполнения структуры COMMTIMEOUTS, необходимо вызвать
функцию установки тайм-аутов:

BOOL SetCommTimeouts(

HANDLE hFile,

LPCOMMTIMEOUTS lpCommTimeouts

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

BOOL SetupComm(

HANDLE hFile,

DWORD dwInQueue,

DWORD dwOutQueue

Допустим, вы обмениваетесь с внешним устройством пакетами
информации размером 1024 байта, тогда разумным размером буферов
будет значение 1200. Функция SetupComm интересна тем, что она может
просто принять ваши размеры к сведению, внеся свои коррективы, либо
вообще отвергнуть предложенные вами размеры буферов - в таком случае
эта функция завершится ошибкой.

Приведу пример открытия и конфигурирования последовательного
порта COM1. Для краткости - без определения ошибок. В данном примере
порт открывается для работы со скоростью 9 600 бит/c, используется 1
стоповый бит, бит четности не используется:

#include

. . . . . . . . . .

HANDLE handle;

COMMTIMEOUTS CommTimeOuts;

DCB dcb;

handle = CreateFile(«COM1», GENERIC_READ | GENERIC_WRITE,
NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

SetupComm(handle, SizeBuffer, SizeBuffer);

GetCommState(handle, &dcb);

dcb.BaudRate = CBR_9600;

dcb.fBinary = TRUE;

dcb.fOutxCtsFlow = FALSE;

dcb.fOutxDsrFlow = FALSE;

dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;

dcb.fDsrSensitivity = FALSE;

dcb.fNull = FALSE;

dcb.fRtsControl = RTS_CONTROL_DISABLE;

dcb.fAbortOnError = FALSE;

dcb.ByteSize = 8;

dcb.Parity = NOPARITY;

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 - адрес буфера. Для операции записи данные из
    этого буфера будут передаваться в порт. Для операции чтения в этот
    буфер будут помещаться принятые из линии данные;
  • nNumOfBytesToRead, nNumOfBytesToWrite - число ожидаемых
    к приему или предназначенных для передачи байт;
  • nNumOfBytesRead, nNumOfBytesWritten - число фактически
    принятых или переданных байт. Если принято или передано меньше
    данных, чем запрошено, то для дискового файла это свидетельствует
    об ошибке, а для коммуникационного порта - совсем не обязательно.
    Причина в тайм-аутах.
  • LpOverlapped - адрес структуры OVERLAPPED, используемой
    для асинхронных операций.

В случае нормального завершения функции возвращают значение,
отличное от нуля, в случае ошибки - нуль.

Приведу пример операции чтения и записи:

#include

…………..

DWORD numbytes, numbytes_ok, temp;

COMSTAT ComState;

OVERLAPPED Overlap;

char buf_in = «Hello!»;

numbytes = 6;

// если temp не равно нулю, значит - порт в состоянии
ошибки

if(!temp) WriteFile(handle, buf_in, numbytes,
&numbytes_ok, &Overlap);

ClearCommError(handle, &temp, &ComState);

if(!temp) ReadFile(handle, buf_in, numbytes, &numbytes_ok,
&Overlap);

// в переменной numbytes_ok содержится реальное число
переданных-

// принятых байт

В этом примере мы использовали две неизвестные нам ранее
структуры COMSTAT и OVERLAPPED, а также функцию ClearCommError. Для
нашего случая связи “по трем проводам” структуру OVERLAPPED можно не
рассматривать (просто использовать, как в примере). Прототип функции
ClearCommError имеет вид:

BOOL ClearCommError(

HANDLE hFile,

LPDWORD lpErrors,

LPCOMSTAT lpStat

Эта функция сбрасывает признак ошибки порта (если таковая имела
место) и возвращает информацию о состоянии порта в структуре
COMSTAT:

typedef struct _COMSTAT

DWORD fCtsHold:1;

DWORD fDsrHold:1;

DWORD fRlsdHold:1;

DWORD fXoffHold:1;

DWORD fXoffSent:1;

DWORD fEof:1;

DWORD fTxim:1;

DWORD fReserved:25;

DWORD cbInQue;

DWORD cbOutQue;

} COMSTAT, *LPCOMSTAT;

Нам могут пригодиться два поля этой структуры:


  • CbInQue - число символов в приемном буфере. Эти символы
    приняты из линии, но еще не считаны функцией ReadFile;
  • CbOutQue - число символов в передающем буфере. Эти
    символы еще не переданы в линию.

Остальные поля данной структуры содержат информацию об
ошибках.

И наконец, после завершения работы с портом его следует закрыть.
Закрытие объекта в Win32 выполняет функция CloseHandle:

BOOL CloseHandle(

HANDLE hObject

На нашем сайте вы можете найти полный текст класса для работы с
последовательным портом в асинхронном режиме “по трем проводам”, а
также пример программы с использованием этого класса. Все это
написано под Builder С++, но, поскольку используются только функции
API Win32, текст программы легко изменить под любой компилятор С++.
Возможно также, что класс написан не совсем “по правилам” - прошу
извинить, автор не является “правильным” программистом и пишет так,
как ему удобно J .

Ой, а что это за штучка? Зачем она нужна? Ничего, если я пальцем потрогаю? Что? Лучше не надо? Хорошо, не буду. Но мне страсть как интересно: разъём в компьютере есть, а никто ничего к нему почему-то не подключает. Как он вообще называется? Порт? Ух ты! Класс! А что это такое?..

Этот порт также называется серийным (Serial port ), хотя сокращение «COM» на самом деле означает «коммуникационный» - Communication port (изначально предназначен для двустороннего движения данных - настоящей коммуникации). А ещё чаще его именуют последовательным , поскольку передаёт биты строго один за другим.

Кроме последовательного, в компьютерах есть и параллельный порт, предназначенный, в основном, для подключения принтеров. Его нередко так и называют: принтерный. Там передача данных номинально односторонняя (хотя лишь номинально).

Вполне возможно, COM-порт есть и в вашем компьютере. Это, скорее всего, слегка продолговатое гнездо с девятью контактами в два ряда, пять и четыре штуки в каждом, а также с резьбой для болтиков на концах. К нему полагается кабель с разъёмом, соответственно, с девятью гнёздами, расположенными в такой же конфигурации.

Разъём вставляется в гнездо с контактами и прикручивается вышеуказанными болтиками, чтобы не выпасть. Таким образом можно, к примеру, соединить напрямую два компьютера с помощью нуль-модемного кабеля. Что и делалось раньше, в эпоху первых ПК.

Нынче таким образом подключают спутниковые ресиверы, приборы различных систем безопасности, комплексы управления производственным процессом и прочие заумные устройства.

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

Нынче для коммуникации с разными устройствами всё чаще используют USB-порт (он тоже, кстати, фактически последовательный). Мобильные модемы, принтеры, адаптеры Wi-Fi - всё большее количество приборов подключается именно через USB.

Кроме того, при наличии таких технологий как Ethernet и FireWire (для Apple), соединять компьютеры проводами через COM-порты не так уж целесообразно. Ну а если вспомнить о Bluetooth (что переводится как «синий зуб»), то и вовсе можно отправлять последовательный порт в музей.

Впрочем, операционная система Windows по-прежнему называет свои каналы передачи информации не иначе как COM1, COM2 и так далее.

Почему? Потому что драйверы, к примеру, для того же Bluetooth, могут представляться системе именно как COM-порты. Мол, а вот и мы, прошу любить и жаловать, извольте назначить нам каналы для обмена данными. Ну и что, что мы как бы не совсем настоящие? Всё равно придётся нас обслуживать.

В Unix (и её разновидностях вроде Linux) тоже есть некоторые особенности по поводу отношения к подключаемым устройствам. Поскольку Unix считает всё вокруг файлами (даже оборудование!), то и держит свои последовательные порты в виде оных с именами вроде ttyS0, ttyS1, ttyS2 (если это Linux) или ttyu0, ttyu1, ttyu2 (в FreeBSD).

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

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

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

Правда, любознательность - это всегда похвально. Так что спрашивайте, интересуйтесь, изучайте. Но руками без разрешения лучше не трогайте.

Предыдущие публикации:

Наряду с параллельным портом COM-порт, или последовательный порт является одним из традиционных портов ввода-вывода компьютера, использовавшимся еще в первых ПК. Хотя в современных компьютерах COM-порт имеет ограниченное применение, тем не менее, информация о нем, возможно, будет полезной многим пользователям.

Последовательный порт, как и параллельный, появился задолго до появления персональных компьютеров архитектуры IBM PC. В первых персоналках COM-порт использовался для подсоединения периферийных устройств. Однако сфера его применения несколько отличалась от сферы применения параллельного порта. Если параллельный порт использовался в основном для подключения принтеров, то COM-порт (кстати, приставка COM – это всего лишь сокращение от слова communication) обычно применялся для работы с телекоммуникационными устройствами, такими, как модемы. Тем не менее, к порту можно подключить, например, мышь, а также другие периферийные устройства.

COM-порт, основные сферы применения:

  1. Подключение терминалов
  2. ~ внешних модемов
  3. ~ принтеров и плоттеров
  4. ~ мыши
  5. Прямое соединение двух компьютеров

В настоящее время сфера применения СОМ-порта значительно сократилась благодаря внедрению более быстрого и компактного, и, кстати, тоже последовательного, интерфейса USB. Почти вышли из употребления внешние модемы, рассчитанные на подключение к порту, а также «COM-овские» мыши. Да и редко кто теперь соединяет два компьютера при помощи нуль-модемного кабеля.

Тем не менее, в ряде специализированных устройств последовательный порт до сих используется. Можно найти его и на многих материнских платах. Дело в том, что по сравнению с USB COM-порт имеет одно важное преимущество – согласно стандарту последовательной передачи данных RS-232, он может работать с устройствами на расстоянии в несколько десятков метров, в то время как радиус действия кабеля USB, как правило, ограничен 5 метрами.

Принцип работы последовательного порта и его отличие от параллельного

В отличие от параллельного (LPT) порта, последовательный порт передает данные побитно по одной-единственной линии, а не по нескольким одновременно. Последовательности битов группируются в серии данных, начинающиеся стартовым битом и кончающиеся стоповым битом, а также битами контроля четности, использующимися для контроля ошибок. Отсюда происходит и еще одно английское название, которое имеет последовательный порт – Serial Port.

Последовательный порт имеет две линии, по которым передаются собственно данные – это линии для передачи данных от терминала (ПК) к коммуникационному устройству и обратно. Кроме того, существует еще несколько управляющих линий. Обслуживает Serial port специальная микросхема UART, которая способна поддерживать относительно высокую скорость передачи данных, достигающую 115 000 бод (байт/с). Правда, стоит отметить, что реальная скорость обмена информацией зависит от обоих коммуникационных устройств. Кроме того, в функции контроллера UART входит преобразование параллельного кода в последовательный и обратно.

Порт использует электрические сигналы сравнительного высокого напряжения – до +15 B и -15 В. Уровень логического нуля последовательного порта составляет +12 В, а логической единицы – -12 В. Такой большой перепад напряжений позволяет гарантировать высокую степень помехоустойчивости передаваемых данных. С другой стороны, используемые в Serial port высокие напряжения требуют сложных схемотехнических решений. Это обстоятельство также поспособствовало снижению популярности порта.

Последовательный интерфейс RS-232

Работа Serial port на ПК базируется на стандарте передачи данных для последовательных устройств RS-232. Этот стандарт описывает процесс обмена данными между телекоммуникационным устройством, например, модемом и компьютерным терминалом. Стандарт RS-232 определяет электрические характеристики сигналов, их назначение, длительность, а также размеры коннекторов и схему выводов для них. При этом RS-232 описывает лишь физический уровень процесса передачи данных и не касается используемых при этом транспортных протоколов, которые могут меняться в зависимости от используемого коммуникационного оборудования и программного обеспечения.

Стандарт RS-232 был создан в 1969 г, а его последняя версия, TIA 232, вышла в 1997 г. В настоящее время RS-232 считается устаревшим, однако большинство операционных систем до сих пор его поддерживает.

В современных компьютерах разъем Serial port представляет собой 9-штырьковый разъем типа «вилка» DB-9, хотя стандарт RS-232 описывает также разъем с 25–ю контактами ­– DB-25, который часто применялся на старых компьютерах. Разъем DB-9 обычно расположен на системной плате ПК, хотя в старых компьютерах он мог находиться на специальной мультикарте, вставляемой в слот расширения.

9- штырьковое гнездо DB-9 на материнской плате

Разъем DB-9 на кабеле подключаемого к порту устройства

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

Назначение линий разъема Serial port DB-9 согласно RS-232 и их соответствие контактам разъема DB-25:

Контакт DB-9 Английское название Русское название Контакт DB-25
1 Data Carrier Detect Несущая обнаружена 8
2 Transmit Data Передаваемые данные 2
3 Receive Data Принимаемые данные 3
4 Data Terminal Ready Готовность терминала 20
5 Ground Земля 7
6 Data Set Ready Готовность передающего устройства 6
7 Request To Send Запрос на отправку данных 4
8 Clear To Send Передача данных разрешена 5
9 Ring Indicator Индикатор звонка 22

Конфигурирование и прерывания

Поскольку в компьютере может быть несколько последовательных портов (до 4), то в системе для них выделяется два аппаратных прерывания - IRQ 3 (COM 2 и 4) и IRQ 4 (COM 1 и 3) и несколько прерываний BIOS. Многие коммуникационные программы, а также встроенные модемы используют для своей работы прерывания и адресное пространство портов COM. При этом обычно применяются не реальные порты, а так называемые виртуальные порты, которые эмулируются самой операционной системой.

Как и в случае многих других компонентов материнской платы, параметры работы портов COM, в частности, значения прерываний BIOS, соответствующих аппаратным прерываниям, можно настроить через интерфейс BIOS Setup. Для этого используются такие опции BIOS, как COM Port, Onboard Serial Port, Serial Port Address, и т.п.

Заключение

Последовательный порт ПК в настоящее время не является широко используемым средством для ввода-вывода информации. Тем не менее, поскольку существует большое количество оборудования, прежде всего, телекоммуникационного назначения, созданного для работы с последовательным портом, а также благодаря некоторым достоинствам протокола последовательной передачи данных RS-232, последовательный интерфейс пока еще не следует списывать со счетов, как абсолютно устаревший рудимент архитектуры персонального компьютера.