Сообщение от
Vitorgan
Отпишусь.
После полного вникания в работу modbus.lib и данного диспетчера, удалось опрашивать все нужные мне модули, их 8 шт. 8а, 8ас, 8дф, 16р - 2 шт.
Далее в течении 1 часа, были настроены циклы, таймауты, pollingStatistic.Middle был максимально приближен к PollingTime.
В данный момент полностью удовлетворены работой диспетчера, пока полностью выполняет возложенные на него функции, надеюсь все так и останется.
Спорягину Кирилл огромное спасибо за своевременную помощь, и вообще за сам Диспетчер)
За 3 часа работы ни одной ошибки.
Рад помочь...
Vitrogan, еще хотел обратить ваше внимание на вот этот пост. В части 2 особенно.
Важно при использовании модулей вывода.
Вы переделывали модуль МУ110-32Р на МУ110-16Р. Убедитесь, что вы заново формируете буфер в случае ошибки при первичном опросе и MaxAttempts>1. В противном случае изредка (когда проходит ошибка) на модуле вывода вы можете выставлять некий произвольный набор выходов, чего явно не ждете.
В модуле МУ110-32Р повторное формирование буфера реализовано с помощью возврата на шаг 1 при ошибке (см. код ниже).
Код:
IF tmpWriteError = 0 THEN
Mdl.WriteStep := CompleteWriteStep;
ELSE
fcModuleAddAttempt(MdlBase := Mdl.Base);
IF Mdl.Base.CurrentAttempt > Mdl.Base.MaxAttempts THEN
Mdl.WriteStep := CompleteWriteStep;
ELSE
Mdl.WriteStep := 1; (* необходимо заново сформировать буфер *)
END_IF;
END_IF;
И два слова в защиту штатного конфигуратора.
У меня есть проект, где работает штатный конфигуратор и опрашивает 12 модулей. Опрос проходит весьма шустро.
В случае использования штатного конфигуратора при опросе модулей с большим объемом данных обмена (МВ110-8А, например) желательно использовать прием со string переменными (см. тут).
Хотя, конечно, когда разберешься с modbus.lib, уже проще работать со своим кодом.