Вовсе нет, я в таком случае могу использовать одномерный массив с расчетом индекса для считывания.
functional_block Recipe
// Объявление входных переменных
VAR_INPUT
InputHumidity : REAL; // Ввод влажности
InputTemperature : REAL; // Ввод температуры
InputTime : INT; // Ввод времени
CurrentStep : INT; // Текущий шаг
CurrentRecipe : INT; // Текущий рецепт
WriteEnable : BOOL; // Переменная для разрешения записи
END_VAR
// Объявление внутрипрограммных переменных с использованием retain
VAR RETAIN
Humidity : ARRAY[1..100] OF REAL;
Temperature : ARRAY[1..100] OF REAL;
Time : ARRAY[1..100] OF INT;
END_VAR
VAR
Index : INT;
END_VAR
// Объявление выходных переменных
VAR_OUTPUT
OutputHumidity : REAL;
OutputTemperature : REAL;
OutputTime : INT;
END_VAR
// Вычисление индекса для одномерного массива
Index := (CurrentRecipe - 1) * 10 + CurrentStep;
// Пример записи данных во внутрипрограммные переменные при разрешении записи
IF WriteEnable THEN
Humidity[Index] := InputHumidity;
Temperature[Index] := InputTemperature;
Time[Index] := InputTime;
END_IF
// Пример чтения данных из внутрипрограммных переменных и записи в выходные переменные
OutputHumidity := Humidity[Index];
OutputTemperature := Temperature[Index];
OutputTime := Time[Index];
end_function_block

