Арифметические, математические и логические операции
Формулы используется в следующих сущностях системы:
- Вычислительные параметры: арифметические выражения используются для создания выч. параметра на базе любых измеряемых параметров и арифметических действий над ними.
- Процедуры контроля: логические выражения используются для проверки значений параметров на соответствие заданным границам на стороне сервера приложений.
- Правила контроллера: логические выражения используются для проверки значений параметров на соответствие заданным условиям непосредственно на контроллере.
В платформа 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) | Возвращает целую часть числа, убирая дробные цифры |