Почему отваливаются проброшенные COM-порты в RDP и как устранить их дублирование?

Системный администратор 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация Торговля и дистрибуция
← На главную

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

Анализ причин сбоя проброса COM-портов

Проанализируем механику работы виртуальных портов в среде Windows Server при RDP-подключениях. Основные факторы, приводящие к сбоям:

  1. Зависание и дублирование маппингов в сессии RDP: при некорректном завершении сеанса, обрывах связи или повреждении сохраненных параметров в RDP-ярлыке клиентской машины сервер может создавать множественные копии одного и того же порта (например, до 5–8 виртуальных COM16 в одной сессии). В результате драйвер 1С блокируется, не понимая, к какому физическому устройству обращаться.
  2. Ограничение адресации портов (лимит COM32): многие драйверы торгового оборудования и компоненты Win32 API используют 32-битную битовую маску для опроса портов. Назначение номеров COM33 и выше приводит к тому, что порт перестает определяться и пробрасываться.
  3. Засорение базы портов в реестре (ComDB): операционная система резервирует каждый когда-либо подключенный USB-COM переходник в реестре. При смене USB-разъемов накапливаются «фантомные» порты, вызывающие внутренние конфликты адресации.
  4. Энергосбережение USB: операционная система клиентского ПК может временно отключать питание корневых USB-концентраторов, разрывая виртуальный туннель RDP.

Шаг 1. Диагностика состояния портов в сессии RDP

Для выявления дубликатов и зависших перенаправлений проверим состояние портов непосредственно внутри терминальной сессии пользователя. Откроем командную строку в RDP и выполним команду:

change port /query

Внимательно изучим вывод команды. Если один и тот же локальный порт (например, \Device\RdpDrPort\;COM16:2\tsclient\COM16) отображается в списке несколько раз для одного сеанса, налицо коллизия перенаправления. Простейшим и быстрым решением в этом случае является полное удаление старого ярлыка .rdp на клиентском компьютере, сброс кэшированных параметров подключения и создание ярлыка заново.

Шаг 2. Очистка скрытых устройств и сброс ComDB

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

  1. Запустим командную строку с правами администратора и откроем диспетчер устройств в режиме показа неактивного оборудования:
    
    set devmgr_show_nonpresent_devices=1
    start devmgmt.msc
    
  2. В открывшемся окне перейдем в меню Вид → Показать скрытые устройства.
  3. Развернем ветку Порты (COM и LPT) и удалим все полупрозрачные (неактивные) устройства.
  4. Для полного сброса таблицы занятых портов откроем редактор реестра (regedit), перейдем в ветку:

    HKLM\SYSTEM\CurrentControlSet\Control\COM Name Arbiter

    и очистим двоичный параметр ComDB (установим значение в 0). Это сбросит резервацию номеров и позволит системе назначать порты заново, начиная с младших номеров в диапазоне до COM32.

Шаг 3. Принудительный скриптовый маппинг портов при входе

Чтобы исключить зависимость от штатного механизма автоматического перенаправления RDP, настроим логон-скрипт (BAT-файл), выполняемый при входе пользователя в терминал. Скрипт принудительно удалит старую привязку и создаст явное подключение:


change port /d COM16
net use COM16: \\tsclient\COM16

Такой подход гарантирует, что к моменту запуска 1С порт будет смонтирован в единственном экземпляре.

Шаг 4. Отключение энергосбережения USB-портов

Для предотвращения внезапных разрывов соединения на клиентских компьютерах отключим режим выборочной приостановки USB:

  1. Откроем Диспетчер устройств на клиентской машине.
  2. В разделе Контроллеры USB найдем все элементы с названиями Корневой USB-концентратор (Generic USB Hub / USB Root Hub).
  3. Откроем их свойства, перейдем на вкладку Управление электропитанием и снимем флажок Разрешить отключение этого устройства для экономии энергии.

Шаг 5. Альтернативные способы подключения без виртуальных COM-портов

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

  1. Перевод сканеров в режим HID (эмуляция клавиатуры): сканеры штрихкодов переводятся специальным управляющим штрихкодом в режим клавиатуры с суффиксом CR (Enter). В 1С подключается стандартный драйвер клавиатурного ввода. Это полностью устраняет потребность в COM-портах для сканеров.
  2. Подключение ККМ по TCP/IP: современные кассовые аппараты поддерживают работу по сетевому протоколу через Ethernet или Wi-Fi. Настройка прямого IP-подключения кассы к серверу полностью изолирует торговое оборудование от клиентских терминальных сессий.
← На главную