К тегам по индексу обратиться нельзя, т.к. у них нет индекса. Вместо этого нужно обращаться к переменной по имени. Для поиска переменной по имени можно воспользоваться глобальной функцией GetVariablebyName.
В Вашем случае можно избавиться от массива Cname, т.к. имена растут последовательно с 111 до 255, а значит можно генерировать их прямо в цикле.
В результате: у нас в проекте должны быть подвески от 111 до 255, каждая имеет по 29 датчиков с именами, например T111_01, T111_02... и т.д.. Также для каждой подвески есть отдельные переменные T111_min, T111_max, T111_avg в которые будем записывать минимум/максимум/среднее по датчикам. Тогда рабочий код должен быть таким:
var
I, J: Integer;
aName, aNumber: string;
aVar: TM_Variable;
aVarMin, aVarMax, aVarAvg: TM_Variable;
aVal: Double;
aCount: Integer;
aMin, aMax, aSum: Double;
begin
{ проход по подвескам от 111 до 255 }
for I := 111 to 255 do
begin
{ формируем приставку к имени текущей подвески, например "T111_" }
aName := CharToStr('T') + IntToStr(I) + CharToStr('_');
{ сброс счетчика переменных }
aCount := 0;
{ проход по 29 датчикам текущей подвески }
for J := 1 to 29 do
begin
{ получаем переменную датчика, по имени, например "T111_01" }
if J < 10 then
aVar := GetVariableByName(aName + '0' + IntToStr(J))
else
aVar := GetVariableByName(aName + IntToStr(J));
{ если переменная с таким именем найдена }
if aVar <> nil then
begin
aVal := aVar.AsFloat; // получаем значение переменной приведённое к типу Double
Inc(aCount); // увеличиваем счетчик переменных
{ далее операции для вычисления мин./макс./среднего }
if aCount = 1 then
begin
aMin := aVal;
aMax := aVal;
aSum := aVal;
end else
begin
if aMin > aVal then aMin := aVal;
if aMax < aVal then aMax := aVal;
aSum := aSum + aVal;
end;
end;
end;
if aCount > 0 then
begin
{ ищем по имени переменные мин., макс. и среднего для текущей подвески }
aVarMin := GetVariableByName(aName + 'min');
aVarMax := GetVariableByName(aName + 'max');
aVarAvg := GetVariableByName(aName + 'avg');
{ записываем результаты вычислений в переменные мин., макс. и среднего }
if aVarMin <> nil then aVarMin.Value := aMin;
if aVarMax <> nil then aVarMax.Value := aMax;
if aVarAvg <> nil then aVarAvg.Value := aSum / aCount;
end;
end;
end.
Обратите внимание, в коде выше имена будут генерироваться "T111_01", "T111_02", а не "T111_1", "T111_2" и т.д. Поэтому убедитесь, что у Вас переменные названы именно "T111_01", "T111_02".