Сообщение от
Евгений Кислов
Через ARRAY [..] OF POINTER TO circuit.
Спасибо за подсказку. Так работает.
Код:
PROGRAM PLC_PRG
VAR
iNC :INT; //номер контура
iSD :INT; //номер элемента массива в SlaveData
ptCol :ARRAY [28..54] OF POINTER TO circuit;
ptrCol :ARRAY [28..54] OF POINTER TO circuit_ret;
astCol_5 :ARRAY [28..37] OF circuit;
astCol_8 :ARRAY [49..54] OF circuit;
stSlaveData: slave_data;
END_VAR
VAR RETAIN
astrCol_5 :ARRAY [28..37] OF circuit_ret;
astrCol_8 :ARRAY [49..54] OF circuit_ret;
END_VAR
iSD:=0;
FOR iNC:=28 TO 37 DO
ptCol[iNC]:= ADR(astCol_5[iNC]);
ptrCol[iNC]:= ADR(astrCol_5[iNC]);
PLC_PRG.CONTR_CIRC();
END_FOR
FOR iNC:=49 TO 54 DO
ptCol[iNC]:= ADR(astCol_8[iNC]);
ptrCol[iNC]:= ADR(astrCol_8[iNC]);
PLC_PRG.CONTR_CIRC();
END_FOR
Разыменование теперь, естественно, выглядит иначе.
Код:
rInput:=ptCol[iNC]^.rOutInPercent
Сообщение от
Евгений Кислов
Это не задача. Это выбранное вами решение.
Но, в любом случае, не проще ли в структуру добавить поле с "номером физической установки", и сделать прозрачную нумерацию массивов? (с 0 или 1)
Согласен, когда речь идет о разовом проекте. Когда таких шкафов более 60 и различаются они только количеством и порядковыми номерами устройств, а алгоритмы для каждого одинаковы, есть желание задуматься об удобстве и унификации.