Данная страница фиксирует соответствие синтаксиса выражений Waliot и других СМТ: какие операторы и функции равнозначны, как в Waliot записываются ссылки на параметры, как задаются константы, побитовые/масочные операции, проверка наличия значения, преобразование параметров и единиц.
В Waliot есть два класса дополнительного оборудования (датчиков):
value (исходное значение), над которой можно выполнять математические операции, округление, работу с битовыми флагами и т. п.speed, fuel[1], attributes[hdop]) и из них собираются вычисления любой сложности, включая ссылки на предыдущее сообщение.У стандартных датчиков используются регулярные выражения над value: арифметика (+, −, *, /, ^), модуль, остаток от деления, функции sin, cos, sqrt, round, маска битов через оператор : и круглые скобки для приоритета. Эти формулы не могут обращаться к произвольным полям телеметрии — только к value.
У произвольных датчиков применяются произвольные выражения: помимо стандартных операций из регулярных выражений, доступны именованные переменные телеметрии (latitude, longitude, speed, analog[1], digital[8], attributes[hdop] и т. д.), а также обращение к предыдущему значению любой переменной через префикс # (например, speed - #speed). Если какого-то из указанных в выражении поля в записи нет, значение датчика для этой точки считается невычислимым.
Почти у каждого датчика есть отдельное выражение валидатора — это логическая формула, которая должна возвращать ИСТИНА/ЛОЖЬ и определяет, считать ли вычисленное значение датчика валидным. Валидатор всегда пишется как произвольное логическое выражение и может обращаться к любым полям телеметрии и датчикам, комбинируя условия через И/ИЛИ. Если валидатор вернул ЛОЖЬ, значение датчика в этой точке считается невалидным и не попадает в отчеты и аналитику. Типичные примеры:
| Waliot | Wialon | Описание |
|---|---|---|
parameter, parameter[index], attributes[parameter]Пример: speed, fuel[1], attributes[hdop] |
parameterПример: adc1, in1 |
Параметр из текущего сообщения. |
#parameter, #parameter[index], #attributes[parameter]Пример: #speed, #fuel[1], #attributes[hdop] |
#parameterПример: #adc1, #in1 |
Параметр из предыдущего сообщения. |
equipment[name]Пример: equipment[Псевдоним оборудования] |
[equipment]Пример: [Имя датчика] |
Обращение к значению датчика по имени. В Waliot для этого используется псевдоним датчика, который указывается в специальном поле доп.оборудования. |
equipment_attachment[name]Пример: equipment_attachment[Прицеп] |
— | Обращение к прицепному оборудованию из ресурсов предприятия. |
valueПример: 10, -3.14 |
constXПример: const10, const-3.14 |
Константное значение. Waliot позволяет использовать константны без необходимости префикса const. |
null |
— | Специальное значение, обозначающее отсутствие данных. Позволяет выполнять проверки на отсутствие данных в логических выражениях. |
| — | |Пример: [Имя датчика 1]|[Имя датчика 2] |
Проверка наличия значений датчиков. |
| Математические операции | ||
+ |
+ |
Сложение. |
− |
− |
Вычитание. |
∗ |
∗ |
Умножение. |
/ |
/ |
Деление. |
% |
— | Остаток от целочисленного деления. |
^Пример: ^2, ^0.5 |
^Пример: ^const2, ^const0.5 |
Возведение в степень. |
sqrt(value) Пример: sqrt(4), sqrt(param) |
— | Вычисления квадратного корня. |
sqr(value) Пример: sqr(2), sqr(param) |
— | Возведение в квадрат. |
round(value,factor)Пример: round(3.1415,2), round(param,0) |
— | Математическое округление до указанного знака после запятой. |
floor(value,factor)Пример: floor(3.1415,2), floor(param,0) |
— | Округление в меньшую сторону до указанного знака после запятой. |
ceil(value,factor)Пример: ceil(3.1415,2),ceil(param,0) |
— | Округление в большую сторону до указанного знака после запятой. |
sin(value) |
— | Вычисления синуса. |
cos(value) |
— | Вычисления косинуса. |
( )Пример: 1.5*(param−#param) |
( )Пример: const1.5*(param−#param) |
Приоритет операций. |
value:bit_numberПример: param:4 |
value:bit_numberПример: param:4 |
Побитовый контроль параметра. Приведение числа к двоичной системе счисления (бинарное представление) и возврат флага (0 или 1) по порядковому номеру бита. Биты считаются справа налево с индекса 0. |
| Операции сравнения | ||
= |
— | Равно. |
!= |
— | Не равно. |
> |
— | Больше. |
< |
— | Меньше. |
>= |
— | Больше или равно. |
<= |
— | Меньше или равно. |
| Логические выражения | ||
&& |
— | Логическое И. |
|| |
— | Логическое ИЛИ. |
! |
— | Логическое НЕ. |
| Строковые функции | ||
| — | :Пример: text_value:2,text_value:10 |
Преобразование текстовых параметров в числа различных систем счисления: двоичной, восьмеричной, десятичной и шестнадцатеричной. |
| — | ltrim(text_value)ltrim(text_value,'0') |
Обрезает все нули слева. По умолчанию обрезается ‘0’, но можно применять и к другим символам. |
| — | rtrim(text_value)rtrim(text_value,'0') |
Обрезает все нули справа. По умолчанию обрезается ‘0’, но можно применять и к другим символам. |
| — | lower(text_value) |
Переводит символы в нижний регистр. |
| — | upper(text_value) |
Переводит символы в верхний регистр. |
| — | reverse(text_value) |
Меняет порядок символов на обратный. |
| — | reverseb(text_value) |
Меняет порядок символов на обратный по два. Если в строке нечетное количество символов, то сначала она дополняется ведущим нулем слева, а затем происходит перестановка. |
| — | lfill(text_value,5,'0') |
Добавляет указанный символ (третий параметр функции) слева до тех пор, пока в строке не будет требуемое количество символов (второй параметр функции). |
| — | rfill(text_value,5,'0') |
Добавляет указанный символ (третий параметр функции) справа до тех пор, пока в строке не будет требуемое количество символов (второй параметр функции). |
| — | sequence(text_value,2,3,5,4,1,0) |
Изменяет порядок символов. Символы расставляются в порядке, указанном после имени параметра. Если указан несуществующий индекс (порядковый номер), то на месте этого символа подставляется 0. Индексы считаются слева направо, начиная с 0. |
| — | hex(text_value) |
Переводит из десятичной системы в шестнадцатеричную. |
| — | dec(text_value) |
Переводит из шестнадцатеричной системы в десятичную. |
| — | hextoascii(text_value) |
Переводит из шестнадцатеричной системы в ASCII. |
| — | concat(text_value, 'text') |
Склеивает строки. Можно склеивать более двух строк. |
| — | substr(text_value, 1, 4) |
Выбирает определенные символы из значения параметра. Выбранные символы образуют подстроку. Индексы считаются слева направо, начиная с 0. |
| — | len(text_value) |
Возвращает число, определяющее количество символов в строке. С результатом можно выполнять математические операции, так как оно является числом. |
| Waliot | Wialon |
|---|---|
(((latitude-#latitude)*111.1365)^2+((longitude-#longitude)*64.3541)^2)^0.5/((fix_time-#fix_time)/3600) |
(((lat-#lat)*const111.1365)^const2+((lon-#lon)*const64.3541)^const2)^const0.5/((time-#time)/const3600) |
Автозамена в импорте покрывает типовые конструкции, но сложные пользовательские формулы (вложенные условия, специфические валидаторы, экзотические датчики) требуют проверки и ручной корректировки. Таблицы соответствия типов датчиков и имен параметров доступны на специальных страницах базы знаний.