Пульт.Онлайн /

Математические выражения

Математические выражения в прототипах
Математические выражения на мнемосхемах
Логические функции
Арифметические функции
Битовые функции
Тригонометрические функции
Функции тревог
Функции времени
Операторы
Константы
Специальные функции в скриптах


Математические выражения в прототипах

Некоторые параметры переменных допускают использование математических выражений с подстановкой значений одной или нескольких переменных. Например, виртуальная переменная в режиме "Выражение" или аварийные переменные (параметры Сигнал, Уставка и т.п.).

Простейшее выражение может состоять из имени наблюдаемой переменной. Имена переменных необходимо предварять символом $.

Допустимо использование как локальных (в контексте узла) имен переменных, так проектных и глобальных. Для доступа к переменным того же узла (локальные имена) указывайте имя переменной в прототипе, например, $var1.

Для доступа к переменным других узлов того же проекта, указывайте имя с префиксом узла, например, $N25_var1.

Для доступа к переменным других проектов, указывайте имя с префиксом проекта и узла, например, $P3_N25_var1.

Глобальное и проектное имя можно узнать, кликнув на переменную в интерфейсе, в списке переменных узла или в редакторе проектов на вкладке узла "Переменные".

При ошибке одной из переменных в выражении, значение выражения будет равно ошибке DRV_ERROR_UNRELIABLE_VAR (недостоверное значение).

Так же доступны суффиксы (через два подчеркивания):

  • __error - код ошибки переменной
  • __time - Timestamp (в миллисекундах) последнего изменения статуса переменной
  • __value - значение (позволяет всегда получать последнее достоверное значение переменной и игнорировать ошибку).

Примеры выражений

  • $var1 - локальное (в контексте узла) имя переменной
  • $P3_N25_var1 - глобальное имя переменной (префикс проекта + префикс узла + имя)
  • $var1+$var2 - сумма значений var1 и var2
  • $var1__value+$var2__value - сумма последних достоверных значений var1 и var2 (ошибки переменных игнорируются)
  • if($sensor__error,$min_power,$max_power) - функция if проверяет код ошибки переменной sensor и возвращает значение одной из переменных xxx_power
  • sqrt(pow($active_power,2)+pow($reactive_power,2)) - вычисление общей мощности
  • bit($status,3) - возвращает 1, если установлен четвертый бит (бит с индексом 3) в переменной status
  • list($mode,0,"OFF",1,"ON",2,"AUTO") - возвращает OFF, если $mode == 0; ON, если $mode == 1; AUTO, если $mode == 2
  • $temperature/10 - возвращает значение переменной temperature, деленное на 10

Математические выражения на мнемосхемах

На мнемосхемах практически в любые свойства контролов допускается прямая передача доступных свойств пользователя, узла или переменной, а также подстановка математических выражений.

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

Доступные свойства узла

  • $node1.title - имя узла
  • $node1.path - полный путь узла
  • $node1.prefix - глобальный префикс узла
  • $node1.params.param1 - значение параметра узла (param1 замените именем требуемого параметра)
  • $node1.tags.mytag - 1 если тег установлен для узла, иначе - 0 (замените mytag именем требуемого тега)

Доступные свойства переменной

  • $node1.vars.var1.bit0 - $node1.vars.var1.bit31 - значение отдельного бита, если нет ошибки; иначе - undefined

  • $node1.vars.var1.vbit0 - $node1.vars.var1.vbit31 - последнее достоверное значение отдельного бита, не зависимо от ошибки

  • $node1.vars.var1 - значение, если нет ошибки; иначе - undefined (аналогично .status)

  • $node1.vars.var1.status - значение, если нет ошибки; иначе - undefined.

  • $node1.vars.var1.value - последнее достоверное значение, не зависимо от ошибки. Используйте это свойство, если требуется отключить мерцание контролов при недостоверных значениях переменной.

  • $node1.vars.var1.time - время (Timestamp c миллисекундами)

  • $node1.vars.var1.error - код ошибки

  • $node1.vars.var1.update - вспомогательная структура

  • $node1.vars.var1.global_name - глобальное имя переменной

  • $node1.vars.var1.name - локальное имя переменной

  • $node1.vars.var1.title - description, если задан; иначе - name

  • $node1.vars.var1.description - краткое описание переменной

  • $node1.vars.var1.comment - комментарий

  • $node1.vars.var1.unit - единица измерения

  • $node1.vars.var1.tags.<tag_name> - 1 если тег установлен для переменной, иначе - 0, см. примеры

  • $node1.vars.var1.trend - переменная пишет тренд (1|0)

  • $node1.vars.var1.physical - переменная физическая (1|0)

  • $node1.vars.var1.payload - служебный объект payload для переменных некоторых драйверов

  • $node1.vars.var1.exec - у пользователя есть доступ на изменение значения переменной (1|0)

Доступные свойства пользователя

  • $user.login - логин пользователя
  • $user.home_page - путь страницы по умолчанию
  • $user.home_project - путь проекта по умолчанию
  • $user.home_url - произвольный URL по умолчанию
  • $user.icon - иконка пользователя
  • $user.anonymous - анонимный пользователь (1|0)
  • $user.changepass - требование сменить пароль при входе (1|0)
  • $user.readonly - пользователь с правами "только чтение и выполнение" (1|0)
  • $user.demo - демо-пользователь (1|0)
  • $user.admin - пользователь является администратором системы (1|0)
  • $user.name - имя пользователя
  • $user.language - язык пользователя
  • $user.allowed_ip - разрешенные IP
  • $user.department - отдел
  • $user.position - должность
  • $user.info - информация
  • $user.phone - телефон
  • $user.email - email
  • $user.receive_email - получать email-уведомления (1|0)
  • $user.receive_telegram - получать телеграм-уведомления (1|0)
  • $user.receive_sms - получать SMS-уведомления (1|0)
  • $user.receive_alarm_notifications - получать уведомления об авариях (1|0)
  • $user.receive_fault_notifications - получать уведомления о неисправностях (1|0)
  • $user.receive_warning_notifications - получать уведомления о предупреждениях (1|0)
  • $user.receive_notice_notifications - получать уведомления об оповещениях (1|0)
  • $user.receive_var_notifications - получать уведомления об изменениях переменных (1|0)
  • $user.receive_system_notifications - получать системные уведомления (1|0)
  • $user.receive_user_notifications - получать пользовательские сообщения (1|0)
  • $user.receive_alarm_act - получать уведомления об активации тревог (1|0)
  • $user.receive_alarm_norm - получать уведомления о нормализации тревог (1|0)
  • $user.receive_alarm_ack - получать уведомления о квитировании тревог (1|0)
  • $user.receive_alarm_unack - получать уведомления об отмене квитирования тревог (1|0)
  • $user.receive_alarm_shlv - получать уведомления о блокировке тревог (1|0)
  • $user.receive_alarm_unshlv - получать уведомления о разблокировке тревог (1|0)
  • $user.kiosk_mode - режим киоска (1|0)
  • $user.show_navigation - показывать панель навигации (1|0)
  • $user.show_notifications - показывать панель уведомлений (1|0)
  • $user.show_path - показывать строку пути (1|0)
  • $user.editor_access - доступ к редактору проектов (1|0)
  • $user.active_sessions - количество активных сессий
  • $user.groups.<имя группы> - 1, если пользователь в группе, см. примеры

Доступные параметры мнемосхемы

Доступ к параметрам мнемосхемы, определенным на вкладке Параметры, осуществляется по их имени с символом $. Если параметр заведен и ему указано значение по умолчанию, но в Экране значение параметра не задано явно - значение параметра будет пустой строкой. Чтобы получить значение параметра с учетом значения по умолчанию, предварите имя параметра $__двумя_подчеркиваниями. Параметры могут использоваться как временные локальные переменные.

Локальное хранилище пользователя

Объект $storage может использоваться для локального хранения значений. Например, состояний раскрытых панелей. Значения хранятся на устройстве пользователя и недоступны другим пользователям или тому же пользователю, но на другом устройстве.

Например, привяжите к полю value переключателя свойство $storage.left_panel_closed, а также привяжите его к свойству invisible прямоугольника-контейнера. Тогда переключение переключателя будет скрывать/раскрывать прямоугольник с его содержимым. При этом, состояние свойства, а значит и отображение прямоугольника будет сохраняться при перезагрузке.

Примеры выражений

  • $width - ширина мнемосхемы (параметр width должен быть заведен в Параметрах)
  • $__width - ширина мнемосхемы с учетом значения по умолчанию
  • $storage.left_panel_closed - вернет ранее сохраненное значение
  • $node1.vars.var1 - статус переменной (достоверное значение или undefined при ошибке)
  • $node1.vars.var1.value - последнее достоверное значение (независимо от ошибки)
  • $node1.vars.var1.error - код ошибки
  • $node1.vars.var1.unit - единица измерения переменной
  • $node1.vars.var1.bit0 - значение первого бита (индекс 0)
  • $node1.vars.var1.bit3 - значение четвертого бита (индекс 3)
  • $node1.vars.var1.tags.floor2 - 1 если тег floor2 задан для переменной, иначе 0
  • $node1.params.host - параметра узла host
  • $node1.vars.var1 -> $node1.vars.var2 - чтение контролом из var1, а запись в var2
  • {{ $node1.vars.speed/10 }} RPM - приведенное значение скорости с суффиксом RPM
  • dP {{ $node1.vars.press/10 }} $node1.vars.press.unit - приведенное давление с префиксом и ед. измерения
  • {{ if($node1.vars.mode.bit3 && $node1.vars.mode.bit6,"red","blue") }} - цвета по условию
  • Вы вошли как {{if($user.groups.оператор,"Оператор","Гость")}} - проверка принадлежности к группе

Логические функции

  • if(X,Y,Z) - если X не равен 0, возвращает Y, иначе Z
  • list(X,I0,V0,I1,V1,I2,V2,...,In,Vn) - возвращает искомое значение по индексу, X - индекс искомого значения, In - индекс n-го значения, Vn - n-ое значение. Если X не найден - возвращается последний аргумент.

Арифметические функции

  • abs(X) - модуль числа Х
  • cbrt(X) - кубический корень X
  • ceil(X) - округляет число X до ближайшего большего целого
  • exp(X) - число e, возведенное в степень X
  • floor(X) - округляет число X до ближайшего меньшего целого
  • log(X) - натуральный логарифм от X
  • log10(X) - десятичный логарифм от X
  • max(X1,X2,...,Xn) - возвращает значение максимального аргумента
  • min(X1,X2,...,Xn) - возвращает значение минимального аргумента
  • pow(X,Y) - возведение X в степень Y
  • round(X) - округляет X до целого
  • round2(X,Y) - округляет X до Y знаков после запятой
  • sqrt(X) - квадратный корень от X

Битовые функции

  • bit(X,Y) - возвращает 1 если в X установлен бит Y
  • bool(X) - возвращает 0 если X равен 0, иначе 1
  • double(A,B,C,D,E,F,G,H) - конвертирует 8 байт (A,B,C,D,E,F,G,H) в число формата IEEE-754 Floating Point 64-bit (Double precision)
  • float(A,B,C,D) - конвертирует 4 байта (A,B,C,D) в число формата IEEE-754 Floating Point 32-bit
  • hi16(X) - возвращает старшие 8 бит 16-битного числа
  • hi32(X) - возвращает старшие 16 бит 32-битного числа
  • lo16(X) - возвращает младшие 8 бит 16-битного числа
  • lo32(X) - возвращает младшие 16 бит 32-битного числа
  • msb(X) - возвращает индекс самого старшего установленного бита (Most Significant Bit)
  • lsb(X) - возвращает индекс самого младшего установленного бита (Least Significant Bit)

Тригонометрические функции

  • acos(X) - обратный косинус Х, радианы
  • acosh(X) - обратный гиперболический косинус Х, радианы
  • asin(X) - обратный синус Х, радианы
  • asinh(X) - обратный гиперболический синус Х, радианы
  • atan(X) - обратный тангенс Х, радианы
  • atanh(X) - обратный гиперболический тангенс Х, радианы
  • atan2(X,Y) - равняется atan(X/Y), за исключением того, что в atan2 аргумент Y может принимать значение 0
  • cos(X) - косинус Х, радианы
  • cosh(X) - гиперболический косинус Х, радианы
  • hypot(X,Y) - гипотенуза при катетах X и Y
  • sin(X) - синус Х, радианы
  • sinh(X) - гиперболический синус Х, радианы
  • tan(X) - тангенс Х, радианы
  • tanh(X) - гиперболический тангенс Х, радианы

Функции тревог

Значение тревожной переменной представляет комбинацию бит:

BIN   DEC  РАСШИФРОВКА 
1000  8    неквитированная тревога
0100  4    активная тревога 
0010  2    старший бит класса тревоги
0001  1    младший бит класса тревоги

Классы тревог:

3 - авария
2 - неисправность
1 - предупреждение
0 - оповещение

Примеры значений тревожной переменной:

15 = 1111 = 8 + 4 + 2 + 1 = активная неквитированная авария  
06 = 0110 = 0 + 4 + 2 + 0 = активная неисправность  
09 = 1001 = 8 + 0 + 0 + 1 = неактивное неквитированное предупреждение  
04 = 0100 = 0 + 4 + 0 + 0 = активное оповещение  
00 = 0000 = неактивная тревога, не требующая квитирования или заблокированная тревога (класс не определен)

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

  • alarm_unack(A) - возвращает 1 если А неквитированная, иначе - 0
  • alarm_active(A) - возвращает 1 если А активная, иначе - 0
  • alarm_urgent(A) - возвращает 1 если А срочная (активная и неквитированная), иначе - 0
  • alarm_actual(A) - возвращает 1 если А актуальная (активная или неквитированная), иначе - 0
  • alarm_class(A) - для актуальных тревог возвращает код класса (3 - авария, 2 - неисправность, 1 - предупреждение, 0 - оповещение)
  • alarm_max_act(A1,A2,...,An) - возвращает максимальное значение тревоги с приоритетом активности
  • alarm_max_unack(A1,A2,...,An) - возвращает максимальное значение тревоги с приоритетом неквитированности (аналогично max(A1,A2,...,An))

Функции времени

  • timestamp() - Unix Timestamp, секунды
  • timestampms() - Unix Timestamp, миллисекунды
  • hour(T) - если T не задан, возвращает текущий час (0-23); иначе - час от таймштампа T
  • minute(T) - если T не задан, возвращает текущую минуту (0-59); иначе - минуту от таймштампа T
  • second(T) - если T не задан, возвращает текущую секунду (0-59); иначе - секунду от таймштампа T
  • year(T) - если T не задан, возвращает текущий год; иначе - год от таймштампа T
  • month(T) - если T не задан, возвращает текущий месяц (1-12); иначе - месяц от таймштампа T
  • mday(T) - если T не задан, возвращает текущий день месяца (1-31); иначе - день месяца от таймштампа T
  • wday(T) - если T не задан, возвращает текущий день недели (1-7); иначе - день недели от таймштампа T
  • yday(T) - если T не задан, возвращает текущий день года (1-366); иначе - день года от таймштампа T
  • zone() - часовая зона, секунды от UTC
  • uptime() - время от запуска сервиса, где выполняется функция, секунды

Операторы

  • -X - унарный минус
  • !X - унарное логическое НЕ
  • ^X - унарное побитовое НЕ
  • X ** Y - возведение X в степень Y
  • X * Y - умножение X на Y
  • X / Y - деление X на Y
  • X % Y - остаток от деления X на Y
  • X + Y - сложение X и Y
  • X - Y - вычитание Y из X
  • X << Y - побитовый сдвиг X на Y бит влево
  • X >> Y - побитовый сдвиг X на Y бит вправо
  • X < Y - 1, если X меньше Y, иначе - 0
  • X <= Y - 1, если X меньше или равно Y, иначе - 0
  • X > Y - 1, если X больше Y, иначе - 0
  • X >= Y - 1, если X больше или равно Y, иначе - 0
  • X == Y - 1, если X равен Y, иначе - 0
  • X != Y - 1, если X не равен Y, иначе - 0
  • X & Y - побитовое И
  • X | Y - побитовое ИЛИ
  • X ^ Y - побитовое исключающее ИЛИ
  • X && Y - логическое И
  • X || Y - логическое ИЛИ

Константы

  • PI - 3.14159265358979323846
  • E - 2.71828182845904509079

Специальные функции в скриптах

Данные функции доступны только в скриптах и не доступны в выражениях и на мнемосхемах.

Специальные функции в скриптах

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   user_list
   user_save
   var_get
   var_list
   var_set