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

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

Автор Тема: Игнорирование данных OPC сервера с плохим качеством  (Прочитано 4069 раз)

R3nK0

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Коллеги, добрый день!
Столкнулись с проблемой, в результате которой некорректно формируются отчеты, да и в целом просто нужно избежать таких ситуаций.
Проблема в перезагрузке OPC-сервера, при переподключении которого все переменные "подтягивают" нулевые значения с качеством тега "BAD".
Данные со временем обновляются (интервал, через который они обновляюьтся на OPC=10 минут) но нужно чтобы теги с плохим качеством отбраковывались, и в переменных SCADA хранилось прежнее значение OPC тега, как будто новых значений не приходило вовсе. Таким образом SimpleScada будет работать только с тегами, качество которых "GOOD". (если я правильно понимаю, SCADA сама сформирует посылку в OPC-сервер на запись предыдущих значений тегов, своеобразное автоматическое сохранение тегов)
Может кто-то уже реализовывал, или имеется встроенный метод проверки переменных на качество, подскажите как Вы реализовали, если будет такая информация.
Заранее благодарю!  ::)

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 166
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Как вариант можно работать с внутренними переменными-копиями внешних. Создать скрипт "Изменились переменные" и в цикле обновлять значения внутренних переменных при изменении внешних. Перед присвоением значения проверять качество обращаясь к свойству внешних переменных IsGoodQuality.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1407
    • Просмотр профиля
Здравствуйте.

1. Можно использовать вариант предложенный Timothy Clement - в этом случае лучше отключить архивацию у исходных переменных, включить архивацию у внутренних переменных-копий и в отчетах работать с ними.
2. Если Вы используете периодический отчет, то можно применить следующий способ: создать дополнительную внутреннюю переменную, затем создать скрипт с типом события "Изменились переменные", добавить в него целевую переменную(по которой будет проверяться качество) как это описано здесь и в данном скрипте записывать в созданную ранее внутреннюю переменную 0, когда нужно отметить плохое качество и 1, когда качество хорошее. Чтобы отметки времени у внешней и внутренней переменной точно совпадали нужно в настройках OPC-сервера в опции "Метка времени" выбрать "Компьютер". Далее, можно в периодическом отчете на шаге добавления источника данных в опции "Тип фильтра"(описание можно найти по ссылке) выбрать "по переменной" и указать нашу переменную для контроля качества. Таким образом, в источник данных попадут только те архивные данные, в которых переменная-фильтр была не равна нулю, т.е. в нашем случае только данные с хорошим качеством.

R3nK0

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Да, идея с копиями переменных это первое что пришло в голову, однако переменных тегов 700 штук, и эти теги динамически присваиваются структурам к структурам скады (полям, строкам, лампочкам). В таком случае все существующие объекты придется перепривязывать к GOODquality-клонам тегов, то же самое в отчетах. Я надеялся что либо уже существует, либо планируется разработать уникальный скрипт, событием инициации которого будет обновление переменной с OPC сервера (у Вас уже есть скрипт "Выполнен метод OPC UA"), но до момента её перехода в SCADA. В таком случае можно было бы настроить проверку качества до того как тег попадет в SCADA.
С решением для отчетов это хороший вариант, но он не решает отображения на элементах скады, там все равно будут обнуляться все значения, хотя в отчеты они не попадут.
« Изменён: 09 Апреля 2021, 09:14:09 от R3nK0 »

R3nK0

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Также, хотел бы уточнить, раз уж пошла речь о скрипте по изменению переменных. Если мне нужно сделать скрип по изменению 500 штук переменных, мне в скрип по одной нужно заносить? потому что в меню выбора переменных они добавляются поштучно, и каждый раз приходится открыть список всех переменных и кликать по каждой. Прошу прощения за отход от темы, но это тоже очень важно! Спасибо

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 166
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Насколько знаю группового выбора в этом меню нет, может ошибаюсь. Чтобы не перепривязывать все теги на мнемосхемах, выделите их в редакторе переменных, и групповым редактированием укажите "внутренняя переменная". Таким образом сохраните все имена в отчетах и на схеме. А теги с ОРС снова подтянете, добавится цифра в названии просто. А вообще может покрутить ОРС-сервер, не знаю какой используете, может настройками или внутренними скриптами ОРС можно эту проблему с BAD качеством обойти. Например задержку на первый опрос установить или в архив ОРС кидать и подтягивать значение при BAD качестве.
« Изменён: 09 Апреля 2021, 14:20:50 от Timothy Clement »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1407
    • Просмотр профиля
Здравствуйте.

В некоторых OPC-серверах имеется возможность настройки поведения при обрывах связи с устройствами, например в arOPC можно задать, чтобы вместо сброса на ноль в переменных оставались последние значения(см. скриншот). Встречали информацию, что то же самое можно сделать в MasterOPC через скрипты OPC-сервера. Возможно и в Вашем OPC-сервере имеются подобные настройки. То, что OPC-сервер сбрасывает значения переменных на ноль это нормальное поведение, т.к. исключает возможность просмотра недостоверных данных оператором в случаях, когда нет связи с устройством - обычно именно это и требуется. Проблема с такими данными лишь в том, что потом они могут попасть в отчет и привести к искажению результата. Но, как мы писали выше из отчета их можно исключить. Если в Вашем проекте по каким-либо причинам при плохом качестве переменных требуется отображать последнее значение, то проще всего для этого использовать OPC-сервер, который имеет такую настройку.

Цитировать
Я надеялся что либо уже существует, либо планируется разработать уникальный скрипт, событием инициации которого будет обновление переменной с OPC сервера, но до момента её перехода в SCADA
Такой возможности нет и не планируется.

Цитировать
Если мне нужно сделать скрип по изменению 500 штук переменных, мне в скрип по одной нужно заносить?
Да. Скрипт по событию "Изменились переменные" не предназначен для подобных целей и обычно используется для расчетов с небольшим набором переменных. Если пользователь пытается создавать скрипты "Изменились переменные" с десятками-сотнями переменных, то это значит что он пытается перенести задачи, которые должен выполнять контроллер/OPC-сервер на скаду, что ни к чему хорошему не приведет и не имеет никакого смысла. Поэтому, касаемо процесса добавления переменных в скрипт "Изменились переменные" ничего менять не планируется.
« Изменён: 10 Апреля 2021, 00:21:57 от Simple_Scada »

R3nK0

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Спасибо большое за ответы! Думаю тема закрыта. Хотя все же дополню, используется Insat Master OPC Scipt сервер, значения получаются через MQTT. Верно говорите, в нем можно написать скрипты, однако проблема возникает в моменты перезагрузки железа с сервером (так получается, это обстоятельство не зависит от нас, и приходится искать выход). После перезагрузки OPC серверу неоткуда подгрузить данные, даже если у него будет стоять скрипт на подгрузку предыдущего значения. Вот такая петля получается. А сам OPC до обновления данных на MQTT выставляет значение vt_empty, которое SCADA воспринимает как ноль. Кстати, в SCADA есть значение null? Поскольку, как я понял, отображающийся нолик это именно значение 0, а не "пусто", хоть и с плохим качеством.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Цитировать
Кстати, в SCADA есть значение null?
При отображении в компонентах скады оно будет равно 0.