Выложите пожалуйста весь код и объявления, которые относятся к массиву и его обходу.
Явно же где-то идёт выход за границы массива или данных.
Нет, никаких "нулевых" элементов массива не создаётся. Всё работает даже для [10..20] - пофиг, память будет распределена верно.
Также хотелось спросить: то, что fbMeasureMode вызывается только при совпадении условия (IF...) - это так задумано специально или это тоже ошибка? ОБЫЧНО FBШки вызываются постоянно, но с разными параметрами.
Что ещё можно сделать:
а) Проверить, не используются ли в проекте жёстко заданные адреса (как любили делать в CodeSys 2.3) через %xxx-что-то-там (использовал один раз, намучился, не стал даже учить)
б) Почитать справку и найти в ней функцию проверки границ массива, которую можно переопределить и через неё отвлеживать выход за границы массивов. Я про это слышал, но ещё не пользовался, поэтому даю информацию на уровне "что-то такое есть". Искать в справке "CheckBounds".
Вроде как в FAQ была возможность записывать события в системный журнал от имени визуализации (на английском). Я пользуюсь таким кодом:
Код:
Sys_DelayedLogText := 'PLC Started with FIRST (DT = 0) run - MinMax/Avg Reset';
Sys_DelayedLogLevel := LogClass.LOG_WARNING;
VisuElems.Visu_Output(Sys_DelayedLogText, Sys_DelayedLogLevel);
Эту фишку можно использовать для того, чтобы записать в лог выход за границы массива в том самом POU CheckBounds.
в) Во всяких циклах обхода массивов можно можно использовать функции типа LOWER_BOUND/UPPER_BOUND, которые подставят размерность массивов и не дадут загнать цикл за границы.
Но лучше дать нам код сюда.