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

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

Назначение

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

Настройка

  1. У компьютера/сервера должен быть настроен параметр сетевой адрес (ip).
  2. Параметры триггера:
    1. Текст скрипта (script).
    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 появится хеш текста скрипта, который должен быть равен тексту по следующей ссылке ХEШ, в том случае если скрипт не был изменен.
  5. В Reflex Center может быть не один сценарий, но имена должны отличаться друг от друга.
  6. Формат расписания cron расширен секундами следующим образом:
Cron.jpg

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

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

1. Перейти на вкладку "Типы элементов" и выбрать в списке элемент Компьютер (Computer).
Computer.jpg
2. Дважды нажать на элемент Компьютер, после чего появится окно для добавления элемента.
Add element.jpg
3. Нажать кнопку "Добавить". Элемент появится на рабочей области.
4. Аналогично пункту 2 добавить элементы: Менеджер устройств (AcuarioManager), EGS Модуль (EGSModule).
5. Reflex Center (Скрипт необходимо импортировать отсюда Reflex Center).
1 Для того, чтобы импортировать скрипт необходимо сначала скопировать и вставить вышеуказанную ссылку в адресную строку браузера, нажать на клавиатуре Enter, в окне браузера нажать правой кнопкой мыши, в появившемся контекстном меню нажать на сохранить как и выбрать удобное для Вас местоположения сохранив скрипт с расширением .put. В редакторе СКАДА нажать на меню Действия > Импорт элементов > выбрать сохраненный скрипт.

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

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

Сценарии:

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

Пример работы:
Версия Acuario Manager не ниже 2.11.1.229. Для создания данной схемы необходимо добавить элементы и связи как описано в Базовой схеме, так же элементы Автобус (Bus), Симулятор движения (Position Simulator 1),описание которого приведено на странице Симулятор движения (Position simulator 1), и настроить в свойствах Симулятора движения параметры.
В параметре Настройки (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": "" 
 }}


Далее необходимо запустить Acuario Manager. В клиенте Интегра планета Земля у движущегося объекта будет отображаться Скорость (speed) а так же направление в зависимости от изменения расположения.

Speed bus.jpg

Схема "Трансляция состояний в события (State Event) "

Отслеживание изменений состояния элементов.
Трансляция состояний, удовлетворяющих выбранному фильтру, в события типа StateEvent.
Пример трансляции состояний двух элементов :
Для создания данной схемы необходимо добавить элементы и связи как описано в Базовой схеме, так же элемент IpVideoCamera. В параметре Настройки (settings) элемента Reflex Center добавить следующий сценарий:

{
 "state event": {
   "enabled": true,
   "source": [
     "BaseObject"
   ],
   "target": [
     "StateEvent"
   ],
   "condition": "(it is {0}) and (it[\"state\"].Text like \"{1}\")",
   "action": "owner = string(source.Id); server = string(source.ServerId); position = source.position; state = source[\"state\"].Text?.Replace?('_', '.'); datetime = source[\"state\"].DateTime; version  = source.Version; itemtype = source.GetType().Name; name = source.name\r\n",
   "params": {
     "server": "server"
   },
   "tree": {
     "IpVideoCamera": {
       "alarm_*": {},
       "error_*": {}
     },
     "Computer": {
       "alarm_*": {}
     }
   },
   "operation": [
     "update"
   ],
   "schedule": [],
   "comment": ""
 }
}

где {0} - это IpVideoCamera, Computer, {1} - транслируемое состояние элемента ("alarm_*", "error_*", так же возможно указать только "*", тем самым будет выполняться трансляция любого состояния)

Схема "Открытие шлагбаума по sip при вхождении цели в зону"

Данная схема предназначена для открытия шлагбаума по sip при вхождении указанных целей. Для создания данной схемы необходимо добавить следующие элементы:

  1. Zone Controller (Скрипт необходимо импортировать отсюда http://maps.integra-s.com:5434/resources/typedef2017/egs/Zone%20Controller.put)
  2. Reflex Center (Скрипт необходимо импортировать отсюда http://maps.integra-s.com:5434/resources/typedef2017/egs/Reflex%20Center.put)
  3. Компьютер или Сервер (Computer/Server)
  4. Менеджер устройств (AcuarioManager)
  5. EGS Модуль (EGSModule)
  6. IntegraVideo7Sip
  7. Зона (Zone)
  8. Шлагбаум (Bascule_barrier)
  9. Движущийся объект (например Автобус)

Для того, чтобы импортировать скрипт необходимо сначала скопировать и вставить вышеуказанную ссылку в адресную строку браузера, нажать на клавиатуре Enter, в окне браузера нажать правой кнопкой мыши, в появившемся контекстном меню нажать на сохранить как и выбрать удобное для Вас местоположения сохранив скрипт с расширением .put. В редакторе СКАДА нажать на меню Действия > Импорт элементов > выбрать сохраненный скрипт.
Необходимо добавить следующие связи:

  1. Zone Controler: EGS вход:EGSInput + EGS Модуль: EGS Выход: EGSOutput
  2. Reflex Center: EGS вход:EGSInput + EGS Модуль: EGS Выход: EGSOutput
  3. EGS Модуль: Привязка к менеджеру: ManagingContent + Менеджер устройств: Менеджер устройств: ManagingContainer
  4. Менеджер устройств: ПО:SoftwareContent + Компьютер или Сервер: Установленное ПО:SoftwareContainer
  5. IntegraVideo7Sip: Привязка к менеджеру: ManagingContent + Менеджер устройств: Менеджер устройств: ManagingContainer
  6. Шлагбаум: Логический вход: LogicInput + IntegraVideo7Sip: Логический выход: LogicOutput
  7. Зона: Логический выход: LogicOutput + Шлагбаум: Логический вход: LogicInput
Схема шлагбаума.jpg

Далее необходимо настроить параметры элементов в свойствах элемента:
1. Zone Controller
Назначение
Определение вхождения целей MoveableObject в охраняемые зоны Zone
Генерирование событий ZoneEvent о входе цели в зону и выходе цели из зоны
Расчет и сохранение списка зон, в которые входит цель trace_zones
Генерирование событий о резком изменении скорости и направления цели
Генерирование событий об остановке и начале движения после остановки
Генерирование событий об превышении скорости и возврате к нормальной скорости
Генерирование событий об начале и окончании опасного сближения
Расчет числового приоритета (очередности) цели trace_order
Настройки (settings):
values - числовые значения для некоторых приоритетов:
high - повышенный приоритет (1 < high < MaxValue)
low - пониженный приоритет (0 < low < 1)
server - строка содержащая либо гуид сервера, на который следует отправлять события, либо имя параметра самого события, содержащего этот гуид, например: server

Zone controll.png

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

3. Компьютер или Сервер
Настроить сетевой адрес

4. IntegraVideo7Sip
Сетевой адрес sip, пароль sip, порт sip, Адрес URL, Логин, Пароль
При отправки команды на шлагбаум если соответствующий номер прописан, на сервер Интегра-Видео VII sip будет послана команда sip:invite
5. Зона (Zone)
area - область обслуживания (Координаты появятся после создания зоны в клиенте "Интегра планета Земля")
area_heights - высоты области (Появится после создания зоны в клиенте "Интегра планета Земля").
trace_factor - дополнительный делитель числового приоритета для зоны
trace_settings - настройки слежения по зоне имеют следующие параметры:
defaults - таблица соответствия типа цели приоритету
detectors - список различных настроек детекторов, содержит следующие параметры:
enabled - включить\выключить детектор
types - список типов, для которых настраивается данный детектор
exit_threshold - погрешность позиции для определения выхода из зоны, например: 10
speed_limit - максимальная допустимая скорость, например: 7
speed_change_threshold - порог изменения скорости, например: 20
heading_change_threshold - порог изменения направления, например: 40
stop_threshold - порог отсутствия движения, например: 0.6
approach_threshold - минимальное допустимое расстояние между целями, например: 20
alarm_actions - список флагов для выбора действий по зоне, которые считаются тревожными, например:
enter - вход в зону
exit - выход из зоны
stop - остановка
start - начало движения
too_fast - превышение скорости
not_too_fast - прекращение превышения скорости
severe_speed_change - резкое изменение скорости
severe_heading_change - резкое изменение направления
dangerous_approach - опасное сближение
no_dangerous_approach - прекращение опасного сближения
attention_actions - список флагов для выбора действий по зоне, по которым необходимо привлечение внимания
Определяются следующие действия цели в зоне:
enter - вход в зону
exit - выход из зоны
stop - остановка
start - начало движения
too_fast - превышение скорости
not_too_fast - прекращение превышения скорости
severe_speed_change - резкое изменение скорости
severe_heading_change - резкое изменение направления
dangerous_approach - опасное сближение
no_dangerous_approach - прекращение опасного сближения
События
Событие о действии цели в зоне ZoneEvent, содержит следующие параметры:
owner - идентификатор зоны
server - идентификатор сервера трекинга
position - географическая позиция цели
detector - идентификатор триггера
alarm - признак тревожного события
action - действие, см. выше
target - идентификатор цели
target_type - тип цели
target_info - краткая информация о цели
Замечания
Параметр trace_order рассчитывается для всех целей в графе как описано тут Приоритет слежения.
Для целей в зоне с приоритетом ignore осуществляются все расчеты, однако никакие события не генерируются
Для целей в зоне с позицией, помеченной outofdate, расчеты не осуществляются и события не генерируются, однако сами цели не удаляются из зоны
Для целей в зоне с пустой позицией расчеты не осуществляются, события не генерируются и сами цели удаляются из зоны
Если цель без указанного пользователем приоритета (т.е. DEFAULT) входит сразу в несколько зон с различными настройками приоритетов по умолчанию defaults, то выбирается наибольший, т.к. такая ситуация может сложиться только в том случае, если зоны пересекаются
Скрипту необходима актуализация параметра position целей (пометка как outofdate или сброс в null)
Цель считается вошедшей в зону, если ее позиция входит внутрь соответствующего полигона зоны
Цель считается вышедшей из зоны, если круг радиуса exit_threshold вокруг позиции цели полностью выходит из соответствующего полигона зоны

6.Шлагбаум
Высота, расположение, номер телефона для открытия шлагбаума, номер телефона для закрытия шлагбаума

Пример работы:
1. Создать схему как описано выше
2. Элементу Зона настроить параметры:

  • область обслуживания (area): POLYGON((50.2183189 53.2368202,50.2208366 53.2379951,50.2220306 53.2369308,50.2197838 53.2357864,50.2197647 53.2358017,50.2183189 53.2368202))
  • высота области (area_heights):
  • 132.20870971679688
  • 127.05160522460938
  • 123.02214050292969
  • 125.25485229492188
  • 125.34675598144531
  • Настройки слежения (trace_settings):
 {"defaults": {
   "Bus": "high"
  },
  "detectors": [
  {
  "enabled": true,
   "types": [
   "Bus"
   ],
  "exit_threshold": 0,
  "speed_limit": 7,
  "speed_change_threshold": 20,
  "heading_change_threshold": 40,
  "stop_threshold": 0.6,
  "approach_threshold": 20,
  "alarm_actions": [
   "exit",
   "enter"
   ],
  "attention_actions": [
   "exit",
   "enter" 
  ]
  }
  ]
  }

3. Элементу Reflex Center настроить параметр:

  • Настройки:
 {"responsive commander": {
     "enabled": true,
     "source": [
       "4858fbeb-c619-4849-b01f-e56f46465f11"
     ],
     "target": [
       "trace_zones",
       "Zone",
       "Pin",
       "Bascule_barrier" 
     ],
     "condition": "trace_zones is not empty",
     "action": "command = \"open\"",
     "params": {},
     "tree": {},
     "operation": [
       "update" 
     ],
     "schedule": [],
     "comment": "" 
   }}

где, в source указан гуид движущегося объекта (так же можно указать имя типа, в данном примере Bus, т.е. при входе в зону любого объекта Bus будет открываться шлагбаум)
в target слежение в зоне (trace_zones), шлагбаум(Bascule_barrier) подключенный к зоне (Zone) любим видом пина (Pin)
в condition - условие (если зона не пуста (trace_zones is not empty))
в action - выполнится команда открыть (command = \"open\") как только в зону попадет движущийся объект
3. Далее если объект не движется, можно запустить скрипт "Симулятор движения (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

Результат:
Для просмотра результата необходимо зайти в Менеджер событий.
Настроить вкладку на необходимый сервер и параметры "Событие в зоне", шлагбаум.
Далее после входа/выхода в зону движущегося объекта будет транслироваться событие о входе/выходе и выполнение команды "Открыть" у шлагбаума.

Событие в зоне.png

Пример схемы с двумя зонами и шлагбаумами

Схема с двумя зонами и шлагбаумами.png