Правила с Lua-скриптами
Для описания алгоритмов проверки значений тегов в правилах контроля процесса могут использоваться скрипты на языке программирования Lua. Lua-скрипты предоставляют возможности не только для проверки значений тегов, но и для добавления различных сведений в регистрируемые события и журналы работы процессов.
Lua-скрипт должен состоять из одной или нескольких функций. Имена функций должны быть уникальны среди всех правил с Lua-скриптами. Функция, с помощью которой отслеживаются значения тегов, называется триггерной функцией. Для регистрации события триггерная функция должна возвращать значение true.
Если в скрипте указана переменная, она должна быть инициализирована либо в самом скрипте (для применения только в этом скрипте), либо в отдельном глобальном скрипте (для применения во всех правилах с Lua-скриптами). Глобальный скрипт также может содержать вспомогательные функции, которые можно использовать в правилах с Lua-скриптами.
Триггерная функция вызывается при изменении значения какого-либо тега, используемого в функции. Впервые функция вызывается при получении всех значений тегов, используемых в функции.
Для получения значений тега в коде функции используется запись вида:
tag'основные_параметры_тега[:имя_поля][@модификатор]'[.направление_передачи]
где:
основные_параметры_тега– обязательные параметры, идентифицирующие тег в программе. Основные параметры представлены следующими параметрами из таблицы тегов:- Устройство.
Этот параметр отделяется от следующего символом
: - Имя тега.
Этот параметр отделяется от следующего символом
/ - Идентификатор тега.
- Устройство.
имя_поля– имя поля в структуре полей тега, представленной параметром Структурные значения в таблице тегов. Если поле является вложенным в другие поля, его имя указывается вместе с именами всех родительских полей, разделенных двоеточием. Если параметримя_поляне указан, проверяется значение, которое является основным в структуре полей тега.модификатор– определяет режим представления и получения данных. Предусмотрены следующие модификаторы:type– в качестве значения передается название типа данных полученного значения.str– полученное значение преобразуется в строковый тип.loc– в качестве значения передается закрепленное локализованное название для полученного значения (если локализованное название отсутствует, полученное значение преобразуется в строковый тип).ts– для получения метки времени последнего обновления значения тега (время UTC в микросекундах с 1970.01.01). Модификатор не применяется для полей.
Если модификатор не указан, передается само полученное значение. При этом тип данных значения не меняется.
направление_передачи– задает направление передачи полученного значения. Направление передачи может быть задано одним из следующих параметров:r– значение получено при чтении из устройства.w– значение получено при записи в устройство.rw– любое направление полученного значения.
Если направление передачи не задано, то передается значение, полученное с любого направления.
Пример
tag'BayController:BayControllerQ.T1MMXU1.PhV.phsA/73:cVal:mag:f'
где:
BayController– имя устройства.BayControllerQ.T1MMXU1.PhV.phsA– имя тега.73– идентификатор тега.cVal:mag:f– имя поля вместе с именами родительских полей.
Записи для получения значений тегов могут использоваться в составе выражений (например, присвоение значений переменным или сравнение значений).
Для выполнения различных действий с помощью Lua-скрипта вы можете использовать вспомогательные функции, поддерживаемые Сервером. Имена вспомогательных функций начинаются с символа подчеркивания _.
Основные вспомогательные функции для добавления сведений через Lua-скрипты:
- Функция добавления параметров для использования их в качестве дополнительных переменных в событиях:
_AddEventParam('
имя_параметра',значение_параметра)Имя и значение параметра могут быть заданы произвольно. Для использования параметра и его значения в событиях этот параметр должен быть указан в параметрах типа события в виде
$extra.<имя_параметра>. - Функции для добавления записей в журнал работы процесса, в котором выполняется Lua-скрипт (обычно это процесс, имя которого начинается со слова
Filter). В журнал вносится запись, заданная аргументом функции (переменной или константой):- Для создания записи с уровнем Ошибки:
_WriteErrorLog(
аргумент_функции) - Для создания записи с уровнем Важные:
_WriteWarningLog(
аргумент_функции) - Для создания записи с уровнем Инфо:
_WriteInfoLog(
аргумент_функции) - Для создания записи с уровнем Отладка:
_WriteDebugLog(
аргумент_функции) - Для создания записи с уровнем Отладка, которая может содержать несколько аргументов функции:
print(
аргумент_функции1,аргумент_функции2,…)Переменные или константы, заданные аргументами функции, разделяются в записи журнала символом табуляции.
Записи в журнале не создаются, если уровень записи ниже уровня ведения журнала, установленного для процесса.
- Для создания записи с уровнем Ошибки: