Активация выходной линии при попадании устройства в одну из геозон.
Список геозон может превышать 1000 шт.
Основное:
Файл с программой
Пример конфигурации для устройства S-2651
Дополнительно:
Утилита для конвертации списков геозон в .INT файл
Пример KML-файла с геозонами для конвертации
Пример TXT-файла с геозонами для конвертации (в архиве)
Пример XML-файла с геозонами для конвертации
Список с геозонами представлен в виде файла с массивом значений int32.
Файл размещается в корневой директории на SD-карте (поэтому программу можно использовать только с устройствами, которые поддерживают работу с SD-картой).
У
.INT
файла со споском геозон бинарный формат. Поэтому для его создания предусмотрена специальная программаgeozone_to_int_converter.exe
, которая позволяет конвертировать списки геозон из форматов, удобных для восприятия человеком, в бинарный.INT
файл.
Программа обеспечивает работу устройства со списком геозон (форма геозоны - окружность). Она проверяет принадлежность координат устройства хотя бы одной геозоне из списка.
Скорость обработки геозон 300 шт/сек.
Каждый раз после проверки всего списка фиксируется положение:
А так же, фиксируется факт изменения положения:
В тестовой программе в зависимости от положения производится управление выходом:
Внутри | ➜ | Выход 1 = ВКЛ |
Снаружи | ➜ | Выход 1 = ВЫКЛ |
Конвертируйте список геозон в .INT
файл при помощи утилиты geozone_to_int_converter.exe
Запомните количество геозон, которое будет получено в результате работы программы.
Это значение нужно будет ввести в настройкуInt32 p1
Поместите файл CExxxx.INT
в корень SD-карты.
Если название файла отличается от
CE0001.INT
, то необходимо указать это в настройкеInt32 p0
Настройте Выход 1 как "Общего назначения"
Пример загрузки программы в устройство описан в этой статье
Задайте необходимые настройки для работы программы.
Подробное описание настроек программы приведено ниже в соответствующем разделе
Параметр в конфигурации | int32_p0 |
Связанная переменная | GZ_INT_ARR_ID |
Описание | Идентификатор .INT массива на SD карте |
По умолчанию | 1 |
Диапазон значений | 1 .. 65535 (если в конфигурации 0, то используется значение по умолчанию) |
Идентификатор определяет название имени файла на SD-карте со списком геозон.
Название файла должно быть в формате CExxxx.INT
, где xxxx
это GZ_INT_ARR_ID в шестнадцатеричном виде:
GZ_INT_ARR_ID = 1 | ➜ | CE0001.INT |
GZ_INT_ARR_ID = 300 | ➜ | CE012C.INT |
Параметр в конфигурации | int32_p1 |
Связанная переменная | GZ_MAX_COUNT |
Описание | Программное ограничение списка геозон |
По умолчанию | 1000 |
Диапазон значений | 1 .. 2147483647 (если в конфигурации 0, то используется значение по умолчанию) |
Для обеспечения максимальной скорости обработки списка это значение должно соответствовать реальному количеству геозон в файле.
Программа проверяет в процессе работы со списком данный лимит. И если номер прочитанной геозоны превышает данную настройку, то программа досрочно прервет поиск по файлу и начнет с самого начала.
Если лимит не достугнут, то программа выполняет чтение геозон до конца файла.
Параметр в конфигурации | int32_p2 |
Связанная переменная | GZ_RADIUS_METERS |
Описание | Радиус каждой геозоны в метрах |
По умолчанию | 3000 |
Диапазон значений | 1 .. 2147483647 (если в конфигурации 0, то используется значение по умолчанию) |
Список геозон содержит только координаты центров окружностей.
Программа берет радиус геозон из этой переменной.
Параметр в конфигурации | bool_p0 |
Связанная переменная | OUTSIDE_STATE |
Описание | Состояние выходной линии №1, если объект СНАРУЖИ |
По умолчанию | 0 |
Диапазон значений | 0 .. 1 |
Настройка позволяет инвертировать логику активации выходной линии в зависимости от положения устройства.
OUTSIDE_STATE = 0, то выход ВЫКЛючен СНАРУЖИ и ВКЛючен ВНУТРИ.
OUTSIDE_STATE = 1, то выход ВКЛючен СНАРУЖИ и ВЫКЛючен ВНУТРИ.
Связанная переменная | gz_id_active |
Описание | Идентификатор текущей активной геозоны. Если 0, то устройство СНАРУЖИ |
Передавать как | 2 или 4 байтовый параметр |
Тип переменной | I32 |
Связанная переменная | gz_id_last |
Описание | Идентификатор последней активной геозоны. Если 0, то устройство не посещало геозон |
Передавать как | 2 или 4 байтовый параметр |
Тип переменной | I32 |
Связанная переменная | err_total |
Описание | Счетчик ошибок работы с SD-картой. Если значение больше 0, то с момента последнего включения устройства были ошибки при чтении данных из SD-карты |
Передавать как | 2 или 4 байтовый параметр |
Тип переменной | I32 |
нет
нет
В самом начале программы, в ветке "+" условия on startup выполняется восстановление переменных из конфигурации и телеметрии. Эти условия выполняются единожды при вклюении устройства.
Условие enable GZ scan открывает ветку логики, которая производит чтение геозон на SD-карте и последующее управление выходной линией.
Условие добавлено для явного выделения логики программы в отдельную ветку (это наглядно и позволяет совмещать несколько программ в одну).
В этой части программы выполняется базовая логика работы с SD-картой и проверка нахождения устройства внутри одной из геозон.
Отдельно отметим блок error actions. Он подсчитывает ошибки при работе с SD-картой для удобной диагностики работы программы.
Если ошибка разовая, то она просто будет посчитана и сохранена в переменной err_total.
Если подряд идет несколько ошибок, то программа устанавливает флаг had_err_series и пробует начать чтение списка с самого начала. Для удобства диагностики этот флаг обнуляетися только при включении устройства.
Количество ошибок для установки флага had_err_series задается переменной MAX_ERR_SERIES (по умолчанию значение переменной 5 ).
В этой части по условию on new cycle выполняются сервисные функции и обработка пользовательской логики. Условие on new cycle выполняется после чтения всего списка геозон (т.е. сначала анализируется ВЕСЬ список, а потом выполняются действия).
В блоке SERVICE_2 выполняется запись переменных в пользовательские параметры для сохранения в телеметрии и передачи на сервер.
Далее идет ряд веток "заготовок" для внедрения пользовательской логики.
Внутрь "заготовок" можно подставить несколько блоков или целые ветки пользовательской логики.
Чтобы не повредить структуру программы рекомендуется соблюдать правила:
➜ не менять существующие переменные
➜ любые ответвления НЕ должны обходить блок INIT
Ветка on ENTRY выполняется при входе в геозону.
Это краткосрочное событие, которое активируется в момент входа.
Ветка on CHANGE выполняется при одновременном выполнении двух условий:
Это краткосрочное событие, которое активируется в момент входа в новую геозону.
Ветка on EXIT выполняется при выходе из геозоны.
Это краткосрочное событие, которое активируется в момент выхода.
Блок OUTSIDE выполняется каждый раз если устройство снаружи геозоны.
В тестовой программе здесь выполняется установка значения выхода:
Блок INSIDE выполняется каждый раз если устройство внутри геозоны.
В тестовой программе здесь выполняется установка значения выхода:
Логика программы построена так, что все геозоны воспринимаются как единое пространство.
Поэтому ветки ON_ENTER и ON_EXIT не сработают, если устройство переходит из геозоны в геозону.
Например, если геозоны наложены друг на друга.