Платформа использует интерпретатор формул, позволяющий использовать сложные арифметические и логические конструкции. Формулы используются в следующих сущностях:
Состав разрешенных арифметических операций и их приоритеты приведены в следующей таблице.
Приоритет | Обозначение | Описание |
---|---|---|
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 (для правила контроллера) | P<IdP> | <IdP> – идентификатор параметра типовой конфигурации |
Если в формуле применяются логические выражения, то результатом вычисления будет значение 1/0. Следует учесть, что такой вычисляемый параметр становится сигнальным.
«Inspark. IoT Platform» поддерживает ряд специальных функций, которые рассчитывают интервальные приращения относительно текущего значения измеряемого параметра. В качестве точек отсчета могут указываться:
Для задания такого вычисляемого параметра используются следующие формулы:
Функция | Тип источника |
---|---|
AGG30 | Приращение значения с начала текущей 30 минуты |
AGG60 | Приращение значения с начала текущей 60 минуты |
AGGD | Приращение значения с начала текущих суток |
AGGW | Приращение значения с начала текущей недели |
AGGM | Приращение значения с начала текущего месяца |
AGGQ | Приращение значения с начала текущего квартала |
AGGY | Приращение значения с начала текущего года |
Скользящие интервалы: | |
AGGLD | Приращение значения от текущего времени минус сутки |
AGGLW | Приращение значения от текущего времени минус неделя |
AGGLM | Приращение значения от текущего времени минус месяц |
AGGLY | Приращение значения от текущего времени минус год |
Для вызова перечисленных функций используется следующий формат:
<Имя функции>(DR<IdP>),
где:
Результат расчета вышеперечисленных функций зависит от типа (характера поведения) параметра: сигнальный, измеряемый, накопительный (счетчик). Формулы расчета функций приведены в таблице ниже.
Описание способа получения значений параметра | Устанавливаемое значение | Разрешенные типы измеряемых параметров |
---|---|---|
Текущее значение измеряемого параметра, полученное от контроллера | Pi = Vi | Параметры всех типов |
Текущее приращение значения параметра относительно выбранной точки отсчета | Pi = Vi – Bi | Только параметры типа 3 (нарастающий итог) |
Pi = ∑ Vk + Vi | Только параметры типа 4 (счетчик импульсов) |
где:
Для логических выражений используются те же операции (см. выше), но результатом операций являются значения 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>)
, где
Примеры использования в КП
"GEO_DISTANCE(V, Z2) > 100" - геопараметр удалился от геозоны более 100 метров.
"GEO_DISTANCE(V, Z2) == 0" - геопараметр находится внутри интересующей геозоны.