Вовсе нет, я в таком случае могу использовать одномерный массив с расчетом индекса для считывания.

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