Здравствуйте!
Пытаюсь найти красивое решение для сабжа.
Определяю тип данных:
Код:
TYPE PARSCRIPT :
STRUCT
Nu: INT;
Po: INT;
Md: INT;
No: INT;
Mi: DINT;
Ma: DINT;
Na: STRING(10);
END_STRUCT
END_TYPE
В области переменных пробую создать экземпляр и инициализировать его:
Код:
VAR_GLOBAL CONSTANT
a_psPar: ARRAY [0..1] OF PARSCRIPT :=
(Nu:=101, Po:=2, Md:=0, No:=0, Mi:=0, Ma:=9999, Na:='Text1'),
(102, 2, 0, 0, 0, 9999,'Text2');
END_VAR
Первая строка инициализации массива компилируется нормально. Но у меня в массиве будет до сотни таких структур! Ручки облом натруживать многочисленными Nu:= и так далее.
Пробую выбросить присвоения и перечислить начальные значения просто в том порядке, что в объявлении (строка 2) - не компилирует. РУГАИЦЦА!
Вот и 2 вопроса:
Главный:
1) Можно ли все же инициализировать без явных присвоения (по типу второй строчки)
2) В случает невозможности - запасной вариант. Придется использовать корявые отдельные массивы. Что-то вроде такого:
Код:
VAR_GLOBAL CONSTANT
aiPar: ARRAY [0..3, 0..1] OF INT :=
101, 0, 0, 0,
102, 0, 0, 0;
adiPar: ARRAY [0..1, 0..1] OF DINT :=
0, 99999,
0, 99999;
astPar: ARRAY [0..1] OF STRING(10) :=
'Text1',
'Text2';
NU: INT := 0;
PO: INT := 1;
MD: INT := 2;
NO: INT := 3;
MI: INT := 0;
MA: INT := 1;
END_VAR
И потом при вызове использовать обращения к разным массивам:
Код:
PROGRAM PLC_PRG
VAR
i: INT;
di: DINT;
st1: STRING(10);
END_VAR
i := aiPar[ NU, 0];
di := adiPar[ MI, 1];
st1 := astPar[ 0];
Такой подход мне не нравится еще и потому, что при большом реальном массиве трудно будет без ошибок менять число параметров (размер массива), отслеживать изменения в их начальных значениях и прочее и прочее... Хотелось бы все же иметь дело с массивом структур.
Подскажите, плз, как же изящно инициализировать?
Спасибо!