Цитата Сообщение от Ovtia Посмотреть сообщение
Объяснить нормально ли такое поведение, как избежать этого, какие практические приемы позволяют избежать такого поведения. Пока я вижу, что ответ сводится к выставлению таймингов с запасом - это очевидный вариант, но неужели никто не копал глубже? Я ожидаю, что при отправке ФБ перезапишет свой буфер ввода-выводы на основе моих данных на своих входах и отправит его в порт, я не ожидаю, что ФБ возьмет кусок (по величине равный корректной команде) запоздалого ответа, рассчитает для него чек сумму и отправит в порт.
А чего вы ожидаете от асинхронного обмена в полудуплексном режиме?
Алгоритм простой:
Шаг 1. Открыл порт
Шаг 2. Послал команду запрос и ждешь ответа или конца времени разрешенной работы, если пришел ответ Шаг 3. Если не пришел и прошло время Шаг 4.
Шаг 3. Обработка вашего ответа
Шаг 4. Опрос нового устройства шаги 2 и 3 повторяем для нового (создаем шаги новые) или запуск таймера задержки опросов и шаг 2.

Цикл выполнения программы насколько меньше 5мс?