Jump to content

    
Sign in to follow this  
bvn123

Как преодолеть ограничение номера COM-порта в XP?

Recommended Posts

Здравствуйте,

при изготовлении устройств с использованием 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

Share this post


Link to post
Share on other sites
Здравствуйте,

при изготовлении устройств с использованием USB-UART мостов под каждое устройство с уникальным VID и PID WinXP создает виртуальный COM-порт с уникальным номером.

По какой причине порты выше COM9 не открываются?

Как преодолеть?

У Вас какой-то глюк в системе. В ХР нет никаких проблем с СОМпортами болне 9-го. Любой номер до 255 открывается без проблем.

Share this post


Link to post
Share on other sites
У Вас какой-то глюк в системе.
Глюка в системе нет. Просто имя порта для CreateFile надо указывать правильно. Вот: http://support.microsoft.com/kb/115831

Share this post


Link to post
Share on other sites
Глюка в системе нет. Просто имя порта для 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, на котором я также тестировал эту неприятность, также не внесена соотв.поправка.

Share this post


Link to post
Share on other sites
При 'большем кол-ве слэшей (если копировать из статьи по ссылке \\\\.\\COM10) не работало
Видимо, дельфи и С по-разному толкуют символ '\' в текстовых строках. В С он используется для задания спецсимволов, поэтому чтобы он попал в скомпилированный код его надо в исходнике написать дважды.

Share this post


Link to post
Share on other sites

"nen тему надо в фак какой нибудь. Периодически всплывает. Я тоже знаю про эту особенность, но постоянно забываю медод исправления, а по-быстрому найти не получается.

Share this post


Link to post
Share on other sites

Я не мудрствуя решал эту проблему проще, в диспетчере устройств присваивал номер СОМ-порта оставшийся от уже отключённого устройства, при присвоении ругается однократно, после - корректно работает.

Share this post


Link to post
Share on other sites
Я не мудрствуя решал эту проблему проще, в диспетчере устройств присваивал номер СОМ-порта оставшийся от уже отключённого устройства, при присвоении ругается однократно, после - корректно работает.

не выход: проблема возникла у двух заказчиков, решил доработать ПО

Share this post


Link to post
Share on other sites

Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как открывать порт с таким большим номером, подскажите.

Share this post


Link to post
Share on other sites

Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как же открывать порт с таким большим номером?

Share this post


Link to post
Share on other sites
Пишу обмен по СОМ порту через CreateFile. Правда порт виртуальный, на самом деле это драйвер FT232, но поначалу это проблем не составляло. Службы винды работают с ним точно также, как с настоящим. Передаю в качестве параметра "COM3", например и все ОК. Проблема появилась, когда стал пробовать программу на компе где мое устройство определяется как СОМ12. Вот тут CreateFile его категорически не видит. Как же открывать порт с таким большим номером?

 

Открываете файл с именем "\\\\.\\COM12" (это запись на языке С, где обратные слеши в записи приходится удваивать). Если у вас другой язык програмирования, то истинное имя файла выглядит так

\\.\COM12

Это способ универсальный - годится и для COM1-COM9.

Share this post


Link to post
Share on other sites

Помогите решить проблему.

Работаю с КОМом через стандартные службы винды CreateFile. Порт виртуальный, его делает драйвер FT-232, поэтому номер порта получится может какой угодно. На одном компъютере устройсво распозналось как COM7, работает ОК. Открывается, пишется, читается. Но на другом он распознался как COM12. И тут он не может даже открыться через CreateFile. Подозреваю, что дело в большом номере - 12. Потому что остальные порты на этом компе через туже функцию открываются. Посоветуйте как же открывать порт с таким большим номером?

Share this post


Link to post
Share on other sites

Сдаётся мне, что когда тему подклеивают к предыдущей, то в исходном форуме ничего не остаётся... Вот и вопрошает бедняга уже третий раз...

Кстати, если я правильно запомнил, спрашивал он в форуме "Помощь начинающему", в подфоруме "Программирование". Имхо, этому топику там более подходящее место.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this