Ваши комментарии

Почему для Источник Истории Каналов (THistorySet) я могу выводить значения поканально,

а для Источник Каналов (TChannelSet) не могу. 

Чем они отличаются принципиально?

У меня шаблон отчета находится здесь:

d:\slProject\Reports\Templates\

Указал путь:  OpenReport('Templates\Energy1');

Скриншот ошибки во вложении.

Возникает ошибка при нажатии кнопки:

23.08.2021 17:40:19.380 Invalid floating point operation - [Report_Energy_Create]

Что это означает? Тег бинарный.

Скрипт, формирующий отчет:

var
lStart: TDateTime;
lEnd: TDateTime;

var
W1, W2, W3, W4, W5, W6, WG, WC: Double;

begin
lStart := ReadValue('Report_Energy_Start');
lEnd := ReadValue('Report_Energy_End');

W1 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_Engines_H');
W2 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_Solar_H');
WG := W1 + W2;

WriteValue('W_Generation', WG);
WriteValue('W_Share_Engines_H', W1 / WG);
WriteValue('W_Share_Solar_H', W2 / WG);

W3 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_AC_Load_H');
W4 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_DC_Load_H');
W5 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_AC_Load_H');
W6 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_DC_Load_H');

WC := W3 + W4 + W5 + W6;
WriteValue('W_Consumption', WC);
WriteValue('W_Share_AC_Load_H', W3 / WC);
WriteValue('W_Share_DC_Load_H', W4 / WC);
WriteValue('W_Share_DC_Aux_H', W5 / WC);
WriteValue('W_Share_W_Bat_H_In', W6 / WC);

OpenReport('Energy1');
end.

Все-таки, я не понимаю логику работы.

Если я в редакторе отчетов открываю источник каналов, то почему я не могу указать конкретные теги, которые мне нужно прочитать. 

"Наименование", "ФорматированноеЗначение" к какому тегу относятся?!

В вашем проекте отчет сгенерировался по нажатию на кнопку, а в моем нет!

И как понять почему?!

Спасибо. 

Но мне кажется, что это неправильное решение.

Вы выгружаете данные поканально за сутки притом, что каждый тег обновляется раз в секунду.

А потом вы суммируете эти данные.

За 24 часа мне нужно сложить 86400 значений, равных примерно 1000.

Во-первых, будет переполнение, во-вторых, такой объем данных сразу намертво подвесит скаду, если таких каналов будет с десяток.

У меня была идея считать нарастающим итогом энергию, а потом из значения конца дня вычитать значение начала дня. В общем, ваша идея с использованием функций StreamReadFromDatabase и GetValueFromStream мне понятна: 

считать все в скрипте, а данные для отчета брать из Монитора.

Думаю, что смогу сейчас это реализовать.



Сервис поддержки клиентов работает на платформе UserEcho