
Сообщение от
lazy
Чтение может происходить в нескольких циклах ПЛК. Поэтому ReciveBuffer+totalBytesResive верно. Но во фразе IF ByteResive > 0 THEN - ошибка (чтение кончаецо на первом цикле хотя вполне может и хотеть продолжицо. видимо отсюда потеря части пакета. ). Должно быть как то так:
IF ByteResive = Длинна ожидаемого пакета (вы же мастер и длину можно рассчитать)
OR ReadTimeout.Q THEN
чтение закончили
Ошибка таймаута = ReadTimeout.Q;
END_IF
А так же:
ByteResive := ByteResive + SysComRead(Port, Адрес буфера + ByteResive , Длинна ожидаемого пакета - ByteResive, 0 );
Соотв. перед началом чтения КАЖДОГО НОВОГО ПАКЕТА ByteResive должно быть рано нулю.
Остальной код не смотрел. )