Ты наверное сейчас занят решением проблемы взлома очередного
мега-супер-гипер сервака, но знаешь ли ты, что такое GPS и как с ним
обращаться?! Если нет, то тебе сюда! В этой статье я расскажу тебе о
том, как работают GPS приемники, как получить с них информацию, а так
же как самому написать простенькую программу для работы с GPS-модулем. 
GPS (Global Positioning System, Система Глобального
Позиционирования) была введена в действие США в 1994 году. Состоит она
из 24 спутников и наземных приемных комплексов, коим может являться и
твой GPS-навигатор или GPS-модуль (в дальнейшем навигатор). Для точного
определения координат твой навигатор должен видеть минимум 4 спутника.
В недалеком прошлом точность определения координат вне территории США
(а точнее для потребителей не из США) была искусственно снижена, но не
так давно это ограничение было убрано и теперь ты можешь определять
свое местоположение даже в тайге с точностью до нескольких метров.  
На пальцах все это работает так: твой навигатор получает информацию
с каждого из видимых спутников, которые являются для него как бы
маяками. Внутри навигатора находится микропроцессор с зашитой в него
программой, которая на основе полученных данных и высчитывает твое
местоположение.  
В настоящее время в продаже имеется огромное количество
GPS-навигаторов и GPS-модулей для КПК и ноутбуков. GPS-навигатор это
GPS-приемник с экраном, на котором отображается информация о твоем
местоположении, а GPS-модуль – это GPS-приемник, который подключается к
компьютеру и передает всю навигационную информацию программе, которая с
ним работает. Все они в принципе отличаются только форм-фактором и
принципиальных различий в работе не имеют. Но нас с тобой больше
интересует каким же все таки образом он общается с компьютером и как
вытащить из него информацию. Сейчас все расскажу и покажу.  
Какого бы форм-фактора (COM, USB, BlueTooth и т.п.) не был
GPS-модуль, он будет логически связан с компьютером через COM-порт,
т.е. при подключении создается соединение по последовательному порту.
Навигационная информация в большинстве случаев передается по протоколу
NMEA. Это самый распространенный протокол передачи для GPS-модулей.
Хотя есть и другие протоколы, но мы их рассматривать не будем.  
Ну а теперь самое время узнать как же сделать софтину для работы со
всем этим хозяйством. Скажу сразу, что мне не очень хочется сейчас
объяснять как тыкать в кнопки в том же
VB, статья носит больше ознакомительный характер. Для тех кто в танке я
объясню подобно процесс создания программы в следующих статьях.
Я освещу лишь наиболее важные моменты и я думаю у тебя все получится.
Скажу сразу, что ваять прогу можно в любых языках программирования,
лишь бы была возможность работы с последовательным портом и со
строками.
Первое с чего нужно начать это с открытия COM-порта. Почти все
приемники по умолчанию имеют установки: скорость 9600 бит/с, 8/N/1. Как
только ты откроешь порт тебе сразу с интервалом в секунду будет
приходить навигационная информация примерно такого вида: 
$GPGGA,143345.264, 0936.23,N,06354.15,E, 0,06,0.0,230.6,M,0.0,M,0.0,0345*76 
$GPRMC,143345.26, A,0936.23,N,06354.15, E,0.0,0.0,230306,0.0,E,A*45 
$GPGSA,A,3,03, 04,05,07,11,12,0.0,0.0,0.0*Е2 
$GPGSV,1,1,06,05,67,120,20*34 
 
 Теперь приступим к разбору: 
 
Данные передаются в виде предложений. Формат предложений следующий: 
$AAAAA[, <данные> ]*hh<CR><LF>, где 
$ - символ начала предложения (код 24h); 
AAAAA - пятисимвольный адрес (имя) предложения; 
[, <данные> ] - список полей данных разделенных запятыми (код 2Сh); 
* - признак контрольной суммы (код 2Ah); 
hh - контрольная сумма; 
<CR><LF>, - конечный ограничитель (коды 0Dh и 0Ah). 
Типы полей данных. 
 
 | Тип поля  | 
 Обозначение | 
 Определение | 
  
 
 | 
  Специальный формат полей  | 
  
 
 | Статус | 
  A | 
 Поле одного символа. А= да, данные
 достоверны, предупредительного сигнала
 нет. V= нет, данные не достоверны, есть
 сигнал предупреждения. | 
  
 
 | Широта | 
 llll.ll | 
 Поле постоянной/переменной длины:
 градусы-минуты доли минуты. 2 знака
 градусов, 2 знака минут и переменное
 число знаков долей минуты. Если первый
 знак градусов или минут отсутствует, то
 его заменяют нулем с тем, чтобы
 сохранить постоянное число знаков.
 Децимальная точка и последующие знаки
 долей минут являются дополнительными и
 могут не использоваться, если не нужно
 большое разрешение. | 
  
 
 | Долгота | 
 yyyyy.yy | 
 Поле постоянной/переменной длины:
 градусы-минуты и доли минуты. 3 знака
 градусов, 2 знака минут и переменное
 число знаков долей минуты. Если первые
 знаки или первый знак минут отсутствует,
 то их заменяют нулем для того, чтобы
 сохранить постоянное число знаков.
 Децимальная точка и последующие знаки
 долей минут являются дополнительными и
 могут не использоваться, если не нужно
 большое разрешение. | 
  
 
 | Время | 
 hhmmss.ss | 
 Поле постоянной/переменной длины: часы/минуты/секунды
 и доли секунды. 2 знака часов, 2 знака
 минут, 2 знака секунд и переменное число
 знаков долей секунд. В качестве первого
 знака часов, минут, секунд может быть
 поставлен ноль, для сохранения
 постоянного числа знаков. Если не
 требуется высокая точность, то
 децимальная точка и доли секунд могут
 быть опущены. | 
  
 
 | Определенные поля | 
   | 
 Некоторые поля специально
 предназначаются для размещения заранее
 определенных постоянных величин, чаще
 всего буквенных обозначений. Признаком
 таких полей является наличие одного или
 нескольких знаков. | 
  
 
Поля цифровых величин 
 
 | Переменное число | 
  x.x | 
 Цифровое
поле постоянной или переменной длины для целых и дробных чисел. Первый
и последний знаки могут быть заменены нулями. Децимальная точка и
дробная часть являются дополнением и могут быть опущены, если не
требуется высокое разрешение. | 
  
 
 | Шестнадцатеричное постоянной длины | 
 hh | 
 Только шестнадцатеричное число постоянной длины, старший значащий бит слева. | 
  
 
Информационные поля 
 
 | Изменяемый текст  | 
 c—c | 
 Поле знаков изменяемой длины. | 
  
 
 | Постоянное буквенное поле | 
 aa | 
 Поле постоянной длины, включающее в себя большие или малые буквенные знаки. | 
  
 
 | Постоянное цифровое поле | 
 xx | 
 Поле постоянной длины, включающее в себя цифровые знаки. | 
  
 
 | Постоянное текстовое поле | 
 cc | 
 Поле знаков постоянной длины.ъ | 
  
 
Примечания: 
1. Пробелы могут быть использованы только в полях текстов изменяемой длины. 
2. Отрицательный знак “-” (код 2Dh) является первым знаком поля,
если в нем приводятся отрицательные величины. При использовании
отрицательного знака в полях фиксированной длины их длина увеличивается
на единицу. При положительных величинах знак опускается. 
 
GGA – Данные определения места по GPS 
Время место и данные относящиеся к обсервации. 
$GPGGA,hhmmss.sss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh<CR><LF> 
Полями данного предложения являются: 
1. hhmmss.sss – время навигационных определений; 
2. llll.ll,a – широта, N/S; 
3. yyyyy.yy,a – долгота, E/W; 
4. x – показатель качества обсервации: 0 = нет данных, 1 = обсервация получена, 2 = обсервация в дифференциальном режиме; 
5. xx – число используемых спутников; 
6. x.x – величина горизонтального геометрического фактора (HDOP); 
7. x.x,M – высота антенны над уровнем моря (геоидом), м; 
8. x.x,M – превышение геоида над эллипсоидом WGS84, м; 
9. x.x – устаревание дифференциальных поправок, то есть время в
секундах с момента получения последней дифференциальной поправки,
нулевое поле используется в случае выключения дифференциального режима; 
10. xxxx – идентификатор дифференциальной станции 0ё1023. 
 
RMC – Рекомендуемый минимальный набор данных по GPS и ГЛОНАСС 
Время, дата, координаты и курс счисляемые аппаратурой. 
$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,xxxxxx,x.x,a,a*hh<CR><LF> 
Полями данного предложения являются: 
1. hhmmss.ss – время; 
2. A – статус (A/V); 
3. llll.ll,a – широта, N/S; 
4. yyyyy.yy,a – долгота, E/W; 
5. x.x – скорость в узлах; 
6. x.x – курс в градусах; 
7. xxxxxx – дата: dd/mm/yy (день/месяц/год); 
8. x.x,a – магнитное склонение в градусах, E/W; 
9. a – индикатор режима: A = автономная обсервация, D = дифференциальный режим, N = данные недостоверны. 
 
GSA – Фактор ухудшения точности, используемые для навигации спутники 
$GPGSA,a,x,xx, ... ,xx,x.x,x.x,x.x*hh<CR><LF> 
Полями данного предложения являются: 
1. a – режим управления количеством определяемых координат: М = ручное, указан режим, А = автоматическое переключение; 
2. x – режим работы: 1 = обсервация невозможна, 2 = определяются две координаты, 3 = определяются три координаты; 
3. xx...xx – номера спутников используемых для решения навигационной
задачи, количество полей равно количеству каналов приемника, для GPS
используются номера 1ё32, для WAAS 33ё64, для ГЛОНАСС 65ё96; 
4. x.x – общий геометрический фактор ухудшения точности (PDOP); 
5. x.x – горизонтальный геометрический фактор ухудшения точности (HDOP); 
x.x – вертикальный геометрический фактор ухудшения точности (VDOP). 
 
GSV – Видимые спутники 
Число спутников в зоне радиовидимости, номер спутника, угол
возвышения, азимут и отношение сигнал/шум. Одно предложение может
содержать информацию об 1 до 4 спутников, дополнительные данные о
спутниках передаются в следующих предложениях. Номер предложения
указывается в первых двух полях данных. Для спутниковых систем
зарезервированы следующие номера: для GPS 1-32, для WAAS 33-64, для
ГЛОНАСС 65-96. 
$GPGSV,x,x,xx,xx,xx,xxx,xx, ... ,xx,xx,xxx,xx*hh<CR><LF> 
Полями данного предложения являются: 
1. x – общее число сообщений; 
2. x – номер сообщения; 
3. xx – общее число спутников в зоне радиовидимости; 
4. xx – номер спутника; 
5. xx – угол возвышения спутника, градусы 00-90; 
6. xxx – азимут истинный, градусы 000-360; 
7. xx – отношение сигнал/шум 00-99 дБ, если спутник не сопровождается не передается. 
Примечание: поля 4, 5, 7 повторяются для 2, 3 и 4 спутников. 
  Ну вот теперь, имея описание протокола NMEA и драйвер
прямые_руки.sys можешь приступать к построчному разбору пакетов и
созданию мега программулины )))). 
		
	  |