|
|
  |
Как преодолеть ограничение номера COM-порта в XP? |
|
|
|
Jan 25 2008, 10:41
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 9-08-04
Пользователь №: 468

|
Здравствуйте, при изготовлении устройств с использованием 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
|
|
|
|
|
Jan 25 2008, 14:58
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 9-08-04
Пользователь №: 468

|
Цитата(Сергей Борщ @ 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, на котором я также тестировал эту неприятность, также не внесена соотв.поправка.
|
|
|
|
|
Jan 28 2008, 08:40
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 9-08-04
Пользователь №: 468

|
Цитата(ESL @ Jan 25 2008, 19:36)  Я не мудрствуя решал эту проблему проще, в диспетчере устройств присваивал номер СОМ-порта оставшийся от уже отключённого устройства, при присвоении ругается однократно, после - корректно работает. не выход: проблема возникла у двух заказчиков, решил доработать ПО
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|