Имеется конфигурация - один ПЛК200-01 и десять модулей МВ110-32ДН, подключенные по линии RS-485. Обмен ПЛК с модулями реализован по протоколу Modbus RTU (скорость 115200 бод, формат 8N1) на основе библиотек OwenCommunication (COM_Control, MB_SerialRequest). Программа ПЛК производит запрос только битовой маски входов из двух регистров (32bit) каждого модуля. Функция обмена вынесена в отдельную задачу с временем цикла 1мс. Итоговый период опроса всех модулей составляет ~160мс. Можно попробовать посчитать теоретическое время цикла (без учета вспомогательных бит обмена): скорость линии - 115200 бод = 11520 байт/с, пакет запроса - 8 байт, пакет ответа - 9 байт, задержка ответа модуля - 2мс, время цикла ПЛК 1мс, время между фреймами (по стандарту > 0.143мс) пусть 2мс, получается время цикла опроса = (8 байт + 9 байт) / 11520 байт/с + 0,002 с + 0,001 с + 0,002 с = 0,00648 секунды * 10 модулей = 65 мс, что далеко от реальности.
Почему фактическое время цикла намного больше расчётное и как его уменьшить?