Reported In
Reported In shows products that are verified to work for the solution described in this article. This solution might also apply to other similar products or applications.
Issue Details
What is the maximum number of Serial COM ports I can have on my computer using National Instruments’ Serial Products?
Solution
The maximum number of COM ports is dependent on both the operating system (OS) and the serial driver. The maximum number of serial ports that NI-VISA currently supports on any platform is 256. COM port limitations are listed below:
- On Windows NT, NI-VISA limits the number of COM ports to 99.
- On Windows 95, 98, 2000, and XP the OS and NI-VISA limit the number of COM ports to 256.
- On Windows 7, 8, and 10, NI-VISA limits the number of COM ports to 256.
- For the serial ENET products on Windows NT and 2000, NI-VISA limits the number of COM ports to 256.
Additional Information
Because of the constraints on the number of serial ports from the OS and the serial driver, the number of National Instruments serial cards that you can use in your system is limited. When selecting the appropriate serial card(s) to use, ensure that the total number of ports on your cards is less than the maximum number of COM ports for your system.
Перенаправление COM портов
тонкого клиента WTPRO
Перенаправление COM портов
Терминальный клиент WTPRO поддерживает два варианта перенаправления COM портов.
- Перенаправление посредством RDP протокола
- Перенаправление с использованием дополнительного сервиса для Windows
- Установка ККМ Феликс 02к и сканера штрих-кодов
Использование перенаправления посредством RDP протокола
Начиная с Windows 2003 сервера протокол RDP поддерживает перенаправление COM портов. К сожалению протокол RDP поддерживает неполное перенаправление COM портов. Например, существующая реализация не позволяет выйти в Интернет через модем, подключенный к COM-порту терминала. Однако для некоторых задач существующий функционал вполне подходит.
Будет лучше, если перед тем, как подключать устройство к COM-порту терминала WTPRO, вы подключите его к Windows-машине, запустите на ней стандартный клиент службы терминалов Microsoft и проверите работу со своим устройством.
Для того, чтобы перенаправить последовательные порты с терминала WTPRO на windows сервер необходимо указать в конфигурационном файле терминала:
COM=’on’
или через веб интерфейс указать параметр COM порты: вкл
В результате после подключения к серверу COM порты клиента перейдут в COM порты сервера. Первый COM порт терминала перенаправится в третий COM порт сервера.
Клиент |
Сервер |
COM1 | COM3 |
COM2 | COM4 |
COM3 | COM5 |
COM4 | COM6 |
Для проверки правильности подключения можно использовать команду change port.
Вывод команды будет примерно такой:
Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.
C:\Documents and Settings\ZserG>change port
AUX = \DosDevices\COM1
COM1 = \Device\Serial0
COM3 = \Device\RdpDrPort\;COM3:1\tsclient\COM3
COM4 = \Device\RdpDrPort\;COM4:1\tsclient\COM4
Теперь приложения могут использовать порты COM3 и COM4.
Перенаправление с использованием дополнительного сервиса для Windows
Работает начиная с версии WTPRO 0.6.3.
Данный способ будет работать со всеми устройствами для COM портов и не требует обязательного наличия Windows 2003 сервера. Единственным минусом является необходимость установки на терминальный сервер дополнительного программного обеспечения.
Рассмотрим данный способ на примере контрольно кассового регистратора (ККМ) Феликс-02К и сканер ШК (штрихкода). ККМ (Феликс-02К ) подключен к первому КОМ порту (COM1) на тонком клиенте. А Сканер штрихкодов подключен ко второму КОМ порту (COM2) на тонком клиенте.
Для перенаправления COM портов необходимо выполнить следующие шаги.
- Указать в конфигурационном файле терминала:
COM=’ser’
Или через веб интерфейс указать параметр COM порты: сервис -
При необходимости можно настроить отдельно каждый последовательный порт, для этого можно использовать опции COM1, COM2, COM3 и т.д
Эти параметры можно настроить через веб интерфейс или указать в конфигурационном файле.
Параметры COM порта:
устанавливает параметры последовательного порта, возможные опции:
скорость: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
четность: EVEN, ODD, NONE
стоп-биты: 1STOPBIT, 2STOPBITS
биты данных: 7DATABITS, 8DATABITS
включает XON/XOFF: XONXOFF (-XONXOFF выключает)
включает аппаратное управление потоком: RTSCTS (-RTSCTS выключает)
игнорировать контрольные линии модема (DCD, DTR, и д.р):
LOCAL (-LOCAL не игнорировать) - Настроим ККМ Феликс. Для этого можно задать параметры для порта COM1. Особеностью ККМ является следующее — невозможность аппаратного управления потоком.
COM1=’115200 NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL’.
Эти параметры означают следующее: - Скорость порта: 115200
- Четность: не проверять
- Стоп бит: один
- Биты данных: 8-ми битные
- XON/XOFF: выключено
- Аппаратное управление потоком: выключено
- LOCAL
- Настроим сканер ШК. Для этого необходимо настроить параметры второго КОМ порта. (Замечание! Чаще всего сканеры штрихкодов не требуют дополнительной настройки порта)
COM2=’9600 NONE 1STOPBIT 8DATABITS -XONXOFF -RTSCTS LOCAL’.
Эти параметры означают следующее: - Скорость порта: 9600
- Четность: не проверять
- Стоп бит: один
- Биты данных: 8-ми битные
- XON/XOFF: выключено
- Аппаратное управление потоком: выключено
- LOCAL
Замечание! Для применения параметров необходима перезагрузка.
Перед перезагрузкой сохраните файлы конфигурации на TFTP сервере
или другом носителе. - Аналогичным образом настраиваем КОМ порты на других терминальных клиентах
- Теперь необходимо установить серверную часть на Windows
Существует две стабильные серверные реализации
- MCSI2000
- Tibbo (надежнее)
MCSI2000
Эта программа является редиректором COM портов для Windows 2K, 2000 , XP, 2003. Главное ограничение: максимальное количество виртуальных COM портов — 64.
- Устанавливаем на терминальный сервер программу mcsi2000 (последняя версия находится на сайте https://www.multitech.com/)
Tibbo
Компания Tibbo Technology поставляет аппаратное и программное обеспечение для быстрого подключения оборудования с последовательным интерфейсом (RS232, RS422, RS485) к сетям Ethernet (TCP/IP). Их продукцию можно использовать для подключения к сети Ethernet практически любого оборудования, работающего через последовательные порты. Дополнительную информацию можно найти тут. При работе с WTPRO нам понадобится
Device Server Toolkit (DST) software for Windows. Максимальное количество COM портов — 255.
- Скачиваем программу с сайта www.tibbo.com или по прямым ссылкам
- TDST_3-9-82_NO_HELP.zip 2.2 мб
- TDST_3-9-82.zip 9.6 мб
- TDST_3-9-82.exe 9.7 мб
- Устанавливаем на терминальный сервер программу обычным способом
- Убираем галочку Connections Wizard
- Ставим галочку Virtual Serial Ports
- Запускаем VSP Manager
- Добавляем необходимые COM порты с терминального клиента
- Пример добавления 1-го COM(в нашем случае к нему подключен ККМ Фелмкс) порта клиента с IP адресом 10.0.0.200 и подключения этого порта как порт COM5 на сервере.
- Добавляем сканер штрихкодов
- На вкладке General properties выставляем параметры следующим образом:
- VSP name: COM6
- Transport protocol: TCP
- On-the-fly commands: Disabled
- Routing mode: Client
- Connection mode: Immediately
- Specify by: 10.0.0.200
- Port: 2002
- На вкладке Default serial settings
Устанавливаем параметры порта
Не забудьте установить правильную скорость COM порта. Для Сканера ШК это обычно 9600. - Теперь добавим порты с других терминальных клиентов
- На вкладке General properties выставляем параметры следующим образом:
- VSP name: COM7
- Transport protocol: TCP
- On-the-fly commands: Disabled
- Routing mode: Client
- Connection mode: Immediately
- Specify by: 10.0.0.201
- Port: 2001
- На вкладке General properties выставляем параметры следующим образом:
- VSP name: COM8
- Transport protocol: TCP
- On-the-fly commands: Disabled
- Routing mode: Client
- Connection mode: Immediately
- Specify by: 10.0.0.201
- Port: 2002
- Повторяем процедуру добавления портов столько раз, сколько портов необходимо перенаправить
- При необходимости можно посмотреть как работает виртуальный COM порт через Port Monitor
Установка ККМ Феликс 02к и сканера штрих-кодов
Рассмотрим на примере:
На сервере установлена Windows 2003 Server с поднятой службой терминалов, 1с 7.7 с возможностью работы с торговым оборудованием, несколько терминальных рабочих мест, два из них оснащены ККР Феликс 02К и Сканерами штрих-кодов, все через com-порт, сервер установлен также как рабочее место кассира, в комах все те же сканер и ККР, кассир работает с консоли с правами урезанного пользователя. Итого имеем 3 рабочих места кассира. Все торговое оборудование работает под управлением стандартных драйверов атол https://atol.ru/![]()
- Устанавливаем на терминальный сервер :
- Windows 2003 Server с поднятой службой терминалов
- 1с 7.7 с возможностью работы с торговым оборудованием
- Замечание! Именно эти версии драйверов, кто хочет использовать свежее – покупайте сетевой ключ у атола. Самые последние версии могут не работать, но несколько следующих в терминале точно не работают!
- Замечание!
Перед установкой драйверов от атола 1с уже должна быть установлена. - Устанавливаем ККМ
- Выбираем «Установка по выбору»
- Снимаем все галочки, кроме 3-х, Компонента ActiveX, Сервер оборудования, Тестовая утилита
- Устанавливаем сканер штрих-кода
- Выбираем «Установка по выбору»
- Снимаем все галочки, кроме 2-х, Компонента ActiveX, Тестовая утилита
- Выставляем права доступа на каталоги с атолом такие же, как это у вас принято для 1с.
- Подсоединяем к серверу ККМ и сканер ШК
- Проверяем работу ККМ
- Нажимаем Настройка свойств
- На вкладке Свойства выставляем параметры следующим образом:
- COM1
- 115200
- Нажимаем Проверка связи, смотрим результат
- Можно посмотреть Параметры оборудования, Сервис оборудования,
попечатать (настроить) клише, пароль обычно 30 - Замечание! Не рекомендуется пользоваться поиском оборудования – глючит
- Проверяем работу сканера ШК
- Нажимаем Настройка свойств
- Замечание! Ждем 17-20 секунд, это особенность (вероятно — ограничение использования) данного драйвера при инициализации сканера (при каждом запуске 1с, для кассира это раз в день, если у пользователя настроено использование сканера через этот драйвер, у пользователя создается впечатление, что программа висит 17-20 секунд – согласитесь – небольшая плата за возможность работать без дурацких ключей защиты)
- На вкладке Свойства выставляем параметры следующим образом:
- COM2
- 9600
- Устройство включено
- Сканируем первое, что попадется, смотрим результат
- Замечание! Не рекомендуется пользоваться поиском оборудования – глючит
Демо режим нас тоже устраивает, и хотя в описании драйвера говорится, что демо режим только 8-значные, сканируется на самом деле все! - Настройка торгового оборудования в 1с у всех по-разному, если используются драйвера атола, то
- для ККМ — C:\Program Files\ATOL\Drivers\BIN\FprnM1C.dll
- для сканера ШК — C:\Program Files\ATOL\Drivers\BIN\Scaner1C.dll
- Теперь необходимо установить программу Tibbo и настроить ее, читать здесь>>
-
XshStasX
New Member
- Публикаций:
-
0
- Регистрация:
- 9 авг 2008
- Сообщения:
- 991
у меня пару вопросик про СОМ порты.
1. Сколько в хр может быть максимум СОМ портов ??
2.Как лучше сделать когда к компу подключено 100 модемов, и в каждый нужно писать/читать, у меня два варианта
1. Сделать на каждый порт по потоку.
2. Или подключить все порты и в одном потоке для все поставить поставить эвенты на приход данных + эвент что нужно что-то записать и все это ждать на WaitForMultitpleObjects() . -
XshStasX
100 модемов к 1 компу. Извиняюсь за иронию, но — дайте фотку.
Ответ на первый вопрос: 256 портов.
Второй вопрос — логичнее было бы выделять потоки. Но можно использовать и волокна (опять же, смотря чего вы добиться хотели), тогда нужно свой диспетчер создать, но это не очень трудно. -
Pavia
Well-Known Member
- Публикаций:
-
0
- Регистрация:
- 17 июн 2003
- Сообщения:
- 2.409
- Адрес:
- Fryazino
100 потоков это много. Так что второй вариант. но в реалиях врятли больше 10 так что можно 1 использовать.
-
l_inc
New Member
- Публикаций:
-
0
- Регистрация:
- 29 сен 2005
- Сообщения:
- 2.566
TermoSINteZ
Могу ошибаться, т.к. не работал с com-портами, но разве не проще и одновременно логичнее использовать порты завершения? Они должны вполне эффективно распределить нагрузку на несколько потоков. -
XshStasX
New Member
- Публикаций:
-
0
- Регистрация:
- 9 авг 2008
- Сообщения:
- 991
Ничего особенного там ящик в одном ящике 30 тел. подключенные через usb(хаб или концентратор точно не знаю название это устройства, типа удлинитель юсби)))
к нему через юсби провода подключены телефоны.
Сейчас 30 модемов работает так так все норм.
А тут думают еще подключить то есть в итоге окола ста скоро их станет.
Вот и получается что в программе будет всего 100 потоков.
Их можно свести к одному если сделать по 2 второму варианту.
Но есть такая штука как очередь сообщений(это когда ставиться асх. операция в очередь и когда она завершиться о ней сигнализирует эвент), то есть если кинуть 10 запросов на запись и 10 на чтение на каждый модем то получим как бы 2000 ожидающих завершения операций, эти все сообщений сохраняются где то в потоке ?
И что будет к примеру если уже нет памяти для сообщений? -
l_inc
Я просто привел пример того как можно создать обработку очереди. А сами ком порты не связаны, с этим.
Но имхо потоки выгоднее делать — потому, что каждый поток будет обслуживать один модем. Четкое разделение, четкие правила. И я сомневаюсь что будет огромная нагрузка — модемы — медленные по своей природе — там не будет как на игровых\sql серверах, где такая тактика бы не подошла в принципе. И 100 потоков винда в состоянии обслужить. А писать свой планировщик и с портами завершения возиться для вашей задачи… Не вижу пока _существенных_ аргументов в пользу.Памяти какой? Если ситуация с потоком — то для каждого потока вы же выделяете память. Например страницу 4кб, вот если ваш буфер приема допустим 200 байт (сообщение), когда дойдет до предела накопления (+ условие времени, например 5 минут) вы скидываете информацию на диск (если она нужна).
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
XshStasX
По поводу 256 портов IMHO TermoSINteZ ошибается
обычные COM порты интегрированные на материнской плате или ISA I/O используют раздельные прерывания (IRQ3 или IRQ4) и фиксированные адреса ввода-вывода
COM1/COM3 (Диапазон ввода/вывода 03F8h-03FFh IRQ4)
COM2/COM4 (Диапазон ввода/вывода 02F8h-02FFh IRQ3)
то есть на каждый COM-порт 8 портов ввода/вывода с фиксированными адресами
в случае с PCI, прерывания становятся разделяемыми (т.е. все COM порты используют одно прерывание IRQ5 и адреса уже состоят из 4-х цифр (CC00, CC08, CC10, CC18) -
XshStasX
New Member
- Публикаций:
-
0
- Регистрация:
- 9 авг 2008
- Сообщения:
- 991
А если идет подключение устройства через юсби, и там дальше драйвер симулирует СОМ порт. то так их 256 или не ограничено ??
-
Mikl___
Супермодератор
Команда форума- Публикаций:
-
14
- Регистрация:
- 25 июн 2008
- Сообщения:
- 3.933
XshStasX
Не знаю — но пространство портов (адреса ввода/вывода) разделено на 64К 8-разрядных портов, 32К 16-разрядных портов, 16К 32-разрядных портов или другую комбинацию устройств, которые в сумме не превышает 64 Кбайт. Из них половина зарезервирована для внутреннего использования фирмой Intel, сопроцессором, стандартными устройствами и т.д. так что в любом случае количество COM-портов ограничено, кроме того каждый COM-порт использует 8 портов (данные, управления, состояния и т.д.)
Applies ToGeneral
Аннотация
CreateFile() может использоваться для получения дескриптора к последовательному порту. «Справочник программиста Win32» запись для «CreateFile()» упоминания режим общий ресурс должен быть 0, создать параметр должен быть OPEN_EXISTING, что шаблон должен быть NULL. CreateFile() прошла успешно, при использовании «COM1» до «COM9» для имени файла; Тем не менее сообщения
INVALID_HANDLE_VALUE
возвращается при использовании «COM10» или выше. Если имя порта \\.\COM10, правильный способ указать последовательный порт в вызове CreateFile() выглядит следующим образом: CreateFile( «\\\\.\\COM10», // address of name of the communications device fdwAccess, // access (read-write) mode 0, // share mode NULL, // address of security descriptor OPEN_EXISTING, // how to create 0, // file attributes NULL // handle of file with attributes to copy ); Примечания: Этот синтаксис также работает для портов COM1 через COM9. Некоторые системные платы позволяют выбрать имена портов самостоятельно. Этот синтаксис работает по именам, а также.
Нужна дополнительная помощь?
Нужны дополнительные параметры?
Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.
Периодически возникает ситуация, когда на компьютере нет СОМ портов или они уже заняты, а подключить устройство необходимо, что делать в такой ситуации?
Под СОМ-портом в статье понимается один из интерфейсов RS-232, RS-422 или RS-485.
Ниже представлены несколько вариантов решения такой ситуации.
Преобразование или разветвление интерфейсов RS-232, RS-422, RS-485
У вас есть свободный СОМ-порт, но он имеет другой интерфейс или нужно два порта вместо одного.
или
В этой ситуации вы можете воспользоваться рекомендацией из данной статьи, а именно воспользоваться преобразователем интерфейсов или разветвителем.
Преобразование USB в COM
У вас есть свободный USB разъем, но нет СОМ порта.
Специальный конвертер USB в COM позволит добавить СОМ порт в компьютер. После установки драйвера, вы сможете воспользоваться СОМ-портом, как будто он всегда был в вашем компьютере.
Самые простые конвертеры USB в COM – Uport и I-7561U.
Преобразование Ethernet в COM
Бывают ситуации, когда компьютер находится довольно далеко от устройства с СОМ портом, но можно воспользоваться сетью Ethernet. В этом случае вас выручит Ethernet-сервер последовательных интерфейсов, который позволяет работать с конечными устройствами через виртуальный СОМ порт.
Самые распространенные Ethernet-серверы последовательных интерфейсов – tDS-700 и Nport 5000, больше в разделе Серверы последовательных интерфейсов.
А если вы используете протокол Modbus RTU, то корректнее применить специальный Modbus-шлюз, вместо сервера последовательных интерфейсов, потому что шлюз позволяет избежать ошибок при передаче специализированных протоколов через Ethernet. Modbus-шлюзы находятся в разделе Шлюзы Modbus.
Добавление COM-портов через Wi-Fi
Если у компьютера есть возможность подключения к точке доступа Wi-Fi, как подключить дополнительные устройства с СОМ портом?
На выручку придет специальный сервер интерфейсов с Wi-Fi NPort W2000. Точки доступа находятся в разделе Беспроводные решения.
Добавление COM-портов через шины PCI, PCIe, ISA
А если вам нужно много независимых и разных СОМ-портов в компьютере, что использовать?
В этом случае можно поставить специальную многопортовую плату с несколькими СОМ-портами, которая устанавливается в один из слотов PCI, PCI Express или ISA.
Большой выбор плат доступен в разделе Мультипортовые платы.