Когда вы подключаете к компьютеру новое 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 порт уже занят, и мы хотим его попробовать его освободить. Для этого:
- Откройте диспетчер устройств (Device Manager) командой devmgmt.msc;
- В меню выберите View->Show Hidden Devices;
- Затем разверните Ports (COM & LPT) и найдите в списке устройство;
- Перейдите на вкладку Port Settings и нажмите кнопку Advanced;
- Текущий номер COM порта, назначенный устройству указан в поле COM Port Number;
- Чтобы изменить его, раскройте выпадающий список и выберите номер COMпорта, который хотите задать.
Но чаще всего изменить номер COM порт на другой не получится, так как все «низкие» COM порт уже используются (in use);
- В этом случае нужно попробовать удалить резервацию COM порта за другим устройством. В ветке Ports (COM & LPT) найдите которому назначен нужный вам номер COM порта (бледная иконка означает, что данный COM порт назначен, но в сейчас это устройство не подключено);
- Щелкните по нему ПКМ и выберите Uninstall;
- Теперь вы можете назначить освобожденный COM порт другому устройству. Еще раз откройте свойства вашего устройство, перейдите на вкладку Port Settings -> Advanced. Задайте свободный номер 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 порт. Чтобы определить имя процесса, который использует 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
Имя службы данного COM порта указано в столбце Service. Например, для COM2 это Serial. Теперь нужно запустить Process Explorer с правами администратора и выбрать в меню Find -> Find Handle or DLL. В строке Hangde or DLL substring введите значение 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 портов, зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100);Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.
- Если нужно полностью сбросить все привязки COM, измените значение ключа ComDB на 0.
- В ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports содержится список назначенных COM портов. Все ненужные порты можно удалить (в нашем примере мы оставим только COM3 и удалим остальные);
- Отключите все оборудование и перезагрузите Windows;
- После перезагрузки включите оборудование в нужном порядке (переустановите конверторы USB-to-serial и т.д.). Все обнаруженные COM-порты автоматически определяться системой и им будут последовательно выделены номера COM портов.
Также вы можете использовать следующие две бесплатные утилиты для очистки занятых (In Use) COM портов:
- COM Name Arbiter Tool – утилита для освобождения занятых COM портов. Запустите утилиту с правами администратора, выберите COM порты, которые вы хотите освободить и нажмите Clear unused Reservations и Remove non-present devices;
- Device Cleanup Tool – утилита используется для поиска в реестре информации о ранее подключенных устройств (в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum) и удаления неиспользуемых устройств и очистки резерваций COM портов.
Уже года 4 как не видел компьютера с COM-портом, а вы тут COM устройства препарировать удумали
Антуан, уже года 4 как не видел компьютера с COM-портом, мучаюсь, приходится пользоваться переходниками, ПК же не только для вконтакта.
Извини, но компы существуют не только для игрушек и вконтактиков. Я за несколько лет видел несколько десятков компов с ком-портами.
COM-порт видишь? а он там есть и не один!..
А usb это не сом порт????
Те, кто часто перепрошивает гаджеты на МТК, сталкивается с проблемой постепенно занимаемых COM-портов
В данный момент я по прежнему с удовольствием пользуюсь двумя утилитами этого автора:
— COM Name Arbiter Setter для освобождения портов
— Device Cleanup Tool для очистки от старых неподключенных устройств
Отличные утилиты, спасибо за подсказку!
Реально работает.
Большое спасибо за подсказку!!! Очень долго искал что то подобное)))
Имхо придется дописать, в 10ке по другому
А вы опытом поделитесь, я с удовольствием его опубликую 🙂
Здравствуйте, возможно ли привязать usb-сом переходник к конкретному сом порту? Периодически прыгает на другой порт и связь с устройством теряется.
Не я один оказывается такой. Не нашли решение проблемы?
Добрый день.
Проблема у меня с com портом, а точнее после каждой перезагрузки Сканер штрих кодов берет себе новый порт и каждый раз у пользователя в настройках 1С надо по новой указывать новый порт. У продавцов таких прав нет, так что приходится каждое утро самому это делать. Почему так происходит? Разные сканеры попробовал (одной и той же модель), все так же меняют. Кассовые аппараты и прочее оборудование нормально себя ведет. Может потому что питания не хватает? хотя пробовал цеплять сканер через USB HUB с доп питанием, все равно такая беда. Комп = моноблок. На других моноблоках нет проблем. Получается проблема в USB моноблока? как можно выйти из положения? Менять моноблок не вариант (
Windows 7 x64 Pro
Может как то можно жестко привязать com порт определенному девайсу?
Попробуйте так:
1) Определите Vendor ID (VID) и Product ID (PID) вашего USB хаба через через диспетчер устройств
2) В реестре в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags создайте ключ IgnoreHWSerNumXXXXYYYY=hex:01, где XXXX = VID, а YYYY = PID
3) Ребуут
На одном компе с постоянной периодичностью слетает номер COM порта. Подключенный девайс должен быть всегда COM9. Лечится (временно) смена на любой другой и возвращение на COM9. Но вот хотелось бы исправить эту ошибку на корню. Может кто знает почему он может слетать и как исправить? Спасибо
Добрый день.
Может быть кто-то подскажет.
Существуют ПК к которым постоянно подключено устройство по usb. Оно всегда в одном порту и не отключается. Пока не определил после перезагрузки или как-то по другому, но это устройство в какой-то момент определяется под другим COM портом и с ним пропадает связь. Чем может быть вызвано самопроизвольное изменения порта, как это вылечить?
Чем может быть вызвано самопроизвольное изменения порта, как это вылечить?
— Может происхоить из-за нескольких причин. 1.Плохая изоляция у деайса, девайс рестартует. 2 Драйвер слетает.
От проблем с блоком питания, транзисторами на выходе USB матплаты, до отключения устройства для экономии энергии или нестабильной работе драйверов и ОС. В общем, десятки вариантов могут быть, начиная от железа до софтовых проблем. Это если с самим устройством всё в порядке и ну других ПК такого не наблюдается.
Microsoft наконецто испправила свою баго фичу. Начиная с Windows 10 1903 как оказывается теперь при удалении устройства из device manager (скрытые устройства с назначенными com портами) удаляются и резервации номеров COM портов. Не нужны танцы с бубном.
Отличный материал, очень актуальный! Как хорошо что есть такие сайты.
Electronic Team Virtual Serial Port (COM_3) VSBC9\DEVICES\0000 Unknown
Electronic Team VSPort Controlling Device for COM_3 VSBC9\DEVICES\0001 Unknown
Electronic Team Virtual Serial Port (COM-3) VSBC9\DEVICES\0002 Unknown
Electronic Team VSPort Controlling Device for COM-3 VSBC9\DEVICES\0003 Unknown
Electronic Team Virtual Serial Port (COM--3) VSBC9\DEVICES\0004 Unknown
Electronic Team VSPort Controlling Device for COM--3 VSBC9\DEVICES\0005 Unknown
Electronic Team Virtual Serial Port (COM__6) VSBC9\DEVICES\0006 Unknown
Electronic Team VSPort Controlling Device for COM__6 VSBC9\DEVICES\0007 Unknown
Electronic Team Virtual Serial Port (COM_11) VSBC9\DEVICES\0008 Unknown
Electronic Team VSPort Controlling Device for COM_11 VSBC9\DEVICES\0009 Unknown
Electronic Team Virtual Serial Port (COM__11) VSBC9\DEVICES\0010 Unknown
Electronic Team VSPort Controlling Device for COM__11 VSBC9\DEVICES\0011 Unknown
Так же хочу спросить , вывел списком и у меня остались следы от программы где они найти не могу так как порты называл необчно это специальная программа , как решить это как их найти и удалить?
при написании(копирование) вашей строки get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service пишет чтото все в красном цвете и с сылается на какуюто ошмбку в написании строка1 знак14.Чтото не так в этом есть? Помогите!
Какая ОС и версия PowerShell?
В 5.1 и выше команда работает
get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service при копировании этого выдает ошибку ссылаясь на строку1 знак14. Что то не так. Помогите очистить сом порт 1 или 2 который занят чемто но ни как не могу попбороть его.