Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как преодолеть ограничение номера COM-порта в XP?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
bvn123
Здравствуйте,
при изготовлении устройств с использованием USB-UART мостов под каждое устройство с уникальным VID и PID WinXP создает виртуальный COM-порт с уникальным номером.
По какой причине порты выше COM9 не открываются?
Как преодолеть?

Проверку выполнял как с использованием функций Windows API, так и компонента VarianAsync32, у которого, согласно документации, есть собственное ограничение (до COM16) .

В реестре при подключении очередных устр-в прописываются, например, COM10 или COM11, в диспетчере устройств порты COM10 и COM11 также автоматически появляются

Моя программа в Дельфи обнаруживает и распознает COM10, 11, но открытие порта с номером >9 вызывает ошибку:
PortNumber:=10;
hCOM:=CreateFile(
PChar('COM'+inttostr(PortNumber)),
GENERIC_READ + GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
// если PortNumber меньше 10-ти - работает, если >=10, hCOM=INVALID_HANDLE_VALUE
Сергей Борщ
sprintf(comPortName, "\\\\.\\COM%d", comPortNumber);
или в вашем случае PChar('\\\\.\\COM'+inttostr(PortNumber)),
vvs157
Цитата(bvn123 @ Jan 25 2008, 13:41) *
Здравствуйте,
при изготовлении устройств с использованием USB-UART мостов под каждое устройство с уникальным VID и PID WinXP создает виртуальный COM-порт с уникальным номером.
По какой причине порты выше COM9 не открываются?
Как преодолеть?
У Вас какой-то глюк в системе. В ХР нет никаких проблем с СОМпортами болне 9-го. Любой номер до 255 открывается без проблем.
Сергей Борщ
Цитата(vvs157 @ Jan 25 2008, 13:50) *
У Вас какой-то глюк в системе.
Глюка в системе нет. Просто имя порта для CreateFile надо указывать правильно. Вот: http://support.microsoft.com/kb/115831
bvn123
Цитата(Сергей Борщ @ Jan 25 2008, 18:16) *
Глюка в системе нет. Просто имя порта для CreateFile надо указывать правильно. Вот: http://support.microsoft.com/kb/115831


Спасибо, Сергей, ссылка помогла, заработало в таком виде:

hCOM:=CreateFile(
PChar('\\.\COM'+inttostr(PortNumber)),
GENERIC_READ + GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);

При 'большем кол-ве слэшей (если копировать из статьи по ссылке \\\\.\\COM10) не работало

Очевидно и в компоненте VarianAsync, на котором я также тестировал эту неприятность, также не внесена соотв.поправка.
Сергей Борщ
Цитата(bvn123 @ Jan 25 2008, 16:58) *
При 'большем кол-ве слэшей (если копировать из статьи по ссылке \\\\.\\COM10) не работало
Видимо, дельфи и С по-разному толкуют символ '\' в текстовых строках. В С он используется для задания спецсимволов, поэтому чтобы он попал в скомпилированный код его надо в исходнике написать дважды.
jorikdima
"nen тему надо в фак какой нибудь. Периодически всплывает. Я тоже знаю про эту особенность, но постоянно забываю медод исправления, а по-быстрому найти не получается.
ESL
Я не мудрствуя решал эту проблему проще, в диспетчере устройств присваивал номер СОМ-порта оставшийся от уже отключённого устройства, при присвоении ругается однократно, после - корректно работает.
bvn123
Цитата(ESL @ Jan 25 2008, 19:36) *
Я не мудрствуя решал эту проблему проще, в диспетчере устройств присваивал номер СОМ-порта оставшийся от уже отключённого устройства, при присвоении ругается однократно, после - корректно работает.

не выход: проблема возникла у двух заказчиков, решил доработать ПО
paskal
Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как открывать порт с таким большим номером, подскажите.
AHTOXA
"\\\\.\\COM12"
Ну, или если паскаль, то '\\.\COM12' wink.gif
paskal
Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как же открывать порт с таким большим номером?
Xenia
Цитата(paskal @ Aug 30 2009, 22:23) *
Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как же открывать порт с таким большим номером?


Открываете файл с именем "\\\\.\\COM12" (это запись на языке С, где обратные слеши в записи приходится удваивать). Если у вас другой язык програмирования, то истинное имя файла выглядит так
\\.\COM12
Это способ универсальный - годится и для COM1-COM9.
paskal
Помогите решить проблему.
Работаю с КОМом через стандартные службы винды CreateFile. Порт виртуальный, его делает драйвер FT-232, поэтому номер порта получится может какой угодно. На одном компъютере устройсво распозналось как COM7, работает ОК. Открывается, пишется, читается. Но на другом он распознался как COM12. И тут он не может даже открыться через CreateFile. Подозреваю, что дело в большом номере - 12. Потому что остальные порты на этом компе через туже функцию открываются. Посоветуйте как же открывать порт с таким большим номером?
AHTOXA
Сдаётся мне, что когда тему подклеивают к предыдущей, то в исходном форуме ничего не остаётся... Вот и вопрошает бедняга уже третий раз...
Кстати, если я правильно запомнил, спрашивал он в форуме "Помощь начинающему", в подфоруме "Программирование". Имхо, этому топику там более подходящее место.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.