Модуль SENS обеспечивает передачу данных с сенсоров метки параллельно с позиционированием. Данные передаются малыми порциями в пакетах позиционирования UWB, в аплинках LoRa, в пакетах LTE.
Каждое устройство имеет свой набор сенсоров, определяемый конкретной версией встроенного ПО. В зависимости от конфигурации модуля SENS передаются только выбранные сенсоры. Если все сенсоры не влезают в радиопакет, то оставшиеся передаются в следующем радиопакете, и так по кругу. С версии 3.18.0 сенсор GNSS_BULK(-25) вкладывается в пакет специальным образом, см. ниже /sens/fill
Сенсоры передаются в виде код:значение. Коды сенсоров уникальны в рамках системы позиционирования (допустимы отрицательные коды). Значением сенсора может быть одно число, или массив чисел, или список вида идентификатор:значение ; здесь идентификатором могут быть номера каналов сенсора или индексы полей для сложных сенсоров. Типичное строковое представление блока сенсоров в радиопакете (в Списке меток CoBench) блока сенсоров в радиопакетеметок CoBench, см. Список меток – Формат поля Sensors):
v1{i -4:0 -1:1 -14:0 -10:[2 -2318 28] -13:{3 3:0 4:0 6:0} -6:39 2:{2 1:-2 2:-2} 6:{2 1:0 2:0}}
Здесь v1 обозначает версию набора кодов сенсоров SensorsIdSet. В настоящее время есть только версия версии 1 и 2. Коды сенсоров в этих версиях одинаковые, отличается формат EvId (см. ниже)
Описание значений и поведения разных сенсоров см. Коды сенсоров ULUN
Существует два типа сенсоров – сенсор состояния и сенсор события. Для каждого кода сенсора известен его тип.
Сенсор состояния (StateSensor)
Передает значение какого-либо измеряемого параметра на момент отправки сенсора в радиопакете. Примером могут быть напряжение батареи или температура метки.
Такие сенсоры передаются постоянно, пока включены в конфигурации.
Сенсор события (EventSensor)
Передает информацию о каком-либо событии. Например, нажатие кнопки или завершение замера GNSS. Такая информация обязательно сопровождается временем события в виде количества идентификатором события EvId. EvId содержит количество секунд от момента события до момента отправки радиопакета (PassTime), что позволяет восстановить абсолютное время события после приема пакета (с некоторой приемлемой точностью). Кроме PassTime EvId передаются также код события или значения каких-либо параметров, измеренных в момент события.
Такие сенсоры конфигурируются по умолчанию на автоматическую отправку: /sens <name>#Send=Auto. В такой конфигурации они передаются несколько раз (для надежности) после возникновения соответствующего события, затем передача сенсора прекращается до следующего события. Количество раз свое у каждого сенсора. Конфигурация модуля:
EvId передается в виде:
- SensorsIdSet 1 – одно целое число PassTime
- SensorsIdSet 2 – массив размера 2: [ Seq, PassTime ]
Seq это последовательный номер данного события (циклический в диапазоне -24..23). Применяется для различения разных событий.
fw версии до 2.3.0 передает только SensorsIdSet 1
fw версии c 2.3.0 имеет параметр для переключения SensorsIdSet : /node/ctl#SensVer =1.2 (по умолчанию 2)
Конфигурация модуля
/sens
Парсет-массив, задает режим отправки для каждого сенсора. Содержит записи для всех сенсоров, отдельно для каждого канала многоканальных сенсоров. Ключом для идентификации записи является имя сенсора.
Параметр | Значения | Описание |
i | text string | Описание сенсора |
. Неизменяемый параметр (read only) | ||
Send | Off, | Режим отправки сенсора:
|
В режиме отправки Send=Auto решение об отправке принимается автоматически с учетом условий, специфичных для каждого сенсора.
Примеры (через CoBench ):
Запрос | Ответ | |
|
# i=Orientation -16: Send=Normal # i=buttona -5:Send=Auto
# i=temp-6:Send=Normal
# i=Ubat-7:Send=Off
| Список всех сенсоров в устройстве и их текущий режим отправки | |||
|
| Состояние сенсора bar (код -10) |
|
|
|
|
Изменение режима отправки сенсора bar | |
|
|
|
|
/sens
|
|
Сброс режима отправки сенсора bar в исходное состояние | |
|
|
|
|
|
| Сброс режима отправки всех сенсоров в исходное состояние |
...
Код
...
Название
...
Описание
...
7
...
BLE_SENSOR
{ номер_канала : значение } Данные с фитнесс-браслета. Каналы: 1 : Пульс (ударов в мин)
...
6
...
IN_UPTIME
...
{ номер_канала : значение } "Моточасы" Длительность активного состояния линии IN_DIG, секунды. См. INPUT сенсоры
...
5
...
CANBUS_PARAMETER
...
{ номер_канала : значение } Параметры с CAN-шины. Настройку каналов см. CAN модуль
...
2
...
FUEL_LEVEL
...
{ номер_канала : значение } Уровень топлива. Значение в условных единицах.
-1=Неправильные настройки (выключен опрос датчика или адрес датчика 0)
-2=Нет данных с датчика (более 5с)
...
-1
...
POWER_BATTERY_STATE
...
Состояние батареи: 0=BatteryOff, 1=Low, 2=Mid, 3=Good
...
-2
...
POWER_CHARGER_STATE
...
Состояние зарядки аккумулятора: 0=Idle, 1=Active, 2=Suspended
...
-3
...
POWER_SOURCE
...
Источник питания: 0=Battery, 1=External
...
-4
...
MOTION
...
Состояние по акселерометру: 0=Движение, 1=Покой
...
-5
...
EVT_BUTTON
...
Время с нажатия кнопки, секунды. Передается 5 раз после нажатия кнопки.
...
-6
...
TEMPERATURE
...
Температура, degC
...
-7
...
VOLTAGE_BAT
...
Напряжение батареи, mV
...
-10
...
BAROMETER
...
{ номер_параметра : значение } Показания барометра:
- - Относительное давление, Pa (Prel = Pabs - 101325 Pa)
- - Температура барометра, degC
...
-11
...
IN_ADC
...
{ номер_канала : значение } Аналоговый вход, Напряжение, mV. См. INPUT сенсоры
...
...
...
...
-12
...
IN_DIG
...
{ номер_канала : значение } Цифровой вход: 0, 1. См. INPUT сенсоры
...
-13
...
IN_COUNT
...
{ номер_канала : значение } Счетчик импульсов на линии IN_DIG. См. INPUT сенсоры
...
-14
...
TAGCFGSITE
...
Состояние метки для Автоконфигурации меток (ConfigUpdate); также признак TDOA Rx- блинка.
bitmap:
bit_0 - Old (update request) bit_3:1 - Mark
bit_7:4 - Group
...
-15
...
EVT_MOTION
...
{ EventId : timepassed } События акселерометра. Каждое событие передается несколько раз после того, как случилось.
timepassed – время с события, секунды
EventId=0: no event, reserved EventId=1: free fall EventId=2: impact
...
-16
...
ORIENTATION
...
Ориентация акселерометра.
ZH=0 ZL=1 YH=2 YL=3 XH=4 XL=5,
acceleration over threshold on this axis: Z, Y, X; H - positive, L - negative.
...
-18
...
EVT_GNSS
...
{ PassTime : { номер_параметра : значение } } Данные GNSS. Каждый замер передается несколько раз.
PassTime – время с замера. Параметры:
0 - LON, Longitude in deg (scaling 1e-6, up to 4 bytes) 1 - LAT, Latitude in deg (scaling 1e-6, up to 4 bytes)
- - HEIGHT, Height above ellipsoid in 100mm (up to 4 bytes)
- - hACC, Horizontal accuracy estimate in 100mm (up to 1000m) 4 - vACC, Vertical accuracy estimate in 100mm (up to 1000m)
5 - VELN, NED north velocity 0.1 m/s 6 - VELE, NED east velocity 0.1 m/s 7 - VELD, NED down velocity 0.1 m/s
...
-19
...
EVT_BEACONS
...
- - BeaconID: MAC-адрес MSB first
- - optional fPathLoss; PathLoss_dBm = (fPathLoss - 60); PathLoss_dBm is equal to (RSSI - TxPowerAt0m )
- - optional fVoltage : int; Voltage_V = (fVoltage / 100 + 3)
...
-21
...
DISTANCE
Опрос сенсоров
/sens/poll
Текущее состояние сенсоров может быть опрошено принудительно. При этом возвращаются значения всех сенсоров устройства на момент опроса.
Метка отправляет сенсоры в блинках, но сенсоры анкера (в режимах анкера) можно получить только этим опросом.
Запрос | Ответ | |||
|
| Текущие значения всех сенсоров в устройстве |
версия > 3.7.0 : В параметрах запроса (QueryOptions) можно указать список запрашиваемых сенсоров – имена или коды сенсоров:
| Code Block |
|---|
GET sens/poll chg uin -11
v2{i -2:0 -8:3944 -11:{4 1:0 2:25 3:1 4:1}} |
Заполнение радиопакета
версия >= 3.18.0
/sens/fill
Параметры заполнения радиопакета сенсорами. Присутствует только в устройствах, поддерживающих сенсор GNSS_BULK(-25).
Параметр | Значения | Описание |
PreBulk | uint | Фиксированное количество сенсоров в радиопакете перед сенсором GNSS_BULK(-25) (подробности ниже) |
Все сенсоры укладываются в радиопакет один за другим по кругу; если не влезли, то оставшиеся в следующем радиопакете.
Однако, сенсор GNSS_BULK(-25) укладывается специальным образом. Сенсор GNSS_BULK содержит замеры GNSS от предыдущего до текущего радиопакета. Если замеров много, они прореживаются, чтобы влезть в радиопакет и по возможности равномерно распределиться по времени между радиопакетами. Поэтому этот сенсор может содержать много данных и занимать весь доступный объем пакета. Чтобы он, с одной стороны, не вытеснял постоянно другие сенсоры, и, с другой стороны, сам не укорачивался другими сенсорами, его положение в пакете фиксируется параметром /sens/fill#PreBulk : сначала в пакет укладываются очередные другие сенсоры в количестве PreBulk, затем укладывается сенсор GNSS_BULK, подстраиваясь под всё оставшееся место, затем, если осталось место, укладываются очередные другие сенсоры.
Таким образом, сенсор GNSS_BULK передается в радиопакетах приоритетно и относительно равномерно, а остальные сенсоры по мере возможности. Чтобы они совсем не пропадали, для них отводится фиксированное минимальное место в количестве PreBulk штук
...
Код сенсора и название | Desription | |
inXadc | -11 IN_ADC | Напряжение на входной линии X |
|
|
|
inXdig | -12 IN_DIG | Двоичное состояние входной линии X (порог 1.0V): 0 – если напряжение меньше порога |
inXcount | -13 IN_COUNT | Счетчик положительных импульсов на inXdig, uint32_t. Добавляется по фронту, переполняется при 2^32, сохраняется при сбросах и отключении питания. |
inXup | 6 IN_UPTIME | Полное время inXdig=1, секунды, uint32_t, переполняется при 2^32, сохраняется при сбросах и отключении питания. |
Передача этих сенсоров может управляться:
Вручную как описано в SENS модуль установкой параметра /sens <name>#Send в Off или Normal
Автоматически (в некоторых устройствах). В таком случае параметр /sens <name>#Send должен быть Auto и режим передачи будет выбираться в зависимости от конфигурации устройства.