PDA

Просмотр полной версии : Таблица данных и архив



KrAssor
30.01.2019, 14:39
Добрый день, коллеги!
Мне необходимо вывести архивные данные в таблицу данных за указанный период времени. Чтение производится с помощью 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), а не только тех, из которых я делал выборку из архива.
Подскажите, пожалуйста, как в этом случае быть.

KrAssor
30.01.2019, 15:30
С помощью 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;

KrAssor
30.01.2019, 17:05
Разобрался. Так гораздо лучше

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

Koozmidg
05.02.2020, 10:58
Добрый день.
Не понял, а составным массивам структуры ARCH_1 присваиваются какие-либо значения? И вот здесь " ARCH := RESIZE_ARRAY(ARCH_1, Init_Struct, Count_1);" Count_1 - это Count, объявленный выше в VAR INPUT, или уже нет?

KrAssor
05.02.2020, 14:02
Сейчас вроде так выглядит:
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

Koozmidg
10.02.2020, 11:39
Спасибо, будем пробовать)