PDA

Просмотр полной версии : MasterSCADA 4D, Resize_array()



KrAssor
29.01.2019, 16:21
Добрый день, коллеги!
Подскажите, как использовать функцию RESIZE_ARRAY();. Там три входных параметра и не очень ясно, что туда нужно передавать.

SCADAMaster4D
30.01.2019, 14:11
IN1 - входной массив
IN2 - значения для новых элементов
IN3 - новое количество элементов
Q - получившийся измененный массив

KrAssor
30.01.2019, 15:28
IN1 - входной массив
IN2 - значения для новых элементов
IN3 - новое количество элементов
Q - получившийся измененный массив

Спасибо за ответ! Но появился новый вопрос: У меня объявлен безразмерный массив структур для передачи данных в таблицу данных. С помощью 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:00
Разобрался. Так гораздо лучше :)

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