Параметр датчика

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

Параметры могут иметь самые разные наименования, которые закладываются в конфигурации оборудования — например, param199, param240, TEMP, pwr_int, gsm, can6 и многие другие. Как правило, узнать, какие параметры используются и за что они отвечают, можно в спецификации оборудования. Также можно в панели сообщений запросить сообщения от объекта и в соответствующей графе просмотреть доступные параметры.

Параметры из последнего сообщения объекта доступны для выбора в выпадающем списке при добавлении или редактировании датчика. Но даже если параметр отсутствует в выпадающем списке, его все равно можно ввести вручную.

Один и тот же параметр может использоваться для создания любого количества датчиков. Максимально разрешенное количество датчиков можно посмотреть в настройках пользователя на вкладке «Учетная запись».

Виртуальные параметры

Некоторые параметры определены в системе по умолчанию и подходят практически для любого типа оборудования:

speed скорость движения
altitude высота над уровнем моря
sats количество спутников
course курс (направление движения)
lat географическая широта
lon географическая долгота
time UNIX-время сообщения

:!: Примечание.
Некоторые редкие типы оборудования могут не поддерживать какие-либо из этих параметров — например, высоту или скорость.

Параметры входов и выходов

В системе зарезервировано 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

Расшифровка:
Скорость вычисляется по формуле «расстояние, деленное на время». Для вычисления расстояния применяется теорема Пифагора. Получается разница широты в соседних сообщениях, возведенная в квадрат, плюс разница долготы в соседних сообщениях, возведенная в квадрат, и из этой суммы извлекается квадратный корень. Полученный результат и есть расстояние (правда, в градусах). Оно делится на разницу времени в соседних сообщениях. Таким образом, получается расстояние, выраженное в градусах в секунду. Для перевода в привычные километры в час нужно применить коэффициент. Он может быть разным для различных мест. В примере выше приведен коэффициент для Москвы, который равен 200000.

Если при этом имеется датчик зажигания, то параметр можно задать так:

((lat-#lat)^const2+(lon-#lon)^const2)^const0.5/(time-#time)*const200000*[Имя датчика зажигания]

Пример 2: датчик относительных моточасов

Для получения данных о реальных моточасах нужно создать два датчика:

  1. датчик относительных моточасов;
  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: проверка наличия значения

На автомобиле установлено оборудование, которое присылает какой-либо параметр (например, in1). Затем данное оборудование сломалось и было установлено новое. Новое оборудование присылает те же самые данные только в другом параметре (например, in2). Чтобы исключить потерю данных при генерации отчета, в поле ввода параметров при создании датчика необходимо использовать проверку наличия значения. Старое оборудование отработало на автомобиле в течение декабря, новое — в течение января, а отчет необходимо получить за два этих месяца. Тогда, если при вводе параметров была применена проверка наличия значения (указано в параметрах датчика «in1|in2»), то система будет брать значение из параметра «in1», а если значение «in1» невалидно (например, оборудование отсутствует), то из параметра «in2». Другими словами, при использовании проверки наличия значения системой берется в расчет первое валидное значение параметра.

in1|in2

Текстовые параметры

Как правило, данные, присылаемые параметром, являются числовыми, однако в некоторых случаях устройство может присылать в параметре текст. Это может быть, например, название какого-либо статуса (служебное/личное), состояние (свободен/занят, on/off), время, прошедшее с какого-то события, и др.

Датчики с текстовыми параметрами не требуют настройки таблиц расчета. Текстовые данные отображаются в том виде, в котором они пришли. Однако область применения текстовых данных ограничена: они могут быть отображены только в дополнительной информации об объекте, в панели сообщений, в проигрывателе треков, а также при трассировке трека.

Преобразование параметров

Операция преобразования может применяться только к параметрам, поступающим непосредственно от оборудования. Случаи применения описаны ниже.

Побитовый контроль параметра

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

param199:3

Это удобно, если устройство через один параметр показывает множество разнообразных данных: например, первый бит отображает состояние сигнализации (вкл/выкл), второй — состояние водительской двери (открыта/закрыта), третий — состояние фар и т.д. Таким образом, при помощи побитового контроля параметра можно на основе одного параметра создать несколько различных датчиков.

:!: Примечание.
Параметры типа double при побитовом контроле автоматически приводятся к int, после чего выделяется бит.

:!: Советуем напрямую не обращаться к биту выше 53-его. В случае если это необходимо, можно придерживаться следующей схемы:

  1. Создайте датчик, в котором приходит нужный параметр. Например, Датчик1.
  2. Создайте второй датчик. Например, Датчик2.
  3. В качестве параметра второго датчика укажите формулу [Датчик1]/const4294967296. Таким образом, произойдет смещение на 4 байта вправо.

Преобразование текстовых параметров

Если в формуле датчика встречается текстовый параметр, то он преобразуется в 64-битное целое число. Указать систему счисления можно через двоеточие (по умолчанию считается в десятичной системе). Допустим, в параметр «text_param» пришло значение «100», тогда

text_param = 100
text_param:16 = 256
text_param:2 = 4

Определение номера дня в году

Для определения номера дня в году (относительно 1 января) необходимо указать после двоеточия «d». Например, для 28 марта 2017 в 11:00:00 (UTC) UNIX-время соответствует значению «1490698800». Следовательно,

time = 1490698800
time:d = 87
  support@intsm.ru   |   Copyright © 2002-2017 Автовектор