- Digitrode
- цифровая электроника вычислительная техника встраиваемые системы
- Как найти скрытые COM-порты
- Получение списка доступных COM портов
- 04.01.2018
- Очистка занятых COM портов
- Смена номера COM порта для конкретного устройства
- Сброс привязок COM портов через реестр
- Как посмотреть какие порты открыты на компьютере, и кто их использует
- Определение номера подключенного COM порта
- Windows
- Linux
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Как найти скрытые COM-порты
COM-порт представляет собой отличное средство для связи этого самого компьютера с каким-нибудь радиолюбительским проектом или устройством, например, платой Arduino. И у заядлого радиолюбителя и электронщика таких проектов и устройств может быть целая куча. Это, конечно, хорошо, ибо свидетельствует о высокой продуктивности человека, но в данном деле может быть небольшая проблема, скорее связанная с эстетической составляющей, нежели с практической.
Возможно, вы могли заметить, что всякий раз, когда вы вставляете в USB-разъем компьютера новую плату с чипом FTDI или другим подобным переходником COM-USB, выполняется обнаружение нового COM-порта. При частой работе с новыми платами количество таких виртуальных COM-портов может быть очень большим, а это не может не раздражать.
Поэтому сегодня мы научимся, как находить и удалять дополнительные COM-порты, накопленные за долгие годы радиолюбительского безумия.
Следует заметить, что приведенный в данном материале метод подходит только для операционных систем Windows и не подойдет для других, например, Linux или Android, поскольку там совершенно другие механизмы процесса распознавания и удаления COM-портов.
В первую очередь нужно зайти в командную строку с правами администратора. Для этого нажимаем «Пуск», печатаем «cmd» и на появившейся иконке нажимаем правую кнопку мыши и жмем «Запуск от имени администратора.
Теперь в командной строке печатаем магическую команду «set devmgr_show_nonpresent_devices=1», которая покажет нам скрытые устройства. Затем заходим в диспетчер устройств, напечатав «start devmgmt.msc».
В диспетчере устройств во вкладке «Вид», выбираем «Показать скрытые устройства».
Всё! Теперь вы можете выбрать любой неугодный вам порт и удалить его. Это освободит номер порта для других новых плат с конвертерами USB-TTL.
Таким образом, количество зарегистрированных COM-портов в вашей системе Windows можно существенно сократить, оставив только самые нужные порты, с которыми вы работаете в настоящее время. Это избавит вас от лицезрения наименования типа «COM137» при подключении очередной платы. Как уже было отмечено выше, эта операция по удалению лишних COM-портов носит в большинстве случаев чисто эстетический характер. Но иногда это может быть полезным в практическом плане, поскольку в очень редких случаях существуют программные средства, которые поддерживают только COM-порты с номерами от 0 до 9.
Получение списка доступных COM портов
04.01.2018
При программировании 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» и т.д. Отсюда сразу возникает решение – нужно перебрать все строковые параметры в данном разделе реестра.
Ниже приводится полный исходный код примера, демонстрирующего данный метод.
В заключение лишь отмечу, что я использую этот подход во многих своих проектах, и он еще ни разу не подводил меня.
Очистка занятых COM портов
Каждый раз при подключении нового 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 порт уже занят, и мы хотим его попробовать его освободить.
- Запустим диспетчер устройств (Device Manager) таким образом: set devmgr_show_nonpresent_devices=1
start devmgmt.msc - В меню консоли выберем View->Show Hidden Devices.
- Разверните ветку Ports (COM &LPT) и в списке найдите устройство, которому назначен нужный COM порт (бледная иконка означает, что данный COM порт назначен, но в настоящий момент это устройство не подключено). Щелкните по нему ПКМ и выберите Uninstall
- Освобожденный COM порт может быть назначен другому устройству. Найдите в этой же ветке свое устройство, откройте окно его свойств (Properties). Затем перейдите на вкладку PortSettings и нажмите кнопку Advanced. В выпадающем списке выберите неиспользуемый COM порт.
Приведенная выше методика не всегда позволяет освободить занятый COM порт. В этом случае придется прибегнуть к редактированию реестра.
Сброс привязок COM портов через реестр
Информация об используемых COM портах хранится в ключе реестра CommDB в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter
- Откройте редактор реестра (regedit) и перейдите в указанную ветку.
Значение параметра ComDB в двоичном формате определяет список COM портов зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100)
Как посмотреть какие порты открыты на компьютере, и кто их использует
Думаю, если Вы нашли эту статью и собираетесь проверить какие порты открыты на ПК, то объяснять что такое порты, для чего они нужны и как используются различными программами, не нужно. Перейдем сразу к делу.
Чтобы проверить состояние портов, необходимо открыть командную строку. Для этого используйте шорткат Win+R, в появившемся окошке наберите cmd и нажмите Ввод:
В окне командной строки наберите команду netstat -a (перед знаком минус не забудьте поставить пробел), нажмите Ввод. После быстрого сканирования Вы сможете посмотреть какие сокеты открыты на Вашем ПК и в каком состоянии они находятся:
Как видим, для каждого активного сокета указывается протокол, локальный и внешний адрес, а также состояние протокола. Вот список и значение самых распространенных состояний:
- LISTENING – значит, что порт ожидает входящих соединений
- ESTABLISHED – соединение установлено
- CLOSE_WAIT – ожидание закрытия вследствие отключения удаленной стороны
- TIME_WAIT – порт закрыт, но еще ожидает входящие пакеты для обработки
- SYN_SENT – установка соединения
Возле номера каждого сокета в квадратных скобках указана программа, которая его использует (исполняемое имя файла).
Если Вы обнаружили, что какой-то порт использует программа, которую Вы не запускали и которая похожа на троян или вирус, то его следует закрыть. Закрыть порт можно при помощи фаервола. Однако гораздо быстрей и эффективней будет использовать небольшую бесплатную программу под названием Windows Worms Doors Cleaner (WWDC), которую Вы можете скачать прямо сейчас (51Kb).
После запуска она покажет список открытых сокетов, которые представляют опасность, и которые специалисты в области информационной защиты настоятельно рекомендуют держать отключенными: 135, 445, 137-139. Чтобы сделать их неактивными, просто нажмите кнопки справа от каждого красного значка:
После вступлений изменений в силу Вы получите такую картину:
Преимущество программы WWDC перед фаерволами состоит в том, что она не просто блокирует открытые порты, но закрывает их, отключая службы, которые их используют. Это, как Вы понимаете, гораздо эффективнее, потому что устраняет источник проблемы, а не симптомы.
Определение номера подключенного COM порта
Для правильного подключения оборудования, необходимо определить номер COM порта.
Проверка проводится при условии, что сервер полностью развернут, и работает заведомо правильно.
Windows
Для определения номера COM порта на ОС Windows необходимо:
- Убедиться в том, что многожильный кабель подключен к COM-порту
- Перейти в «Диспетчер устройств», расположенный в: Панель управления\Оборудование и звук\Диспетчер устройств (необходимы права администратора)
- Раскрыть дерево «Порты (COM и LPT)»
- Отсоединить многожильный кабель
- Запомнить изменения в дереве устройств «Порты (COM и LPT)»
- Присоединить многожильный кабель обратно к COM-порту
- Найти новый порт в дереве устройств «Порты (COM и LPT)»
8. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем.
Linux
Для определения номера COM порта на ОС Linux необходимо:
- Обладать правами Root либо пользователь должен входить в группу dialout
- Убедиться в том, что многожильный кабель подключен к COM-порту
- Проверить наличие COM портов в системе, введя в командную строку следующую команду:
4. После выполнения команды отобразится список всех доступных COM-портов
dev/ttyS0 — первый COM порт
/dev/ttyS1 — второй COM порт
/dev/ttyUSB0 — специальный кабель-переходник из USB в COM (Gembird UAS111)
5. Установить программу minicom. Для этого вводим следующую команду:
6. Найти многожильный кабель в оплётке длиной 4-6 см.
7. Соединить 2 и 3 выводы COM порта перемычкой из кусочка многожильного провода. Оплётка будет удерживать провод на контактах, а металлические жилы внутри будут проводниками.
8. Настроить программу minicom. Для этого вводим следующую команду:
9. Выбрать «Настройка последовательного порта»
10. Нажимая А поочередно выбираем порты (если используется кабель-переходник из USB в COM то выбрать /dev/ttyUSB0)
11. Отключить аппаратное управление потоком, нажав «F»
12. Выйти из настроек нажав «Enter»
13. Сохранить настройки по умолчанию «Сохранить настройки как dfl»
14. Выйти из minicom
15. Запустить minicom выполнив команду:
16. Нажать на любую клавишу на клавиатуре
В случае, если символы не вводятся с клавиатуры, необходимо вернуться к пункту 10, и выбрать другой COM-порт
Если вводимые символы отображаются — значит COM-порт определен верно
17. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем.