Некоторые устройства позволяют передавать пользовательские данные. В Wialon эти данные по умолчанию регистрируются как целые беззнаковые числа вне зависимости от того, в каком виде их передает устройство. Для того чтобы получать в отчетах и сообщениях в Wialon «понятные значения», то есть такие, какими их отправляет устройство, можно воспользоваться методом побитового контроля параметра. В этой инструкции описано три примера использования такого метода для работы с исходными данными.
Для дополнительной информации см. экспертную статью Датчики: работа с битами.
Пример 1
Рассмотрим случай, когда объект отправляет данные, например, в параметре user_d1 в виде двух двухбайтных целых беззнаковых чисел. В Wialon эти данные регистрируются в виде user_d1=2646793773.
Переведите число, получаемое в Wialon, в двоичную систему: 2646793773 → 10011101110000101101111000101101.
В Wialon биты исчисляются с единицы.
Разделите полученное число на два (по количеству двухбайтных чисел): 1101111000101101 и 1001110111000010.
В Wialon в свойствах объекта создайте произвольный датчик numeral_1. В поле Параметр укажите следующую формулу:
user_d1:1*const1+ user_d1:2*const2+ user_d1:3*const4+ user_d1:4*const8+ user_d1:5*const16+ user_d1:6*const32+ user_d1:7*const64+ user_d1:8*const128+ user_d1:9*const256+ user_d1:10*const512+ user_d1:11*const1024+ user_d1:12*const2048+ user_d1:13*const4096+ user_d1:14*const8192+ user_d1:15*const16384+ user_d1:16*const32768
Создайте произвольный датчик numeral_2. В поле Параметр укажите следующую формулу:
user_d1:17*const1+ user_d1:18*const2+ user_d1:19*const4+ user_d1:20*const8+ user_d1:21*const16+ user_d1:22*const32+ user_d1:23*const64+ user_d1:24*const128+ user_d1:25*const256+ user_d1:26*const512+ user_d1:27*const1024+ user_d1:28*const2048+ user_d1:29*const4096+ user_d1:30*const8192+ user_d1:31*const16384+ user_d1:32*const32768
В результате в Wialon в отчетах и сообщениях вместо user_d1=2646793773 показываются значения двух двухбайтных датчиков: numeral_1=56877 и numeral_2=40386.
Пример 2
В этом примере рассмотрим случай, когда объект отправляет данные в виде числа с плавающей запятой (float). В Wialon они регистрируются в виде user_d3=1017282565.
- Переведите число, получаемое в Wialon, в двоичную систему: 1017282565 → 111100101000101000000000000101.
В Wialon в свойствах объекта создайте произвольный датчик float. В параметрах датчика укажите следующую формулу:
const-1^user_d3:32*const2^((user_d3:24*const1+user_d3:25*const2+user_d3:26*const4+user_d3:27*const8+user_d3:28*const16+user_d3:29*const32+user_d3:30*const64+user_d3:31*const128)-127)*const1+user_d3:1*const1+user_d3:2*const2+user_d3:3*const4+user_d3:4*const8+user_d3:5*const16+user_d3:6*const32+user_d3:7*const64+user_d3:8*const128+user_d3:9*const256+user_d3:10*const512+user_d3:11*const1024+user_d3:12*const2048+user_d3:13*const4096+user_d3:14*const8192+user_d3:15*const16384+user_d3:16*const32768+user_d3:17*const65536+user_d3:18*const131072+user_d3:19*const262144+user_d3:20*const524288+user_d3:21*const1048576+user_d3:22*const2097152+user_d3:23*const4194304)/const8388608)
Формула для параметра датчика создается на основе формулы для пересчета в 32-битный формат F=(-1)S2(E-127)(1+M/223).
В результате в Wialon вместо user_d3=1017282565 показываются значения датчика float.
Пример 3
На примере устройства Teltonika FMT100 рассмотрим случай, когда в параметре io_258 регистрируются значения акселерометра по трем осям при превышении значений, заданных в устройстве. Данные этого параметра удобно использовать для работы с приложением Eco Driving. В Wialon данные регистрируются в виде io_258=932034904003. Необходимо привести значения к g.
На изображении ниже приведена структура параметра.
Значения по осям знаковые. В Eco Driving используются только значения по осям Х и Y. По оси X в зависимости от знака определяется ускорение и торможение, а по оси Y – боковое ускорение, которое мы будем использовать по модулю, поскольку для Eco Driving знак (лево/право) не учитывается.
В Wialon в свойствах объекта создайте произвольный датчик Accel_MAX. В поле Параметр укажите следующую формулу :
(((io_258:48*const32768)-(io_258:33*const1+io_258:34*const2+io_258:35*const4+io_258:36*const8+io_258:37*const16+io_258:38*const32+io_258:39*const64+io_258:40*const128+io_258:41*const256+io_258:42*const512+io_258:43*const1024+io_258:44*const2048+io_258:45*const4096+io_258:46*const8192+io_258:47*const16384))*io_258:48)/const1000
Создайте датчик Brk_MAX. В поле Параметр укажите следующую формулу :
((-(io_258:33*const1+io_258:34*const2+io_258:35*const4+io_258:36*const8+io_258:37*const16+io_258:38*const32+io_258:39*const64+io_258:40*const128+io_258:41*const256+io_258:42*const512+io_258:43*const1024+io_258:44*const2048+io_258:45*const4096+io_258:46*const8192+io_258:47*const16384))*(io_258:48-const1))/const1000
- Создайте датчик Crn_MAX. В поле Параметр укажите следующую формулу:
(-(io_258:17*const1+io_258:18*const2+io_258:19*const4+io_258:20*const8+io_258:21*const16+io_258:22*const32+io_258:23*const64+io_258:24*const128+io_258:25*const256+io_258:26*const512+io_258:27*const1024+io_258:28*const2048+io_258:29*const4096+io_258:30*const8192+io_258:31*const16384))*(io_258:32-const1))/const1000+(((io_258:32*const32768)-(io_258:17*const1+io_258:18*const2+io_258:19*const4+io_258:20*const8+io_258:21*const16+io_258:22*const32+io_258:23*const64+io_258:24*const128+io_258:25*const256+io_258:26*const512+io_258:27*const1024+io_258:28*const2048+io_258:29*const4096+io_258:30*const8192+io_258:31*const16384))*io_258:32)/const1000
Для оси Y отведено 2 байта. Номера битов в Wialon — с 17 по 32. Поскольку значения берутся по модулю, формула немного длиннее предыдущих.
Из приведенных примеров видно, что область применения побитового контроля не ограничивается контролем конкретного бита. Это универсальный инструмент для создания уникальных датчиков в Wialon, логику и расчет которых вы можете сформировать самостоятельно и таким образом удовлетворить самые нестандартные запросы.