Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Найти нужный COM Port


Автор: кмс 7.9.2014, 19:12
Здравствуйте.
Есть устройство собранное на FT232RL. 
Подскажите как сделать что бы сразу софт открывал нужный порт к которому подключено устройство.
Перебирать все доступные порты и ждать пока устройство правильно ответит это долго и чем больше устройств подключено тем дольше.

Если для этого нужно переписать еепром ft232 или изменить VID-PID не проблема, изменю. Главное что бы точно определяло на каком порту сидит устройство.

Автор: kami 7.9.2014, 19:16
Цитата(кмс @  7.9.2014,  19:12 Найти цитируемый пост)
Перебирать все доступные порты и ждать пока устройство правильно ответит

Это, имхо, единственное правильное решение. COM-порт - это не Plug&Play.
Либо задавать в настройках своего приложения, либо перебирать. Можно гибридный метод - при первом запуске перебирать, а потом запомнить, на каком порту было найдено  устройство.

Автор: кмс 7.9.2014, 19:21
Цитата(kami @  7.9.2014,  19:16 Найти цитируемый пост)
Можно гибридный метод - при первом запуске перебирать, а потом запомнить, на каком порту было найдено  устройство.

Наверное так и сделаю.

Автор: кмс 6.10.2014, 09:17
Сам отвечу на свой вопрос smile
Подключаем модули FTDIDll.pas и FTDITypes.pas. Это доделано/переделанный модуль от ftdi.
Записываем в FT232RL - Product Description что нужно, например - My Device, по этому названию и будем искать нужный порт.
Так же можно и по серийному номеру искать.
Ну а дальше просто
Код

var
  ftStatus: FT_Result;
  ftHandle: FT_Handle;
  lComPortNumber: LongInt;
..........

  ftStatus := FT_OpenEx(PAnsiChar('My Device'), FT_OPEN_BY_DESCRIPTION,
    @ftHandle);
  If ftStatus = FT_OK then 
    StatusBar1.Panels[0].Text := 'Порт Открыт'
  else
  begin
    StatusBar1.Panels[0].Text := 'Ошибка открытия порта';
    Exit;
  end;


  ftStatus := FT_GetComPortNumber(ftHandle, @lComPortNumber);
  If ftStatus = FT_OK then // Se OK.
    StatusBar1.Panels[0].Text := 'Порт COM' + IntToStr(lComPortNumber)
  else
  begin
   StatusBar1.Panels[0].Text := 'Номер порта не определен';
   Exit;
  end;

  FT_Close(ftHandle);



PS: от тут есть примеры как работать с модулями.
http://www.rogercom.com/CursoOnlineUSB/ModuloUnicoAula019.htm 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)