Э-э, я дико извеняюсь, но объясните, пожалуйста, в чем смысл такой конструкции
Код:

FUNCTION_BLOCK ValveController
VAR_INPUT
sNameToSet : STRING;
END_VAR
VAR_OUTPUT
sName : STRING;
END_VAR
VAR
END_VAR

// Тело ФБ:
IF (sName = '') AND (sNameToSet <> '') THEN
sName := sNameToSet;
END_IF

Там, где Вам необходимо объявите массив ФБ (для примера объявлю в глобальных переменных):
Код:

VAR_GLOBAL CONSTANT
g_c_uiValvesCount : UINT := 30;
END_VAR
VAR_GLOBAL
g_astValvesList : ARRAY [1..g_c_uiValvesCount] OF ValveController;
i : UINT;
END_VAR
Не проще ли тупо написать g_astValvesList : ARRAY [1..g_c_uiValvesCount] OF STRING