Тема: Дешифрирование протокола 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