1. По поводу циклов нет никакой путаницы (по крайней мере у меня). То что для обработки любого запроса тратится минимум 3 цикла (если быть точным - 3 вызова функции, но так как я вызываю функцию 1 раз за цикл, то в моей реализации это одно и то же), равносильно тому, что время на обработку любого запроса будет >= 2*MinCycleLenght.
А далее все зависит от величины MinCycleLength. Если она не велика, то мое замечание теряет смысл. Если значительна, то это необходимо иметь ввиду.

Величину проекта следует измерять, видимо, по количеству функций, выполняемых ПЛК и по кол-ву оборудования, находящегося под управлением ПЛК.
Косвенной характеристикой может служить количество модулей ввода/вывода, подключенных к ПЛК. В том проекте, в котором величина цикла у меня 15 мс, на двух сетях RS-485 сидят 19 абонентов: 3 модуля МУ110-32Р, 2 модуля МВ110-32ДН, 2 модуля МВ110-8А, 6 ЧП фирмы АВВ, 6 индикаторов.
Если у Вас есть проекты, в которых со схожим количеством абонентов время цикла 2-3 мс (или меньше!), то мне, действительно, интересно узнать как Вы организуете свои программы. Если возможно, то с удовольствием, посмотрю Ваш код (ksporyagin@mail.ru).
Отмечу также, что у меня таких проекта 2 (полностью идентичных). Один на старой модификации ПЛК110, другой на ПЛК110 М02. Время цикла выполнения первого я уже неоднократно указывал, время цикла второго 1,3 мс.

2. Что касается замечания по поводу буфера.
Оно исходит из личного опыта. Я столкнулся с собственной ошибкой при использовании.
Заключалась ошибка в следующем. Работу с ФБ MB_WR_REGS я вел следующим образом. На 1-м шаге формировал буфер, переходил на следующий шаг, где вызывал данный блок. Если блок завершался с ошибкой, то я, думая, что буфер никто не трогал (ведь я его не трогал!), оставался на 2-м шаге, где повторно вызывал блок MB_WR_REGS, передавая в него все тот же буфер. Но оказывается, что буфер уже изменен. Что в моем случае приводило к ошибкам в работе оборудования. Правильно (для моей организации программы) вернуться на 1-й шаг и заново сформировать буфер.
Данное замечание в общем случае будет звучать так, как я его сформулировал выше:
"При использовании блока MB_WR_REGS (запись регистров хранения), в том случае, если блок вернул ошибку, то перед повторным вызовом данного блока необходимо заново формировать буфер посылки. В противном случае вы пошлете не то, что ожидаете, так как MB_WR_REG использует переданный ему буфер для формирования полной посылки Modbus."

Почему я выделяю именно ФБ MB_WR_REGS. Потому что, например, для блока MB_WR_SNG_REG, мы вообще не передаем буфер. Для ФБ чтения мы буфер не формируем перед отправкой, а только вычитываем из буфера после завершения работы ФБ.