Подсистема реакций и сценариев (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_*).