Перейти к содержанию
    

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

\\.\COM12

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...