Вычисляемые параметры
Определение вычисляемых параметров
Механизм задания вычисляемых параметров предоставляет мощный и гибкий инструмент для расчета дополнительных параметров, которые необходимо постоянно рассчитывать по выборке измеряемых параметров.
С точки зрения обработки, вычисляемые параметры ничем не отличаются от измеряемых. Вычисляемый параметр можно связать с контрольной процедурой, сформировать с ним события, либо вывести его на виджет.
Примеры использования вычисляемых параметров:
- Два электросчетчика присылают показания энергопотребления, но пользователю важно получать общее значение. Для этого необходимо определить вычисляемый параметр, который будет рассчитывать сумму полученных показаний от электросчетчиков.
- В помещении установлено 10 температурных датчиков, но пользователю необходимо получать среднее значение. Для этого необходимо определить вычисляемый параметр, который будет рассчитывать среднее значение параметра от 10 датчиков.
- Три считывателя меток beacon передают данные о расстоянии, но пользователю необходима информация о расположении метки на плане помещения. Для этого вводятся вычисляемые параметры, которые по результатам данных от считывателей рассчитывают координаты метки на плане помещений.
В платформе поддерживаются любые арифметические операции для задания параметра. Основное ограничение, которое контролируется платформой: нельзя задать измеряемые параметры разной категории (физических величин), т.е. нельзя сложить напряжение в вольтах и расход воды в литрах.
Формулы можно задать вручную, либо использовать оснастку. Формула хранится в виде арифметического выражения идентификаторов измеряемых параметров, но оснастка платформы представляет формулу по именам параметров. Для написания формул используется формат:
D<Id> – обозначение параметра;
DR<id> – обозначение параметра, участвующего в встроенной функции.
Если в формуле применяются логические выражения, то результатом вычисления будет значение 1 или 0. Следует учесть, что такой вычисляемый параметр становится сигнальным.
Система поддерживает ряд специальных встроенных функций, которые рассчитывают интервальные приращения относительно текущего значения измеряемого параметра. В качестве точек отсчета могут указываться:
- начало текущих суток;
- начало текущей недели;
- начало текущего месяца;
- начало текущего квартала;
- начало текущего года.
- текущее время минус сутки;
- текущее время минус неделя;
- текущее время минус месяц;
- текущее время минус квартал;
- текущее время минус год.
Математические функции
Платформа использует интерпретатор формул, позволяющий использовать сложные арифметические и логические конструкции. Формулы используются в следующих сущностях:
- Вычисляемые параметры – для создания вычисляемого параметра на базе любых измеряемых параметров и арифметических действий над ними используются арифметические выражения.
- Контрольные процедуры – для проверки значений параметров на соответствие заданным границам на стороне сервера приложений используются логические выражения.
- Правила контроллера – для проверки значений параметров на соответствие заданным условиям непосредственно на контроллере используются логические выражения.
Арифметические операции
Состав разрешенных арифметических операций и их приоритеты приведены в следующей таблице.
Описание арифметических операций
Приоритет | Обозначение | Описание |
---|---|---|
0 | ( | Открывающая скобка |
1 | ) | Закрывающая скобка |
| 2 | || | Логическое ИЛИ
| 3 | && | Логическое И
| 4 | ! | Логическое НЕ
| 5 | == != < <= > >= | Сравнение (равно, не равно, меньше, меньше или равно, больше, больше или равно)
| 6 | + - | Сложение и вычитание
| 7 | * / | Умножение и деление
| 8 | % | Получение остатка деления
Описание форматов формул
Место применения | Обозначение | Примечание |
---|---|---|
CalcParam.Expression | D<IdP> | Идентификатор параметра типовой конфигурации |
ProcCondition.Condition | V | Текущее значение контролируемого параметра |
Rule.Condition (для правила сервера) | D<IdP> C<IdC> | <IdP> – идентификатор параметра типовой конфигурации. <IdC> – идентификатор вычисляемого параметра |
Rule.Condition (для правила контроллера) | D<IdP> | <IdP> – идентификатор параметра типовой конфигурации |
Если в формуле применяются логические выражения, то результатом вычисления будет значение 1 либо 0. Следует учесть, что такой вычисляемый параметр становится сигнальным.
Совет
Пример записи формулы для вычисяемых параметров (CalcParam): D1+D2
Пример условия в процедуре контроля (ProcConditions): (V+5)< 10
Пример записи формулы в условии правил (Rule): (D1+D2) < D3
Пример записи формулы в назначении уставки (Rule Action): D2-D1
D1,D2,D3 - параметры типовой конфигурации, V - обозначение параметра, для которого будет назначена процедура контроля
Встроенные функции
«Inspark. IoT Platform» поддерживает ряд специальных функций, которые рассчитывают интервальные приращения относительно текущего значения измеряемого параметра. В качестве точек отсчета могут указываться текущие, либо скользящие временные периоды: сутки, неделя, месяц, квартал, год.
Для задания такого вычисляемого параметра используются следующие формулы, приведенные ниже, в которых используется следующий формат:
<Имя функции>(DR<IdP>),
где:
- <IdP> – идентификатор измеряемого параметра (DeviceParamId);
- DR – префикс ссылки на измеряемый параметр.
Формулы для задания вычисляемого параметра
Функция | Тип источника | Пример |
---|---|---|
AGG30 | Приращение значения с начала текущей 30 минуты | AGG30(DR1) |
AGG60 | Приращение значения с начала текущей 60 минуты | AGG60(DR1) |
AGGD | Приращение значения с начала текущих суток | AGGD(DR1) |
AGGW | Приращение значения с начала текущей недели | AGGW(DR1) |
AGGM | Приращение значения с начала текущего месяца | AGGM(DR1) |
AGGQ | Приращение значения с начала текущего квартала | AGGQ(DR1) |
AGGY | Приращение значения с начала текущего года | AGGY(DR1) |
Скользящие интервалы: | ||
AGGLD | Приращение значения от текущего времени минус сутки | AGGLD(DR1) |
AGGLW | Приращение значения от текущего времени минус неделя | AGGLW(DR1) |
AGGLM | Приращение значения от текущего времени минус месяц | AGGLM(DR1) |
AGGLY | Приращение значения от текущего времени минус год | AGGLY(DR1) |
Результат расчета вышеперечисленных функций зависит от типа (характера поведения) параметра: сигнальный, измеряемый, накопительный (счетчик). Формулы расчета функций приведены в таблице ниже.
Формулы расчета функций
Описание способа получения значений параметра | Устанавливаемое значение | Разрешенные типы измеряемых параметров |
---|---|---|
Текущее значение измеряемого параметра, полученное от контроллера | Pi = Vi | Параметры всех типов |
Текущее приращение значения параметра относительно выбранной точки отсчета | Pi = Vi – Bi | Только параметры типа 3 (нарастающий итог) |
Pi = ∑ Vk + Vi | Только параметры типа 4 (счетчик импульсов) |
где:
- Pi – значения каждого входного параметра;
- Vi – текущее значение измеряемого параметра;
- Bi – значения параметра в выбранной точке отсчета;
- Vk – все достоверные значения параметра, начиная с выбранной точки отсчета, исключая текущее значение.
Специальные функции
Ниже приведены специальные функции, которые используются для расчета изменений параметров.
Функция | Тип источника | Пример |
---|---|---|
VALUE_PREV | Предыдущее значение параметра. Для числовых типов возвращает как число, для остальных как строку. Для null значений возвращает null | VALUE_PREV(DR1) |
VALUE_DELTA | разница между текущим и предыдущим значением | VALUE_DELTA(DR1) |
VALUE_DERIVATIVE | скорость изменения значения (производная, разница значений деленная на разницу времени в секундах) | VALUE_DERIVATIVE(DR1) |
Пояснение к VALUE_DELTA
если время хотя бы одно из времен (time, prevTime) не определено (null) - возвращает 0
если время значения и время предыдущего значения совпадают - возвращает 0
для числовых типов это разница между числовыми значениями, текущее минус предыдущее
Примеры (value - prevValue):
(10 - null) = (10 - 0) = 10.
(null - 10) = (0 - 10) = -10
(null - null) = 0
для строковых типов, возвращает 1 если строки разные, 0 если строки одинаковые (null строки заменяются пустыми)
для геозон тоже как строка
Пояснение к VALUE_DERIVATIVE
для числовых типов вычисляется по формуле (value - prevValue) / (timeSec (sec) - prevTime (sec))
в случае если (time = prevTime) возвращает 0
для числовых типов значения/предыдущие значения null заменяются на 0, для строковых на пустую строку (аналогично VALUE_DELTA)
для строковых типов, возвращает 1 если строки разные, 0 если строки одинаковые, разницу во времени не учитывает.
для геозон как строка
Логические операции
Для логических выражений используются те же операции (см. выше), но результатом операций являются значения TRUE или FALSE.
В качестве аргумента входящего значения параметров в логических выражениях платформы используется символ V.
Особенности записи логического выражения
Тип выражения | Пример выражения | Описание |
---|---|---|
Простое выражение | V>=10 && V<=20 | Допустимое выражение, обрабатываемое интерпретатором |
10<=V<=20 | Недопустимое выражение; интерпретатор не обработает данную запись | |
Сложное выражение | (V>=10 && V<=20) || (V>=50 && V<=80) | Допустимое выражение |
(V/10+V*2)/100>=10 | Допустимое выражение | |
(Dx1 > YY ? Dx2 : Dx3) | Если параметр Dx1 > YY, то вычисляемый параметр равен Dx2, в противном случае Dx3 |
Математические операции
Описание математических операций
Функция | Описание |
---|---|
Math.abs(x) | Возвращает абсолютное значение числа |
Math.acos(x) | Возвращает арккосинус числа |
Math.acosh(x) | Возвращает гиперболический арккосинус числа |
Math.asin(x) | Возвращает арксинус числа |
Math.asinh(x) | Возвращает гиперболический арксинус числа |
Math.atan(x) | Возвращает арктангенс числа |
Math.atanh(x) | Возвращает гиперболический арктангенс числа |
Math.atan2(y, x) | Возвращает арктангенс от частного своих аргументов |
Math.cbrt(x) | Возвращает кубический корень числа |
Math.ceil(x) | Возвращает наименьшее целое число, большее, либо равное указанному числу |
Math.clz32(x) | Возвращает количество ведущих нулей 32-битного целого числа |
Math.cos(x) | Возвращает косинус числа |
Math.cosh(x) | Возвращает гиперболический косинус числа |
Math.exp(x) | Возвращает Ex , где x — аргумент, а E — число Эйлера (2,718…), основание натурального логарифма |
Math.expm1(x) | Возвращает exp(x), из которого вычли единицу |
Math.floor(x) | Возвращает наибольшее целое число, меньшее, либо равное указанному числу |
Math.fround(x) | Возвращает ближайшее число с плавающей запятой одинарной точности, представляющее это число |
Math.hypot([x[, y[, …]]]) | Возвращает квадратный корень из суммы квадратов своих аргументов |
Math.imul(x) | Возвращает результат умножения 32-битных целых чисел |
Math.log(x) | Возвращает натуральный логарифм числа (loge , также известен как ln) |
Math.log1p(x) | Возвращает натуральный логарифм числа 1 + x (loge , также известен как ln) |
Math.log10(x) | Возвращает десятичный логарифм числа |
Math.log2(x) | Возвращает двоичный логарифм числа |
Math.max([x[, y[, …]]]) | Возвращает наибольшее число из своих аргументов |
Math.min([x[, y[, …]]]) | Возвращает наименьшее число из своих аргументов |
Math.pow(x, y) | Возвращает основание в степени экспоненты, то есть, значение выражения основание экспонента |
Math.random() | Возвращает псевдослучайное число в диапазоне от 0 до 1 |
Math.round(x) | Возвращает значение числа, округлённое до ближайшего целого |
Math.sign(x) | Возвращает знак числа, указывающий, является ли число положительным, отрицательным или нулём |
Math.sin(x) | Возвращает синус числа |
Math.sinh(x) | Возвращает гиперболический синус числа |
Math.sqrt(x) | Возвращает положительный квадратный корень числа |
Math.tan(x) | Возвращает тангенс числа |
Math.tanh(x) | Возвращает гиперболический тангенс числа |
Math.trunc(x) | Возвращает целую часть числа, убирая дробные цифры |
Геодезические функции
Платформа поддерживает возможность расчета расстояния геоточки до геозоны, либо нахождения в геозоне. Фукнция возвращает метры.
Формат формулы:GEO_DISTANCE(V,Z<id>)
, где
- V - формальное обозначение значения параметра;
- id - идентификатор геозоны из справочника геозон;
Примеры использования в КП
"GEO_DISTANCE(V, Z2) > 100" - геопараметр удалился от геозоны более 100 метров.
"GEO_DISTANCE(V, Z2) == 0" - геопараметр находится внутри интересующей геозоны.