[Delphi] Закрытый COM порт

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by bertys, 23 Feb 2012.

  1. bertys

    bertys New Member

    Joined:
    25 Jan 2012
    Messages:
    162
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, использую компонент "ComPort" для работы с СОМ портами, вроде все норм.

    Проблема такова: по нажатию на кнопку ищатся порты на которых чтото есть, и пишется в них АТ команда, вот сам код:

    PHP:
    procedure TFormComPort.Button6Click(SenderTObject);
    const 
    BufSize $FFFF;
    var
     
    Buf_DevList: Array[0..BufSizeof Char;
     
    DevNamePChar;
     
    modelport:string;
    begin
    Win32check
    (QueryDosDevice(nilBuf_DevListBufSize) <> 0);
    DevName := @Buf_DevList;
     while 
    DevName^ <> #00 do
     
    begin
       
    if (StrLIComp('COM'DevName3) = 0then
       begin
       
    //ComPort.WriteString('AT+CGMM' + #13);
       
    ComPort.DeviceName:=DevName;
       
    ComPort.WriteString('AT+CGMM' #13);
       
    model:= Memo.Text;
       
    Memo.Clear;
       
    ValueListEditor1.strings.Add(DevName+'='+model);
       
    end;
       
    DevName := StrEnd(DevName)+1;
     
    end;

    если не посылать АТ команды, то все, норм, но мне нужно послыть команду чтоб узнать модель и назвние модема, но проблема в том что на некоторые порты АТ команды не шлются, и выбивает ошиька, подскажите как такое реализовать, может можно както ошибку отлавить, или пропустить ее, чтоб процедура дальше работала.

    Зарание спасибо
     
  2. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Конечно можно, например ищите порты все которые есть, затем создаёте поток в котором отсылаете на все порты команду AT, если она вернула OK значит данный порт готов работать, если ERROR или пустой ответ значит нет, затем помечаете в своём интерфейсе "активные порты" каким-нибудь зелёненьким значком или словом и наглядно уже знаете с каким портом можно работать! Так же можно получить имя девайся через Реестр, каким образом подсказать точно не могу, но вы откройте реестр и поищите название своего модема - там будут каталоги в которых есть DeviceName: .....
     
  3. bertys

    bertys New Member

    Joined:
    25 Jan 2012
    Messages:
    162
    Likes Received:
    0
    Reputations:
    0
    просто я работаю через дополнительный компонент, и он выдает ошибку если порт закрыт.
     
  4. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Так проверьте его отдельно от компонента, не судьба чтоли?! :)
    Руками так сказать с помощью WinAPI например, либо допилите компонент свой - наверное еще проще будет! Можете вообще в компоненте удалить ошибку и обработать её как Вам угодно.
    P.S. Если конечно исходники компонента есть, иначе первый вариант! ;)