у вас
Цитата:
Код:
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; ошибка (для начала попробуйте не изменять таймауты), устройство ничего не посылает и т.д...)