Привет.
Помогите решить такую проблему:
Мне нужно получить посылку длинной 39 байт. Посылка должная прийти асинхронно. Т.е. чёрт знает когда.
Мне приходится постоянно циклически слушать порт:
Код:
CASE bStep OF
00: ...
01: // Принимаем пакет
myComRead(xExecute := TRUE, hcom := hCom, pBuffer := ADR(arrReceive), szBuffer := 255, udiTimeOut := 0);
IF myComRead.xDone THEN
bStep : = 2;
END_IF
02: // Проверяем длину принятого пакета
IF myComRead.szSize = 0 THEN // Нулевая длина: уходим в начало
myComRead(xExecute := FALSE);
bStep := 1;
ELSE
bStep := 4;
END_IF
04: ...
END_CASE
Пакет принимается, но иногда поломанный. Я записывал длину каждого принятого пакета в массив и увидел вот что:
arrBufferLen[] = 0, 0, 29, 10, 0, 0, 0, 0, 0, 0, 0
Т.е. принимаемые 39 байт разбились на отдельные пакеты длиной 29 и 10 байт.
Очевидно, что это происходит из-за рассинхронизации процессов.
Как этого избежать? При этом длина входного пакета всегда разная.