bg

Прием и обработка GPS данных на примере Garmin Geko301

Задача:

Я пытаюсь получить текстовые данные от GPS приемника Garmin Geko301. Gekos это маленькое и водостойкое устройство GPS с простой операционной системой. Я хочу считывать позицию в файл Microsoft Excel. Простой текстовый (ASCII) вывод данных GPS логгера содержит время, позицию, скорость в фиксированных позициях (не через разделитель), заданных в следующей таблице:

    FIELD DESCRIPTION:      WIDTH:  NOTES:
    ----------------------- ------- ------------------------
    Sentence start          1       Always '@'
    ----------------------- ------- ------------------------
   /Year                    2       Last two digits of UTC year
  | ----------------------- ------- ------------------------
  | Month                   2       UTC month, "01".."12"
T | ----------------------- ------- ------------------------
i | Day                     2       UTC day of month, "01".."31"
m | ----------------------- ------- ------------------------
e | Hour                    2       UTC hour, "00".."23"
  | ----------------------- ------- ------------------------
  | Minute                  2       UTC minute, "00".."59"
  | ----------------------- ------- ------------------------
   \Second                  2       UTC second, "00".."59"
    ----------------------- ------- ------------------------
   /Latitude hemisphere     1       'N' or 'S'
  | ----------------------- ------- ------------------------
  | Latitude position       7       WGS84 ddmmmmm, with an implied
  |                                 decimal after the 4th digit
  | ----------------------- ------- ------------------------
  | Longitude hemishpere    1       'E' or 'W'
  | ----------------------- ------- ------------------------
  | Longitude position      8       WGS84 dddmmmmm with an implied
P |                                 decimal after the 5th digit
o | ----------------------- ------- ------------------------
s | Position status         1       'd' if current 2D differential GPS position
i |                                 'D' if current 3D differential GPS position
t |                                 'g' if current 2D GPS position
i |                                 'G' if current 3D GPS position
o |                                 'S' if simulated position
n |                                 '_' if invalid position
  | ----------------------- ------- ------------------------
  | Horizontal posn error   3       EPH in meters
  | ----------------------- ------- ------------------------
  | Altitude sign           1       '+' or '-'
  | ----------------------- ------- ------------------------
  | Altitude                5       Height above or below mean
   \                                sea level in meters
    ----------------------- ------- ------------------------
   /East/West velocity      1       'E' or 'W'
  |     direction
  | ----------------------- ------- ------------------------
  | East/West velocity      4       Meters per second in tenths,
  |     magnitude                   ("1234" = 123.4 m/s)
V | ----------------------- ------- ------------------------
e | North/South velocity    1       'N' or 'S'
l |     direction
o | ----------------------- ------- ------------------------
c | North/South velocity    4       Meters per second in tenths,
i |     magnitude                   ("1234" = 123.4 m/s)
t | ----------------------- ------- ------------------------
y | Vertical velocity       1       'U' (up) or 'D' (down)
  |     direction
  | ----------------------- ------- ------------------------
  | Vertical velocity       4       Meters per second in hundredths,
   \    magnitude                   ("1234" = 12.34 m/s)
    ----------------------- ------- ------------------------
    Sentence end            2       Carriage return, '0x0D', and
                                    line feed, '0x0A'
    ----------------------- ------- ------------------------

Если числовое значение меньше указанной ширины поля, то оно дополняется нулями в начале значения (например, высота 50 метров над уровнем моря будет выведена как "+00050"). Каждое значение, кроме заголовка и окончания пакета данных может быть заменено подчеркиваниями, обозначающими неверные данные.

Данные GPS полученные с помощью нашего логгера
Рис.1. Данные GPS полученные с помощью нашего логгера

Требования:

  • Advanced Serial Data Logger (ASDL) Professional или пробная версия;
  • Модуль "ASCII data parser and query" для Advanced Serial Data Logger;
  • Модуль "DDE server" для логгера (опционально, для тестирования);
  • Модуль "Local database" для логгера.

Подразумевается что:

Вы настроили параметры связи с устройством (скорость, количество бит данных, контроль передачи и т.п.) в логгере и можете принимать данные без каких либо ошибок.

Решение:

На рисунке выше видно, что данные имеют простой формат. Каждая запись имеет фиксированную длину и фиксированную позицию каждого элемента в ней. Данные не содержат непечатных символов в начале и конце строки, но содержит постоянные символы, которые добавляются в начале и конце пакета данных для каждого пакета данных. Очевидно, что каждый пакет данных (один в строке) начинается с "@". Необходимо определить символы окончания пакета данных, по которым программа сможет выделять пакет данных из общего потока. Пожалуйста, включите вывод на экран непечатных символов, у которых код символа меньше 0x20h. Пожалуйста, установите опции с рисунка ниже. Вам необходимо создать конфигурацию для порта, если вы не сделали этого ранее, с помощью кнопки "Плюс" в главном окне программы.

Настройка вида данных
Рис.2. Настройка вида данных

Затем кликните по кнопке "OK" и попробуйте принять данных из порта. Вы должны получить данные, как на рисунке ниже.

Логгер данных GPS. Принятые данные.
Рис.3. Логгер данных GPS. Принятые данные.

Это другой вид принятых данных. Все непечатные символы были заменены на их код вида #0D. Теперь очевидно, что пакет данных (в зеленом прямоугольнике) начинается на "@" и заканчивается на #0D.

Теперь мы готовы к настройке модулей. Сначала, пожалуйста, выберите модуль "ASCII data parser and query" (рис.4a, поз.1) из выпадающего списка. Затем, включите анализ и экспорт для принимаемых данных (рис. 4a, поз. 2). Модуль "DDE server" (рис.4b, поз.3) поможет нам проверить, что парсер правильно разбирает пакет данных. После окончания настройки его можно будет отключить для экономии ресурсов. Модуль "Local database" будет экспортировать данные в базу данных формата Microsoft Access (MDB файл).

Логгер данных GPS. Активация парсера.
Рис.4a. Логгер данных GPS. Активация парсера.

Логгер данных GPS. Выбор модулей экспорта данных.
Рис.4b. Логгер данных GPS. Выбор модулей экспорта данных.

Сейчас, пожалуйста, откройте окно настройки модуля "ASCII parser and query" (кликните на кнопке "Настроить" рядом с выпадающим списком рис.4а, поз.1). Окно настройки появится на экране (рис.5).

Логгер данных GPS. Окно настройки парсера.
Рис.5. Логгер данных GPS. Окно настройки парсера.

Процесс настройки должен быть простым, если предварительно был выяснен формат данных в главном окне логгера данных (рис.3). Вы должны ввести данные в том же виде, что и в главном окне программы в полях 1 и 2. Поле №1 задает начало блока данных (необходимо ввести "@"), а поле №2 задает его окончание (#0D). Вы должны ввести значения с рис. 3, подчеркнутые зеленым. Поскольку мы указали признаки начала и окончания пакета, то необходимо настроить значение в поле "Таймаут" (рис.5 поз.#3) для предотвращения потери данных и исключения случаев, когда был принят признак начала пакета данных, а признак окончания не был получен.

Следующая закладка является очень важной частью конфигурации (рис.6). Парсер использует эти данные для того, чтобы выделить переменные из пакета данных. Наш пакет данных содержит 2 элемента, которые должны быть помещены в различные переменные. Далее эти переменные будут использоваться в модулях фильтрации и экспорта данных. В нашем примере значения этих переменных будут записываться в разные колонки таблицы в базе данных Microsoft Access.

Логгер данных GPS. Переменные парсера.
Рис.6. Логгер данных GPS. Переменные парсера.

Необходимо добавить все необходимые переменные, кликнув по кнопке "Добавить" (рис.6, поз.7). Перед добавлением переменной программа попросит ввести описание переменной. Вы можете ввести любое описание, которое поможет вам запомнить содержимое этой переменной. Мы добавили все переменные с соответствующими описаниями на рис.6

Каждая переменная парсера имеет несколько свойств:

  1. Имя переменной - это имя будет связано с колонкой в модуле экспорта данных. Это имя должно состоять только из латинских букв и цифр;
  2. Тип обработки данных - это метод, который программа будет использовать для выделения данных из пакета данных. Парсер поддерживает несколько методов от наиболее простого способа, до самого универсального и мощного. В нашем случае, когда все данные располагаются в фиксированной позиции, мы можем использовать простой метод "Фиксированная позиция". Этот метод позволяет получить любое количество символов, начиная с любой позиции в пакете данных;
  3. Тип данных - тип данных переменной. В нашем примере будут использоваться типы данных FLOAT, DATE, TIME и STRING. Модуль позволяет определить некоторые опции, которые будут использоваться для преобразования (см. закладку "Формат данных");
  4. Значение по умолчанию - это значение будет использоваться, когда данные не могут быть извлечены из указанной позиции и преобразованы в указанный тип данных;
  5. Фиксированная позиция - это позиция в пакете данных первого символа того значения, которое нужно извлечь и поместить в переменную. Минимальное значение равно 1;
  6. Фиксированная длина - это количество символов (включая все непечатные символы) которые необходимо извлечь и поместить в переменную. Минимальное значение равно 1.

На следующей закладке (рис.7) вы можете определить основные опции форматирования и преобразования значений. Поскольку мы определили тип данных "String" для некоторых переменных, поэтому первые две опции позволяют удалять пробелы в начале и конце значения. В этом примере у нас есть переменная с типом "datetime". Поэтому вторая опция позволяет определить маску, по которой строковое значение даты будет преобразовано в переменную с типом данных "datetime". Мы указали YYDDMMHHNNSS здесь, в соответствии с требованиями описанными выше. Для более подробного описания символов, которые могут использоваться в маске, пожалуйста, обратитесь к файлу справки.

Логгер данных GPS. Форматирование переменных.
Рис.7. Логгер данных GPS. Форматирование переменных.

Другие опции не требуется настраивать, поскольку у нас не заданы переменные с типом "date" или "time".

Пожалуйста, кликните на кнопке "OK" в окне настройки парсера и затем на кнопке "OK" в окне настройки конфигурации.

Теперь наш парсер настроен и пришло время проверить его. Подсоедините ваше устройство или включите его, если это необходимо. Попробуйте принять пакет данных от устройства. Если парсер был верно настроен, то в окне DDE сервера будут отображены наши переменные и их значения (рис.8).

Логгер данных GPS. Окно DDE сервера.
Рис.8. Логгер данных GPS. Окно DDE сервера.

Теперь все переменные парсера готовы для экспорта в базу данных с помощью модуля "Local database". Если вы хотите экспортировать данные в другие форматы или базы данных, то в конце статьи есть соответствующие ссылки.

Сопутствующие статьи: Прием и обработка GPS данных на примере Garmin Geko301