Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: azrael454 от 06 Марта 2020, 10:41:08

Название: Вопрос по фильтрам
Отправлено: azrael454 от 06 Марта 2020, 10:41:08
Добрый день, вопрос следующий.

Имеется датчик давления, с которого считывается аналог 4-20 мА, который идет через S7-1200, который потом выглядит как число от 0 до 27648. Датчик иногда капризничает и выдает меньше 4 мА, что сказывается на сигнале, у которого значение становится больше 27648 (специфика Сименса, дело не в этом). Зная этот факт, хочу ввести фильтр на значение давления. Ввел фильтр мин-макс, на диапазон датчика, но вижу картину на трендах, что он как бы просто рубит значения выше установленного предела. А надо так, чтобы при капризе датчика ( значение > 27648 или значение < 0), масштабируемое значение давление было равно 0. 

пытался скриптом по изменению переменных реализовать, но не увидел пока результата. Может что-то неправильно делаю?
Код: (delphi)
//ФИЛЬТР ПОМЕХ ЗНАЧЕНИЯ ДАВЛЕНИЯ С КОНТРОЛЛЕРА S7-1200
begin
if p5_BP1_DownArchiPress.Value < 0 then     //проверка на нижнюю границу аналогового значения
   p5_PressureSC.Value:=0;                  //обнуление масштабируемого значения давления
if p5_BP1_DownArchiPress.Value > 27648 then //проверка на верхнюю границу аналогового значения
   p5_PressureSC.Value:=0;                  //обнуление масштабируемого значения давления
end.
Есть вопрос и предложение:
вопрос: фильтр отклонений имеет смысл пробовать здесь использовать? так как по картинке примера работы я вижу примерно то, что и нужно, что он присваивает 0 при превышении значение на отклонение.
предложение: добавить в UI настройки фильтра мин-макс поля для ввода значений, которые будут присвоены при превышении верхней и нижней границ с возможностью их не указывать. мне кажется это сделает применение этого фильтра более гибким.
Название: Re: Вопрос по фильтрам
Отправлено: Simple-Scada от 09 Марта 2020, 16:03:41
Здравствуйте.

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

Цитировать
пытался скриптом по изменению переменных реализовать, но не увидел пока результата. Может что-то неправильно делаю?
Если скрипт с типом события "Изменились переменные" (https://simple-scada.com/help/script/changemulvar.html), то убедитесь, что Вы добавили в список переменных этого скрипта, переменную p5_BP1_DownArchiPress. Только скрипт будет выполняться при каждом изменении p5_BP1_DownArchiPress.
Если скрипт назначен на событие OnDataChange какого-то объекта, то убедитесь что этот объект связан с переменной p5_BP1_DownArchiPress.
Также в скрипте Вы забыли копировать значение из переменной, если границы не нарушены. Правильный код скрипта должен быть таким:
Код: (delphi)
begin
  if (p5_BP1_DownArchiPress.AsInt < 0) or (p5_BP1_DownArchiPress.AsInt > 27648) then   // если одна из границ нарушена
    p5_PressureSC.Value := 0                             // то обнуляем значение
  else                                                   // иначе
    p5_PressureSC.Value := p5_BP1_DownArchiPress.Value;  // копируем значение
end.