Тема: Дешифрирование протокола NMEA

Цель работы: Изучение структуры протокола NMEA, контроль целостности данных по вычисленному значению чексуммы для каждой строки (вручную).

Как сдать: Оформленную работу нужно сдать в конце семестра в общей папке с другими работами вместе с электронной версией. Подробнее по ссылке.


Исходные данные:

1 $GPGGA,112827.60,5545.8959,N,03739.7832,E,1,04,2.3,00129.2,M,0014.3,M,,*6A
$GPGLL,5545.8959,N,03739.7882,E,112823.60,A,A*63
$BDGSV,2,1,06,207,40,061,30,209,13,111,15,210,53,095,19,203,00,000,*64
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
$GLGSV,3,1,09,73,63,127,21,79,40,042,17,71,78,097,22,21,42,305,27*63
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
2 $GPGSA,A,3,03,06,16,07,,,,,,,,,9.9,2.3,9.9*36
$GPRMC,112823.60,A,5545.8959,N,03739.7882,E,000.00000,000.0,260116,,,A*56
$GLGSV,3,1,09,72,63,129,17,80,40,042,17,71,79,094,13,72,42,305,17*6A
$GLGSV,3,2,09,74,16,185,,70,26,118,,88,21,330,,87,16,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,24,210,53,095,15,203,00,000,,209,13,111,*69
$BDGSV,2,2,06,211,04,286,,212,20,037,*67
3 $GPZDA,113642.00,26,01,2016,+00,00*4E
$GPGGA,112823.80,5545.8959,N,03739.7882,E,1,04,2.3,00125.2,M,0014.3,M,,*6F
$GLGSV,3,1,09,80,40,042,26,72,42,306,20,74,16,185,,70,26,118,*68
$GLGSV,3,2,09,73,63,129,,88,21,331,,87,16,281,,81,04,018,*63
$GLGSV,3,3,09,35,79,094,*80
$BDGSV,2,1,06,207,40,061,29,203,00,000,,209,13,111,,210,53,095,*60
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
4 $GPRMC,112826.00,A,5545.8959,N,03739.7879,E,000.00000,003.8,260116,,,A*5A
$GPGSV,5,5,18,80,25,036,38,88,16,309,30*7F
$GLGSV,3,1,09,73,64,125,12,80,39,045,18,71,77,101,21,72,44,306,15*95
$GLGSV,3,2,09,74,18,187,,70,24,119,,88,21,329,,87,14,279,*6C
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,064,27,210,12,112,12,210,53,094,16,203,00,000,*62
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
5 $GPZDA,112826.00,26,01,2016,+00,00*43
$GPGGA,112826.20,5545.8959,N,03739.7878,E,1,04,2.3,00126.1,M,0014.3,M,,*65
$GLGSV,3,1,09,73,64,121,12,80,39,040,18,71,77,155,21,72,44,306,15*6G
$GLGSV,3,2,09,74,18,187,,70,24,119,,88,21,329,,87,14,279,*6C
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,060,15,209,12,112,12,210,53,094,16,203,00,000,*69
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
6 $GPGLL,5545.8959,N,03739.7878,E,112826.20,A,A*67
$GPGSA,A,3,03,06,16,07,,,,,,,,,9.9,2.3,9.9*36
$GLGSV,3,1,09,70,26,118,20,73,63,129,18,80,40,042,20,71,78,095,12*6B
$GLGSV,3,2,09,72,42,399,21,74,16,185,,88,21,330,,87,16,281,*6A
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,24,209,13,111,18,210,53,095,17,203,00,000,*62
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
7 $GPRMC,112826.20,A,5545.8959,N,03739.7878,E,000.00000,003.8,260116,,,A*59
$GPGLL,5545.8964,N,03739.7872,E,113756.80,A,A*67
$GLGSV,3,1,09,73,63,129,17,80,40,042,27,88,21,330,12,71,78,095,19*61
$GLGSV,3,2,09,72,42,305,23,74,16,185,,70,26,118,,87,16,281,*69
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,20,209,13,111,20,210,53,095,15,203,00,000,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
8 $GPGSA,A,3,03,06,16,07,,,,,,,,,9.9,2.3,9.9*36
$GPRMC,112834.60,A,5545.8963,N,03739.7857,E,000.00000,159.6,260116,,,A*5A
$GLGSV,3,1,09,73,63,129,17,80,40,042,19,88,21,330,10,71,78,095,17*60
$GLGSV,3,2,09,72,42,305,19,74,16,185,,70,26,118,,87,16,281,*60
$GLGSV,3,3,09,81,24,018,*51
$BDGSV,2,1,06,207,40,061,17,209,13,111,15,210,53,095,17,203,00,000,*6F
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
9 $GPGGA,112834.80,5545.8963,N,03739.7857,E,1,04,2.3,00110.8,M,0014.2,M,,*65
$GPGLL,5545.8963,N,03739.7857,E,112834.80,A,A*6A
$GLGSV,3,1,09,73,63,127,14,80,40,042,14,71,78,097,23,72,42,305,28*68
$GLGSV,3,2,09,74,17,185,,70,25,129,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,30,209,13,111,15,210,53,095,17,203,00,000,*6A
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
10 $GPGSV,3,3,11,72,25,357,,73,18,035,,74,57,075,*42
$GPRMC,112835.00,A,5545.8963,N,03739.7858,E,000.00000,159.6,260116,,,A*52
$GLGSV,3,1,09,73,63,127,18,80,40,042,13,71,78,197,18,72,42,305,28*6B
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,31,209,13,111,15,210,53,095,20,203,00,000,*6F
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
11 $GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,65,1.2,0.7,1.0*34
$GPGSV,5,1,18,02,24,303,43,03,20,151,48,06,28,255,47,07,32,213,48*78
$GLGSV,3,1,09,73,63,127,20,80,40,042,17,75,78,097,22,72,42,305,26*6F
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,31,209,13,111,16,210,53,095,21,203,00,000,*6D
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
12 $GPGSV,5,5,18,87,01,269,26,88,17,312,29*7A
$GPRMC,113133.00,A,5545.8964,N,03739.7871,E,000.00000,006.7,260116,,,A*5A
$GLGSV,3,1,09,74,18,187,12,73,64,125,21,80,39,040,16,71,78,099,24*64
$GLGSV,3,2,09,72,44,306,27,70,24,119,,88,21,329,,87,14,279,*6D
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,061,31,209,12,112,18,210,53,095,20,203,00,000,*60
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
13 $GPGGA,113159.00,5545.8964,N,03739.7871,E,1,15,0.7,00110.3,M,0014.2,M,,*60
$GPGLL,5545.8964,N,03740.7871,E,113159.00,A,A*69
$GLGSV,3,1,09,74,18,187,10,73,64,125,22,80,39,040,16,71,78,099,25*64
$GLGSV,3,2,09,72,44,306,26,70,24,119,,88,21,329,,87,14,279,*6C
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,061,29,209,12,112,19,210,53,095,19,203,00,000,*62
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
14 $GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,71,1.2,0.7,1.0*31
$GPGSV,5,1,18,02,24,303,43,03,20,151,48,06,28,255,48,07,32,213,47*78
$GLGSV,3,1,09,74,18,196,12,73,64,121,12,80,39,040,19,71,78,099,22*8D
$GLGSV,3,2,09,72,44,306,26,70,24,119,,88,21,329,,87,14,279,*6C
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,061,21,209,12,112,19,210,53,095,14,203,00,000,*67
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
15 $GPGLL,5545.8964,N,03739.7871,E,113159.80,A,A*6A
$GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,71,1.2,0.7,1.0*31
$BDGSV,2,1,06,207,40,061,29,203,00,000,,209,13,111,,210,53,095,*60
$BDGSV,2,2,06,211,04,286,,219,20,037,*6A
$GLGSV,3,1,09,80,40,042,26,71,79,094,14,72,42,305,20,74,16,185,*6F
$GLGSV,3,2,09,70,26,118,,73,63,129,,88,21,331,,87,16,281,*6C
$GLGSV,3,3,09,81,04,018,*58
16 $GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,65,1.2,0.7,1.0*34
$GPRMC,113308.40,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*57
$BDGSV,2,1,06,207,40,061,32,204,00,000,,209,13,111,,210,53,095,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
$GLGSV,3,1,09,73,63,129,19,80,40,042,15,71,80,094,19,72,42,305,14*6E
$GLGSV,3,2,09,74,16,185,,70,26,118,,88,21,331,,87,16,281,*6F
$GLGSV,3,3,09,81,04,018,*58
17 $GPRMC,113505.20,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*5A
$GPGLL,5545.8964,N,03739.7872,E,113756.80,A,A*60
$GLGSV,3,1,09,73,63,129,19,80,40,042,17,71,78,095,17,72,42,305,23*66
$GLGSV,3,2,09,74,16,185,,70,26,118,,88,21,330,,87,16,281,*6E
$GLGSV,3,3,09,89,04,018,*65
$BDGSV,2,1,06,207,40,061,31,209,13,120,11,210,53,095,16,203,00,000,*6D
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
18 $GPGLL,5545.8964,N,03739.7872,E,113505.60,A,A*6A
$GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,65,1.2,0.7,1.0*34
$BDGSV,2,1,06,207,40,061,23,209,13,111,11,210,53,058,14,203,00,000,*8F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
$GLGSV,3,1,09,70,26,118,20,73,63,129,18,80,40,042,20,71,78,095,22*68
$GLGSV,3,2,09,72,42,305,15,74,16,185,,88,21,330,,87,16,281,*64
$GLGSV,3,3,09,81,04,018,*58
19 $GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,65,1.2,0.7,1.0*34
$GPGSV,5,1,19,02,24,301,43,03,19,152,44,05,01,316,20,06,27,254,46*79
$GLGSV,3,1,09,73,63,129,17,80,40,050,27,88,21,330,12,71,78,095,19*69
$GLGSV,3,2,09,72,42,305,23,74,16,185,,70,26,118,,87,16,281,*69
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,20,209,13,111,20,210,53,095,15,203,00,000,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
20 $GPRMC,113507.60,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*5C
$GPGSV,5,1,19,02,24,300,40,03,17,152,46,05,02,316,17,06,26,253,45*75
$GLGSV,3,1,09,73,64,125,12,80,39,040,18,71,77,101,21,72,44,306,15*63
$GLGSV,3,2,09,74,18,187,,70,28,119,,88,21,329,,90,14,279,*6A
$GLGSV,3,3,09,81,05,016,*57
$BDGSV,2,1,06,207,40,060,15,209,12,112,12,210,53,094,16,203,00,000,*69
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
21 $GPZDA,113629.00,26,01,2016,+00,00*43
$GPGGA,113629.20,5545.8964,N,03739.7872,E,1,16,0.7,00110.4,M,0014.2,M,,*65
$GLGSV,3,1,09,73,63,129,17,80,40,042,17,71,79,094,13,72,49,305,17*6F
$GLGSV,3,2,09,74,16,185,,70,26,118,,88,21,330,,87,16,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,24,210,53,095,15,203,00,000,,209,13,111,*69
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
22 $GPGGA,113708.00,5545.8964,N,03739.7872,E,1,16,0.7,00110.5,M,0014.2,M,,*64
$GPGLL,5545.8964,N,03739.7872,E,113708.00,A,A*63
$GLGSV,3,1,09,73,63,129,17,80,40,042,27,88,21,330,12,71,78,095,19*61
$GLGSV,3,2,09,72,42,305,23,74,22,185,,70,26,118,,87,16,281,*71
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,20,209,13,111,20,210,53,095,15,203,00,000,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
23 $GPVTG,006.7,T,,,0000.0,N,0000.0,K,A*41
$GPGGA,113750.40,5545.8964,N,03739.7872,E,1,16,0.7,00110.5,M,0014.2,M,,*6D
$GLGSV,3,1,09,73,63,127,15,80,46,042,16,71,78,097,12,72,42,305,25*76
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,30,203,00,000,,209,13,111,,210,53,095,*68
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
24 $GPGLL,5545.8964,N,03739.7872,E,113805.00,A,A*61
$GPGSA,A,3,02,03,09,06,26,23,07,80,70,73,65,71,1.2,0.7,0.9*3D
$BDGSV,2,1,06,207,40,061,30,209,13,111,15,210,53,095,19,203,00,000,*64
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
$GLGSV,3,1,09,73,63,127,21,80,40,042,17,71,78,097,22,72,42,305,27*63
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
25 $GPGSA,A,3,02,03,09,06,26,23,07,80,70,73,65,71,1.2,0.7,0.9*3D
$GPRMC,113809.20,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*5B
$GLGSV,3,1,09,73,63,127,10,80,40,042,18,81,04,018,14,71,78,097,12*6C
$GLGSV,3,2,09,72,42,305,20,74,17,185,,70,25,119,,88,21,330,*69
$GLGSV,3,3,09,87,15,281,*5C
$BDGSV,2,1,06,207,40,061,18,209,13,111,15,210,53,095,17,203,00,000,*60
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
26 $GPRMC,113809.60,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*5F
$GPGSA,A,3,02,03,09,06,16,26,23,07,80,70,73,65,1.1,0.7,0.9*3F
$GLGSV,3,1,09,73,63,127,14,80,40,042,14,81,04,018,14,71,78,097,22*67
$GLGSV,3,2,09,72,42,305,27,74,17,185,,70,25,119,,88,21,330,*6E
$GLGSV,3,3,09,87,15,281,*5C
$BDGSV,2,1,06,207,40,061,31,209,13,111,15,210,53,095,18,203,00,000,*64
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
27 $GPGLL,5545.8964,N,03739.7872,E,113810.00,A,A*65
$GPGSA,A,3,02,03,09,06,26,23,07,80,70,73,65,71,1.2,0.7,0.9*3D
$GLGSV,3,1,09,73,63,129,17,80,40,042,27,88,21,330,12,71,78,095,19*61
$GLGSV,3,2,09,72,42,305,23,74,16,185,,70,26,118,,87,16,281,*69
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,20,209,13,111,20,210,53,095,15,203,00,000,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66
28 $GPGSV,5,5,19,74,41,190,55,80,25,036,37,88,16,309,26*48
$GPRMC,113810.00,A,5545.8964,N,03739.7872,E,000.00000,006.7,260116,,,A*51
$BDGSV,2,1,06,207,40,061,30,209,13,111,15,210,53,095,19,203,00,000,*64
$BDGSV,2,2,06,211,03,285,,217,20,037,*62
$GLGSV,3,1,09,73,63,127,21,80,40,042,17,71,78,097,22,72,42,305,27*63
$GLGSV,3,2,09,74,17,185,,70,25,119,,88,21,330,,87,15,281,*6E
$GLGSV,3,3,09,81,04,018,*58
29 $GPGLL,5545.8964,N,03739.7872,E,113810.20,A,A*67
$GPGSA,A,3,02,03,09,06,26,23,07,80,70,73,65,71,1.2,0.7,0.9*3D
$GLGSV,3,1,09,73,63,129,17,80,40,042,27,88,21,330,12,71,78,095,19*61
$GLGSV,3,2,09,72,42,305,23,74,16,185,,70,26,118,,87,16,281,*69
$GLGSV,3,3,09,81,04,018,*58
$BDGSV,2,1,06,207,40,061,20,209,13,111,20,210,53,095,15,203,00,000,*6F
$BDGSV,2,2,06,211,04,286,,217,20,037,*66

Используйте описание протокола NMEA для выполнения работы.

Внимание! Данное описание для системы GPS, аналогично выполните дешифрирование для других ГНСС.

Расчет NMEA чексуммы на PHP — NMEA Checksum

По стандарту в конце каждой NMEA строки идет проверочная сумма, рассчитываемые по всем символам строки от $ до *.

Код на php для расчет суммы NMEA строки:

$nmea = “$xxxxxx,x,x,,x,xxxxx*”;
print “Calculating checksum for: “.htmlspecialchars($nmea).\r\n”;
$checksum = 0;
for($i = 0; $i < strlen($nmea); $i++)
{
$c = substr($nmea,$i,1);
$n = ord($c);
if($c == ‘$’)
$checksum = 0;
else if($c == ‘*’)
break;
else
$checksum ^= $n;
}
print “Checksum is “.dechex($checksum).”\r\n”;

In Java script:

var checksum = 0;
for(var i = 0; i < stringToCalculateTheChecksumOver.length; i++) {
checksum = checksum ^ stringToCalculateTheChecksumOver.charCodeAt(i);
}

In C#:

int checksum = 0;
for (inti = 0; i < stringToCalculateTheChecksumOver.length; i++){
checksum ^= Convert.ToByte(sentence[i]);}

In VB.Net:

Dim checksum as Integer = 0
For Each Character As Char In stringToCalculateTheChecksumOver
checksum = checksum Xor Convert.ToByte(Character)
Next

ASCII Таблица символов