Правила с Lua-скриптами

02 февраля 2024

ID 152936

Для описания алгоритмов проверки значений тегов в правилах контроля процесса могут использоваться скрипты на языке программирования Lua. Lua-скрипты предоставляют возможности не только для проверки значений тегов, но и для добавления различных сведений в регистрируемые события и журналы работы процессов.

Lua-скрипт должен состоять из одной или нескольких функций. Имена функций должны быть уникальны среди всех правил с Lua-скриптами. Функция, с помощью которой отслеживаются значения тегов, называется триггерной функцией. Для регистрации события триггерная функция должна возвращать значение true.

Если в скрипте указана переменная, она должна быть инициализирована либо в самом скрипте (для применения только в этом скрипте), либо в отдельном глобальном скрипте (для применения во всех правилах с Lua-скриптами). Глобальный скрипт также может содержать вспомогательные функции, которые можно использовать в правилах с Lua-скриптами.

Триггерная функция вызывается при изменении значения какого-либо тега, используемого в функции. Впервые функция вызывается при получении всех значений тегов, используемых в функции.

Для получения значений тега в коде функции используется запись вида:

tag'основные_параметры_тега[:имя_поля][@модификатор]'[.направление_передачи]

где:

  • основные_параметры_тега – обязательные параметры, идентифицирующие тег в программе. Параметры разделяются двоеточием. Основные параметры представлены следующими параметрами из таблицы тегов:
    • Устройство.
    • Имя тега.
    • Идентификатор тега.
  • имя_поля – имя поля в структуре полей тега, представленной параметром Структурные значения в таблице тегов. Если поле является вложенным в другие поля, его имя указывается вместе с именами всех родительских полей, разделенных двоеточием. Если параметр имя_поля не указан, проверяется значение, которое является основным в структуре полей тега.
  • модификатор – определяет режим представления полученного значения. Предусмотрены следующие модификаторы:
    • str – полученное значение преобразуется в строковый тип.
    • type – в качестве значения передается название типа данных от полученного значения.
    • loc – в качестве значения передается закрепленное локализованное название для полученного значения (если локализованное название отсутствует, полученное значение преобразуется в строковый тип).

    Если модификатор не указан, передается само полученное значение. При этом тип данных значения не меняется.

  • направление_передачи – задает направление передачи полученного значения. Направление передачи может быть задано одним из следующих параметров:
    • R – значение получено при чтении из устройства.
    • W – значение получено при записи в устройство.
    • RW – любое направление полученного значения.

    Если направление передачи не задано, то передается значение, полученное с любого направления.

Записи для получения значений тегов могут использоваться в составе выражений (например, присвоение значений переменным или сравнение значений).

Для выполнения различных действий с помощью Lua-скрипта вы можете использовать вспомогательные функции, поддерживаемые Сервером. Имена вспомогательных функций начинаются с символа подчеркивания _.

Основные вспомогательные функции для добавления сведений через Lua-скрипты:

  • Функция добавления параметров для использования их в качестве дополнительных переменных в событиях:

    _AddEventParam('имя_параметра', значение_параметра)

    Имя и значение параметра могут быть заданы произвольно. Для использования параметра и его значения в событиях этот параметр должен быть указан в параметрах типа события в виде $extra.<имя_параметра>.

  • Функции для добавления записей в журнал работы процесса, в котором выполняется Lua-скрипт (обычно это процесс, имя которого начинается со слова Filter). В журнал вносится запись, заданная аргументом функции (переменной или константой):
    • Для создания записи с уровнем Ошибки:

      _WriteErrorLog(аргумент_функции)

    • Для создания записи с уровнем Важные:

      _WriteWarningLog(аргумент_функции)

    • Для создания записи с уровнем Инфо:

      _WriteInfoLog(аргумент_функции)

    • Для создания записи с уровнем Отладка:

      _WriteDebugLog(аргумент_функции)

    • Для создания записи с уровнем Отладка, которая может содержать несколько аргументов функции:

      print(аргумент_функции1, аргумент_функции2,…)

      Переменные или константы, заданные аргументами функции, разделяются в записи журнала символом табуляции.

    Записи в журнале не создаются, если уровень записи ниже уровня ведения журнала, установленного для процесса.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!