
Когда вы подключаете к компьютеру новое COM-устройство или USB-устройство (USB-модем, мобильный телефон, Bluetooth-адаптер, преобразователи последовательного интерфейса в USB и т. д.), Windows обнаруживает его с помощью Plug-n-Play и присваивает ему порт номер COM-порта в диапазоне 1 до 255 (COM1, COM2, COM3 и т.д.). При повторном подключении этого устройства зарезервированный COM (Communication
, или Serial
) ему присваивается номер порта. Новое устройство получает первый свободный номер COM-порта. Часто бывает, что при подключении внешние устройства создают сразу несколько COM-портов. В моем случае после подключения адаптера Bluetooth 10!!! В системе появились новые COM-порты.
Ряд устаревших приложений может обращаться только к двузначным номерам COM-портов и не работает с COM100 и выше. В худшем случае эти программы работают только с COM1-COM9 порты. Что делать, если устройство имеет более высокий номер COM-порта? Можно ли сбросить нумерацию зарезервированных COM-портов и удалить назначенные порты?
Как изменить номер COM-порта устройства в Windows?
В Windows можно вручную изменить номер COM-порта, назначенного устройству. Предположим, что нужный COM-порт уже занят, и вы хотите попробовать его освободить.
- Откройте диспетчер устройств, выполнив команду
devmgmt.msc
команду; - Выберите Просмотр->Показать скрытые устройства в меню;
- Затем разверните Порты (COM & LPT) и найдите свое устройство в списке;
- Перейдите в раздел Настройки порта вкладку и нажмите кнопку Дополнительно кнопка;
- Текущий номер COM-порта, назначенный устройству, можно найти в разделе Номер COM-порта поле;
- Чтобы изменить его, откройте выпадающий список и выберите номер COM-порта, который вы хотите установить.
Но чаще всего изменить назначенный номер COM-порта на другой в свойствах оборудования не удается, поскольку все «младшие» COM-порты уже используются. В этом случае нужно попытаться снять резервирование COM-порта.
- Разверните Порты (COM & LPT) ветви, найдите номер COM-порта, которому назначен нужный вам порт (бледный значок означает, что этот COM-порт назначен, но в данный момент устройство не подключено);
- Щелкните его правой кнопкой мыши и выберите Удалить;
- Теперь вы можете назначить освободившийся COM-порт другому устройству. Снова откройте свойства устройства, перейдите к пункту Настройки порта -> Продвинутый вкладка. Затем перейдите на вкладку Порт Настройки вкладку и нажмите Дополнительно. Выберите свободный COM-порт в раскрывающемся списке.
Однако этот метод не во всех случаях позволяет освободить занятый COM-порт.
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-порт. Для этого можно воспользоваться командой Process Explorer Инструмент (от Sysinternals), позволяющий узнать имя процесса, использующего определенный номер COM-порта (https://docs.microsoft.com/en-gb/sysinternals/downloads/process-explorer).
Сначала нужно отобразить имя службы, которая использует COM-порт. Выполните команду PowerShell:
get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service
Имя службы конкретного COM-порта отображается в поле Служба столбец. Например, для COM2 это Последовательный. Теперь вам нужно запустить Process Explorer от имени администратора и выбрать Найти -> Поиск обработчика или DLL из меню. В Подстрока обработчика или DLL строке введите значение Service, полученное ранее. В нашем примере это Serial
.
Process Explorer должен показать имя процесса, который в настоящее время использует ваш COM-порт. Чтобы освободить COM-порт, завершите процесс или программу.
Сброс номера COM-порта в реестре Windows
Информация об используемых COM-портах хранится в CommDB параметр реестра под HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter рег. ключ.
- Откройте редактор реестра (
regedit.exe
) и перейдите к вышеупомянутому ключу реестра;Важно! Мы настоятельно рекомендуем вам создать резервную копию этого ключа реестра (File -> Export), прежде чем что-либо предпринимать. Если что-то пойдет не так, вы сможете восстановить исходную конфигурацию COM-порта. - Значение параметра ComDB параметр в двоичном формате определяет список COM-портов, зарезервированных в Windows. Каждый бит определяет состояние соответствующего порта (от 1 до 255). Например, если необходимо оставить резервирование только для COM3, шестнадцатеричное значение ComDB будет равно 04 (0000 0100); Важно! Будьте очень внимательны и не добавляйте к параметру никаких дополнительных битов, иначе система начнет сбоить в BSOD.
- Если вам необходимо сбросить все привязки COM-портов, измените значение параметра ComDB на 0;Примечание. Полный список COM-портов, подключенных в Windows, можно посмотреть в ключе реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM. Записи реестра под SERIALCOMM могут присутствовать только в том случае, если базовые устройства подключены и готовы к работе. Этот подключ является частью ключа HARDWARE, и он создается заново при каждом запуске системы.
- The HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports ключ реестра содержит список всех назначенных номеров COM-портов. Вы можете удалить все ненужные резервирования портов. В нашем примере мы оставим только COM3 и удалим остальные порты;
- Отключите все внешние устройства и перезагрузите компьютер;
- После перезагрузки подключите устройства в нужном порядке, переустановите преобразователи USB в последовательный порт и т. д. Все обнаруженные устройства COM-порта будут автоматически определены системой и им будут присвоены последовательные номера COM-портов.
Вы также можете использовать следующие бесплатные инструменты для очистки зарезервированных COM-портов:
- COM Name Arbiter Tool — этот инструмент поможет вам сбросить резервирование COM-портов и найти используемые номера COM-портов. Загрузите инструмент и запустите его от имени администратора. Выберите COM-порты, которые необходимо освободить, и нажмите кнопку Очистить неиспользуемые резервы и Удалите не присутствующие устройства;
- Инструмент очистки устройства — утилита используется для поиска в реестре ранее подключенных устройств (под ключом реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
), удаления неиспользуемых устройств и очистки резервирования COM-портов.