Подсистема реакций и сценариев (Reflex Center)

Материал из Integra-S Wiki
Перейти к: навигация, поиск

Назначение

  1. Отслеживание изменения параметра объекта источника
  2. Поиск связанного с источником объекта приемника
  3. Выполнение действий с объектом приемником в соответствии с условием

Базовая схема

В редакторе СКАДА необходимо добавить элементы:

  1. Reflex Center (Скрипт необходимо импортировать отсюда http://maps.integra-s.com:5434/resources/typedef2017/egs/Reflex%20Center.put)
    1. Для того, чтобы импортировать скрипт необходимо сначала скопировать и вставить вышеуказанную ссылку в адресную строку браузера, нажать на клавиатуре Enter, в окне браузера нажать правой кнопкой мыши, в появившемся контекстном меню нажать на сохранить как и выбрать удобное для Вас местоположения сохранив скрипт с расширением .put. В редакторе СКАДА нажать на меню Действия > Импорт элементов > выбрать сохраненный скрипт
  2. Компьютер или Сервер (Computer/Server)
  3. Менеджер устройств (AcuarioManager)
  4. EGS Модуль (EGSModule)

Необходимо добавить следующие связи:

  1. Reflex Center: EGS вход:EGSInput + EGS Модуль: EGS Выход: EGSOutput
  2. EGS Модуль: Привязка к менеджеру: ManagingContent + Менеджер устройств: Менеджер устройств: ManagingContainer
  3. Менеджер устройств: ПО:SoftwareContent + Компьютер или Сервер: Установленное ПО:SoftwareContainer
Base connection reflex.jpg

Настройка

  1. У компьютера/сервера должен быть настроен параметр сетевой адрес (ip)
  2. Параметры триггера:
    1. Текст скрипта (script) - текст скрипта http://maps.integra-s.com:5434/resources/typedef2017/jsonpath.php?url=/egs/Reflex%20Center.put&path=0/params/script/value
    2. Включен (enabled) - задействовать триггер
    3. Настройки (settings) - список сценариев, имеющих следующие параметры:
      1. enabled - включить/выключить сценарий
      2. source - список гуидов и/или имен типов объектов источников
      3. target - путь от объекта источника к объекту приемнику
      4. condition - условия, применяемые к объекту источник (source)
      5. action - действия, применяемые к объекту приемника (target)
      6. params - список параметров рефлексов в виде таблицы ключ/значение, где ключ - имя параметра рефлекса, а значение - строковая форма значения параметра, подставляется в condition и action в виде {paramname}, где paramname - имя параметра
      7. tree - дерево из трех уровней где ключами являются значения числовых параметров condition и action, т.е. вида {0}, {1} и {2}, подходящей по смыслу ветки, где номер обозначает глубину, тогда как значение нижнего уровня подставляется вместо {3}
      8. operation - список указывающий операции сервера для запуска сценария:
        1. create - создание объекта
        2. update - изменение объекта
        3. delete - удаление объекта
  3. sсhedule - опциональный список расписаний для запуска скрипта (вместо запуска по событию) в расширенном формате cron:
  4. comment - комментарий пользователя, описание сценария

Замечания

  1. Скрипт запускается либо по расписанию (если указано), либо по событию
  2. Можно указывать несколько расписаний (так, например, можно настроить запуск действия во вторник в час дня и среду в два часа дня)
  3. Последним элементом target должен быть указан желаемый тип приемника (даже если он совпадает с источником)
  4. После запуска скрипта в параметре hash появится хеш текста скрипта, который должен быть равен тексту по следующей ссылке http://maps.integra-s.com:5434/resources/typedef2017/jsonpath.php?url=/egs/Reflex%20Center.put&path=0/params/hash/value, в том случае если скрипт не был изменен
  5. Формат расписания cron расширен секундами следующим образом:
Cron.jpg

Сценарии:

Схема "Рассчитывание скорости и направление у движущегося объекта по предыдущему и текущему значению Расположения (position)"

Пример работы:
Для создания данной схемы необходимо добавить элементы и связи как описано в Базовой схеме, так же элементы Автобус (Bus), Симулятор движения (Position Simulator 1),описание которого приведено на странице Симулятор движения (Position simulator 1), и настроить в свойствах триггера параметры:
данные о движении объекта (settings.input):
50.21979884154713,53.23603280606231,124 50.21992758757987,53.236084301430914,124 50.2200241471044,53.23613257828248,124 50.220136799883,53.236164762819776,124 50.22022263057147,53.23619372888256,124 50.22028700358784,53.23621303958015,124 50.22035137660421,53.2362387871633,124 50.220447936128735,53.236280626952755,124 50.2214349890462,53.23690500046691,124 50.220496215891025,53.23744568766287,124 50.21941260344898,53.23688247168483,124 50.22066251284994,53.23696936835009,124 50.220539131235235,53.23689856367324,124 50.22052303798115,53.23685994289082,124 50.22046939380084,53.23681810367033,124 50.220383563112364,53.23676660918871,124 50.22027091033376,53.236705459408626,124 50.22021190173542,53.236682930521006,128 50.22007242686663,53.23665396479085,128 50.21994368083395,53.236621780623125,128 50.2198632145635,53.236589596431095,128 50.21978811271108,53.2365702859042,128 50.21973446853077,53.23656063063748,128 50.21964327342427,53.23653488324884,128 50.21950379855548,53.23649626213669,128 50.21922484881795,53.23643189353865,128
Цель (гуид движущегося объекта (в данном примере 4858fbeb-c619-4849-b01f-e56f46465f11)). Для того чтобы узнать гуид элемента необходимо перейти в меню Редактирование > Настройки > включить Расширенный режим, далее выбрать свойство необходимого элемента, нажать ЛКМ на название элемента, после чего выполнится копирование гуида в буфер обмена.

Гуид элемента.png

В параметре Настройки (settings) элемента Reflex Center добавить сценарий:

{"speed and heading": {
   "enabled": true,
   "source": [
     "MoveableObject" 
   ],
   "target": [
     "MoveableObject" 
   ],
   "condition": "position; true",
   "action": "let pos0 = it[\"position\"].Trace(0) \r\nlet pos1 = it[\"position\"].Trace(1)\r\nlet secs = (pos0.DateTime - pos1.DateTime).TotalSeconds\r\nlet pos0 = try GeoPoint(string(pos0.Value)) else GeoPoint(double.NaN) \r\nlet pos1 = try GeoPoint(string(pos1.Value)) else GeoPoint(double.NaN) \r\n\r\nspeed   = pos1.Distance(pos0) / secs\r\nheading = pos1.RhumbBearing(pos0) ",
   "params": {},
   "tree": {},
   "operation": [
     "update" 
   ],
   "schedule": [],
   "comment": "" 
 }}