Допустим в буфере появился "мусор" ( каким образом, даже думать не хочу ). Читаем 100 байт, первые 10 "мусор", а дальше идет верный ответ от устройства. Т.е. надо дочитать ответ. Читаем недостающие байты. И тут облом. Теряются байты.
Вот зачем
в место единицы видимо Size должны были написать
Блин, уже жалею, что ПЛК63 на объекте, и раньше, чем через пару недель туда не доберусь. Очень интересно было бы проверить теорию "шестого байта"...
А нет ограничений на то, что в одном цикле должна быть только одна команда SysComRead? Или это требование относилось к тому, что в одном цикле или SysComRead, или SysComWrite... Или я что-то путаю, и такого совсем нет...
Жалко, нет функции, которая сказала бы количество байт, доступных для чтения... Хотя всё равно не спасло бы - где гарантия, что между ней и чтением не изменится кол-во данных...
Разве SysComRead не возвращает количество доступных байтЖалко, нет функции, которая сказала бы количество байт, доступных для чтения... Хотя всё равно не спасло бы - где гарантия, что между ней и чтением не изменится кол-во данных...
В одном цикле SysComWrite и SysComRead теоретически можно. Но если посылается запрос устройству, который требует ответа, то ведь устройство должно принять запрос, обработать, послать ответ. Слишком длинный рабочий цикл получиться.
Я читать ответ частями и в одном цикле, и разносить по циклам. Результат тотже
Может кто-нибудь посмотрел примеры?
Обсуждение свелось к предложениям - "нафига ... ", " зачем ..."
Еще раз. Эти примеры не имеют ничего общего с моими проектами. Я их специально написал, чтобы показать проблему.
А нужно это затем, что если есть такой глюк, то его надо учитывать в алгоритме программ, чтобы потом "блох" не вылавливать.
смысл от этой строки, если до этого каждый цикл, переменной size будет присваиваться 0 либо 1. Друго дело если Вы накапливаете size, то и вычитать тогда нужно не 1 а size-прочитанных байт.size := size + DWORD_TO_WORD(SysComRead(ComHandle, ADR(rBuf[ 1 ]), SIZEOF(rBuf) - 1, 0));
Хотели услышать ответ, честно говорю не смотрел Ваш проект, вернусь домой попытаюсь открыть