Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: bolfram от 11 Июня 2021, 11:28:49

Название: Как не архивировать ошибочные данные с устройства в трендах
Отправлено: bolfram от 11 Июня 2021, 11:28:49
Добрый день. С устройства на объекте считываются данные по уровню воды, устройство, в силу неисправности, время от времени выдает ошибку и передает максимально возможное значение, которое в сотни раз превышает действительное и огромным скачком архивируется в трендах. При этом также с устройства приходит в отдельную булевую переменную сообщение об ошибке. Подскажите, пожалуйста, есть ли возможность реализовать скрипт, который будет прекращать архивирование переменной и сохранять последнее нормальное значение при получении информации об ошибке или резком скачке числа в переменной? Спасибо
Название: Re: Как не архивировать ошибочные данные с устройства в трендах
Отправлено: Simple_Scada от 11 Июня 2021, 12:14:58
Здравствуйте.

Можно у переменной включить "фильтр мин. макс." (https://simple-scada.com/help/manual/varfilter.html), тогда значения переменной будут автоматически фильтроваться и при выходе их за границы диапазона, данные значения будут отсекаться и в архив не будут попадать значения больше установленного диапазона. Например, если установить фильтр 0-100, то при значении 150 в архив попадет значение 100. Если такой вариант не подходит - см. другие варианты ниже.

Цитировать
есть ли возможность реализовать скрипт, который будет прекращать архивирование переменной и сохранять последнее нормальное значение при получении информации об ошибке или резком скачке числа в переменной?
Можно создать скрипт с типом события "Изменились переменные (https://simple-scada.com/help/script/changemulvar.html)", добавить в него требуемую переменную и написать нужные условия, например записывать значения из нашей переменной в другую внутреннюю переменную пока "булевая переменная об ошибке" не равна 1. Таким образом, во второй переменной будут отфильтрованные значения первой переменной и можно будет включить архивацию у нее и использовать ее в проекте вместо первой переменной. Но стоит учитывать, что все это будет работать только если "булевая переменная об ошибке" будет изменяться и считываться быстрее, чем значение переменной изменится на недопустимое. Также, если переменная при ошибке принимает всегда какое-то фиксированное значение, то можно в скрипте "Изменились переменные" проверять неравенство этому значению и записывать значения в другую внутреннюю переменную, тогда во второй переменной гарантированно будут все значения первой переменной, за исключением этого фиксированного значения.