Я спросил именно про местоположение экземпляров ФБ.
Если я объявлю экземпляр в программе, например, так:
PROGRAM PLC_PRG
VAR
PumpStation2 : PumpStation;
END_VAR

Или в глобальных переменных, т.е. так:
VAR_GLOBAL
PumpStation1 : PumpStation;
END_VAR

То внутри кода программы могу вызвать их исполнительную часть:
PumpStation1();
PumpStation2();
Обращаться к их переменным, например, так:
if PumpStation1.Pump1.Mode = 2 then ...

Одним словом не вижу разницы между размещением экзепляра в глобальных данных или среди переменных программы.

Вообще, если сравнивать со Step7, то программа - это организационный блок Step7. Вот только в организационном блоке нельзя размещать
статические, т.е. сохраняющиеся от цикла к циклу переменные, можно только локальные (в Step7 этот термин имеет другое значение, чем в CoDeSys), т.е. временные переменные.
В Step7 все блоки располагаются в глобальной памяти (назовем это так). И экземплярные блоки ФБ и блоки данных, т.е. не привязанных к ФБ.

Вопрос про инициализацию закрыт.
Вопрос о размещении экземпляров блока данных открыт.