Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Djakov от 03 Октября 2019, 08:59:16

Название: Вопрос по отчётам
Отправлено: Djakov от 03 Октября 2019, 08:59:16
Здравствуйте!
Стоит система PLC - OPC - SCADA связь по Modbus TCP/IP.
Для формирования отчета времени включения-выключения насоса написан код:
Код: (delphi)
begin
  if run_fc.AsBool = false then
     vrOff.Value := Now   //время выключения насоса
  else
     vrOn.Value := Now;  //время включения насоса     
end. 
Пока связь устойчивая отчет формируется отлично:
Код
Начало       Конец
08:40:21     10:47:41
11:30:02     15:20:00
15:40:36     19:24:05
но когда связь пропадает, а потом появляется (при этом насос отключен), то в отчете появляются лишние строки (время включения остается неизменным, время выключения меняется):
Код
Начало       Конец
08:40:21     10:47:41
11:30:02     15:20:00
15:40:36     19:24:05
15:40:36     19:24:24
15:40:36     19:26:18
15:40:36     19:26:28
Подскажите пожалуйста, как можно избавиться от этого эффекта? Может какой триггер прописать?
Название: Re: Вопрос по отчётам
Отправлено: pan2000 от 04 Октября 2019, 00:52:24
    Здравствуйте!
Скорее всего, лишние строки появляются в исходных данных из-за неопределенных (нет связи) состояний внешнего тега run_fc.
Исключить ложные переходы для тега run_fc (нет связи -> 0, нет связи -> 1) можно сохраняя его значения во внутренней переменной run_fc_1.

Скрипт по изменению внешнего тега:
Код: (delphi)
begin
  run_fc_1.Value := run_fc.Value;     // присвоить текущее состояние насоса внутренней переменной
end.
Скрипт по изменению внутренней переменной:
Код: (delphi)
begin
  if run_fc_1.AsBool then vrOn.Value  := Now   // время включения насоса
                     else vrOff.Value := Now;  // время выключения насоса
end.
Название: Re: Вопрос по отчётам
Отправлено: Simple-Scada от 04 Октября 2019, 09:48:08
Здравствуйте.

При разрыве связи с устройством качество тега меняется на плохое и происходит добавление записи с новым качеством в архив (даже если значение не изменилось). При восстановлении связи качество меняется на хорошее и добавляется ещё одна запись в архив. Если мы правильно поняли, эти архивные данные затем и попадают отчёт (предполагаем что Вы используете источник данных "по-изменению"). Какой либо опцией исключить значения с новым качеством нельзя и если качество изменилось, то скада обязательно сделает отдельную запись в архиве.
Для решения задачи можно в отчёте добавить фильтр, который будет сравнивать значение в текущей строке со значением в пред. строке и если они одинаковы, то не добавлять строку. Если есть желание, то можете выслать текущую версию проекта на support@simple-scada.com, мы опишем как сделать фильтр для отчёта.
Название: Re: Вопрос по отчётам
Отправлено: Djakov от 04 Октября 2019, 10:25:57
Здравствуйте!
pan2000 спасибо за предложение, но этот вариант был испытан одним из первых. НЕ помогло.
Simple-Scada спасибо. Про сравнение строк хорошая идея (почему то сразу не пришла). Попробую сам разобраться.
Название: Re: Вопрос по отчётам
Отправлено: Simple-Scada от 04 Октября 2019, 10:53:59
Djakov, решение должно быть примерно такое:
1. Дважды кликнуть бэнд данных по заголовку;
2. В открывшемся окне на вкладке "Фильтры" добавить новый фильтр. В списке фильтра выбрать "Выражение";
3. Код выражения должен быть таким:
Код: (c#)
PreviousIsNull(Данные, "Value") ? true : ((double)Previous(Данные, "Value") != (double)Данные.Value)
, где Данные - имя источника данных. Value - колонка в источнике данных в которой нужно исключить повторяющиеся значения.
Название: Re: Вопрос по отчётам
Отправлено: Djakov от 04 Октября 2019, 11:40:33
Simple-Scada ОГРОМНОЕ спасибо.
Все отлично работает.