Функциональные теги
Функциональный тег является вычисляемым тегом, значение которого рассчитывается по заданной функции и значению входного тега. Любой модуль может иметь любое количество функциональных тегов. Функциональные теги задаются в секции func.tags конфигурации модуля.
Общие параметры
Каждый функциональный тег имеет параметр beforeExecute. По умолчанию функциональные теги выполняются после обработки сигналов модуля. Значение beforeExecute: on позволяет выполнить тег до обработки сигналов.
Обязательный параметр func выбирает функцию. Поддерживаются идентификаторы avg и mul, записанные строчными буквами. Неизвестный или отсутствующий идентификатор приводит к ошибке загрузки функциональных тегов модуля.
В одном цикле модуль и функциональные теги выполняются в следующем порядке:
- выполняется модуль
- выполняются функциональные теги с
beforeExecute: on, расположенные непрерывно в начале секцииfunc.tags - обрабатываются сигналы модуля
- выполняются все оставшиеся функциональные теги
Порядок описания тегов в func.tags имеет значение. После первого тега с beforeExecute: off все последующие теги выполняются после обработки сигналов, независимо от значения их параметра beforeExecute.
Все реализованные функции создают тег результата с типом, заданным параметром type. Поддерживаются типы INT, LONG, DOUBLE, BOOL и STRING, регистр символов не имеет значения. По умолчанию используется INT. Вычисления производятся с типом double, после чего результат преобразуется к типу тега: для INT и LONG дробная часть отбрасывается, для BOOL ноль преобразуется в off, а ненулевое значение — в on, для STRING создаётся строковое представление числа. Если указан неизвестный тип, регистрируется ошибка и используется INT.
Если ссылка input не может быть разрешена, функция не изменяет текущее значение тега результата и повторяет попытку привязки в следующем цикле.
avg
Функция вычисления среднего значения входного тега за период времени.
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 и тег расположен в начальной группе таких тегов, функция выполняется до обработки сигналов модуля |
mul
Функция умножения значения входного тега на постоянный коэффициент.
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 и тег расположен в начальной группе таких тегов, функция выполняется до обработки сигналов модуля |