Я рекомендую стабилизировать опрос с отваливающимися устройствами - подправить карту регистров, установить соответствующие таймауты, если ошибки также будут проявляться, то реализовать программную переинициализацию COM-порта. Подробно об этой процедуре описано в документе СПК.Протокол Modbus, п.4.5., стр.55 (ссылка).
Да, я использую похожее действие для переинициализации - прописал на каждое устройство такую строку:
myBlink(ENABLE:= Term_47.xError, TIMELOW:= T#200MS, TIMEHIGH:= T#1S, OUT=> Term_47.xReset);
Частично удалил неиспользуемые каналы, некоторые перевёл в режим Rising Edge. Ситуация улучшилась. Меньше стало отвалов и одно устройство, которое вообще не работало - появилось в сети.
Второе, что сделал - уменьшил время ожидания отклика до 100мс, а время между фреймами до 1 мс. После этого временные отвалы устройств в основном прекратились. Но, кроме двух устройств.
После этих действий заметил некоторое улучшение отклика, но ещё не совсем то, которое хотелось...
Пришлите архив проекта для анализа на support@owen.ru с пометкой "Для Ильнура". Я проверю проект и дам рекомендации по улучшению обмена.
По мере перевода записи устройств в режим Rising Edge ситуация с отвалами устройств значительно улучшилась, так же улучшилась отзывчивость всей системы. Возник вопрос по использованию этого режима (Rising Edge), если я перевожу флаг триггера записи в TRUE, через какое время мне можно сбросить флаг? Чисто подбором у меня получилось 30ms, но мне кажется это не совсем верное решение т.к. разные устройства, по идее, реагирую по разному... Т.е. нужно как-то контролировать дошла команда или нет и после сбрасывать флаг. У каждого устройства есть перечень переменных через точку (к примеру .byModbusError), возможно среди них есть флаг подтверждения записи в устройство?