Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Отчет за месяц  (Прочитано 1885 раз)

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Отчет за месяц
« : 03 Февраля 2020, 11:15:25 »
Добрый день!
Ищу направление, ибо запутался.
Задача.
1. Построить периодический отчет(период = 1 месяц) для переменной.
2. Взять первое значение от начала промежутка и крайнее перед финишем промежутка.
3. Автоматически отправить на email нужному пользователю.
Настройка почты работает. Формирование файла отчета в конкретной папке и с именем по времени создания работает.
Вопросы.
1. Как задать период месяц? Брать при этом периодический источник?
2. Как взять первое значение в диапазоне??
3. Как взять крайнее значение в диапазоне?

Так небольшая добавка.
Рассмотрим гипотетическую ситуацию.
Есть ПЛК.
Есть орс сервер забирающий данные с этого ПЛК.
Есть сервер скады и база данных, с которой он работает.
Есть клиент, на котором отображается тренд архивируемой переменной.
У переменной установлена шкала от -50..+50.
Если все работает у нас строится тренд на клиенте "жирной" линией.
Если отваливается сервер скады мы после восстановления работы сервера на тренде ни чего не увидим.
Если отваливается орс то будет отображаться тонкая линия с нижним значением шкалы привязанной к переменной в скаде (-50).
Если отвалился ПЛК то на тренде мы видим последнее актуальное значение.
Прилетела задача "Сделай быстро мне отчет разницу между началом месяца и концом" и вот что в этот отчет попадет, если:
1. переменная постоянно растет, например в начале 4000, в конце 5678
2. в начале месяца сервер скады был выключен (около недели) и перегружался в течении месяца раз 15
3. орс периодически раз 15 тоже перегружался
4. ПЛК периодически включается, работает и выключается.

Жду вопросов и предложений
« Изменён: 03 Февраля 2020, 17:38:50 от Серега »

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Re: Отчет за месяц
« Ответ #1 : 04 Февраля 2020, 12:50:50 »
Добрый день!
Дополнительно к теме 3 вопроса:
1. Можете указать, где описано или опишите тут, что подразумевается под значениями 0, 1, 2, 3 поля Quality в таблице trends_data подключенной базы данных?
2. Опишите вкратце (можно на email) как  в редакторе отчетов сделать активную связь между источником (MySQL с запросом и фильтром данных) во временную таблицу обрабатываемую источником SimpleScada?
3. Порекомендуйте как при составлении автоматом по условиям ежемесячного отчета указать конец периода?
Поясню.
01.01.2020 00:00:00 - считаем началом периода.
В зависимости от количества дней в месяце период у нас может быть разный. Т.е. 28 дней = 2419200 сек, а если 31 день = 2678400 сек.
Конец периода это 31.01.2020 00:00:00 или 01.02.2020 00:00:00.
Далее по логике 01.02.2020 00:00:00 так же и начало следующего периода.
31.01.2020 00:00:00 это все таки начало или конец.
Можно считать 31.01.2020 24:00:00 концом периода.
Если взять 31.01.2020 23:59:59 теряем секунду. А в эту секунду например по станку прошло 1,5 шелка с вшитой золотой нитью. Ну так себе пример, конечно.
Или просто укажите, как работает процесс составления отчета.
Жду вопросов и предложений.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Отчет за месяц
« Ответ #2 : 05 Февраля 2020, 18:08:28 »
Здравствуйте.

В данный момент нет возможности автоматического выравнивания интервалов отчета по месяцам. Эта возможность будет добавлена в одном из ближайших обновлений. Поэтому, в данный момент, можно через скрипты задать для отчета интервал равный одному месяцу и построить отчет за этот месяц. Но более 1 месяца сделать не получится.

Цитировать
Можете указать, где описано или опишите тут, что подразумевается под значениями 0, 1, 2, 3 поля Quality в таблице trends_data подключенной базы данных?
0 - плохое качество тега;
1 - хорошее качество;
2 - первое значение после запуска проекта;
3 - значение на момент выключения проекта;

Цитировать
Опишите вкратце (можно на email) как  в редакторе отчетов сделать активную связь между источником (MySQL с запросом и фильтром данных) во временную таблицу обрабатываемую источником SimpleScada?
Для создания связей между двумя источниками данных в системе отчетов нужно кликнуть ПКМ по источнику данных в словаре отчета и выбрать пункт "Новая связь". Подробно этот процесс описан здесь.

Цитировать
Порекомендуйте как при составлении автоматом по условиям ежемесячного отчета указать конец периода?
Дата/время начала отчета должна быть 01.01.2020 00:00:00, а дата/время конца 01.02.2020 00:00:00. Переменную-интервал нужно задать равной нулю (!) (если переменная-интервал равна 0, то будет взят весь период отчёта начиная от переменной начала до переменной конца), тогда весь месяц будет обработан.

Цитировать
2. Как взять первое значение в диапазоне??
3. Как взять крайнее значение в диапазоне?
Нужно взять первое и последнее значение в отчете из периодического источника данных? Если да, то можно в конце отчета разместить бэнд "Итог данных" и вставить такое выражение в ячейку итога:
Код: (c#)
{(double)Last(DataДанные, Данные.Value) - (double)First(DataДанные, Данные.Value)}
, где "DataДанные" - имя бэнда данных. "Данные" - имя источника данных. "Value" - имя колонки в источнике данных по которой мы считаем разницу. Теперь в ячейке итога будет выведена разница между последним и первым значением.

Также получить значения из архива можно через скаду, до построения отчета, используя процедуру ArchiveValueByTime, она извлекает значение из архива за указанное время. Т.е. можно сначала получить значение на начало месяца, затем на конец месяца, их разницу записать в переменную результата и эту переменную вывести в отчет.
« Изменён: 06 Февраля 2020, 16:43:27 от Simple_Scada »

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Re: Отчет за месяц
« Ответ #3 : 10 Февраля 2020, 15:22:58 »
Добрый день!
Цитировать
Также получить значения из архива можно через скаду, до построения отчета, используя процедуру ArchiveValueByTime, она извлекает значение из архива за указанное время.
Хороший метод. Но... На данный момент времени заранее время не известно. Почему.
Вот запрос в базу данных:
Код: (sql)
SELECT min(Value) as min_name, max(Value) as max_name FROM etp_tc_insat.trends_data 
WHERE ID = 3621 - нужная нам для отчета переменнная
        AND Value <> 0  - фильтр на нулевые значения
        AND Quality = 1 - фильтр на достоверность данных
        AND Timestamp - это для работы BETWEEN
BETWEEN CAST('2020-01-01' As date) AND CAST('2020-01-26' As date);
Результат тот который нужен.
Этот же запрос работает при формировании отчета, когда источником данных выбран MySQL сервер, а не скада.
При этом время фиксации минимального значения или максимального ни как не совпадает с началом периода или его окончанием после фильтрации.
Поэтому вопрос как вместо заданного значения времени поставить выбранное в скаде все еще актуален.
Жду вопросов и предложений.
« Изменён: 12 Февраля 2020, 12:09:14 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Отчет за месяц
« Ответ #4 : 12 Февраля 2020, 14:32:39 »
Цитировать
Поэтому вопрос как вместо заданного значения времени поставить выбранное в скаде все еще актуален.
В отчетах, в пользовательских источниках данных, можно прямо в запрос подставлять переменные отчета. Для этого у переменной нужно включить флажок "Разрешить использовать как SQL параметр" и затем её значение можно использовать в коде запроса источника данных (перед именем переменной нужно добавить символ @), например:
Код: (sql)
select * from trends_data
where (id=@Моя_переменная)
LIMIT 100;
, таким образом, меняя значение переменной управлять запросом. Можно эту переменную связать с переменной в скаде, тогда можно будет влиять на отчет из скады, меняя значение переменной. Используя описанный выше способ, в этой статье в sql-запрос источника данных из скады передаются время начала и время конца.

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Re: Отчет за месяц
« Ответ #5 : 20 Февраля 2020, 13:26:51 »
Добрый день!
Да пример на который Вы указали помог в реализации.
Теперь другая проблема!   :D
Финальная версия запроса в отчете такая:
Код: (sql)
SELECT ID, MIN(Value) AS min_v, MAX(Value) AS max_v FROM trends_data
WHERE ID IN (3621, 5208)
AND (timestamp >= @PeriodStart)
AND (timestamp <= @PeriodFinish)
AND Value <> 0
    AND Quality = 1
GROUP BY ID;
и после его выполнения мы получаем следующую таблицу:

ID         min_v     max_v
3621      6547       7564
5208      454,6      546,9
Теперь вопросы.
1. Подскажите можно ли в полученной таблице заменить подстановкой ID на текст по условию? Это можно сделать с помощью функции отчетов IIF? Может есть опять где то справка?
2. В этой теме (https://simple-scada.com/forum/index.php?topic=843.msg7226#msg7226) при наличии наверное можно было бы вытянуть. По поводу таблицы не думали?
« Изменён: 20 Февраля 2020, 18:16:51 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Отчет за месяц
« Ответ #6 : 20 Февраля 2020, 18:34:10 »
Здравствуйте.

Цитировать
1. Подскажите можно ли в полученной таблице заменить подстановкой ID на текст по условию? Это можно сделать с помощью функции отчетов IIF?
Да, можно заменить численные значения соответствующими текстовыми значениями. Для этого нужно использовать условное форматирование в отчете. Выделите в отчете ячейку которая отвечает за вывод ID. В верхнем меню нажмите кнопку "Условия" (см. скрин во вложении) и в открывшемся окне нажмите "Добавить условие -> Условное выделение" укажите параметры подстановки.

Цитировать
при наличии наверное можно было бы вытянуть. По поводу таблицы не думали?
Таблица соответствия "ID -> Имя переменной" обязательно будет добавлена, Но трудно сказать когда именно, т.к. приходится решать сначала более популярные задачи.
« Изменён: 20 Февраля 2020, 20:12:18 от Simple_Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Отчет за месяц
« Ответ #7 : 26 Февраля 2020, 09:56:04 »
Здравствуйте.

Добавили в версию 2.3.6.8 возможность построения отчетов по месяцам. Пример описан здесь.
Также добавили возможность выгрузки таблицы переменных в БД через меню "Проект -> Настройки -> База данных". Таблица содержит ID + Имя переменной + Описание.
Для обновления нужно скачать версию 2.3.6.8 и установить  её поверх текущей версии оставив те же пути установки. После установки желательно открыть проект в редакторе и пересохранить.