Арифметические, математические и логические операции

Формулы используется в следующих сущностях системы:

  1. Вычислительные параметры: арифметические выражения используются для создания выч. параметра на базе любых измеряемых параметров и арифметических действий над ними.
  2. Процедуры контроля: логические выражения используются для проверки значений параметров на соответствие заданным границам на стороне сервера приложений.
  3. Правила контроллера: логические выражения используются для проверки значений параметров на соответствие заданным условиям непосредственно на контроллере.

В платформа SEMNEXT используется интерпретатор формул, что позволяет использовать сложные арифметические и логические конструкции.

Состав разрешенных операций для арифметических операций и их приоритеты приведены в следующей таблице:

Прт. Операция Разрешена
Обозначение Описание
0 (Открывающая скобка +
1 )Закрывающая скобка +
2 || Логическое ИЛИ +
3 &&Логическое И +
4 !Логическое НЕ +
5 == != < ⇐ > >=Сравнение (равно, не равно, меньше, меньше или равно, больше, больше или равно +
6 + - Сложение и вычитание +
7 * /Умножение и деление +
8 %Получение остатка деления+

Формула записывается в формате:

Место применения Обозначение Примечание
CalcParam.Expression D<IdP> <IdP> - идентификатор параметра типовой конфигурации
ProcCondition.Condition V V – текущее значение контролируемого параметра
Rule.Condition (для правила сервера) D<IdP>
C<IdC>
<IdP> - идентификатор параметра типовой конфигурации
<IdC> - идентификатор вычисляемого параметра
Rule.Condition (для правила контроллера) P<IdP> <IdP> - идентификатор параметра типовой конфигурации

Данные обозначения дублируются интерпретатором в виде формулы с названиями параметров:

если в формуле применяются логические выражения, то результатом вычисления будет значение 1/0. Следует учесть , что такой вычисляемый параметр становится сигнальным.

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

  • начало текущих суток;
  • начало текущей недели;
  • начало текущего месяца;
  • начало текущего квартала;
  • начало текущего года;
  • скользящий дневной интервал;
  • скользящий недельный интервал;
  • скользящий квартальный интервал;
  • скользящий годовой интервал.

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

Имя функции Тип источника
AGG30 Приращение значения с начала текущей 30 минуты
AGG60 Приращение значения с начала текущей 60 минуты
AGGD Приращение значения с начала текущих суток
AGGW Приращение значения с начала текущей недели
AGGM Приращение значения с начала текущего месяца
AGGQ Приращение значения с начала текущего квартала
AGGY Приращение значения с начала текущего года
Скользящие интервалы
AGGLD Приращение значения от текущего времени минус сутки
AGGLW Приращение значения от текущего времени минус неделя
AGGLM Приращение значения от текущего времени минус месяц
AGGLY Приращение значения от текущего времени минус год

Для вызова перечисленных функций используется следующий формат: <Имя функции>(DR<IdP>) где <IdP> - идентификатор измеряемого параметра (DeviceParamId);

DR	-	префикс ссылки на измеряемый параметр.

Пример использования таких формул приведен ниже:

Результат расчета вышеперечисленных функции зависит от природы поведения параметра (другими словами, от типа параметра: сигнальный, мгновенный, счетчик). Формулы расчета функций приведены в таблице ниже:

Описание способа получения значений параметра Устанавливаемое значение Разрешенные типы измеряемых параметров
Текущее значение измеряемого параметра, полученное из контроллера Pi=Vi Параметры всех типов
Текущее приращение значения параметра относительно выбранной точки отсчета Pi=Vi-Bi Только параметры типа 3 (нарастающий итог)
Pi = ∑ Vk +Vi Только параметры типа 4 (счетчик импульсов)

где

  • Pi - значения каждого входного параметра;
  • Vi - текущее значение измеряемого параметра;
  • Bi - значения параметра в выбранной точке отсчета;
  • Vk - все достоверные значения параметра, начиная с выбранной точки отсчета, исключая текущее значение.

Для логических выражений используются те же операции (см. выше), но результатом операций являются значения 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 JavaScript языка. Например, для вычисления синуса задайте выражение: Math.sin(DXX), где DXX измерительный параметр.
Список всех функций приведен ниже:

Функция Описание
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) Возвращает целую часть числа, убирая дробные цифры