Математические выражения в прототипах
Математические выражения на мнемосхемах
Логические функции
Арифметические функции
Битовые функции
Тригонометрические функции
Функции тревог
Функции времени
Операторы
Константы
Специальные функции в скриптах
Некоторые параметры переменных допускают использование математических выражений с подстановкой значений одной или нескольких переменных. Например, виртуальная переменная в режиме "Выражение" или аварийные переменные (параметры Сигнал, Уставка и т.п.).
Простейшее выражение может состоять из имени наблюдаемой переменной. Имена переменных необходимо предварять символом $.
Допустимо использование как локальных (в контексте узла) имен переменных, так проектных и глобальных. Для доступа к переменным того же узла (локальные имена) указывайте имя переменной в прототипе, например, $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_powersqrt(pow($active_power,2)+pow($reactive_power,2)) - вычисление общей мощностиbit($status,3) - возвращает 1, если установлен четвертый бит (бит с индексом 3) в переменной statuslist($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 - приведенное значение скорости с суффиксом RPMdP {{ $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, иначе Zlist(X,I0,V0,I1,V1,I2,V2,...,In,Vn) - возвращает искомое значение по индексу, X - индекс искомого значения, In - индекс n-го значения, Vn - n-ое значение. Если X не найден - возвращается последний аргумент.abs(X) - модуль числа Хcbrt(X) - кубический корень Xceil(X) - округляет число X до ближайшего большего целогоexp(X) - число e, возведенное в степень Xfloor(X) - округляет число X до ближайшего меньшего целогоlog(X) - натуральный логарифм от Xlog10(X) - десятичный логарифм от Xmax(X1,X2,...,Xn) - возвращает значение максимального аргументаmin(X1,X2,...,Xn) - возвращает значение минимального аргументаpow(X,Y) - возведение X в степень Yround(X) - округляет X до целогоround2(X,Y) - округляет X до Y знаков после запятойsqrt(X) - квадратный корень от Xbit(X,Y) - возвращает 1 если в X установлен бит Ybool(X) - возвращает 0 если X равен 0, иначе 1double(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-bithi16(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 может принимать значение 0cos(X) - косинус Х, радианыcosh(X) - гиперболический косинус Х, радианыhypot(X,Y) - гипотенуза при катетах X и Ysin(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 если А неквитированная, иначе - 0alarm_active(A) - возвращает 1 если А активная, иначе - 0alarm_urgent(A) - возвращает 1 если А срочная (активная и неквитированная), иначе - 0alarm_actual(A) - возвращает 1 если А актуальная (активная или неквитированная), иначе - 0alarm_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); иначе - час от таймштампа Tminute(T) - если T не задан, возвращает текущую минуту (0-59); иначе - минуту от таймштампа Tsecond(T) - если T не задан, возвращает текущую секунду (0-59); иначе - секунду от таймштампа Tyear(T) - если T не задан, возвращает текущий год; иначе - год от таймштампа Tmonth(T) - если T не задан, возвращает текущий месяц (1-12); иначе - месяц от таймштампа Tmday(T) - если T не задан, возвращает текущий день месяца (1-31); иначе - день месяца от таймштампа Twday(T) - если T не задан, возвращает текущий день недели (1-7); иначе - день недели от таймштампа Tyday(T) - если T не задан, возвращает текущий день года (1-366); иначе - день года от таймштампа Tzone() - часовая зона, секунды от UTCuptime() - время от запуска сервиса, где выполняется функция, секунды-X - унарный минус!X - унарное логическое НЕ^X - унарное побитовое НЕX ** Y - возведение X в степень YX * Y - умножение X на YX / Y - деление X на YX % Y - остаток от деления X на YX + Y - сложение X и YX - Y - вычитание Y из XX << Y - побитовый сдвиг X на Y бит влевоX >> Y - побитовый сдвиг X на Y бит вправоX < Y - 1, если X меньше Y, иначе - 0X <= Y - 1, если X меньше или равно Y, иначе - 0X > Y - 1, если X больше Y, иначе - 0X >= Y - 1, если X больше или равно Y, иначе - 0X == Y - 1, если X равен Y, иначе - 0X != Y - 1, если X не равен Y, иначе - 0X & Y - побитовое ИX | Y - побитовое ИЛИX ^ Y - побитовое исключающее ИЛИX && Y - логическое ИX || Y - логическое ИЛИPI - 3.14159265358979323846E - 2.71828182845904509079Данные функции доступны только в скриптах и не доступны в выражениях и на мнемосхемах.