Добрый день всем, собственно пытаюсь работать с 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 от МТС!
Неужели нету ребят которые могут помочь? Нужно лишь узнать, проблема в самом модеме, или проблема с чтением данных "синхронно"!? Может нужно делать асинхронно и читать именно так и тогда всё норм будет!!!??? P.S. Как это выяснить ?!