Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Виктория от 24 Августа 2017, 09:32:56

Название: Отчеты
Отправлено: Виктория от 24 Августа 2017, 09:32:56
Здравствуйте. Интересуют следующие вопросы по формированию отчетов в Simple Scada. Они в прикрепленном файле
Название: Re: Отчеты
Отправлено: Simple-Scada от 24 Августа 2017, 11:46:02
Здравствуйте.

Вы включили архивацию (https://simple-scada.com/help/manual/index.html?variable-new.html#var_archive) для переменных устройств? Если архивация выключена, то система отчетов сможет получить от сервера скады только текущее значение переменной, а данные которые были ранее у переменной будут просто потеряны и отобразить их не удастся.

Если архивация у переменных включена, то нужно убедиться, что подключение к БД настроено правильно и есть соединение с базой данных. Для этого можно запустить проект на сервере скады и в разделе Базы данных должна отображаться база данных со строкой зелёного цвета: "Состояние:  работает", как показано здесь (https://simple-scada.com/help/manual/server-database.html).
Название: Re: Отчеты
Отправлено: Виктория от 24 Августа 2017, 11:56:41
Если бы я не настроила архивацию параметров- у меня вообще бы не отображались графики, я так понимаю. С БД тоже все хорошо, она работает) Причем пробовала архивировать значения и по времени и по изменению и комбинированно. Итог как на рисунках. Причем в предварительном просмотре он отражает начальные значения, а как только 0 сменился на 1 или наоборот, то он только начальные значения с графика убирает, остальное все правильно отображается.
Название: Re: Отчеты
Отправлено: Simple-Scada от 24 Августа 2017, 14:04:18
Во вложении пример проекта (для Simple-Scada версии 2.2.4.0) под Вашу задачу, основанный на виртуальных переменных. Распакуйте его в папку "..\Simple-Scada 2\Projects\", откройте в редакторе и в меню "Проект -> настройки -> База данных" введите пароль к Вашей СУБД, после чего сохраните проект и запустите его через клиент скады (Client.exe). В примере используется источник данных с типом "По-изменению", диаграмма с типом "Пошаговая линия" и выводится количество отказов. Кода точек на диаграмме станет более 10, можно будет использовать прокрутку диаграммы.

Если вообще не было отключения или включения уст-в, то на графиках вообще ничего нету (см. рисунок 2). Как можно решить данный вопрос?
К сожалению никак, т.к. если переменная ни разу не изменилась, то в БД ничего не будет записано. Переменная обязательно должна измениться, чтобы значение попало в БД.

2) Периодический отчет. Например мне необходимо сформировать отчет за час и я ставлю интервал 1с, чтобы отобразить все включения и выключения.
Для этого периодический источник данных не подходит и нужно использовать источник с типом данных "По-изменению".

можно ли воспользоваться прокруткой диапазона, она как таковая имеется, но я не могу разобраться как она работает и поможет ли это.
Да, можно. Нужно включить прокрутку диапазона и задать величину диапазона. См. скрин во вложении.
Название: Re: Отчеты
Отправлено: Виктория от 25 Августа 2017, 08:31:03
Спасибо, но проблему решила по-другому. Завела переменную, которая изменятся в начала формирования отчета, в редакторе переменных выбрала пункт архивировать и далее в отчете добавила ее в источник и отобразила на графике, но так как эта переменная не нужна сделала график не доступным для пользователя. И все стало работать правильно)
Название: Re: Отчеты
Отправлено: Миханик от 20 Октября 2017, 12:39:31
Не запускается отчет.
В лог пишет такую ошибку:
"Не удалось создать запрос на получение данных и отправить его серверу. Ссылка на объект не указывает на экземпляр объекта."
Куда копать?
Название: Re: Отчеты
Отправлено: Simple-Scada от 20 Октября 2017, 19:14:03
Можете отправить нам на support@simple-scada.com проект (из папки "..\Simple-Scada\Projects\") для проверки?
Название: Re: Отчеты
Отправлено: Миханик от 21 Октября 2017, 10:45:24
Выслал проект на почту.
Название: Re: Отчеты
Отправлено: Simple-Scada от 22 Октября 2017, 20:35:16
Миханик, спасибо. Как выяснилось проблема возникает из-за неинициализированных переменных в словаре отчета. Для решения достаточно снять флажок "Не задано" в свойствах переменных (см. скрин во вложении). В ближайшем обновлении мы предусмотрим эту ситуацию.
Название: Re: Отчеты
Отправлено: Миханик от 23 Октября 2017, 03:21:11
Simple-Scada, а у меня эти галочки уже стояли..
Название: Re: Отчеты
Отправлено: Миханик от 23 Октября 2017, 11:32:31
Удалил все переменные в отчете AllTermopodveski и он заработал.
А отчет Termopodveska так и не работает.
Название: Re: Отчеты
Отправлено: Simple-Scada от 23 Октября 2017, 11:59:55
Цитировать
Удалил все переменные в отчете AllTermopodveski и он заработал.
Удалять не обязательно. Достаточно снять флажки "Не задано" у переменных в словаре отчета, как мы писали в предыдущем сообщении.

Цитировать
А отчет Termopodveska так и не работает.
Отчет Termopodveska не строится из-за другой ошибки в синтаксисе SQL-запроса у таблицы "tmonitor". Проверьте, Вы пропустили скобку "(" в условии WHERE:
Код
WHERE `silage`= @silage_now) and
Название: Re: Отчеты
Отправлено: Миханик от 23 Октября 2017, 12:34:33
Да эту ошибку я давно нашел.
Проблема в том, что при проверке источника данных скрипт выполняется, а в предварительном просмотре выводит нули.
Название: Re: Отчеты
Отправлено: Simple-Scada от 23 Октября 2017, 14:20:59
Нули выводятся вместо данных, потому что у Вас выборка из БД делается вот так:

Код
SELECT Date(`Timestamp`), max(`level`), max(`t1`), max(`t2`), max(`t3`)...
В результате такой выборки получаем столбцы в именами "max(`level`)", "max(`t1`)", "max(`t3`)" и так далее. Это видно на первом скрине из вашего предыдущего сообщения. При этом в источнике данных колонки имеют имена: "level", "t1", "t2", "t3" и т.д. Видимо когда вы создавали источник, то колонки брались без преобразований, а затем Вы добавили выборку максимумов, но имена колонок в источнике не изменили. Решений может быть несколько. Первое это изменить запрос вот так:

Код
SELECT Date(`Timestamp`) as `Timestamp`, max(`level`) as `level`, max(`t1`) as `t1`, max(`t2`) as `t2`, max(`t3`) as `t3`...
Тогда имена колонок в источнике и колонки полученные в результате выборки будут совпадать.

Второй вариант сначала удалить все колонки из источника, затем нажать "Получить все колонки" и система отчетов добавит колонки с соответствующими именами. После этого нужно будет удалить старый бэнд данных и перетянуть в отчет обновленный бэнд с обновленными именами. См. вложение.
Название: Re: Отчеты
Отправлено: Миханик от 23 Октября 2017, 16:18:29
Большое спасибо, разобрался.
Название: Re: Отчеты
Отправлено: AutoCY от 20 Ноября 2017, 15:45:02
Здравствуйте!

При разборе "отчета по циклам" в предварительном режиме некорректно отображается время 30.12.1899 0:00:00, при этом данные выводятся правильно. Подскажите, в чем может быть проблема?

Спасибо.
Название: Re: Отчеты
Отправлено: Simple-Scada от 20 Ноября 2017, 15:56:37
Здравствуйте.
Вы говорите о времени в столбцах "Начало цикла" и "Конец цикла"? Можете показать скриншот, как выглядит отчет на прдпросмотре?
Название: Re: Отчеты
Отправлено: AutoCY от 20 Ноября 2017, 16:03:03
Скрин
Название: Re: Отчеты
Отправлено: Simple-Scada от 20 Ноября 2017, 16:16:22
Мы забыли включить в статью фильтрацию по пустым циклам. Проделайте следующие действия:
1. Кликнуть ПКМ по бэнду DataЦиклы и выбрать пункт Редактировать.
2. Добавить фильтр по значению даты колонки vrCycleEnd.
(см. скрины во вложении)

Обратите внимание, циклы в отчете формируются по изменению переменной vrCycleEnd. У Вас в отчете она принимает только нулевые значения (дата-время "30.12.1899 0:00:00" соответствует нулю). Эти нулевые значения появляются в архиве когда Вы запускаете проект. После выполнения двух шагов описанных выше у Вас в отчете ничего не отобразится, т.к. vrCycleEnd не принимает никаких значений кроме 0. Поэтому нужно сделать так, чтобы в переменную vrCycleEnd записывалась дата/время конца цикла. Т.е. когда очередной цикл завершается вы должны выполнить такой код:
Код
begin
  vrCycleEnd.Value := Now;
end.

То же касается и переменной vrCycleStart. Когда начинается новый цикл в эту переменную нужно записать дату/время:
Код
begin
  vrCycleStart.Value := Now;
end.

В ином случае дата/время циклов будет равна нулю и отчет не будет строиться правильно.
Название: Re: Отчеты
Отправлено: AutoCY от 21 Ноября 2017, 10:52:45
Simple-Scada, скрипты добавил, теперь время выводится корректно.
1. Вопрос остался с фильтром, как я вижу приведенный Вами редактор отчета немного отличается от моей версии 2.2.6.1, в частности, что мне выбрать в поле фильтра вместо предложенного Вами больше чем? Я ставил начинается с, потом заканчивается на - в результате вообще ничего не выводилось.
2. Иногда проскакивают данные вне выбранного интервала.
3. По неизвестной мне причине при нажатии кнопки построить отчет перестал открываться отчет. В редакторе отчета в предварительном просмотре данные отображаются. Привязку кнопки к скрипту вызова отчета я не менял.
Название: Re: Отчеты
Отправлено: AutoCY от 21 Ноября 2017, 11:02:06
После удаления фильтра получается приведенный отчет в скрине, вторая строчка правильная, первая - нет, интервал был выбран с 9:56 по 9:58. Возможно это происходит из-за отсутствия фильтра.
Перезагрузил ПК, кнопка в скаде вывода отчета стала работать, но с периодическим успехом.
Стал далее разбирать пример с выводом макс. и мин. переменных. Отчет не компилируется, при проверке выводит ошибку.

Есть ли в отчете среднее арифметическое, чтобы вывести среднюю величину переменной за выбранное время?
Название: Re: Отчеты
Отправлено: Simple-Scada от 21 Ноября 2017, 14:47:06
AutoCY, Ваша версия редактора отчетов не отличается от нашей (за исключением дизайна полей и раскрывающихся списков, но это из-за разницы в ОС). Просто Вы выбрали неправильный тип данных у Фильтра. У Вас выбран Тип данных "Строка", а на нашем скрине тип "Дата". Измените тип на "Дата" и выберите условие "больше чем".
Название: Re: Отчеты
Отправлено: Simple-Scada от 21 Ноября 2017, 14:49:21
Цитировать
После удаления фильтра получается приведенный отчет в скрине, вторая строчка правильная, первая - нет, интервал был выбран с 9:56 по 9:58. Возможно это происходит из-за отсутствия фильтра.
Перезагрузил ПК, кнопка в скаде вывода отчета стала работать, но с периодическим успехом.
Стал далее разбирать пример с выводом макс. и мин. переменных. Отчет не компилируется, при проверке выводит ошибку.
В отчете явно есть какая-то ошибка, скорее всего что-то простое. Но чтобы сказать почему именно она возникает нам нужен отчет. Можете выслать папку с проектов на support@simple-scada.com?
Название: Re: Отчеты
Отправлено: AutoCY от 21 Ноября 2017, 14:57:35
В отчете явно есть какая-то ошибка, скорее всего что-то простое. Но чтобы сказать почему именно она возникает нам нужен отчет. Можете выслать папку с проектов на support@simple-scada.com?

Да, я учту Ваше замечание по поводу неправильно выбранного типа и вышлю отчет.
Название: Re: Отчеты
Отправлено: AutoCY от 24 Ноября 2017, 16:58:30
Возможно ли в отчете произвести вычисление разницы между началом цикла и концом?
Название: Re: Отчеты
Отправлено: Simple-Scada от 24 Ноября 2017, 19:27:02
AutoCY, да, вычислить разницу довольно просто. Вы можете разместить в бэнде компонент Текст и задать ему выражение с функцией DateDiff, как показано на скрине во вложении. Если не нужно видеть миллисекунды, то дополнительно нужно задать формат.
Название: Re: Отчеты
Отправлено: AutoCY от 27 Ноября 2017, 10:32:07
Вы можете разместить в бэнде компонент Текст и задать ему выражение с функцией DateDiff.

1 На сколько я понял: выделил нужный мне бэнд, в редактировании выбрал функцию DateDiff, записал выражение. Только теперь вообще ничего не выводится (не строится таблица) - чистый лист. Или надо было создать отдельный компонент ТЕКСТ и наложить его на бэнд? Но в этом случае появляются ошибки.

2 Далее у меня не получается вывести корректно переменную  MyVariableRes из ArchiveTimeOn(MyVariable, MyVariableRes, DateStart, DateEnd) в отчет. MyVariableRes суммирует общее количество времени наработки оборудования, при попытке вывести эту сумму в отчете пишет - 30.12.1899 0:00:00. С датой 30.12.1899 мы раннее разобрались, а вот почему остальное время по нулям - не понятно, при этом в Скаде все нормально. Я попытался применить приведенный Вами скрипт, отбросил дату вообще, оставив только время в формате string. В скаде это время выводится, но вот как в отчет поместить string? Эту переменную я добавляю в источник ЦИКЛЫ и тогда теряется коннект с сервером.

Спасибо за Ваше долготерпение. )
Название: Re: Отчеты
Отправлено: Simple-Scada от 27 Ноября 2017, 14:47:48
Цитировать
1 На сколько я понял: выделил нужный мне бэнд, в редактировании выбрал функцию DateDiff, записал выражение. Только теперь вообще ничего не выводится (не строится таблица) - чистый лист. Или надо было создать отдельный компонент ТЕКСТ и наложить его на бэнд? Но в этом случае появляются ошибки.
Бэнд это компонент с именем "DataЦиклы" (если Вы создавали его в соответствии с руководством). В бэнде размещаются компоненты Текст. Когда Вы перетягиваете источник данных на страницу, то создается Бэнд и в нём автоматически размещаются компоненты Текст для каждой выбранной колонки источника данных. Нужно указать выражение не для бэнда, а для одного из компонентов Текст. При необходимости можно добавить в бэнд новый компонент Текст. См. скрип во вложении в нашем предыдущем сообщении, на нём выделен зелёным цветом компонент Текст для которого задается выражение, а также видно само выражение.

Цитировать
Далее у меня не получается вывести корректно переменную  MyVariableRes из ArchiveTimeOn(MyVariable, MyVariableRes, DateStart, DateEnd) в отчет.
Можем предположить, что это из-за того, что ArchiveTimeOn не является "синхронной" процедурой и выполняется в отдельном потоке. Поэтому если в скрипте вызвать ArchiveTimeOn и сразу после вызвать построение отчета, то в отчете будет 0, потому что ArchiveTimeOn выполнится через некоторое время после построения отчета.

Вышлите последнюю версию проекта на support@simple-scada.com мы изменим шаблон отчета в соответствии с задачами.
Название: Re: Отчеты
Отправлено: AutoCY от 30 Ноября 2017, 16:45:31
Scada установлена на сервере.
В скрипте ReportView('my_client', 'Отчет') прописываю всех клиентов:
  ReportView('my_client_1', 'Отчет');
  ReportView('my_client_2', 'Отчет');
              .............................
  ReportView('my_client_n', 'Отчет')

Если один клиент сформирует отчет, это не будет же отображаться на других клиентах (т.е. не ReportExportClient)? 
 
Название: Re: Отчеты
Отправлено: Simple_Scada от 30 Ноября 2017, 17:15:29
Здравствуйте!

Если у Вас в скрипте написано:
Код
begin
  ReportView('my_client_1', 'Отчет');
  ReportView('my_client_2', 'Отчет');
  ReportView('my_client_3', 'Отчет');
end.

и он вызывается, к примеру по нажатию на кнопку, то при нажатии кнопки на любом из клиентов произойдет формирование отчета и он отобразится на клиентах my_client_1, my_client_2, my_client_3. Если нужно, чтобы по нажатию на кнопку отчет отобразился только на том клиенте, на котором нажали кнопку - необходимо изменить скрипт так:
Код
begin
  ReportView(GetClientName, 'Отчет'); // сформировать отчет и открыть его на клиенте, который вызвал скрипт
end.
Название: Re: Отчеты
Отправлено: AutoCY от 01 Декабря 2017, 16:42:20
 ReportView(GetClientName, 'Отчет') - это как раз то, что нужно, спасибо.
Название: Re: Отчеты
Отправлено: AutoCY от 04 Января 2018, 09:01:28
День добрый! В отчете при увеличении заголовка HEADER в высоту происходит перехлест с DATA. Соответственно выводится ошибка предупреждения. Не пойму, как поменять их позиционирование? Спасибо.
Название: Re: Отчеты
Отправлено: AutoCY от 04 Января 2018, 11:06:40
Еще не всегда активна кнопка ТИП ОБРАБОТКИ, когда надо выбрать скажем максимальное значение.
Название: Re: Отчеты
Отправлено: Simple-Scada от 04 Января 2018, 11:27:29
Здравствуйте.

Цитировать
В отчете при увеличении заголовка HEADER в высоту происходит перехлест с DATA.
Судя по скрину Вы растянули по высоте компоненты Текст которые входят в Header, а сам Header по высоте не увеличили. Это же касается бэнда Data. Нужно, чтобы сам бэнд был достаточной высоты, чтобы в него поместились другие объекты.

Цитировать
Еще не всегда активна кнопка ТИП ОБРАБОТКИ, когда надо выбрать скажем максимальное значение.
У Вас источник данных имеет тип "Периодический", или "По-изменению"? Тип обработки можно задать только для источников с типом "Периодический".
Название: Re: Отчеты
Отправлено: AutoCY от 04 Января 2018, 11:51:58
Спасибо получилось.  :D
Название: Re: Отчеты
Отправлено: AutoCY от 05 Января 2018, 13:30:58
Для получения максимального значения переменной, по приведенному примеру в отчете по циклам, я создал второй источник, в бенд Footer переместил компонент Текст и в нем в итоге записал: {MaxIf(DataСкорость,Скорость.a_speed,(Скорость.Время >= Запуск.vrCycleStart) && (Скорость.Время <= Запуск.vrCycleEnd))}. Далее переместил компонент Текст в Data первого источника. На данном этапе все получилось.
Теперь вопрос: как посчитать среднее арифметическое нескольких компонентов Текст в разных циклах. Ведь сам компонент Текст является итогом. Получается надо подсчитать среднее арифметическое итогов в итоге.
Пока я написал: {AvgD(DataЗапуск,Скорость.a_speed)}. И теперь происходит расчет среднего арифметического всех значений внутри компонента Текст, а не его конечных максимальных значений.
Название: Re: Отчеты
Отправлено: Simple-Scada от 06 Января 2018, 00:10:14
К сожалению вычислить итоговое среднее значение по итоговым максимальным значениям стандартными средствами нельзя.
Название: Re: Отчеты
Отправлено: AutoCY от 12 Января 2018, 12:17:31
Можно ли рядом не в высоту, а в ширину расположить два поля с разными источниками? Т.е. сжимаем поле DataЦиклы_1 и рядом в ширину располагаем второе поле DataЦиклы_2?

Спасибо.
Название: Re: Отчеты
Отправлено: Simple-Scada от 13 Января 2018, 11:10:45
Цитировать
Можно ли рядом не в высоту, а в ширину расположить два поля с разными источниками?
Можно разместить два текстовых поля с разными источниками в любом месте страницы.

Цитировать
Т.е. сжимаем поле DataЦиклы_1 и рядом в ширину располагаем второе поле DataЦиклы_2?
"DataЦиклы_1" и "DataЦиклы_2" это два бэнда данных. Каждый бэнд данных всегда занимает всю ширину страницы и расположить два бэнда по горизонтали друг за другом невозможно.
Название: Re: Отчеты
Отправлено: AutoCY от 15 Января 2018, 14:54:01
Задача:
 1. Вывести в отчете значение переменной в начале цикла и в конце.
 2. Далее посчитать разницу этих показаний в каждом цикле.
 3. Посчитать сумму разницы показаний переменной всех циклов.

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

 Создал источник №1. В его бенде вывел начало циклов и соответствующее этому значение переменной. Далее в итоге посчитал сумму значений переменной.
 Создал источник №2. В его бенде вывел конец циклов и соответствующее этому значение переменной. Далее в итоге посчитал сумму значений переменной.
 Создал источник №3. В его бенде вывел начало и конец циклов (как в Вашем примере). Вывести разницу соответствующую каждому циклу не получилось. Далее в бенде итог источника №3 вычел из суммы источника №2 сумму источника №1 и получил  сумму разницы показаний переменной всех циклов.

Получились три таблицы, хотя нужна только одна. Не могу вывести разницу соответствующую каждому циклу. Хотелось бы получить нечто похожее на то, что находится в приложении.

Спасибо.

 
Название: Re: Отчеты
Отправлено: Simple-Scada от 16 Января 2018, 10:36:50
Цитировать
Хотелось бы получить нечто похожее на то, что находится в приложении.
Для вывода такой таблицы в отчет стандартные источники плохо подходят и проще всего создать через MySQLWorkbench в БД новую таблицу с колонками:
Создание подобной таблицы описано в этой статье (https://simple-scada.com/help/script/dbreciepes.html) начиная с абзаца: "Интерфейс проекта создан, переменные определены. Теперь можно создать таблицу...".
В эту таблицу в конце каждого цикла можно добавлять новую строку с итогами цикла. У Вас в проекте уже есть переменные старта и конца цикла (vrCycleStart и vrCycleEnd). Значение параметра на конец цикла можно получить в конце цикла, как и разницу между начальным и конечным значением. Не хватает переменной для значения параметра в начале цикла. Нужно создать её, например с именем "vrStartValue". Во время старта цикла записывать в неё текущее значение параметра:
Код: (delphi)
begin
  vrStartValue.Value := myVariable.Value;
end.

А по завершению цикла выполнять вставку новой строки в таблицу:
Код: (delphi)
var
  aQuery: string;
  aStartStr, aEndStr: string;
  aDiff: string;
begin
  { переводим время старта и конца цикла в пригодный для MySQL формат }
  aStartStr := MySQLDateTime(vrCycleStart.AsDateTime, dttMillisecond);
  aEndStr := MySQLDateTime(vrCycleEnd.AsDateTime, dttMillisecond);

  { считаем разницу между конечным и начальным значением параметра }
  aDiff := FloatToStr(myVariable.AsFloat - vrStartValue.AsFloat);

  { формируем запрос на вставку новой строки в таблицу }
  aQuery := 'INSERT INTO `my_table` (`start`, `end`, `start_val`, `end_val`, `diff`) VALUES(' +
    aStartStr + ', ' +  // время старта цикла
    aEndStr + ', ' +    // время конца цикла
    QuotedStr(vrStartValue.AsStr) + ', ' // значение на начало цикла
    QuotedStr(myVariable.AsStr) + ', '   // текущее значение параметра, т.е значение на конец цикла
    QuotedStr(aDiff) +                   // разница между показаниями
    ')';

  { отправляем запрос на выполнение }
  RunSQL(aQuery, nil, 0);
end.
В результате в Вашей БД будет таблица практически такая же, как Вы описали (за исключением "ИТОГО", его расчет легко добавить в отчете). Эту таблицу можно легко вывести в отчет в соответствии с этой статьей (https://simple-scada.com/help/report/rep-user-data.html). При таком подходе не нужно создавать множество источников и легко вывести итог с суммой разниц для каждого цикла. Отчет будет строиться очень быстро, т.к. данные уже подготовлены и их нужно только отобразить. Плюс эту таблицу при необходимости можно отобразить в компоненте Таблица в скаде.
Название: Re: Отчеты
Отправлено: AutoCY от 16 Января 2018, 16:09:00
Simple-Scada, спасибо за приведенное направление. Вроде все выполнил, но таблица не обновляется в скаде. Новые строки циклов должны автоматически добавляться и это можно визуально просмотреть в скаде?
Название: Re: Отчеты
Отправлено: Simple-Scada от 17 Января 2018, 10:47:29
AutoCY, забыли описать обновление таблицы. Обновить таблицу можно SQL-запросом на выборку, используя метод RunSQL (https://simple-scada.com/help/script/trunsql.html) вот так:
Код: (delphi)
begin
  { выбираем все данные из таблицы БД `my_table` и отображаем их в скаде в таблице "Table1" }
  Table1.RunSQL('SELECT * FROM `my_table`', tsSaveFixRow);
end.
Название: Re: Отчеты
Отправлено: Антон Сидоров от 17 Января 2018, 12:26:07
Здравствуйте.
Simple-Scada 2 demo 64 тега 2.2.7.0
Win 8.1 32 Pro (лиц)
Reports.exe

Предварительный просмотр -> Получить данные
появляется то, что на картинках либо Reports.exe виснет. Что не так?
Название: Re: Отчеты
Отправлено: Simple-Scada от 17 Января 2018, 12:50:59
Здравствуйте. Можете выслать папку отчетов "..\Simple-Scada 2\Project\ИМЯ_ПРОЕКТА\Reports", или целиком папку проекта на support@simple-scada.com для проверки?
Название: Re: Отчеты
Отправлено: Антон Сидоров от 17 Января 2018, 14:01:33
Здравствуйте. Можете выслать папку отчетов "..\Simple-Scada 2\Project\ИМЯ_ПРОЕКТА\Reports", или целиком папку проекта на support@simple-scada.com для проверки?
Отправил.
Название: Re: Отчеты
Отправлено: Simple-Scada от 17 Января 2018, 14:29:05
Спасибо. Нашли причину проблемы в несоответствии типов при преобразованиях переменных. Чтобы исключить ошибку смените тип данных у переменной PV4 в словаре отчета как показано на скрине во вложении. В ближайшем обновлении исключим эту проблему и тип не придется менять вручную.
Название: Re: Отчеты
Отправлено: Антон Сидоров от 17 Января 2018, 16:08:09
to Simple-Scada

Ок. Проверим.
Локализуем еще странности - сообщим.
Спасибо за информацию.
Название: Re: Отчеты
Отправлено: АО.МХЗ от 26 Февраля 2018, 19:11:05
Не знаю, может подобная проблема только у меня, но очень туго запускается отчет. Прям секунд 20 проходит, прежде чем появится. При этом тот же sql запрос с выгрузкой в таблицу выполняется мгновенно. Последующий запуск уже чуть шустрее, но всё равно, пользователь успевает раз пять нажать на кнопку формирования отчёта.
Название: Re: Отчеты
Отправлено: Simple-Scada от 26 Февраля 2018, 22:18:50
АО.МХЗ, если вариант с "тяжелым" запросом исключается (или с запросом за чрезмерно большой интервал времени), то причину нужно искать в других вычислениях которые могут использоваться при построении отчета, либо в неправильном использовании источников данных. Пришлите папку с проектом на support@simple-scada.com для проверки, если возможно.
Название: Re: Отчеты
Отправлено: АО.МХЗ от 26 Февраля 2018, 23:07:59
Отправил
Название: Re: Отчеты
Отправлено: Simple-Scada от 27 Февраля 2018, 09:56:46
Не можем в точности проверить работу вашего проекта т.к. при работе через скаду Вы используете вызов хранимых процедур, например "call report(...)", а в системе отчетов используется обычный код. Вы уверены что код запроса в отчетах и в хранимых процедурах полностью совпадает? Также у Вас в отчете (мы рассматривали отчет "349_levels_ontime" есть два источника, соответственно при построении будут выполняться два отдельных запроса, сначала для источника "ИсточникДанных1", затем для источника "ИсточникДанных1Копия". Отчет не будет выведен на экран пока не выполнятся оба запроса.

Почему Вы не используете вызов хранимой процедуры в отчете, также как это делается в скриптах скады?
Если запустить редактор отчетов (Reports.exe), двойным кликом открыть источник данных, а затем в открывшемся окне нажать кнопку "Выполнить" (см. скрин во вложении), то запрос выполняется быстро? (проверьте таким способом все источники данных в отчете).
Название: Re: Отчеты
Отправлено: АО.МХЗ от 27 Февраля 2018, 13:22:51
Угу. Источник данных забыл... Но для чистоты эксперимента, отчет 349_outcome очень простой. sql таблица маленькая - 100 кб. Запрос  отрабатывает в базе мгновенно. Но отчет грузится в первый раз при запуске программы ну совсем долго. После того, как прогрузился, остальные запуски выполняются в приемлемое время. Хранимка report  и скрипт в отчете 349_levels_ontime идентичны.

Пробовал запускать отчеты на разных машинах - эффект один. Первый запуск выполняется крайне продолжительное время.
Отчего, кроме скорости выполнения sql запроса, зависит скорость прогурузки отчета?

Цитировать
Почему Вы не используете вызов хранимой процедуры в отчете, также как это делается в скриптах скады?
Так сложилось. Сначала хранимки не было. Но когда озаботился скоростью, решил проверить как система будет отрабатывать выгрузку данных в таблицу и как в отчет. Текст запроса скопировал в хранимку, т.к. сил написать 30 строк sql в редакторе скриптв не было, и написал процедуру выгрузки в таблицу (кнопка быстрый отчет).  Таблица заполняется практически мгновенно. Отчет - тупит.
Название: Re: Отчеты
Отправлено: Simple-Scada от 27 Февраля 2018, 15:11:54
АО.МХЗ, ответили Вам по e-mail. Также хотелось бы получить ответ на этот вопрос:

Если запустить редактор отчетов (Reports.exe), двойным кликом открыть источник данных, а затем в открывшемся окне нажать кнопку "Выполнить" (см. скрин во вложении), то запрос выполняется быстро? (проверьте таким способом все источники данных в отчете).
Название: Re: Отчеты
Отправлено: AutoCY от 11 Мая 2018, 14:04:24
День добрый!

На данный момент времени использую отчет по циклам, одной из целей которого заключается в формировании отрезков времени наработки оборудования. Возник следующий вопрос:
- Предположим оборудование включалось пять раз в течении первой смены. Во время начала второй смены - оно находилось в отключенном состоянии. Здесь отчеты по циклам работаю идеально.
- Во время начала второй смены оборудование находилось во включенном состоянии. Отчет по циклам посчитает четыре цикла, отбросив пятый (как не сформированный цикл). Возможно ли в данном случае посчитать время работы четырех циклов плюс работу пятого, но не завершенного до точки выборки? Может стоит для данной задачи воспользоваться другим типом отчета?

Спасибо за ответ.
Название: Re: Отчеты
Отправлено: Simple-Scada от 14 Мая 2018, 09:51:46
Здравствуйте.

Цитировать
Возможно ли в данном случае посчитать время работы четырех циклов плюс работу пятого, но не завершенного до точки выборки? Может стоит для данной задачи воспользоваться другим типом отчета?
Подсчитать время наработки можно средствами скады, используя процедуру ArchiveTimeOn. Результат вычисления будет записан в другую переменную, которую Вы укажете. Но как время наработки должно быть отображено в отчете? Как отдельное поле с временем наработки за смену?
Название: Re: Отчеты
Отправлено: TeNQ от 14 Июня 2018, 15:42:55
Здравствуйте.
Пытаюсь создать динамический отчет и пока не получается. При работе в проекте он не создается. И у меня возникла пара вопросов. При запущенном проекте, я нажимаю "Получить данные" в Редакторе отчетов и получаю ошибку - "Файл не найден ...". Что это? При этом, нажимаю "предварительный просмотр" и отчет строится с данными.
P.S. С этим вопросом разобрался. У переменной, которую я создал для получения ID в третьей колонке было включено масштабирование от 0 до 100 - создавал ее дублированием и не заметил. Поэтому третья колонка была пустой, т.к. ID очевидно не находился. Убрал масштабирование, ошибка пропала, все три колонки заполнились данными. Но отчет так и не появляется при создании в проекте - буду дальше разбираться.
Второй вопрос. Я удаляю динамическую колонку vrTRM_Input1 из источника данных в словаре. Но захожу в Действия-Редактор ссылок и там привязка остается. Удаляю и здесь. Пытаюсь добавить снова переменную vrTRM_Input1 как динамическую колонку в тот же источник и получаю ошибку - "Необрабатываемое исключение.." А это что?
Название: Re: Отчеты
Отправлено: Simple-Scada от 18 Июня 2018, 11:11:21
Здравствуйте.

Может прислать текущую версию проекта и отчетов в которых возникают ошибки?
Название: Re: Отчеты
Отправлено: TeNQ от 18 Июня 2018, 11:26:27
Да, вышлю. Но у меня возникли другие вопросы. Во-первых, я запустил тот же самый проект, с тем же самым отчетом, который не создавался из проекта. И он создался. А ведь ничего не изменилось, кроме того что я выкл./вкл. компьютер.
По отчету. Источник данных периодический некорректно отображает данные. Точнее абсолютно корректно читает их из БД. Я помню и раньше так было, но я не согласен что это правильная работа системы отчетов. Вы то пишите в БД используя алгоритмы сжатия. Мне как пользователю видится эта система как черный ящик, мне все равно что там происходит. На выходе должны быть восстановленные данные соответствующие оригиналу. Почему для визуального отображения тренда вы восстанавливаете данные. Я специально снял ролик с визиром. А для отчета пишите как "есть". Постройте по вашим данным из отчета тренд и вы поймете какая ерунда получилась.
И еще один вопрос. По визиру в момент времени 10.41.07 значение выхода 99.29. В отчете же последнее значение за этот период 100. Как ни округляй из 99.29 ста не получишь.
Название: Re: Отчеты
Отправлено: Simple-Scada от 18 Июня 2018, 12:27:52
Цитировать
Убрал масштабирование, ошибка пропала, все три колонки заполнились данными. Но отчет так и не появляется при создании в проекте - буду дальше разбираться.
Учитывайте, что т.к. у Вас отчет с динамическими колонками, то перед построением отчета Вы должны сначала в переменные vrTRM_Input1, vrTRM_Output1 и vrTRM_Setpoint записать ID тех архивных переменных, которые требуется отобразить в отчете. И только потом вызывать построение отчета. Иначе переменные могут быть не найдены и построение не удастся.

Цитировать
Источник данных периодический некорректно отображает данные. Точнее абсолютно корректно читает их из БД.
Источник данных с типом "Периодический" работает на самом деле очень просто. Он берёт весь указанный диапазон времени. Разбивает его на равные интервалы времени (они задаются через переменную-интервал в секундах). И для каждого интервала берутся все точки которые попадают в этот интервал и для этих точек выполняется заданная пользователем обработка (минимум, максимум, среднее, интерполяция и т.д.). Если Вы выведете полученный результат в тренд, то тренд будет выглядеть по-разному в зависимости от типа обработки. Если нужен ступенчатый тренд, то тип обработки должен быть "точное". Если нужен обычный тренд, то тип обработки должен быть "интерполяция". Также чем меньше значение переменной интервала, тем точнее будет график.
Скада для трендов точно также берёт значения из БД, только не делит их на периоды и не выполняет обработки, а просто отображает все точки подряд друг за другом и добавляет "ступеньки" если тренд ступенчатый.

Отчет получили, сейчас проверяем. Запустили проект. Через скаду назначили переменным [vrTRM_Input1, vrTRM_Output1, vrTRM_Setpoint] ID архивных переменных [vrTRM1_Input1, vrTRM1_Output1 и vrTRM1_Setpoint], т.е. [8, 11, 35]. У архивных переменных меняли значения, в том числе задали 99.29. Задали интервал времени для отчета через переменные vrTRM_StartIn и vrTRM_EndAt и вызвали построение отчета. Значения в отчете отображаются корректно: 99.29 не округляется.
Название: Re: Отчеты
Отправлено: TeNQ от 18 Июня 2018, 12:52:07
Цитировать
Источник данных с типом "Периодический" работает на самом деле очень просто.
Я читал ваше руководство и более или менее понимаю как все это устроено. И я привел пример с построением тренда из полученных данных в отчете, с целью выявить проблему. Как мне кажется, вы должны создавать из данных в БД промежуточную таблицу с учетом ваших алгоритмов записи в БД, восстанавливая данные до исходных. Брать готовый встроенный способ восстановления который есть в системе отчетов я не смогу. Если я использую интерполяцию, то у меня получится такая же ерунда.
Вот есть у меня источник данных по-изменению. В отчет попадает три точки. Интервалов же в отчете намного больше чем три. И в большую часть интервалов точки вообще не попадают. Восстановите эти три точки до прямых и уже тогда берите данных для интервалов в построении отчета с учетом этого. И тогда там будут не нули, а реальное значение которое вы просто выбросили, потому что зачем писать в БД одно и то же значение. 
И да, я могу отказаться от режима архивации по-изменению и писать в БД все по времени. Но тогда зачем нужны эти алгоритмы сжатия и высвобождения полезных ресурсов если для создания конечного продукта - отчета, от них нет никакого толку, а только вред.
Про 100 и 99.29. Не знаю, надо разбираться. Я вам выслал, то что у меня реально получилось, у меня глаз зацепился за это несоответствие, а как оно создалось понятия не имею.
Название: Re: Отчеты
Отправлено: Simple-Scada от 18 Июня 2018, 13:08:52
Цитировать
И да, я могу отказаться от режима архивации по-изменению и писать в БД все по времени.
Это ничего не изменит касаемо задачи описанной в сообщениях выше, т.к. повторяющиеся точки все равно не пойдут в БД.

Цитировать
Восстановите эти три точки до прямых и уже тогда берите данных для интервалов в построении отчета с учетом этого.
Именно это и делают способы обработки "Интерполяция" и "Точное". Используйте их если нужно видеть промежуточные значения между точками. В Вашем случае тренды ступенчатые и правильнее использовать тип "Точное", т.к. "Интерполяция" будет просто "проводить линию" от точки к точке, без ступеньки.

Цитировать
Если я использую интерполяцию, то у меня получится такая же ерунда.
Не совсем поняли что именно происходит не так при выборе этого типа обработки. Значения отображаются неправильные при выводе бэнда в отчет? Если да, то может выслать скрин построенного отчета с интерполяцией (можно за тот же интервал времени, что и в предыдущем сообщении)? Или ещё что-то?

Цитировать
Про 100 и 99.29. Не знаю, надо разбираться.
Скорее всего переменная действительно была равна 100 в момент построения отчета. На графике этого значения не видно, т.к. оно не пошло в архив (вероятно из-за зоны нечувствительности тренда). А в отчет попало, т.к. в архив на момент построения отчета оно ещё уйти не успело и отчет взял данные из буферов в оперативной памяти, включая текущее значение на момент построения отчета, равное 100.
Название: Re: Отчеты
Отправлено: TeNQ от 18 Июня 2018, 13:42:21
Цитировать
В Вашем случае тренды ступенчатые и правильнее использовать тип "Точное"
Попробовал, получилось то что надо. Я значит не разобрался в описании, прощу прощения.
Название: Re: Отчеты
Отправлено: alan54 от 05 Октября 2018, 15:46:39
Может подскажет кто - как вернуть на панели справа закладки? Что-то не туда кликнул, и они пропали, остались только свойства...
Название: Re: Отчеты
Отправлено: Simple_Scada от 05 Октября 2018, 16:01:46
Здравствуйте!

Если у Вас не отображается "Словарь" - нажмите сочетание клавиш "Ctrl+Shift+D". Если "Дерево отчета" - нажмите сочетание клавиш "Ctrl+Shift+L".
Название: Re: Отчеты
Отправлено: alan54 от 05 Октября 2018, 16:09:03
Спасибо, помогло. Только почему этого нет в руководстве?
Название: Re: Отчеты
Отправлено: Simple_Scada от 05 Октября 2018, 16:18:26
В Simple-Scada используется система отчетов Stimulsoft Reports - полное руководство по ней доступно по ссылке (https://www.stimulsoft.com/ru/documentation/online/user-manual/index.html?introduction.htm). В нашем руководстве по отчетам (https://simple-scada.com/help/report/index.html) также имеются ссылки на руководство Stimulsoft Reports.
Название: Re: Отчеты
Отправлено: alan54 от 05 Октября 2018, 17:01:21
Спасибо, это тоже нашел.
Название: Re: Отчеты
Отправлено: alan54 от 12 Октября 2018, 11:44:11
Как в отчете по изменению отобразить булевские переменные не флажками, а нулем и единицей?
Название: Re: Отчеты
Отправлено: Simple-Scada от 13 Октября 2018, 16:23:17
Здравствуйте.

Когда Вы выносите на страницу бэнд данных с колонками типа Boolean, то для этих колонок создается компонент "Флажок". Чтобы отобразить 0 и 1 нужно удалить этот компонент из бэнда данных, разместить на его месте компонент "Текст" и задать для него выражение "{Данные.vrRepBool ? 1 : 0}", где Данные - это имя источника данных, а vrRepBool - это boolean-колонка в данном источнике. См. скрин во вложении.
Название: Re: Отчеты
Отправлено: alan54 от 13 Октября 2018, 19:08:53
Что-то не получилось у меня с первого раза. Переменная vrRepBool у меня названа "Подача первой доски", вместо пробелов автоматически подставились подчеркивания, и в итоге сообщение "Переменная не найдена". Как быть? Взять в кавычки? Или использовать название исходной переменной из проекта - Magazine1_YV4 ?
Название: Re: Отчеты
Отправлено: Simple-Scada от 13 Октября 2018, 20:54:57
Нет, в кавычки нельзя. Для имён с кириллицей в выражении нужно использовать стандартную функцию IIF (пробелы в имени переменной должны быть заменены на подчеркивания), например:
Код: (c#)
{IIF(Данные.Подача_первой_доски == true, 1, 0)}
Название: Re: Отчеты
Отправлено: alan54 от 15 Октября 2018, 15:42:12
Нет, в кавычки нельзя. Для имён с кириллицей в выражении нужно использовать стандартную функцию IIF (пробелы в имени переменной должны быть заменены на подчеркивания), например:
Код: (c#)
{IIF(Данные.Подача_первой_доски == true, 1, 0)}
Спасибо, получилось. Только переменную пришлось переименовать без пробелов.