[Delphi] WinAPI COM Port

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

  1. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Добрый день всем, собственно пытаюсь работать с COM Port в синхронном режиме. Создаю отдельный поток и кручу работу с ним в потоке, но после определённого времени ( причем очень быстро ) начинается охинея из COM Port читается лишнее, т.е. например отправили команду, нам пришёл
    Code:
    ERROR
    шлём следующую
    Code:
    AT
    должен прийти ответ просто
    Code:
    OK
    а приходит например

    Code:
    ERROR
    
    AT
    OK
    В чем может быть причина, подскажите?
    Читаю, записываю таким образом:
    Code:
    procedure TThreadCalled.Execute;
    var
      hFile : THandle;
      
    
      procedure WriteStr(AStr: String);
      var
        LWrited: Cardinal;
        Buf : AnsiString;
        nToWrite : Cardinal;
      begin
        // Переводим в ANSI
        Buf := AnsiString(AStr + #13);
        // Длина входящих байт
        nToWrite := Length(AStr + #13);
        //пишем в порт
        WriteFile(hFile, Buf[1], nToWrite, LWrited, nil);
      end;
    
      function ReadStr(): String;
      var
        ComStat: TComStat;
        e : Cardinal;
        Buf : AnsiString;
      begin
        // Задержка
        Sleep(10);
        // Получаем кол-во читаемых байт
        ClearCommError(hFile, e, @ComStat);
        // Проверяем кол-во считываемых
        if ComStat.cbInQue <> 0 then
          begin
            // Задаём длину буфера
            SetLength(Buf, ComStat.cbInQue);
            // Читаем из порта
            ReadFile(hFile, Buf[1], ComStat.cbInQue, e, nil);
          end;
        Result := Buf;
      end;
    begin
    ...
    end;
    
    Возможно нужно как то очищать модем от мусора ( его буфер ), типо:
    Code:
    PurgeComm(hFile, PURGE_RXCLEAR);
    я пробовал, но вроде бы не помогло, может быть не правильно делал что-то. В общем прошу помощи.

    P.S. Работа происходит с модемом 3G ZTE MF192 от МТС!
     
    #1 Kandi, 16 Feb 2012
    Last edited: 16 Feb 2012
  2. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Неужели нету ребят которые могут помочь?
    Нужно лишь узнать, проблема в самом модеме, или проблема с чтением данных "синхронно"!?
    Может нужно делать асинхронно и читать именно так и тогда всё норм будет!!!???

    P.S. Как это выяснить ?! :(