Удалил com порт что делать
Перейти к содержимому

Удалил com порт что делать

  • автор:

Параметры com-порта сбрасываются по умолчанию после внесения изменений в диспетчер устройств

В этой статье описывается проблема, из-за которой параметры порта связи (COM-порт) отменить изменения по умолчанию при перезагрузке компьютера.

Применимо к: Windows 2000
Исходный номер базы знаний: 293762

Симптомы

При перезагрузке компьютера параметры порта связи (COM-порт) отменить изменения по умолчанию. Эта проблема возникает, даже если вы изменили параметры в диспетчер устройств. Например, при запуске командной строки в Windows 2000 можно заметить, что по умолчанию для com 1 используются следующие параметры:

Baud rate=1200; Parity=None; Data Bits=7; Stop Bits=1

У вас может быть программа, которая требует различных параметров, например:

Baud rate=9600; Parity=None; Data Bits=8; Stop Bits=1

Вы можете вручную задать для com 1 функцию в нужных параметрах с помощью следующей команды:

Mode Com1: 9600,n,8,1

Однако при перезапуске системы вы обнаружите, что параметр возвращается к значению по умолчанию:

Baud rate=1200; Parity=None; Data Bits=7; Stop Bits=1

Причина

В Microsoft Windows 2000 параметры COM-порта для командных функций сохраняются только для активного сеанса Windows. Пользовательские параметры отбрасываются при завершении работы.

Разрешение

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

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

C:\winnt\system32\mode.com com1: 9600,n,8,1

Обратная связь

Были ли сведения на этой странице полезными?

Статья

При присоединении абсолютно нового COM устройства или USB устройства, Windows обнаруживает благодаря Plug-n-Play и присваивает ему номер COM порта в диапазоне от 1 до 255. Если же вы подключаете устройство еще раз, ему прикрепляется тот же, зарезервированный за ним ранее COM порт. Если же вы подключаете еще одно новое устройство, то ему назначается другой незанятый номер COM порта.

Некоторые программы (чаще старые), способны работать только на двухзначных номерах COM портов, и не работают с COM100 и более. Некоторые очень древние программы работают только портами с COM1-COM9. Как поступить, если устройство получило не нужный COM порт? Можно ли удалить номер зарезервированного COM порта?

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

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

  1. Запустим диспетчер устройств (Device Manager) таким образом: set devmgr_show_nonpresent_devices=1
    start devmgmt.msc
  2. В меню консоли выберем View->Show Hidden Devices.
  3. Разверните ветку Ports (COM &LPT) и в списке найдите устройство, которому назначен нужный COM порт (бледная иконка означает, что данный COM порт назначен, но в настоящий момент это устройство не подключено). Щелкните по нему ПКМ и выберите Uninstall
  4. Освобожденный COM порт может быть назначен другому устройству. Найдите в этой же ветке свое устройство, откройте окно его свойств (Properties). Затем перейдите на вкладку PortSettings и нажмите кнопку Advanced. В выпадающем списке выберите неиспользуемый COM порт.

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

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

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

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

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

Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.

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

Очистка занятых COM портов в Windows

date

02.02.2022

user

itpro

directory

PowerShell, Windows 10, Windows 7, Windows Server 2019

comments

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

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

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

Изменить номер COM порта устройства в Windows

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

  1. Откройте диспетчер устройств (Device Manager) командой devmgmt.msc;
  2. В меню выберите View->Show Hidden Devices;Отобразить скрытые устройства
  3. Затем разверните Ports (COM & LPT) и найдите в списке устройство;
  4. Перейдите на вкладку Port Settings и нажмите кнопку Advanced;
  5. Текущий номер COM порта, назначенный устройству указан в поле COMPortNumber;
  6. Чтобы изменить его, раскройте выпадающий список и выберите номер COMпорта, который хотите задать.Изменить номер назначенного COM порта

Но чаще всего изменить номер COM порт на другой не получится, так как все «низкие» COM порт уже используются (in use);

  • В этом случае нужно попробовать удалить резервацию COM порта за другим устройством. В ветке Ports (COM & LPT) найдите которому назначен нужный вам номер COM порта (бледная иконка означает, что данный COM порт назначен, но в сейчас это устройство не подключено);
  • Щелкните по нему ПКМ и выберите Uninstall;Удаление отключенного COM устройства
  • Теперь вы можете назначить освобожденный COM порт другому устройству. Еще раз откройте свойства вашего устройство, перейдите на вкладку PortSettings ->Advanced. Задайте свободный номер COM порта для вашего устройства.Смена COM порта
  • Однако такой способ позволяет освободить занятый COM порт не во всех случаях.

    Вы можете вывести полный список занятых COM портов в Windows с помощью PowerShell:

    Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description
    Можно определить номер COM порта для определённого устройства по его имени, например:
    Get-WMIObject Win32_SerialPort | Where-Object < $_.Name -like "*Arduino*">|select name, deviceid
    Или
    Get-WMIObject Win32_SerialPort | Where-Object < $_.Name -like "*GPS*">|select name, deviceid

    Определяем процесс, который использует COM в Windows

    Вы не сможете освободить COM порт устройства, которое используется Windows или запущенной программой, процессом. Сначала вам нужно завершить процесс/программу, которая использует сейчас COM порт. Чтобы определить имя процесса, который использует COM порт понадобится утилита Process Explorer (https://docs.microsoft.com/en-gb/sysinternals/downloads/process-explorer).

    Сначала нужно вывести имя службы, которая использует COM порт. Выполните команду PowerShell:

    get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service

    powershell: получить название процессов и служб использующих COM порты в windows

    Имя службы данного COM порта указано в столбце Service. Например, для COM2 это Serial. Теперь нужно запустить Process Explorer с правами администратора и выбрать в меню Find -> Find Handle or DLL. В строке Hangde or DLL substring введите значение Service, полученное ранее. В нашем примере это Serial .

    Process Explorer должен показать процесс, который использует сейчас ваш COM порт. Чтобы освободить COM порт, завершите процесс или программу.

    Process Explorer - ищем процесс или программу, которая используется com serial порт в windows

    Сброс назначенных COM портов Windows через реестр

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

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

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

    COM Name Arbiter
    Значение параметра ComDB в двоичном формате определяет список COM портов, зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100);ComDB

    Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.

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

    Если нужно полностью сбросить все привязки COM, измените значение ключа ComDB на 0.

    SERIALCOMM

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

    список COM портов в реестре

  • В ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Ports содержится список назначенных COM портов. Все ненужные порты можно удалить (в нашем примере мы оставим только COM3 и удалим остальные);
  • Отключите все оборудование и перезагрузите Windows;
  • После перезагрузки включите оборудование в нужном порядке (переустановите конверторы USB-to-serial и т.д.). Все обнаруженные COM-порты автоматически определяться системой и им будут последовательно выделены номера COM портов.
  • Также вы можете использовать следующие две бесплатные утилиты для очистки занятых (In Use) COM портов:

    утилита COM Name Arbiter для очистки занятых COM портов в Windows

    • COM Name ArbiterTool – утилита для освобождения занятых COM портов. Запустите утилиту с правами администратора, выберите COM порты, которые вы хотите освободить и нажмите Clear unused Reservationsи Remove non-present devices;
    • Device Cleanup Tool – утилита используется для поиска в реестре информации о ранее подключенных устройств (в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum) и удаления неиспользуемых устройств и очистки резерваций COM портов.

    Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

    CS-CS.Net: Лаборатория Электрошамана

    Сборка электрощитов, автоматика и автоматизация для квартир и частных домов. Программы для ПЛК. Сценический свет (световые шоу, настройка оборудования). Консультации, мастер-классы.

    Щит с автоматикой IPM для коттеджа (Поварово)

    Щит с автоматикой IPM для коттеджа (Поварово)

    Автоматика моего санузла на логическом реле ABB CL

    Автоматика моего санузла на логическом реле ABB CL

    Щиты TwinLine в Долгопрудный (таунхаус) и Солнечногорск

    Щиты TwinLine в Долгопрудный (таунхаус) и Солнечногорск

    Щит для котельной на базе сенсорного ПЛК ОВЕН (Папушево)

    Щит для котельной на базе сенсорного ПЛК ОВЕН (Папушево)

    Щиты с IPM (сеть, генератор, UPS) в Ядромино и Победа-2

    Щиты с IPM (сеть, генератор, UPS) в Ядромино и Победа-2

    Щит в ЖК Монэ на ПЛК ОВЕН со сценарным управлением светом

    Щит в ЖК Монэ на ПЛК ОВЕН со сценарным управлением светом

    Силовой щит в Весёлово (Тула): Простой трёхфазный

    Силовой щит в Весёлово (Тула): Простой трёхфазный

    Щит для квартиры в Митино на ПЛК ОВЕН (свет, отопление)

    Щит для квартиры в Митино на ПЛК ОВЕН (свет, отопление)

    Изменение номера COM-портов / Отображение скрытых устройств

    Проекту исполнилось 15 лет! Поддержать проект материально, проспонсировать проекты Автора или сделать ему подарок можно на этой странице: «Донаты и Спонсорство, Список Желаний».

    Опубликован
    на 4 декабря 2009, 11:00
    Число просмотров: 145 958

    Изменение номера COM-порта в Windows

    Столкнулся тут недавно с тем, что у меня куда-то пропадают номера COM-портов (интерйфес RS-232, через который работает моя управлялка освещением на Ke-USB24A). Недавно был COM16, переключил разъёмчик USB — порт вдруг стал уже COM22. Неее, не дело! Полез разбираться и заодно делюсь с вами, читатели, как удалить записи об отключённых и ненужных устройствах и сменить номер COM-порта в Windows. Написано будет про Windows XP, думаю, под другие винды надо будет действовать по аналогии.

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

    Первым делом я полез в свойства устройства, чтобы сменить номер порта в свойствах устройства и обломался. Мой любимый COM16 (под него настроениа програ по умолчанию) был кем-то занят (по словам системы). Так как с системой я разговариваю также, как с проводочками — «Слышь ты, с##ка!! Охренела чтоле?!», то я вспомнил об одной замечательной системной переменной DEVMGR_SHOW_NONPRESENT_DEVICES, которая позволяет хорошо почистить базу данных (и реестр) от записей о старых устройствах. Но — обо всём по порядку.

    Переменная среды DEVMGR_SHOW_NONPRESENT_DEVICES заставляет Диспетчер устройств показывать все-все устройства, записи о которых есть в базе данных Windows (часть хранится где-то в системных папках, часть в реестре — поэтому я пишу о базе данных). Для начала нам надо её установить или создать, если до этого такой шаг никогда не делался.

    Тыкаем по значку Мой компьютер правой кнопкой, выбираем Свойства (горячие клавиши: Win+Break). Открывается откно «Свойства системы».

    Переходим в нём на вкладку «Дополнительно», и в самом низу видим кнопку «Переменные среды». Она нам и нужна. Кстати, замечание в сторону: на этой же вкладке в рамке «Загрузка и восстановление» находится кнопка «Параметры», за которой сныкана очень полезная галочка «Выполнить автоматическую перезагрузку», которая на свежей Windows всегда стоит. А это значит, что при возникновении синего экрана (BSOD, STOP 0x…) система сразу же жестоко перезагружается, не давая его как следует рассмотреть. Настоящие пользователи не могут себе простить этого, поэтому можно зайти вэтот раздел настроек и галку снять.

    Ну а у нас открыто окно «Переменные среды», где мы видим два раздела: «Переменные среды пользователя xx» и «Системные переменные». Вообще, эти все «переменные»- аналог старого доброго SET PATH= и прочих SET xx=yy в bat-файлах. Только теперь, в Windows, они делятся ещё и на персональные для пользователя, или на глобальные для всех пользователей. В локальных я обычно, когда ставлю систему, исправляю TEMP и TMP на что-то более короткое — например, перенаправляю в тот же системный каталог %SystemRoot%\Temp. Раньше из-за этого ругались старые инсталляторы какого-нибудь хитрого софта и старые версии конкретно InstallShield — они не могли создать свои временные файлы по длинному пути. Это уменьшает безопасность системы, так как всякие Word’ы кладут временные файлы документов тоже в Temp и, следовательно, потенциально любой юзер может видеть их в общей временной папке.

    Нам же нужны «Системные переменные», и конкретно DEVMGR_SHOW_NONPRESENT_DEVICES. Посмотрите в списке, если её нет — тогда нажимаем кнопку «Создать», и заполняем открывшееся окошко «Новая системная переменная». Если же переменная есть в списке — проверьте правильность её написания и значение — 1.

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

    После этого обязательно нужно перезагрузить систему!

    Удаление неиспользуемых устройств (часть 2)

    Итак, мы перезагрузились, и теперь можно открывать диспетчер устройств. Я снова сделаю это через тот же значок «Мой компьютер» на рабочем столе (надо сказать, он только для этого там и висит). Тыкаем правой кнопкой, выбираем в меню пункт «Управление». Надо сказать, что это быстрее, чем лазить по всяким панелям управления и Пуск’ам. Сравните: Пуск > Настройка > Панель управления > Администрирование > Управление компьютером, или один клик? Хе-хе.

    У нас (через некоторое время тупняка) открывается замечательная консоль «Управление компьютером», в которой нас интересует всего один пункт: «Диспетчер устройств». Тыкаем на него слева в дереве, и справа у нас радостно открывается другое дерево — всяких устройств, которые подключены в системе и для которых стоят драйвера.

    Консоль «Диспетчер устройств»

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

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

    Ради интереса можно раскрыть какую-нибудь ветку, чтобы посмотреть, как же система выводит информацию о подключённых и неподключённых устройствах. Я развернул раздел «Клавиатуры» и USB-устройств. Почему вообще так много устройств и откуда они берутся? Дело в том, что система (не от дурости, а для умности) запоминает не только код производителя (VendorID) и модель (ModelID) устройства, а ещё и то место на шине, куда оно подключено. Для всяких плат — это номер (или какой-то внутрений идентификатор) слота PCI, PCI-E, для USB — номер разъёма. Каждая такая комбинация считается совершенно отдельным устройством, для которого нужны драйвера.

    Почему же система тогда не просит драйвера от, например, принтера, если мы его переткнули в другой разъём? При первом подключении принтера — понятно, система не знает устройство и просит дрова. А при последующих к другому разъёму? В этом случае работает база данных драйверов, где прописано что для VendorID+ModelID — такой-то драйвер. И при изменении подключения устройства система берёт тот же драйвер, какой и был, ничего не спрашивая.

    Итак, рассмотрим скриншот повнимательнее. Зелёным я выделил те устройства, которые система знает (они подключены) в данный момент. Красным — те, которых нет (они сейчас не подключены). Сама система их, если приглядеться, маркирует или яркой, или затенённой иконкой. Клавиатур две, потому что это ноутбук с подключенной отдельной клавиатурой по USB. Так как дырок USB у меня 4, и ещё было две разных клавы, то этих «Клавиатура HID» наплодилась куча. Можно смело удалить те, которые серые.

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

    Ну а нам ещё надо показать, где же можно поменять (или освободить) себе красивый портик COM для наших задач. Эти порты (даже те, которые получаются от RS-232<>USB преобразователей) лежат в разделе «Порты (COM и LPT)». Моё устройство маркируется как CS COM-USB Bridge, и изначально вдруг повисло на COM22. Мне же хотелось получить назад свой COM16 (на скрине он уже есть). Только включив «Показать скрытые устройства», я понял всю глубину грехопадения 🙂 Эти чёртовы сотики отожрали себе ВСЕ порты, какие могли!! Естественно, они были не подключены сейчас к системе, изначально их было не видно, а на моём порту COM16 стояло гордое «(используется)». Потому что я переткнул разъём своего Ke-USB24A в другую дырку. А это, видите ли, уже новое мля устройство! Ну ничего! Старое с COM16 было удалено, и текущий девайс был переназначен на тот, старый порт.

    Как это сделать? Лезем правой кнопкой на девайс, выбираем свойства (особо резвым можно просто два раза щёлкнуть левой). Показал на примере другого порта.

    Открывается окно свойств устройства, где нас интересует вкладка «Параметры порта». Особо отмечу, что все эти скорости, чётности: а) всё равно настраиваются программно в той проге, которая общается с таким USB-RS-232 устройством, б) По USB всё равно ни на что не влияют. Тыкаем кнопку «Дополнительно».

    И у нас открывается мелкое окошко, но с огромным списком портов. Вообще,номер порта зарезервирован от 1 до 65535, тут решили ограничиться 256. Вот так! А вы- COM1-COM4. Кстати, это хороший камень в сторону тех идиотин, которые делают программаторы (и другие важные и нужные устройства) со старым софтом, где окошко выбора порта выглядит как 4 переключателя-точки (radio-button): «Выберите порт: () COM1 (*) COM2 () COM3 () COM4». И всё. Поэтому, кстати, у меня в проге управления порт выбирается списочком.

    Огромный список COM-портов

    Здесь можно выбрать любой свободный порт. Я постарался перегруппировать все девайсы так, чтобы высвободить самые первые номера портов. Высвободились COM1 и COM2 — мне хватило. Ещё важное замечание: правильные данные об «(используется)» обновляются всё же после перезагрузки, так что два-три раза систему подёргать придётся. Мне лень — в статье нужно было показать только принцип. Играйтесь!

    Ну а я же сделал себе свой любимый COM16 под девайс, включил свет и пошёл заниматься своими делами. Вот так. Ибо нефига.

    Проекту исполнилось 15 лет! Поддержать проект материально, проспонсировать проекты Автора или сделать ему подарок можно на этой странице: «Донаты и Спонсорство, Список Желаний».

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *