Количество com портов в windows

Обновлено: 06.07.2024

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

Другие "последовательные" технологии, такие, как X.25, USB или Ethernet, имеют понятие "пакет", и накладывают жесткие временные требования между всеми битами одного пакета.

По этой причине в терминологии Cisco IOS данный порт назывался async - в отличие от синхронных serial, т.е. X.25. По этой же причине модуль Windows, реализующий PPP поверх данного порта, называется AsyncMac.sys (в стандарте PPP отдельно описана реализация PPP, использующего понятие "пакет", над последовательным портом, этого понятия не имеющим).

Некоторые протоколы связи с индустриальным оборудованием налагают жесткие временные требования между байтами последовательного порта. Такие протоколы крайне сложны в реализации в многозадачных ОС со слабой поддержкой реального времени, такой, как Windows, и потому зачастую требуют MS-DOS и устаревшего ПО почти 20-летней давности на управляющем компьютере.

Содержание

Назначение

Наиболее часто для последовательного порта персональных компьютеров используется стандарт RS-232C. Ранее последовательный порт использовался для подключения терминала, позже для модема или мыши. Сейчас он используется для соединения с источниками бесперебойного питания, для связи с аппаратными средствами разработки встраиваемых вычислительных систем, спутниковыми ресиверами, кассовыми аппаратами, а также с приборами систем безопасности объектов.

С помощью COM-порта можно соединить два компьютера, используя так называемый «нуль-модемный кабель» (см. ниже). Использовался со времен MS-DOS для перекачки файлов с одного компьютера на другой, в UNIX для терминального доступа к другой машине, а в Windows (даже современной) - для отладчика уровня ядра.

Достоинством технологии является крайняя простота оборудования. Недостатком является низкая скорость, крупные размеры разъемов, а также зачастую высокие требования к времени отклика ОС и драйвера и высокое количество прерываний (одно на половину аппаратной очереди, т.е. 8 байт).

Разъемы

На материнских платах ведущих производителей (например, Intel) или готовых системах (например, IBM, Hewlett-Packard, Fujitsu Siemens Computers) для последовательного порта принято следующее условное обозначение:


Актуальность

Существуют стандарты на эмуляцию последовательного порта над USB и над Bluetooth (эта технология в значительной степени и проектировалась как «беспроводной последовательный порт»).

Аппаратура

Разъем имеет контакты:

DTR (Data Terminal Ready - готовность к приёму данных) - выход на компьютере, вход на модеме. Означает готовность компьютера к работе с модемом. Сброс этой линии вызывает почти полную перезагрузку модема в первоначальное состояние, в т.ч. бросание трубки (некоторые управляющие регистры выживают после такого сброса). В UNIX это происходит в случае, если все приложения закрыли файлы на драйвере сериального порта. Мышь использует этот провод для получения питания.

DSR (Data Set Ready - готовность к передаче данных) - вход на компьютере, выход на модеме. Означает готовность модема. Если эта линия находится в нуле - то в ряде ОС становится невозможно открыть порт как файл.

RxD (Receive Data - приём данных) - вход на компьютере, выход на модеме. Поток данных, входящий в компьютер.

TxD (Transmit Data - передача данных) - выход на компьютере, вход на модеме. Поток данных, исходящих из компьютера.

CTS (Clear to Send - готовность передачи) - вход на компьютере, выход на модеме. Компьютер обязан приостановить передачу данных, пока этот провод не будет выставлен в единицу. Используется в аппаратном протоколе управления потоком для предотвращения переполнения в модеме.

RTS (Request to Send - запрос на передачу) - выход на компьютере, вход на модеме. Модем обязан приостановить передачу данных, пока этот провод не будет выставлен в единицу. Используется в аппаратном протоколе управления потоком для предотвращения переполнения в оборудовании и драйвере.

DCD (Carrier Detect - наличие несущей) - вход на компьютере, выход на модеме. Взводится модемом в единицу после установления соединения с модемом с той стороны, сбрасывается в ноль при разрыве связи. Аппаратура компьютера может издавать прерывание при наступлении такого события.

RI (Ring Indicator - сигнал вызова) - вход на компьютере, выход на модеме. Взводится модемом в единицу после обнаружения вызывного сигнала телефонного звонка. Аппаратура компьютера может издавать прерывание при наступлении такого события.

SG (Signal Ground - сигнальная земля) - общий сигнальный провод порта, не является общей землёй, как правило, изолирован от корпуса ЭВМ или модема.

В нуль-модемном кабеле используются две перекрещенные пары: TXD/RXD и RTS/CTS.

Стандартная (со времен оригинальной IBM PC) аппаратура порта называется UART 16550 (в настоящее время включена в SuperIO микросхему на материнской плате вместе с рядом иных устройств). Со времен IBM PC в ней появилась аппаратная очередь байт, которая сильно снижает количество издаваемых устройством прерываний.

Программный доступ к СОМ-порту

Для программного доступа к СОМ-порту необходимо открыть на чтение/запись соответствующий файл и сделать вызовы специальных функций tcgetattr (для того, чтобы узнать текущие настройки) и tcsetattr (чтобы установить новые настройки). Также может потребоваться сделать вызовы ioctl с определенными параметрами. После этого при записи в файл данные будут отправляться через порт, а при чтении программа будет получать уже принятые данные из буфера СОМ-порта.

Устройства с именами "ttyxx" используются как серверные, т.е. приложение, открывшее данное устройство, обычно ожидает входящего звонка от модема. Классическим таким приложением, используемым по умолчанию, является getty, которая ожидает входящего звонка, далее настраивает COM-порт в соответствии с файлами конфигурации, выводит туда "login:", принимает имя пользователя и запускает как потомка команду "login ИмяПользователя", со стандартным вводом и выводом, перенаправленными в COM-порт. Эта команда в свою очередь запрашивает и проверяет пароль, и в случае успеха запускает (не как потомка, а вместо себя вызовом execve в том же процессе) default user shell, прописанный в файле /etc/passwd.

Эта технология исторически возникла в 1970ые годы, когда под ОС UNIX использовались компьютеры вроде PDP-11 (в СССР серия называлась СМ ЭВМ) или VAX, позволяющие подключение многих терминалов для работы многих пользователей. Терминалы - а значит, и весь интерфейс пользователя - при этом подключались через сериальные порты, с возможностью подключения вместо терминала модема и дальнейшего дозвона на компьютер по телефону. До сих пор в UNIX-подобных ОС существует терминальный стек, и обычно 3 реализации терминалов - сериальный порт, консоль текстового режима экрана+клавиатура, и "обратная петля" в один из открытых файлов управляющего приложения (так реализованы telnetd, sshd и xterm).

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

Так как сериальный порт в UNIX доступен только через терминальный стек, он может быть управляющим терминалом для процессов и групп (посылать SIGHUP при разрыве связи от модема и SIGINT при нажатии Ctrl-C), на уровне ядра поддерживать редактирование последней введенной строки клавишами стрелочек, и т.д. Для отключения этой возможности с целью превращения устройства в "трубу" для потока байт необходимы вызовы ioctl.

Windows

Для каждого порта в реестре имеется раздел. Эти разделы имеют такие имена:

где последнее значение “Serial10000” - уникальный номер для каждого нового добавленного в систему COM-порта, для второго – “Serial10001” и т.д

Для связи с устройствами, поддерживающими Bluetooth, некоторым программам (например, к таким программам относятся: программа, которая синхронизирует список контактов с мобильным телефоном; программа, которая извлекает координаты GPS из GPS-приемника) на компьютере пользователя требуется COM-порт.

К программам, использующим COM-порты для поддержки связи с помощью технологии беспроводного подключения Bluetooth, непосредственно разработанных фирмой Microsoft, относятся:

  • HotSync, используемый в ручных компьютерах , используемый в карманных ПК 2002

Имеющийся драйвер COM.SYS поддерживает только 4 COM-порта, каждый из которых должен иметь свою линию прерываний. Для обслуживания COM-портов с общей линией прерывания необходимо воспользоваться драйвером SIO [3] .

Нуль-модемный кабель

В некоторых случаях возможно применение упрощённого варианта кабеля, в котором задействуются только контакты 2, 3 и 5.

См. также

Примечания

  1. ↑ Используется только в терминологии ОС семейства Windows, исторически пришло из MS-DOS и классической IBM PC
  2. ↑Что Такое Функция AllShare?
  3. ↑Установка платы COM порта в компьютер

Ссылки

Вы можете улучшить эту статью, удалив из неё ссылки, не соответствующие правилам.

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое "Последовательный порт" в других словарях:

последовательный порт управления — (в адаптере сети ЦСИС) [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN serial control portSCP … Справочник технического переводчика

порт — [сооружение] сущ., м., употр. сравн. часто Морфология: (нет) чего? порта, чему? порту, (вижу) что? порт, чем? портом, о чём? о порте и в порту; мн. что? порты и порты, (нет) чего? портов и портов, чему? портам и портам, (вижу) что? порты и порты … Толковый словарь Дмитриева

порт — I. в вычислительной технике, электронное устройство, служащее для передачи данных между компьютером и периферийными устройствами (клавиатурой, «мышью», принтером, сканером и др.). Последовательный порт предназначен для поразрядной передачи данных … Энциклопедия техники

Последовательный интерфейс — 9 контактный разъём COM порта Последовательный порт или COM порт (произносится «ком порт», от англ. COMmunication port) двунаправленный последовательный интерфейс, предназначенный для обмена байтовой информацией. Содержание 1 Название … Википедия

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

Существует несколько различных способов решения этой задачи. Их все можно условно разделить на «некрасивые» и «красивые».

«Некрасивые» решения

Первый вариант заключается в том, чтобы зашить в программу самые распространенные номера портов (обычно COM 1, COM 2, COM 3 и некоторые другие). Недостатком этого подхода является то, что вы не всегда можете охватить все доступные порты. Например, я видел системы, на которых встречается порты COM 22, COM 23, COM 24 (порты были виртуальными, но суть вопроса это не меняет). Не будете же вы зашивать столько номеров. А если завтра встретится COM 100?

Второй вариант заключается в проверке большого количества портов на их доступность. Мы просматриваем порты COM 1, COM 2, …. COM 100 и пытаемся открыть каждый из них. Если это удалось, значит, порт есть. У этого подхода несколько недостатков.

Во-первых, такой перебор занимает время, а регулярные вызовы функции CreateFile напрасно расходуют системные ресурсы.

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

В-третьих, он не решает проблему охвата всего многообразия возможных портов.

«Красивое» решение

Красивое решение основывается на том факте, что информация о доступных COM портах (в том числе виртуальных) в системах Windows хранится в реестре. Точнее в ветке HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM\. Там COM порты хранятся в виде строк: « COM 1», « COM 2», « COM 3» и т.д. Отсюда сразу возникает решение – нужно перебрать все строковые параметры в данном разделе реестра.

Ниже приводится полный исходный код примера, демонстрирующего данный метод.

В заключение лишь отмечу, что я использую этот подход во многих своих проектах, и он еще ни разу не подводил меня.

Стало любопытно как в Винде правильно получить список последовательных портов.
Из интернетов удалось узнать что способов горсть и один хуже другого. Поясню что необходим только список портов, без каких-либо описаний.
upd: склоняюсь к чтению портов из реестра ибо на msdn.microsoft пишут такое:

Используйте метод GetPortNames для запроса списка допустимых имен последовательных портов на текущем компьютере. Например, этот метод позволяет определить, являются ли COM1 и COM2 допустимыми последовательными портами для текущего компьютера.
Имена порта загружаются из системного реестра (например, HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM). Если данные в реестре неточны или устарели, метод GetPortNames возвратит неверные результаты.

gbg

Самый надежный способ, который не только находит порты, но и определяет их занятость - прямой перебор всех 255 вариантов имен.

shpaker

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

gbg

A. Shpak: Да, открывать и закрывать. Вся процедура займет пару десятков миллисекунд. С WMI могут возникнуть определенные затруднения (больно много прав от пользователя требует, причем совсем неочевидных)

shpaker

Армянское Радио: ну дык теоретически некоторые устроиства при открытии соединения могут производить какие-либо действия. Имхо реестр практичнее.

gbg

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

COM-порты отсутствуют в диспетчере устройств

COM-порты - общие компоненты диспетчера устройств. Пользователи Windows могут легко их увидеть, открыв диспетчер устройств. Однако могут возникнуть проблемы, из-за которых COM-порты будут потеряны из диспетчера устройств. Если вы столкнулись с этой проблемой, прочтите методы, упомянутые ниже, чтобы попытаться решить проблему самостоятельно.

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

Как получить доступ к портам диспетчера устройств Windows 10?

  1. Щелкните правой кнопкой мыши на Этот ПК значок на рабочем столе.
  2. выберите Управлять из контекстного меню.
  3. Выбрать Диспетчер устройств в Системных инструментах. (Вы также можете нажать Start + X, чтобы выбрать Диспетчер устройств .)
  4. выберите Посмотреть из строки меню.
  5. выберите Показать скрытые устройства из подменю.
  6. Найдите Порты (COM и LPT) из списка на правой панели.
  7. Разверните его, чтобы найти Коммуникационный порт (COM) .

Показать скрытые устройства

COM-порты отсутствуют в диспетчере устройств

Однако многие люди говорят, что не могут найти порты в диспетчере устройств и им отчаянно нужно решение этой проблемы.

COM-порты, не отображаемые в диспетчере устройств: все случаи

Первый: Com-порт отсутствует / опция портов недоступна в диспетчере устройств.

Два: в диспетчере устройств не отображаются порты (даже скрытые) Win 7 Pro 64 бит.

Я не могу заставить работать внешний модем (даже если он отображается в окне устройств и принтеров. Я также не могу заставить работать конвертер USB-последовательного порта. Было бы полезно, если бы у меня была информация из окна диспетчера устройств, но ничего не отображается, хотя я включил отображение скрытых устройств. Есть идеи? Спасибо. - спросил Пол Саке на форуме Microsoft.

Три: COM-ПОРТ исчез в диспетчере устройств.

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

Итак, как решить проблему и найти COM-порты Windows 10? Продолжайте читать!

Как добавить COM-порт в диспетчер устройств

Некоторые пользователи жаловались, что их COM-порты Widows 10 исчезли из диспетчера устройств после того, как они обновили свои платформы Windows. Какой бы ни была причина, пользователи в первую очередь заботятся о том, как восстановить недостающие COM-порты. Об этом я и расскажу в этом разделе.

Метод 1. Показать скрытые устройства.

Как я уже упоминал в начале этой статьи, пользователи не могут видеть COM-порты напрямую. Вместо этого им нужно открыть Диспетчер устройств -> выбрать Посмотреть вкладка -> выбрать Показать скрытые устройства . После этого они увидят Порты (COM и LPT) вариант, и им нужно только расширить его до COM-портов плавников.

Способ 2: добавить COM-порты вручную.

  1. Откройте Диспетчер устройств на своем компьютере с Windows 10.
  2. Нажми на Действие вариант из строки меню.
  3. выберите Добавить устаревшее оборудование из подменю, чтобы открыть окно «Добавить оборудование».
  4. Нажми на следующий кнопку, чтобы двигаться дальше.
  5. Проверьте Установите оборудование, которое я выбираю вручную из списка (Дополнительно) и нажмите следующий .
  6. Выбрать Порты (COM и LPT) из данного списка и нажмите следующий кнопка.
  7. выберите Стандартные типы портов вариант или производитель портов; затем щелкните следующий .
  8. Нажми на Конец кнопку для завершения.

Способ 3: обновите драйверы материнской платы.

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

date

02.02.2016

directory

Windows 7

comments

комментариев 15

Каждый раз при подключении нового COM устройства или USB устройства (верно для модем, мобильных телефонов, Bluetooth, конвертеров последовательных портов в USB и т.п.), Windows определяет его через механизм Plug-n-Play и назначит ему некий номер COM порта в диапазоне от 1 до 255. При повторном подключении этого же устройств, ему назначается ранее зарезервированный за ним COM порт. Новым устройствам выдается первый незанятый номер COM порта. Не редкость, когда внешние устройства при подключении создают сразу несколько COM портов (в моем случае после подключения адаптер Bluetooth, в системе появилось сразу 10 . новых COM портов).

Ряд приложений (как правило, довольно древних), способны адресовать только двухзначные номера COM портов, отказываясь работать с COM100 и выше. В самых «запущенных» вариантах, такие программы корректно работают только портами с COM1-COM9. Что делать, если подключенное устройство получило высокий номер? Можно ли сбросить нумерацию для зарезервированных COM портов и удалить назначенные порты? Попробуем разобраться на примере Windows 7.

Как правило в свойствах оборудования изменить выданный COM порт на другой не получается, т.к. система пишет, что все «низкие» COM порт уже используются (in use).

Изменить номер назначенного COM порта

Смена номера COM порта для конкретного устройства

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

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

Сброс привязок COM портов через реестр

Информация об используемых COM портах хранится в ключе реестра CommDB в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter

    Откройте редактор реестра (regedit) и перейдите в указанную ветку.

Важно! Настоятельно рекомендуем предварительно создать резервную копию данной ветки реестра (File -> Export). В том случае, если что-то пойдет не так, вы сможете вернуться к первоначальной конфигурации портов. Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.

SERIALCOMM

Примечание. В разделе HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM можно увидеться список COM портов, подключенных к системе.

Читайте также: