Ваши комментарии
Что это за ошибка?
Почему для Источник Истории Каналов (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
Да