Прокидывание COM-порта по сети TCP/IP между Windows XP и Windows 7 с целью подключения сканера штрихкодов к программе 1С

Постановка задачи:
Операционная система Windows 7 Домашняя Базовая 32-битная русская - это сервер.
Точнее - сервер терминалов, реализованный посредством программы ViTerminal, а не посредством более распространенных и известных технологий Microsoft или Citrix.

P.S.: Сейчас на том же железе в качестве сервера работает не первоначально настраиваемая Windows 7 Базовая, а Windows XP 32-бита Professinal + ViTerminal. Настраивается - аналогично настройке с сервером на базе Windows 7 Базовая. Более того, я ее по этой своей статье и настраивал, как по шпаргалке.

На него заходят клиенты с рабочих станций, на которых установлена операционная система Windows XP 32-битная русская.

Эти клиенты запускают на терминальном сервере "1С V81: Управление торговлей" и используют в своей работе сканеры штрихкодов, подключенные к рабочим станциям.

Программа 1С получает данные со сканера с помощью внешней компоненты ScanOpos, которая в свою очередь ловит данные на последовательном порту.

Необходимо, чтобы терминальный сервер (Windows 7 с ViTerminal) видел порты последовательные (COM-порты) так, как будто они локальные на терминальном сервере.

Решение задачи

Для того, чтобы сделать это поковырял интернет. Решений с клиентами под Linux - куча. Решений с клиентами под Windows - чего-то жидковато, даже странно как-то.

Использовал для решения задачи бесплатное программное обеспечение:

Tibbo TDST (tdst-5-08-05-x86.exe) на терминальном сервере
IP-Com (ip_com_v3_0_0.exe) на рабочих станциях (сайт автора: http://members.multimania.co.uk/ipcom/)

Сначала включаю учетную запись "Администратор", который имеет больше прав, чем пользователь с правами администрирования:

net user administrator /active:yes (или же по-русски "Администратор", уже не помню).
Это нужно было сделать только с Windows 7 Базовая. Другой раз я использовал в качестве сервера Windows XP Professinal - там ничего такого, конечно же, делать не нужно.

Дальнейшие операции на сервере выполняю войдя от имени "Администратор". Собственно это нужно было еще раньше - для установки ViTerminal.

Tibbo TDST настраиваю так:

Запускаю утилиту Tibbo VSP Manager (tvspman.exe).
Добавляю порт с параметрами Protocol: TCP, Transport: TDI, Routing: Client, Mode: Immediatly, On-the-fly: Disabled, IP-address: Адрес рабочей станции. Порт тот же что и у клиентской программы (см. ниже) - 1001, можно и другой указать.

У замечательной поделки Tibbo есть еще интересные вещи - например, индивидуальные настройки под конкретного пользователя.

IP-Com настраиваю так:

Отключаю поддержку Telnet, не ставлю галочку Client, порт 1001 (можно и другой, нужно чтобы совпадал с настройками на сервере). Жму Enable, затем сохраняю конфигурацию.
Все - отныне при запуске клиента он будет всегда использовать именно эти параметры.
Создаю ярлык на него в меню "Пуск\Все программы\Автозагрузка".

Разумеется, при тестировании соединения включаю файрвол в антивирусе NOD32 на рабочих станциях в режим обучения - он сам добавляет нужные правила. Затем перевожу файрвол в режим "Автоматический с использованием правил".

У Tibbo TDST в комплекте есть полезная утилита Tibbo Monitor (tmon.exe). С помощью ее можно видеть есть ли связь (связь устанавливается при открытии порта 1С V81) и что именно передается.

Еще пришлось исправить в конфигурации "1С V81 Управление торговлей" запись параметров для настройки торгового оборудования.
Для каждого пользователя на каждом компьютере - свои сделал. Без этого все пользователи на терминальном сервере пользовались бы общими настройками, в частности общим последовательным портом.
А я в Tibbo TDST разные последовательные порты для разных рабочих станций указал.
Если же в Tibbo TDST указать, что последовательный порт создается индивидуально для каждого пользователя - наверное, в модификации 1С не было бы необходимости, т.к. всем пользователям можно было бы указать один и тот же последовательный порт (не проверял).
Ну и понятно, если сканер всего один у одного пользователя - то тоже ничего особого делать не нужно.

Изменения в 1С следующие:
Нужно чтобы ресурс "Компьютер" в регистре сведений "Торговое оборудование" содержал был не "имя компьютера", а "имя компьютера+имя пользователя".

Это проще всего делается исправлением в обработке "ТОСервер" в модуле обработки функции "ПолучитьИмяКомпьютераТО()".

Вместо "мИмяКомпьютера = ВРег(ИмяКомпьютера());" пишем там "ВРег(ИмяКомпьютера()+"//"+ИмяПользователя());".

Вроде все просто и не так уж и много написано. Однако ковырял не один час... Расковырял!

P.S.:
По итогам длительной эксплуатации - иногда (раз в несколько дней) нужно перезагружать сервер.

Через некоторое время заменил операционную систему Windows 7 Базовая на Windows XP Professinal. На том же железе с тем же набором программного обеспечения, что описано в этой статье выше.
Стабильнее стало работать...

Скорее потому, что железо сервера старое (хотя и настоящий сервер двухпроцессорный сервер с настоящим "железным" RAID) и не все драйвера с Windows 7 нормально завелись.

Компьютерные вопросы: 
2002-2012 ©