Показать сообщение отдельно
  #2  
Старый 24.03.2012, 20:55
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

у вас
Цитата:
Код:
nToRead:=StrToInt(ByteForRead.Text); //считываем число байт для чтения
  ReadFile(Comport,RCBuf^,nToRead,nRead,nil);  //считываем данные
  ByteRead.Caption:=IntToStr(nRead);      //выводим на форму число прочитанных байт
  Buf.Caption:=RCBuf;
откуда в ByteForRead действительное значение количества байт в порту в данное время?
лучше определять количество "готовых к чтению" из порта байт так
Код:
var
  ComStat:TComStat; // состояние порта
  Errs:Dword; // значение ошибки

  RCBuf:PChar;        //Буфер данных для приема
  nToRead:Cardinal;   //Число байт для чтения
  nRead:Cardinal;     //Число прочитанных байт
begin
    ClearCommError(FHandlePort,Errs,@ComStat); // получаем состояние порта
    nToRead:=ComStat.cbInQue; // получаем число байт для чтения
    if nToRead>0 then
    begin     
      ReadFile(FHandlePort,RCBuf^[1],nToRead,nRead,nil);

      ByteRead.Caption:=IntToStr(nRead);      //выводим на форму число прочитанных байт
      Buf.Caption:=RCBuf;
    end;
end;
соответсвтенно, если ситема говорит, что в порту нуль байт, то это действительно так, значит у вас ошибки при подключении (не тот порт, не те настройки порта, в структуре CommTimeouts:TCommTimeouts; ошибка (для начала попробуйте не изменять таймауты), устройство ничего не посылает и т.д...)
Ответить с цитированием