Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Работа с COM портом, не пойму где ошибка.   Найти похожие ветки 

 
_silver ©   (2005-08-23 22:35) [0]

При асинхронной работе программа читает не все данные, которые посылает устройство.
Т.е. посылается, например:
xxx
yyy
Программа читает только xxx, а yyy нет. Т.е. такое ощущение, что ClearCommError считает, что переход на новую строку есть конец передаваемых данных. При этом при синхронном режиме читается всё полностью.

Вот код:


procedure TReadThread.Execute;
var
  ComStat : TComStat;
  dwMask, dwError : DWORD;
begin
  FreeOnTerminate := True;

  while not Terminated do
     begin
        if not WaitCommEvent(FComPort.FPort, dwMask, @FOverRead) then
           begin
              if GetLastError = ERROR_IO_PENDING then
                 WaitForSingleObject(FOverRead.hEvent, INFINITE)
              else
                 raise EComPortError.Create("Error waiting port " + FComPort.PortName+ " event");
           end;
        if not Terminated then
           if not ClearCommError(FComPort.FPort, dwError, @ComStat) then
              raise EComPortError.Create("Error clearing port " + FComPort.PortName);

        FRead := ComStat.cbInQue;

        if FRead > 0 then
           begin
              if dwError = 0 then
                 begin
                    FError := dwError;
                    Synchronize(DoOnError);
                 end;
              if not ReadFile(FComPort.FPort, FBuf, FRead, FRead, @FOverRead) then
                 raise EComPortError.Create("Error reading port " + FComPort.PortName);
              Synchronize(DoRead);
           end;
  end; {while}
end;


ps
Устройство посылаеи эхо ответ на комманды посылаемые ему. Т.е. если ему послать xxx оно вернёт
xxx  //эхо ответ
yyy  //это сам ответ устройства.
Так вот, yyy как раз не читается. dwError, при этом, равно 0, но GetLastError возвращает то, что ошибок нет.

Помогите, где я не прав?


 
Defunct ©   (2005-08-24 00:44) [1]

> Помогите, где я не прав?

очевидно устройство не формирует yyy ответ на запрос xxx.
попробуйте послать устройству вместо xxx - zzz.


 
_silver ©   (2005-08-24 09:04) [2]

Defunct ©   (24.08.05 0:44) [1]
очевидно устройство не формирует yyy ответ на запрос xxx.



> При этом при синхронном режиме читается всё полностью.


 
Reindeer Moss Eater ©   (2005-08-24 15:03) [3]

Не понятно почему не проверяешь результат функции ожидания.
Непонятно что делает DoRead.
После ReadFile не проверяется сколько именно байт считано.
И так далее.



Страницы: 1 вся ветка

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
3-1127306103
Feos
2005-09-21 16:35
2005.10.30
Drag&Doc в DbGrid


6-1120917646
yuran
2005-07-09 18:00
2005.10.30
Как определить рабочие группы во всей локальной сети?


14-1128922219
syte_ser78
2005-10-10 09:30
2005.10.30
посоветуйте программу для составления блок-схем, алгоритмов


14-1128711764
Сергей А.
2005-10-07 23:02
2005.10.30
Посоветуйте небольшую почтовую программу


6-1120773405
viktorovich
2005-07-08 01:56
2005.10.30
Логин и пароль из Outlook Express