Подсистема реакций и сценариев (Reflex Center) — различия между версиями
Wikiadmin (обсуждение | вклад) (→Схема "Трансляция состояний в события (State Event) ") |
Wikiadmin (обсуждение | вклад) (→Схема "Трансляция состояний в события (State Event) ") |
||
Строка 115: | Строка 115: | ||
} | } | ||
} | } | ||
− | где {0} - это IpVideoCamera, Computer, {1} - транслируемое состояние элемента (alarm_*, error_*) | + | где {0} - это IpVideoCamera, Computer, {1} - транслируемое состояние элемента ("alarm_*", "error_*", так же возможно указать только "*", тем самым будет выполняться трансляция любого состояния) |
Версия 15:57, 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": "" } }
где {0} - это IpVideoCamera, Computer, {1} - транслируемое состояние элемента ("alarm_*", "error_*", так же возможно указать только "*", тем самым будет выполняться трансляция любого состояния)