Здравствуйте!
Пытаюсь найти красивое решение для сабжа.
Определяю тип данных:
Код:TYPE PARSCRIPT : STRUCT Nu: INT; Po: INT; Md: INT; No: INT; Mi: DINT; Ma: DINT; Na: STRING(10); END_STRUCT END_TYPE
В области переменных пробую создать экземпляр и инициализировать его:
Первая строка инициализации массива компилируется нормально. Но у меня в массиве будет до сотни таких структур! Ручки облом натруживать многочисленными Nu:= и так далее.Код: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
Пробую выбросить присвоения и перечислить начальные значения просто в том порядке, что в объявлении (строка 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];
Такой подход мне не нравится еще и потому, что при большом реальном массиве трудно будет без ошибок менять число параметров (размер массива), отслеживать изменения в их начальных значениях и прочее и прочее... Хотелось бы все же иметь дело с массивом структур.
Подскажите, плз, как же изящно инициализировать?
Спасибо!


Ответить с цитированием

