Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: R3nK0 от 08 Апреля 2021, 13:10:54

Название: Игнорирование данных OPC сервера с плохим качеством
Отправлено: R3nK0 от 08 Апреля 2021, 13:10:54
Коллеги, добрый день!
Столкнулись с проблемой, в результате которой некорректно формируются отчеты, да и в целом просто нужно избежать таких ситуаций.
Проблема в перезагрузке OPC-сервера, при переподключении которого все переменные "подтягивают" нулевые значения с качеством тега "BAD".
Данные со временем обновляются (интервал, через который они обновляюьтся на OPC=10 минут) но нужно чтобы теги с плохим качеством отбраковывались, и в переменных SCADA хранилось прежнее значение OPC тега, как будто новых значений не приходило вовсе. Таким образом SimpleScada будет работать только с тегами, качество которых "GOOD". (если я правильно понимаю, SCADA сама сформирует посылку в OPC-сервер на запись предыдущих значений тегов, своеобразное автоматическое сохранение тегов)
Может кто-то уже реализовывал, или имеется встроенный метод проверки переменных на качество, подскажите как Вы реализовали, если будет такая информация.
Заранее благодарю!  ::)
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: Timothy Clement от 08 Апреля 2021, 15:04:26
Как вариант можно работать с внутренними переменными-копиями внешних. Создать скрипт "Изменились переменные" и в цикле обновлять значения внутренних переменных при изменении внешних. Перед присвоением значения проверять качество обращаясь к свойству внешних переменных IsGoodQuality.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: Simple_Scada от 08 Апреля 2021, 16:44:31
Здравствуйте.

1. Можно использовать вариант предложенный Timothy Clement - в этом случае лучше отключить архивацию у исходных переменных, включить архивацию у внутренних переменных-копий и в отчетах работать с ними.
2. Если Вы используете периодический отчет, то можно применить следующий способ: создать дополнительную внутреннюю переменную, затем создать скрипт с типом события "Изменились переменные (https://simple-scada.com/help/script/event-types.html)", добавить в него целевую переменную(по которой будет проверяться качество) как это описано здесь  (https://simple-scada.com/help/script/changemulvar.html)и в данном скрипте записывать в созданную ранее внутреннюю переменную 0, когда нужно отметить плохое качество и 1, когда качество хорошее. Чтобы отметки времени у внешней и внутренней переменной точно совпадали нужно в настройках OPC-сервера (https://simple-scada.com/help/manual/opcdanew.html) в опции "Метка времени" выбрать "Компьютер". Далее, можно в периодическом отчете (https://simple-scada.com/help/report/per-rep.html) на шаге добавления источника данных в опции "Тип фильтра"(описание можно найти по ссылке (https://simple-scada.com/help/report/index.html?newsource.html#pernew)) выбрать "по переменной" и указать нашу переменную для контроля качества. Таким образом, в источник данных попадут только те архивные данные, в которых переменная-фильтр была не равна нулю, т.е. в нашем случае только данные с хорошим качеством.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: R3nK0 от 09 Апреля 2021, 09:12:37
Да, идея с копиями переменных это первое что пришло в голову, однако переменных тегов 700 штук, и эти теги динамически присваиваются структурам к структурам скады (полям, строкам, лампочкам). В таком случае все существующие объекты придется перепривязывать к GOODquality-клонам тегов, то же самое в отчетах. Я надеялся что либо уже существует, либо планируется разработать уникальный скрипт, событием инициации которого будет обновление переменной с OPC сервера (у Вас уже есть скрипт "Выполнен метод OPC UA"), но до момента её перехода в SCADA. В таком случае можно было бы настроить проверку качества до того как тег попадет в SCADA.
С решением для отчетов это хороший вариант, но он не решает отображения на элементах скады, там все равно будут обнуляться все значения, хотя в отчеты они не попадут.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: R3nK0 от 09 Апреля 2021, 09:22:54
Также, хотел бы уточнить, раз уж пошла речь о скрипте по изменению переменных. Если мне нужно сделать скрип по изменению 500 штук переменных, мне в скрип по одной нужно заносить? потому что в меню выбора переменных они добавляются поштучно, и каждый раз приходится открыть список всех переменных и кликать по каждой. Прошу прощения за отход от темы, но это тоже очень важно! Спасибо
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: Timothy Clement от 09 Апреля 2021, 14:18:13
Насколько знаю группового выбора в этом меню нет, может ошибаюсь. Чтобы не перепривязывать все теги на мнемосхемах, выделите их в редакторе переменных, и групповым редактированием укажите "внутренняя переменная". Таким образом сохраните все имена в отчетах и на схеме. А теги с ОРС снова подтянете, добавится цифра в названии просто. А вообще может покрутить ОРС-сервер, не знаю какой используете, может настройками или внутренними скриптами ОРС можно эту проблему с BAD качеством обойти. Например задержку на первый опрос установить или в архив ОРС кидать и подтягивать значение при BAD качестве.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: Simple_Scada от 09 Апреля 2021, 22:36:52
Здравствуйте.

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

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

Цитировать
Если мне нужно сделать скрип по изменению 500 штук переменных, мне в скрип по одной нужно заносить?
Да. Скрипт по событию "Изменились переменные" не предназначен для подобных целей и обычно используется для расчетов с небольшим набором переменных. Если пользователь пытается создавать скрипты "Изменились переменные" с десятками-сотнями переменных, то это значит что он пытается перенести задачи, которые должен выполнять контроллер/OPC-сервер на скаду, что ни к чему хорошему не приведет и не имеет никакого смысла. Поэтому, касаемо процесса добавления переменных в скрипт "Изменились переменные" ничего менять не планируется.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: R3nK0 от 11 Апреля 2021, 18:41:33
Спасибо большое за ответы! Думаю тема закрыта. Хотя все же дополню, используется Insat Master OPC Scipt сервер, значения получаются через MQTT. Верно говорите, в нем можно написать скрипты, однако проблема возникает в моменты перезагрузки железа с сервером (так получается, это обстоятельство не зависит от нас, и приходится искать выход). После перезагрузки OPC серверу неоткуда подгрузить данные, даже если у него будет стоять скрипт на подгрузку предыдущего значения. Вот такая петля получается. А сам OPC до обновления данных на MQTT выставляет значение vt_empty, которое SCADA воспринимает как ноль. Кстати, в SCADA есть значение null? Поскольку, как я понял, отображающийся нолик это именно значение 0, а не "пусто", хоть и с плохим качеством.
Название: Re: Игнорирование данных OPC сервера с плохим качеством
Отправлено: Simple-Scada от 13 Апреля 2021, 10:30:03
Цитировать
Кстати, в SCADA есть значение null?
При отображении в компонентах скады оно будет равно 0.