Параметр является обязательным свойством датчика. Как правило, на основе данных, приходящих в параметре, и базируется работа датчика.
Параметры могут иметь самые разные наименования, которые закладываются в конфигурации оборудования — например, param199, param240, TEMP, pwr_int, gsm, can6 и многие другие. Как правило, узнать, какие параметры используются и за что они отвечают, можно в спецификации оборудования. Также на вкладке Сообщения можно запросить сообщения от объекта и в соответствующей графе просмотреть доступные параметры.
Параметры из последнего сообщения объекта доступны для выбора в выпадающем списке при добавлении или редактировании датчика. Но даже если параметр отсутствует в выпадающем списке, его все равно можно ввести вручную.
Один и тот же параметр может использоваться для создания любого количества датчиков. Максимально разрешенное количество датчиков можно посмотреть в настройках пользователя на вкладке Учетная запись.
Виртуальные параметры
Некоторые параметры определены в системе по умолчанию и подходят практически для любого типа оборудования:
speed | скорость движения |
---|---|
altitude | высота над уровнем моря |
sats | количество спутников |
course | курс (направление движения) |
lat | географическая широта |
lon | географическая долгота |
time | UNIX-время сообщения |
regtime | время регистрации сообщения на сервере |
Некоторые редкие типы оборудования могут не поддерживать какие-либо из этих параметров — например, высоту или скорость.
Параметры входов и выходов
В системе зарезервировано 32 цифровых входа и выхода. Они задаются следующим образом:
inN | цифровой вход, где N — номер входа |
---|---|
outN | цифровой выход, где N — номер выхода |
adcN | аналоговый вход, где N — номер входа |
Например, adc8 — это параметр, фиксирующий значения с восьмого аналогового входа.
Обычно данные по цифровым входам/выходам представлены в сообщениях в следующем формате: I/O = 0/0, где I — вход (input), O — выход (output). Если I/O = 0/0, все биты (входы/выходы) не активны. Если что-либо из этого не 0, значит, какой-то вход (I) или выход (O) активирован. Чтобы определить, какой именно, нужно шестнадцатеричное число преобразовать в двоичное и по нему определить номер бита.
Допустим, в месте, где было включено зажигание, мы получили сообщение с параметром I/O = 10/0. Чтобы получить отсюда номер бита (входа), в котором отображается значение датчика, в калькуляторе в режиме шестнадцатеричных чисел (HEX) нужно ввести полученное значение, то есть 10, а затем переключиться в двоичный режим (BIN). Мы получим новое число — 10000. Теперь необходимо посчитать, в какой позиции появилась единица. Счет необходимо вести справа налево. В нашем случае единица стоит в пятой позиции, значит, датчик зажигания подключен к пятому порту, а так как изменившаяся цифра стоит до дроби (I/O), следовательно, речь идет о входе. Таким образом, мы получаем наименование параметра — in5 (цифровой вход 5).
Для датчика также допускается указание наименования параметра в виде in или out для обозначения суммы всех входов и выходов, соответственно.
Константный параметр
Кроме того, можно создать виртуальный датчик на основе параметра типа constN, где N — любое число. Датчик, созданный по этому параметру, всегда возвращает N. Например, const10, const-8.5.
Такой датчик может использоваться как самостоятельно (удобен в графиках для визуального обозначения какой-то критической отметки), так и для создания виртуальных датчиков при помощи системы валидации, а также в выражениях.
Параметры в виде выражений
Параметр при конфигурации датчика можно задавать составным выражением, где могут использоваться:
параметры в текущем сообщении (adc1, in1 и т.п.);
параметры из предыдущего сообщения (перед ними нужно ставить знак #, например, #adc1);
побитовый контроль параметра (param199:3 и т.п.);
имена датчиков (их нужно заключать в квадратные скобки, например, [Уровень топлива]);
константные числа (const10, const-4.54 и т.п.);
знаки математических операций:
+ | сложение |
---|---|
− | вычитание |
∗ | умножение |
/ | деление |
^ | возведение в степень |
( ) | скобки приоритета |
| | проверка наличия значения |
: | операция преобразования |
Например, ^const2 — возвести в квадрат, ^const0.5 — извлечь квадратный корень.
Если один из параметров, входящих в выражение, невалиден, невалидным является и его значение целиком.
Параметры из предыдущего сообщения недоступны для датчика Частный режим и его валидатора, в уведомлениях и при трассировке графиков.
Благодаря выражениям можно создавать самые разнообразные датчики, отвечающие любым потребностям и поставленным задачам.
Пример 1: создание датчика скорости по координатам
Параметр для датчика скорости по координатам может выглядеть так:
((lat-#lat)||const2+(lon-#lon)||const2)||const0.5/(time-#time)*const200000
Расшифровка:
Скорость вычисляется по формуле расстояние, деленное на время. Для вычисления расстояния применяется теорема Пифагора. Получается разница широты в соседних сообщениях, возведенная в квадрат, плюс разница долготы в соседних сообщениях, возведенная в квадрат, и из этой суммы извлекается квадратный корень. Полученный результат и есть расстояние (в градусах). Оно делится на разницу времени в соседних сообщениях. Таким образом, получается скорость, выраженная в градусах в секунду. Для перевода в километры в час нужно применить коэффициент перевода градусов в километры на разных широтах. Он может отличаться в зависимости от расположения. В примере выше приведен коэффициент для Москвы, который равен 200 000.
Для расчета коэффициента используется следующая формула:
111321*cos(55.75583)/1000*3600=225513.52
где 111 321 — длина дуги параллели в 1° по долготе на экваторе, м;
55.75583 — широта Москвы в десятичном формате.
При необходимости рассчитать коэффициент для другого места подставьте в формуле его широту в десятичном формате, не меняя остальные значения.
Если при этом имеется датчик зажигания, то параметр можно задать так:
((lat-#lat)||const2+(lon-#lon)||const2)||const0.5/(time-#time)*const200000*[Имя датчика зажигания]
Такой датчик можно использовать только в отчетах (не в онлайн-уведомлениях), так как для него требуются параметры из предыдущего сообщения.
Пример 2: датчик относительных моточасов
Для получения данных о реальных моточасах нужно создать два датчика:
- датчик относительных моточасов;
- датчик коэффициент моточасов в зависимости от оборотов двигателя.
Создаем датчик с типом Относительные моточасы и параметром:
(time-#time)*[Имя датчика коэффициента]/const3600
Т.е. параметр представляет собой разницу во времени между соседними сообщениями, умноженную на коэффициент интенсивности работы и разделенную на 3600. Деление на 3600 необходимо, чтобы перевести секунды в часы.
Датчик коэффициента, который будет определять интенсивность работы оборудования в зависимости от оборотов двигателя, создаем по следующей схеме:
Сначала создаем датчик, с помощью которого будем высчитывать коэффициент моточасов:
- 1 минута работы при 2000 об/мин соответствуют 90 секундам моточасов => коэффициент 1,5.
- 1 минута работы при 1500 об/мин соответствую 60 секундам моточасов => коэффициент 1.
- 1 минута работы при 1000 об/мин соответствуют 40 секундам моточасов => коэффициент 0.67.
- 1 минута работы при 500 об/мин соответствуют 20 секундам моточасов => коэффициент 0.33.
Допустим, параметр param1 шлет значение оборотов двигателя. Тогда параметр датчика коэффициента будет такой:
(param1+#param1)/const2
Т.е. этот параметр представляет собой среднее арифметическое оборотов двигателя за интервал между двумя соседними сообщениями.
Чтобы получить из оборотов коэффициент, нужно применить таблицу преобразований:
- x=500 y=0.33
- x=1000 y=0.67
- x=1500 y=1
- x=2000 y=1.5
Такие датчики можно использовать только в отчетах (не в счетчиках и онлайн-уведомлениях), так как для них требуются параметры из предыдущего сообщения.
Пример 3: проверка наличия значения
На автомобиле установлено оборудование, которое присылает какой-либо параметр (например, param1). Затем данное оборудование сломалось и было установлено новое. Новое оборудование присылает те же самые данные только в другом параметре (например, param2). Чтобы исключить потерю данных при генерации отчета, в поле ввода параметров при создании датчика необходимо использовать проверку наличия значения. Старое оборудование отработало на автомобиле в течение декабря, новое — в течение января, а отчет необходимо получить за два этих месяца. Тогда, если при вводе параметров была применена проверка наличия значения (указано в параметрах датчика param1|param2), то система будет брать значение из параметра param1, а если значение param1 невалидно (например, оборудование отсутствует), то из параметра param2. Другими словами, при использовании проверки наличия значения системой берется в расчет первое валидное значение параметра.
param1|param2
Не работает с цифровыми датчиками.
Текстовые параметры
Как правило, данные параметров являются числовыми, но в некоторых случаях устройство может присылать в параметре текст. Это может быть, например, название какого-либо статуса (служебное/личное), состояние (свободен/занят, on/off), время, прошедшее с какого-то события, и др.
Датчики с текстовыми параметрами не требуют настройки таблиц расчета. Текстовые данные представляются в том виде, в котором они пришли.
Текстовые данные могут показываться:
- в дополнительной информации об объекте;
- в панели сообщений;
- в проигрывателе треков;
- при трассировке трека;
- в таблице Трассировка датчика в колонке Форматированное значение.
Преобразование параметров
Операция преобразования может применяться только к параметрам, поступающим непосредственно от оборудования. Случаи применения описаны ниже.
Побитовый контроль параметра
Побитовый контроль параметра позволяет контролировать не весь параметр в целом, а конкретный бит. Например, чтобы контролировать третий бит параметра param199 после его названия нужно поставить двоеточие и номер бита.
param199:3
Это удобно, если устройство через один параметр показывает множество разнообразных данных: например, первый бит соответствует состоянию сигнализации (вкл/выкл), второй — состоянию водительской двери (открыта/закрыта), третий — состоянию фар и т. д. Таким образом, при помощи побитового контроля параметра можно на основе одного параметра создать несколько различных датчиков.
Параметры типа double при побитовом контроле автоматически приводятся к int, после чего выделяется бит.
Советуем напрямую не обращаться к биту выше 53-его. Если это необходимо, можно придерживаться следующей схемы:
Создайте датчик, в котором приходит нужный параметр. Например, Датчик1.
Создайте второй датчик. Например, Датчик2.
В качестве параметра второго датчика укажите формулу [Датчик1]/const4294967296. Таким образом, произойдет смещение на 4 байта вправо.
Преобразование текстовых параметров
Если в формуле датчика встречается текстовый параметр, то он преобразуется в 53-битное целое число. Указать систему счисления можно через двоеточие (по умолчанию считается в десятичной системе). Допустим, в параметр text_param пришло значение 100, тогда
text_param = 100 text_param:10 = 100 text_param:16 = 256 text_param:2 = 4
Определение номера дня в году
Для определения номера дня в году (относительно 1 января) необходимо указать после двоеточия d. Например, для 28 марта 2017 года в 11:00:00 (UTC) UNIX-время соответствует значению 1490698800. Следовательно,
time = 1490698800 time:d = 87