Математические выражения в прототипах
Математические выражения на мнемосхемах
Логические функции
Арифметические функции
Битовые функции
Тригонометрические функции
Функции тревог
Функции времени
Операторы
Константы
Специальные функции в скриптах
Некоторые параметры переменных допускают использование математических выражений с подстановкой значений одной или нескольких переменных. Например, виртуальная переменная в режиме "Выражение" или аварийные переменные (параметры Сигнал, Уставка и т.п.).
Простейшее выражение может состоять из имени наблюдаемой переменной. Имена переменных необходимо предварять символом $
.
Допустимо использование как локальных (в контексте узла) имен переменных, так проектных и глобальных. Для доступа к переменным того же узла (локальные имена) указывайте имя переменной в прототипе, например, $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
$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.mytag
- 1 если тег установлен для переменной, иначе - 0 (замените mytag именем требуемого тега)
$node1.vars.var1.trend
- 1, если переменная пишет тренд
$node1.vars.var1.physical
- 1, если переменная физическая
$node1.vars.var1.payload
- служебный объект payload для переменных некоторых драйверов
Примеры выражений
$node1.vars.var1
- передача в контрол статуса переменной
$node1.vars.var1.unit
- передача в контрол единицы измерения переменной
$node1.vars.var1.bit3
- передача в контрол значения четвертого бита (индекс 3)
$node1.vars.var1.value
- передача в контрол последнего достоверного значения
$node1.vars.var1.tags.floor2
- передача в контрол 1 если тег floor2
задан для переменной
$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(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", возведенное в указанную степень.
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-битного числа
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 мл. бит класса
Примеры значений тревожной переменной:
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, секунды
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
str(X)
- возвращает строковое представление числа X
exec(C,T)
- выполняет команду командной строки C, T - timeout выполнения
telegram(N,M)
- выполняет отправку сообщения M на номер N
reboot()
- перезагружает устройство
print(A,B,C,...)
- вывод строковых значений аргументов в консоль отладки скрипта
date(T)
- строковое представление даты от таймштампа T (необязательный) в формате DD.MM.YYYY
time(T)
- строковое представление времени от таймштампа T (необязательный) в формате hh.mm.ss
datetime(T)
- строковое представление даты-времени от таймштампа T (необязательный) в формате DD.MM.YYYY hh.mm.ss