-
Вложений: 1
Таблица данных и архив
Добрый день, коллеги!
Мне необходимо вывести архивные данные в таблицу данных за указанный период времени. Чтение производится с помощью READ_ARCHIVE_DATA, который возвращает безразмерные массивы значений и меток времени. Однако если я создаю безразмерный массив структур (который является источником данных для таблицы данных), то у меня не получается заполнить его значениями из массивов значений и меток времени:
IF Completed_1 THEN
FOR i := 1 to Count_1 DO
ARCH[i].Values := Values_1[i];
ARCH[i].Times:=Times_1[i];
END_FOR;
END_IF;
А если создать массив структур размера UINT, то в таблице данных будут присутствовать все его элементы (65535), а не только тех, из которых я делал выборку из архива.
Подскажите, пожалуйста, как в этом случае быть.
-
Вложений: 1
С помощью Resize_array() теперь получилось заполнить его значениями выходных массивов READ_ARCHIVE_DATA() и вывести их в таблицу. Но Resize_array() срабатывает только первый раз. После этого изменение размера больше не происходит, хотя счетчик увеличивается. Код (Completed, Count, Values[], Times [] передаются из READ_ARCHIVE_DATA() ):
IF Completed THEN
ARCH := RESIZE_ARRAY(ARCH, Init_Struct, Count);
FOR i := 1 to Count DO
ARCH[i].Values := Values[i];
ARCH[i].Times:=Times[i];
END_FOR;
END_IF;
-
Разобрался. Так гораздо лучше
PROGRAM Программа_массив_структур_ID_58520
VAR_INPUT
Completed: BOOL := False;
Count: UINT := 0;
Values: ARRAY[*] OF LREAL;
Times: ARRAY[*] OF DATE_AND_TIME;
END_VAR
VAR_IN_OUT
ARCH: ARRAY[*] OF Структура_Values_Times;
END_VAR
VAR_OUTPUT
EnO: BOOL := True;
END_VAR
VAR
i: UINT := 0;
Init_Struct: Локальная.Структура_Values_Times := (Values := 0, Times := DT#0001-01-01-00:00);
ARCH_1: ARRAY[*] OF Структура_Values_Times;
END_VAR
IF Completed THEN
ARCH := RESIZE_ARRAY(ARCH_1, Init_Struct, Count_1);
FOR i := 1 to Count DO
ARCH[i].Values := Values[i];
ARCH[i].Times:=Times[i];
END_FOR;
END_IF;
END_PROGRAM
-
Добрый день.
Не понял, а составным массивам структуры ARCH_1 присваиваются какие-либо значения? И вот здесь " ARCH := RESIZE_ARRAY(ARCH_1, Init_Struct, Count_1);" Count_1 - это Count, объявленный выше в VAR INPUT, или уже нет?
-
Сейчас вроде так выглядит:
PROGRAM Программа_выбор_элемента
VAR_INPUT
Выбор: STRING := 'Т_уставки';
Item: REF_TO := 0;
END_VAR
VAR_IN_OUT
ARCH: My_Lib.Массив_структур_Values_Times;
END_VAR
VAR_OUTPUT
EnO: BOOL := True;
LinkPar: STRING;
END_VAR
VAR
READ_ARCHIVE_DATA_1: BaseObjects.READ_ARCHIVE_DATA;
i: UINT := 0;
Init_Struct: Локальная.Структура_Values_Times := (Values := 0, Times := DT#0001-01-01-00:00);
ARCH_1: My_Lib.Массив_структур_Values_Times;
END_VAR
IF Выбор = 'Y' THEN LinkPar :='Объекты.Объект 1.Y'; Item := 58141; END_IF;
IF Выбор = 'Y1' THEN LinkPar :='Объекты.Объект 1.Y1'; Item := 58263; END_IF;
READ_ARCHIVE_DATA_1(Item := Item);
IF READ_ARCHIVE_DATA_1.Completed THEN
ARCH := RESIZE_ARRAY(ARCH_1, Init_Struct, READ_ARCHIVE_DATA_1.Count);
FOR i := 1 to READ_ARCHIVE_DATA_1.Count DO
ARCH[i].Values := READ_ARCHIVE_DATA_1.Values[i];
ARCH[i].Times := READ_ARCHIVE_DATA_1.Times[i];
END_FOR;
END_IF;
END_PROGRAM
-
Спасибо, будем пробовать)