Подсистема реакций и сценариев (Reflex Center) — различия между версиями
Wikiadmin (обсуждение | вклад)  (→Замечания)  | 
				Wikiadmin (обсуждение | вклад)   (→Схема "Трансляция состояний (StateEvent) в менеджер событий ")  | 
				||
| Строка 78: | Строка 78: | ||
[[File:speed_bus.jpg|центр]]  | [[File:speed_bus.jpg|центр]]  | ||
| − | ==== Схема "Трансляция состояний (  | + | ==== Схема "Трансляция состояний в события (State Event) " ====  | 
| − | Пример   | + | Отслеживание изменений состояния элементов, соответствующих по типу или гуиду какому либо фильтру состояний из таблицы соответствия.<br />  | 
| + | Трансляция состояний, удовлетворяющих выбранному фильтру, в события типа StateEvent.<br />  | ||
| + | Пример трансляции состояний двух элементов :<br />  | ||
Для создания данной схемы необходимо добавить элементы и связи как описано в [[#Базовая схема| Базовой схеме]], так же элемент IpVideoCamera.  | Для создания данной схемы необходимо добавить элементы и связи как описано в [[#Базовая схема| Базовой схеме]], так же элемент IpVideoCamera.  | ||
В параметре Настройки (settings) элемента Reflex Center удалить присутствующий сценарий и добавить следующий:<br />  | В параметре Настройки (settings) элемента Reflex Center удалить присутствующий сценарий и добавить следующий:<br />  | ||
| − |   { "state event": {  | + |   {  | 
| + |   "state event": {  | ||
     "enabled": true,  |      "enabled": true,  | ||
     "source": [  |      "source": [  | ||
| − |        "BaseObject"    | + |        "BaseObject"  | 
     ],  |      ],  | ||
     "target": [  |      "target": [  | ||
| − |        "StateEvent"    | + |        "StateEvent"  | 
     ],  |      ],  | ||
     "condition": "(it is {0}) and (it[\"state\"].Text like \"{1}\")",  |      "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",  |      "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": {  |      "params": {  | ||
| − |        "server": "server"    | + |        "server": "server"  | 
     },  |      },  | ||
     "tree": {  |      "tree": {  | ||
| − |        "  | + |        "IpVideoCamera": {  | 
         "alarm_*": {},  |          "alarm_*": {},  | ||
         "error_*": {}  |          "error_*": {}  | ||
| + |       },  | ||
| + |       "Computer": {  | ||
| + |         "alarm_*": {}  | ||
       }  |        }  | ||
     },  |      },  | ||
     "operation": [  |      "operation": [  | ||
| − |        "update"    | + |        "update"  | 
     ],  |      ],  | ||
     "schedule": [],  |      "schedule": [],  | ||
| − |      "comment": ""    | + |      "comment": ""  | 
| − |    }}  | + |    }  | 
| + |  }  | ||
| + | В "tree": {0} - это IpVideoCamera, Computer, {1} - состояние элемента, транслируемое в менеджер событий (alarm_*, error_*).  | ||
Версия 09:28, 16 марта 2020
Содержание
Назначение
- Отслеживание изменения параметра объекта источника.
 - Поиск связанного с источником объекта приемника.
 - Выполнение действий с объектом приемником в соответствии с условием.
 
Настройка
- У компьютера/сервера должен быть настроен параметр сетевой адрес (ip).
 -  Параметры триггера:
- Текст скрипта (script).
 - Включен (enabled) - задействовать триггер.
 -  Настройки (settings) - список сценариев, имеющих следующие параметры:
- enabled - включить/выключить сценарий;
 - source - список гуидов и/или имен типов объектов источников;
 - target - путь от объекта источника к объекту приемнику;
 - condition - условия, применяемые к объекту источник (source);
 - action - действия, применяемые к объекту приемника (target);
 - params - список параметров рефлексов в виде таблицы ключ/значение, где ключ - имя параметра рефлекса, а значение - строковая форма значения параметра, подставляется в condition и action в виде {paramname}, где paramname - имя параметра;
 - tree - дерево из трех уровней где ключами являются значения числовых параметров condition и action, т.е. вида {0}, {1} и {2}, подходящей по смыслу ветки, где номер обозначает глубину, тогда как значение нижнего уровня подставляется вместо {3};
 -  operation - список указывающий операции сервера для запуска сценария:
- create - создание объекта;
 - update - изменение объекта;
 - delete - удаление объекта;
 
 
 
 - sсhedule - опциональный список расписаний для запуска скрипта (вместо запуска по событию) в расширенном формате cron;
 - comment - комментарий пользователя, описание сценария.
 
Замечания
- Скрипт запускается либо по расписанию (если указано), либо по событию.
 - Можно указывать несколько расписаний (так, например, можно настроить запуск действия во вторник в час дня и среду в два часа дня).
 - Последним элементом target должен быть указан желаемый тип приемника (даже если он совпадает с источником).
 - После запуска скрипта в параметре hash появится хеш текста скрипта, который должен быть равен тексту по следующей ссылке ХEШ, в том случае если скрипт не был изменен.
 - В Reflex Center может быть не один сценарий, но имена должны отличаться друг от друга.
 - Формат расписания cron расширен секундами следующим образом:
 
Базовая схема
В редакторе СКАДА необходимо добавить элементы, для этого необходимо:
- 1. Перейти на вкладку "Типы элементов" и выбрать в списке элемент Компьютер (Computer).
 
- 2. Дважды нажать на элемент Компьютер, после чего появится окно для добавления элемента.
 
- 3. Нажать кнопку "Добавить". Элемент появится на рабочей области.
 - 4. Аналогично пункту 2 добавить элементы: Менеджер устройств (AcuarioManager), EGS Модуль (EGSModule).
 - 5. Reflex Center (Скрипт необходимо импортировать отсюда Reflex Center).
- 1 Для того, чтобы импортировать скрипт необходимо сначала скопировать и вставить вышеуказанную ссылку в адресную строку браузера, нажать на клавиатуре Enter, в окне браузера нажать правой кнопкой мыши, в появившемся контекстном меню нажать на сохранить как и выбрать удобное для Вас местоположения сохранив скрипт с расширением .put. В редакторе СКАДА нажать на меню Действия > Импорт элементов > выбрать сохраненный скрипт.
 
 
Необходимо добавить следующие связи:
- Reflex Center: EGS вход:EGSInput + EGS Модуль: EGS Выход: EGSOutput.
 - EGS Модуль: Привязка к менеджеру: ManagingContent + Менеджер устройств: Менеджер устройств: ManagingContainer.
 - Менеджер устройств: ПО:SoftwareContent + Компьютер или Сервер: Установленное ПО:SoftwareContainer.
 
Сценарии:
Схема "Рассчитывание скорости и направления у движущегося объекта по предыдущему и текущему значению Расположения (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) а так же направление в зависимости от изменения расположения.
Схема "Трансляция состояний в события (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": ""
 }
}
В "tree": {0} - это IpVideoCamera, Computer, {1} - состояние элемента, транслируемое в менеджер событий (alarm_*, error_*).




