Привет.
Помогите решить такую проблему:
Мне нужно получить посылку длинной 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 байт.
Очевидно, что это происходит из-за рассинхронизации процессов.

Как этого избежать? При этом длина входного пакета всегда разная.