doc:jroboplc:functags

Функциональные теги

Функциональный тег является вычисляемым тегом, значение которого рассчитывается по заданной функции и значению входного тега. Любой модуль может иметь любое количество функциональных тегов. Функциональные теги задаются в секции func.tags конфигурации модуля.

Каждый функциональный тег имеет параметр beforeExecute. По умолчанию функциональные теги выполняются после обработки сигналов модуля. Значение beforeExecute: on позволяет выполнить тег до обработки сигналов.

Обязательный параметр func выбирает функцию. Поддерживаются идентификаторы avg и mul, записанные строчными буквами. Неизвестный или отсутствующий идентификатор приводит к ошибке загрузки функциональных тегов модуля.

В одном цикле модуль и функциональные теги выполняются в следующем порядке:

  1. выполняется модуль
  2. выполняются функциональные теги с beforeExecute: on, расположенные непрерывно в начале секции func.tags
  3. обрабатываются сигналы модуля
  4. выполняются все оставшиеся функциональные теги

Порядок описания тегов в func.tags имеет значение. После первого тега с beforeExecute: off все последующие теги выполняются после обработки сигналов, независимо от значения их параметра beforeExecute.

Все реализованные функции создают тег результата с типом, заданным параметром type. Поддерживаются типы INT, LONG, DOUBLE, BOOL и STRING, регистр символов не имеет значения. По умолчанию используется INT. Вычисления производятся с типом double, после чего результат преобразуется к типу тега: для INT и LONG дробная часть отбрасывается, для BOOL ноль преобразуется в off, а ненулевое значение — в on, для STRING создаётся строковое представление числа. Если указан неизвестный тип, регистрируется ошибка и используется INT.

Если ссылка input не может быть разрешена, функция не изменяет текущее значение тега результата и повторяет попытку привязки в следующем цикле.

Функция вычисления среднего значения входного тега за период времени.

plugin.peripherial:

  module.W1:
    descr:    promauto.gelios.flow
    type:     modbus
    tags:
      - name:          CurFlow
        address:       0x1002
        type:          int32
        access:        ro

    func.tags:
      CurFlowAvg:
        func:          avg
        type:          long
        input:         CurFlow
        period:        30_000

В данном примере создаётся функциональный тег с именем CurFlowAvg, в котором вычисляется среднее значение тега CurFlow за последние 30 секунд. При каждом выполнении функции происходит следующее:

  • входное значение считывается как double и, с учётом параметра distinct, добавляется в массив накопления
  • из массива накопления удаляются отсчёты старше period, при этом в массиве всегда сохраняется как минимум один последний отсчёт
  • обычное арифметическое среднее всех отсчётов массива записывается в тег результата

Среднее вычисляется по накопленным отсчётам без учёта длительности каждого значения. При distinct: off отсчёт добавляется в каждом цикле выполнения. При distinct: on отсчёт добавляется только тогда, когда его значение типа double отличается от последнего добавленного значения.

Если в тег результата извне записать ноль, массив накопления очищается. При доступном входном теге в том же цикле после очистки в массив добавляется текущее значение, и результат вычисляется заново.

Параметр Умолчание Описание
func avg — идентификатор функции
type INT Тип тега результата: INT, LONG, DOUBLE, BOOL или STRING
input Ссылка на тег входных данных, см. Формат записи ссылки на тег
period 0 Период усреднения в миллисекундах. Отрицательное значение заменяется нулём
distinct off Если on, входное значение добавляется только при его отличии от последнего добавленного значения
beforeExecute off Если on и тег расположен в начальной группе таких тегов, функция выполняется до обработки сигналов модуля

Функция умножения значения входного тега на постоянный коэффициент.

plugin.peripherial:

  module.W1:
    descr:    promauto.gelios.flow
    type:     modbus
    tags:
      - name:          CurFlow
        address:       0x1002
        type:          int32
        access:        ro

    func.tags:
      CurFlowScaled:
        func:          mul
        type:          double
        input:         CurFlow
        mul:           0.001

В данном примере создаётся функциональный тег CurFlowScaled. При каждом выполнении значение CurFlow считывается как double, умножается на 0.001, а результат записывается в CurFlowScaled.

Параметр Умолчание Описание
func mul — идентификатор функции
type INT Тип тега результата: INT, LONG, DOUBLE, BOOL или STRING
input Ссылка на тег входных данных, см. Формат записи ссылки на тег
mul 1.0 Постоянный коэффициент, на который умножается входное значение
beforeExecute off Если on и тег расположен в начальной группе таких тегов, функция выполняется до обработки сигналов модуля
  • doc/jroboplc/functags.txt
  • Last modified: 2026/09/04 14:47
  • by denis