Simple-Scada forum

Simple-Scada 2 => Ошибки => Тема начата: Saveliy от 15 Января 2018, 01:47:19

Название: Зависание состояния кнопок или флага
Отправлено: Saveliy от 15 Января 2018, 01:47:19
Здравствуйте.

При использовании кнопки с фиксацией, если на контроллере происходит немедленный сброс бита после получения, ее анимация подвисает в состоянии ожидания обратной связи. Данный эффект не сбрасывается сам по себе и сохраняется в течение длительного времени (1 час точно), пока кнопка не дождется своей единицы в ответ или не перезагрузится клиент.

Это не влияет на функциональность, т.е. кнопка продолжает правильно отрабатывать нажатия, но визуально идентифицируется как неисправность.
Эффект распространяется и на флаги.

Так же есть особенность. При связи через kepware, проблема 100% воспроизводима. Через insat 50/50, видимо иногда он успевает вернуть записанное значение в качестве текущего, а уже потом приходит фактическое. В такой последовательности кнопка отрабатывает правильно.

В настоящее время тестирую скорость и различные сценарии использования, но в реальном проекте столкнусь с данной проблемой в следующих условиях:
1.   Есть бит ManualStart у объекта Motor.
2.   В нормальных условиях: кнопку нажали –запустился, отжали – остановился.
3.   При определенных условиях, например, включен режим Авто или следующий в цепочке механизм запрещает работу, команда не отработает и бит будет сразу сброшен контроллером. Что приведет к зависанию анимации.

Эффект бегущей полоски полезен в течение нескольких секунд, чтобы оператор понимал, система пыталась выполнить команду, но потом логично остановиться на текущем значении, особенно, если нет показаний потери связи.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Simple_Scada от 15 Января 2018, 13:59:52
Здравствуйте!

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

Цитировать
В настоящее время тестирую скорость и различные сценарии использования, но в реальном проекте столкнусь с данной проблемой в следующих условиях:
1.   Есть бит ManualStart у объекта Motor.
2.   В нормальных условиях: кнопку нажали –запустился, отжали – остановился.
3.   При определенных условиях, например, включен режим Авто или следующий в цепочке механизм запрещает работу, команда не отработает и бит будет сразу сброшен контроллером. Что приведет к зависанию анимации.

Обычно, если имеется ручной/автоматический режим работы механизма, то кнопки ручного управления не должны работать в автоматическом режиме. Это можно реализовать при помощи скриптов, используя свойство кнопки Enabled (https://simple-scada.com/help/script/enabled.html). Например, для блокировки кнопки в автоматическом режиме можно указать в доп. переменной кнопки переменную автоматического режима и написать скрипт на событие OnDataChangeEx кнопки:
Код: (delphi)
begin
  if Sender is TM_Button then      // проверяем, что Sender это кнопка
    with Sender as TM_Button do    // приводим Sender к типу "TM_Button"
      if VariableEx.AsInt = 1 then // если значение доп. переменной кнопки = 1
        Enabled := False           // отключаем доступ к кнопке
      else                         // иначе
        Enabled := True;           // включаем доступ к кнопке
end.
Этот скрипт универсальный и подойдет для любой кнопки. Таким образом, в автоматическом режиме кнопка будет недоступна и ее нельзя будет нажать. В Вашей задаче помимо автоматического режима имеются дополнительные блокировки, поэтому можно добавить переменную блокировки, которая будет принимать значение 1 при наличии любой блокировки или переключении механизма в автоматический режим. Затем, эту переменную блокировки указать в качестве доп. переменной кнопки и использовать скрипт приведенный выше, тогда кнопка будет недоступна при наличии любой блокировки и в автоматическом режиме.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Saveliy от 15 Января 2018, 17:04:12
Спасибо!

Глобальная настройка timeout контроля записи была бы даже лучше.

Да, блокировка неактивных элементов будет очень полезна. Но контроль на стороне исполнителя тоже необходим.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Simple_Scada от 16 Января 2018, 10:48:29
Здравствуйте!

Цитировать
Глобальная настройка timeout контроля записи была бы даже лучше.
Такую настройку добавить не получится. Можно будет только полностью отключить анимацию контроля записи.

Цитировать
Да, блокировка неактивных элементов будет очень полезна. Но контроль на стороне исполнителя тоже необходим.
Контроль на стороне контроллера безусловно необходим и отключать его не нужно. Способ с блокировкой неактивных кнопок мы привели для примера, так можно решить Вашу задачу не отключая анимацию контроля записи.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Saveliy от 16 Января 2018, 15:45:07
Добрый день!

Приведенный пример был одним из возможных вариантов. Проверил другой - "Режим точной досыпки". Затвор должен открыться на 700мс, что соответствует 20 кг песка. При такой задержке Scada иногда успевает получить подтверждение записи, иногда нет.

Зная данную особенность, можно обыграть поведение как на скаде, так и на плк. Либо отключить анимацию, как вы предложили.

Уточню, в чем вижу проблему:
т.е. работа прошла в штатном режиме, соответственно можно ожидать штатной индикации действия.

P.S. В целом, впечатления о скаде очень положительные. Некоторая легкость и простота, с сохранением всего необходимого, подкупают.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Simple_Scada от 17 Января 2018, 11:49:10
Здравствуйте!

Цитировать
Уточню, в чем вижу проблему:
  • Кнопка была нажата
  • Новое значение было передано OPC серверу
  • OPC сервер передал его контроллеру
  • Контроллер отработал
  • OPC сервер считал новое (которое уже такое же как старое) фактическое значение
  • SCADA получила фактическое значение

Если бы все так выполнялось, то проблемы бы не было. Проблема вероятно в том, что у Вас пункт 6 не выполняется и под вопросом пункт 5. Мы провели многочисленные тесты и у нас не получается воспроизвести описанную Вами ситуацию. Тестировали с различными интервалами сброса от 1 сек. до 50мс. Отправили Вам на почту видео с тестом на контроллере Schneider Electric, OPC-сервером KepServerEx и интервалом сброса 50мс.

Воспроизвести похожую ситуацию получается только если нажимать на кнопку в тот момент когда на контроллере в бит идет непрерывная запись 0. Но это не нормальная ситуация и при этом на OPC-сервере не происходит события OnDataChange и он не отправляет скаде информацию об изменении переменной. При такой ситуации пункты 5,6 не выполняются.

Вы используете последнюю версию Simple-Scada 2.2.7.1 ? На ситуацию может влиять установленная частота обновления переменной. Уточните, какая частота опроса установлена у переменной в редакторе (https://simple-scada.com/help/manual/variable-new.html)и на OPC-сервере(свойство переменной Scan Rate у KepServerEx). Также, может влиять общее количество переменных на OPC-сервере или какие-либо другие факторы.
Название: Re: Зависание состояния кнопок или флага
Отправлено: Saveliy от 17 Января 2018, 15:07:31
Здравствуйте!

Непрерывно записывать 0 - нормальная ситуация, любая импульсная команда по сути это делает:
Код
IF #cmdClear THEN
    FOR #i := 0 TO #maxI BY 1 DO
        #data[#i] := 0;
    END_FOR;   
    #cmdClear := FALSE;
END_IF;

Т.е. команда clear проживет всего несколько мс (в моем случае меньше 8мс) и сбросится.

Разумеется, на OPC серверах (в моем случае их 2 – встроенный OPC UA Server на S7-1500 и OPC DA KepServerEx 6) за это время не будет сгенерировано событий, и формально пункты 5 и 6 не происходят.
Могу перефразировать пункты:

5.   OPC сервер не считал новое значение, потому что оно уже такое же как старое.
6.   SCADA не получила новое значение, потому что у нее уже есть фактическое.

Ситуация все равно штатная. Нештатная ситуация, когда на контроллере одно значение, а на Scada другое, или, когда потеряна связь и состояние тега Bad.

По умолчанию, KepServerEx OPC UA Client работает в режиме Subscribe, но переключение в режим Poll и игра с частотой обновления глобально не решает проблему.

Проверил сейчас привязку KepServer напрямую через стандартный протокол Siemens.
Код
"IEC_Timer_0_DB".TON(IN:=#cmdTest,
                     PT:=#timeReset,    // #timeReset = 50ms
                     Q=> #TestQ);   

#cmdTest := #cmdTest AND (NOT #TestQ);
Да, ситуация улучшается, и 50мс тоже отрабатываются, как и у вас на Schneider (в отличии даже от 500мс через OPC UA).
Возможно переключу протокол на этапе запуска, если будет заметна разница. В процессе разработки UA очень удобен для импорта тегов.

Версия Scada 2.2.7.1
Название: Re: Зависание состояния кнопок или флага
Отправлено: Simple-Scada от 17 Января 2018, 15:16:56
Здравствуйте.

Цитировать
Разумеется, на OPC серверах (в моем случае их 2 – встроенный OPC UA Server на S7-1500 и OPC DA KepServerEx 6) за это время не будет сгенерировано событий, и формально пункты 5 и 6 не происходят.
Да, все верно и именно по этой причине при таком подходе нужно будет отключить анимацию присвоения, т.к. скада не узнает о том, что отправленная на присвоение единица действительно присвоилась (ведь 6 пункта не было).