Главная страница
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.044 c
4-1125305689
ANB
2005-08-29 12:54
2005.10.30
Как переключить раскладку в чужом процессе ?


1-1128670543
danilabagroff
2005-10-07 11:35
2005.10.30
OLE Error 800A03EC


1-1128748195
Gefest80
2005-10-08 09:09
2005.10.30
Реестр!


14-1128883800
Rampart
2005-10-09 22:50
2005.10.30
Помощь нужна


2-1128440038
quadreonik
2005-10-04 19:33
2005.10.30
Отображение данных в DBGrid