Москва: +7(495) 984-3499
Новосибирск: (383) 230-0255
ICQ Отдела продаж: 673-700-787, 635-877-793, 612-931-528, 623-036-077
Москва: (495) 984-3499
(495) 742-1790
 
(495) 742-1789
(495) 742-1791
Call Free: 8 (800) 333-0313
Новосибирск: (383) 230-0255
(383) 209-0488
(903) 901-3695

Проблемы при работе с VСom портом на терминалах Cipherlab 8200, 8400, 8600, 8700

Страницы: 1
RSS
[ Закрыто ] Проблемы при работе с VСom портом на терминалах Cipherlab 8200, 8400, 8600, 8700
 
Виртуальный СОМ порт (VCOM) находится в ТСД, поэтому он создается только при подключении ТСД к ПК и включении его. Будем рассматривать случаи, когда ТСД готов к обмену.
Вначале рассмотрим локальный случай.
ТСД подключается к ПК и создается VCOM, система создает хендл порта. Далее программа открывает СОМ-порт. Создается хендл уже программный, а не системный. Через него происходит обмен. Все работает до того момента, пока не выключить или отсоединить ТСД. Тогда системный хендл, на основании которого создан программный, исчезнет. Подключим ТСД вновь. Что произойдет? Создастся системный хендл, который уже не тот. И даже если СОМ порт остался открыт в программе, то работать не будет, т.к. программный хендл никуда не ссылается. Он потерян. Что нужно для работоспособности? Либо перезагрузить программу, либо переоткрыть порт в программе. В 1С 8.х переоткрываются порты, когда открывается документ, поэтому локальные подключения не так страшны. Достаточно переоткрыть форму документа.

Теперь рассмотрим удаленный случай.
Подключаем ТСД, создается VCOM, системный хендл. Далее открывается сессия RDP, которая пробрасывает открытый хенл (или запоминает и работает с ним, я точно не в курсе). Далее, программа в сессии RDP открывает проброшенный СОМ-порт и все работает. Кабель отсоединили или ТСД выключили. На локальном ПК пропал СОМ порт и закрылся главный системный хендл. Все остальные в цепочке уже не важны. Теперь, мы подключили ТСД. Системный хендл создался и он естественно, другой. Теперь даже если в программе в сессии RDP мы переоткроем порт или даже закроем и запустим заново программу, то это тоже ничего не даст, т.к. сессия RDP ссылается на старый системный хендл, который уже закрыт. Что нужно сделать? Правильно! Переоткрыть сессию RDP. Я точно не в курсе, но скорее всего придется дополнительно еще и переоткрыть порт в программе.
Какой вывод? RDP - зло. Выхода два:
- Нужен порт, который никогда не закрывается. Для этого нужен кабель, который сам создает СОМ-порт и всегда в системе открыт. Это кабель под кодовым именем 308.
- Отказаться от RDP и использовать тонкие клиенты. У 1С они есть и прекрасно работают.

Программу, которую Вы нашли, имеет клиент-серверную архитектуру. Т.е. на локальном ПК создается сервер, который расшаривает СОМ-порт, а в RDP создается клиент, который по TCP/IP подключается к серверу. Скорее всего на сервере предусмотрены механизмы переоткрытия локального порта, для более стабильной работы. С данной архитектурой мы знакомы, но от реализации отказались ввиду нескольких причин:
1. более сложная реализация драйвера и сложная установка.
2. Необходимость сомнительная, т.к. в большинстве своем RDP используется для подключения 1С, а давно уже есть тонкий клиент, который превосходно работает.
3. Пути обхода существуют и менее затратны, чем написание клиент-сервера.
4. Скорее всего драйвер был бы платный, а проще купить кабель, по схожей цене.
Администратор
Страницы: 1

Яндекс.Метрика