exponenta event banner

nmeaParser

Анализ данных из стандартных предложений NMEA, отправленных от приемников GNSS

Описание

nmeaParser Система object™ анализирует данные из некоторых стандартных предложений NMEA (Национальная ассоциация морской электроники), которые посылаются из приемника GNSS (Глобальная навигационная спутниковая система). Предложения NMEA, требующие анализа, должны соответствовать стандарту NMEA 0183 ® версии 4.1.

Для анализа данных из предложений NMEA:

  1. Создать nmeaParser и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

nmeaParser Системный объект выводит массив структур, соответствующих значениям, извлеченным из указанных предложений NMEA.

Создание

Описание

pnmea = nmeaParser возвращает nmeaParser Системный объект, pnmea, со свойствами по умолчанию, которые извлекают данные из этих сообщений NMEA: RMC, GGA и GSA. Порядок структурных массивов в извлеченных выходных данных также: RMC, GGA и GSA.

пример

pnmea = nmeaParser('MessageIDs', msgID) возвращает nmeaParser Системный объект, pnmeaизвлекает данные из сообщений NMEA, указанных с помощью идентификаторов сообщений. Определить msgID как "RMC", "GGA", "GSA", "GSV", "VTG", "GLL", "GST", "ZDA", и "HDT"или сочетание этих идентификаторов (например: ["VTG","GLL","HDT"]). Порядок, в котором указываются идентификаторы сообщений, определяет порядок структурных массивов в извлеченных выходных данных. Значение по умолчанию: ["RMC","GGA","GSA"].

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Идентификаторы сообщений предложений NMEA, соответствующие стандарту NMEA 0183, из которого требуется извлечь данные. Можно указать несколько идентификаторов сообщений как массив строк для извлечения данных из предложений NMEA.

Типы данных: char | string

Использование

Описание

пример

[rmcData,ggaData,gsaData,vtgData,gllData,gstData,gsvData,zdaData,hdtData] = pnmea(rawData) анализирует данные и возвращает массив структур, где каждая структура соответствует одному идентификатору сообщения. Последовательность, указанная для выходных аргументов, должна совпадать с последовательностью, указанной для идентификаторов сообщений при создании nmeaParser Системный объект.

Входные аргументы

развернуть все

Данные NMEA, соответствующие стандарту NMEA 0183, полученные от приемника GNSS.

Типы данных: string | char

Выходные аргументы

развернуть все

Данные извлечены из предложения RMC. Структура вывода содержит информацию, проанализированную из предложения RMC вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений RMC, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения RMC.

Данные извлечены из предложения GGA. Структура вывода содержит информацию, проанализированную из предложения GGA вместе с состоянием синтаксического анализа. Если во входных данных найдено несколько предложений GGA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GGA.

Данные, извлеченные из предложения GSA. Структура вывода содержит информацию, проанализированную из предложения GSA вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений GSA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GSA.

Данные, извлеченные из предложения VTG. Структура вывода содержит информацию, проанализированную из предложения VTG вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений VTG, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения VTG.

Данные, извлеченные из предложения GLL. Структура вывода содержит информацию, проанализированную из предложения GLL вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений GLL, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GLL.

Данные, извлеченные из предложения GST. Структура вывода содержит информацию, проанализированную из предложения GST вместе с состоянием синтаксического анализа. Если во входных данных найдено несколько предложений GST, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения GST.

Данные, извлеченные из предложения GSV. Структура вывода содержит информацию, проанализированную из предложения GSV вместе с состоянием синтаксического анализа. Полная спутниковая информация доступна в нескольких структурах gsvData. Каждая структура gsvData может содержать не более четырех спутниковых данных. Дополнительные сведения см. в разделе Предложения GSV.

Данные извлечены из предложения ZDA. Структура вывода содержит информацию, проанализированную из предложения ZDA вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений ZDA, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения ZDA.

Данные, извлеченные из предложения HDT. Структура вывода содержит информацию, проанализированную из предложения HDT вместе со статусом синтаксического анализа. Если во входных данных найдено несколько предложений HDT, то возвращается массив структур. Дополнительные сведения см. в разделе Предложения HDT.

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

Примеры

свернуть все

Извлеките данные из предложений NMEA, которые получены из приемника GNSS.

Извлечь данные из предложения RMC

Создайте системный объект nmaseParser, указав идентификатор сообщения как «RMC».

pnmea = nmeaParser("MessageID","RMC");

Предоставление предложения RMC, полученного от приемника GNSS, в качестве входных и извлекаемых данных.

unparsedRMCLine='$GNRMC,143909.00,A,5107.0020216,N,11402.3294835,W,0.036,348.3,210307,0.0,E,A*31';
rmcData = pnmea(unparsedRMCLine)
rmcData = struct with fields:
             TalkerID: "GN"
            MessageID: "RMC"
            FixStatus: 'A'
             Latitude: 51.1167
            Longitude: -114.0388
          GroundSpeed: 0.0185
      TrueCourseAngle: 348.3000
          UTCDateTime: 21-Mar-2007 14:39:09.000
    MagneticVariation: 0
        ModeIndicator: 'A'
     NavigationStatus: "NA"
               Status: 0

Извлечение данных из нескольких типов сообщений NMEA

В качестве входных данных укажите предложения GGA, GSA и RMC.

unparsedGGALine = ['$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69'];
unparsedGSALine = ['$GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30'];
unparsedRMCLine = ['$GPRMC,111357.771,A,5231.364,N,01324.240,E,10903,221.5,020620,000.0,W*44'];

Создание массива строк для включения трех предложений

rawNMEAData = [unparsedGGALine ,newline,  unparsedGSALine ,newline,  unparsedRMCLine]
rawNMEAData = 
    '$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69
     $GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
     $GPRMC,111357.771,A,5231.364,N,01324.240,E,10903,221.5,020620,000.0,W*44'

Однако учтите, что извлекать данные нужно только из предложений GGA и GSA. Создайте системный объект «» pnmea «» и укажите идентификаторы сообщений «» GGA «» и «» GSA «» как строковый массив.

pnmea=nmeaParser("MessageIDs",["GGA","GSA"]); 

Укажите выходные аргументы для всех трех предложений для извлечения данных в виде структур.

[ggaData,gsaData] =  pnmea(rawNMEAData)
ggaData = struct with fields:
                          TalkerID: "GP"
                         MessageID: "GGA"
                           UTCTime: 11:13:57.771
                          Latitude: 52.5227
                         Longitude: 13.4040
                  QualityIndicator: 1
                NumSatellitesInUse: 12
                              HDOP: 1
                          Altitude: 0
                   GeoidSeparation: 0
             AgeOfDifferentialData: NaN
    DifferentialReferenceStationID: NaN
                            Status: 0

gsaData = struct with fields:
              TalkerID: "GP"
             MessageID: "GSA"
                  Mode: "A"
               FixType: 3
    SatellitesIDNumber: [1 2 3 4 5 6 7 8 9 10 11 12]
                  PDOP: 1
                  VDOP: 1
                  HDOP: 1
              SystemID: NaN
                Status: 0

Вышеприведенные выходные данные показывают, что только предложения GGA и GSA извлекаются на основе идентификаторов сообщений, указанных в качестве входных данных.

Предоставьте другое предложение GGA в качестве дополнительного ввода и извлеките данные. В этом случае изменять системный объект не требуется, так как идентификатор сообщения не изменился.

unparsedGGALine1='$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'
unparsedGGALine1 = 
'$GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'
rawNMEAData = [unparsedGGALine ,newline,  unparsedGSALine ,newline,  unparsedGGALine1]
rawNMEAData = 
    '$GPGGA,111357.771,5231.364,N,01324.240,E,1,12,1.0,0.0,M,0.0,M,,*69
     $GPGSA,A,3,01,02,03,04,05,06,07,08,09,10,11,12,1.0,1.0,1.0*30
     $GNGGA,001043.00,4404.14036,N,12118.85961,W,1,12,0.98,1113.0,M,-21.3,M,,*47'

[ggaData,gsaData] =  pnmea(rawNMEAData)
ggaData=1×2 struct array with fields:
    TalkerID
    MessageID
    UTCTime
    Latitude
    Longitude
    QualityIndicator
    NumSatellitesInUse
    HDOP
    Altitude
    GeoidSeparation
    AgeOfDifferentialData
    DifferentialReferenceStationID
    Status

gsaData = struct with fields:
              TalkerID: "GP"
             MessageID: "GSA"
                  Mode: "A"
               FixType: 3
    SatellitesIDNumber: [1 2 3 4 5 6 7 8 9 10 11 12]
                  PDOP: 1
                  VDOP: 1
                  HDOP: 1
              SystemID: NaN
                Status: 0

Состояние 0 указывает, что данные были успешно проанализированы.

Извлечь данные из предложения GSV

Создайте системный объект nmaseParser, указав идентификатор сообщения как «GSV».

pnmea = nmeaParser("MessageID","GSV");

Представить предложение ГСН, полученное от приемника ГНСС, в качестве входных и извлекаемых данных.

unparsedGSVLine='$GPGSV,3,3,10,32,69,205,41,46,47,215,39*79';
gsvData = pnmea(unparsedGSVLine)
gsvData = struct with fields:
            TalkerID: "GP"
           MessageID: "GSV"
        NumSentences: 3
      SentenceNumber: 3
    SatellitesInView: 10
         SatelliteID: [32 46]
           Elevation: [69 47]
             Azimuth: [205 215]
                 SNR: [41 39]
            SignalID: NaN
              Status: 0

Извлечение данных из нескольких предложений GSV

В качестве входных данных укажите несколько предложений GSV.

unparsedGSVLine1 = '$GPGSV,3,1,10,01,,,31,03,28,325,40,10,,,33,12,20,047,30*70';
unparsedGSVLine2 = '$GPGSV,3,2,10,14,88,028,42,22,39,299,48,25,,,25,31,79,289,46*49';
unparsedGSVLine3 = '$GPGSV,3,3,10,32,69,205,41,46,47,215,39*79';

Создайте строковый массив для включения трех предложений.

CRLF = [char(13),newline];
unparsedGSVLines = [unparsedGSVLine1,CRLF, unparsedGSVLine2, CRLF, unparsedGSVLine3];

Создайте системный объект nmaseParser «» pnmea «», укажите идентификатор сообщения «» GSV «» и извлеките данные.

pnmea = nmeaParser("MessageIDs","GSV");
gsvData = pnmea(unparsedGSVLines)
gsvData=1×3 struct array with fields:
    TalkerID
    MessageID
    NumSentences
    SentenceNumber
    SatellitesInView
    SatelliteID
    Elevation
    Azimuth
    SNR
    SignalID
    Status

Считывание данных из журнала NMEA

Считывайте данные из образца журнала NMEA, чтобы их можно было проанализировать с помощью системного объекта nmaseParser.

Пример файла журнала: nmeaLog.nmea, который включен в этот пример.

f = fopen('nmeaLog.nmea');
unParsedNMEAdata = fread(f);
pnmea = nmeaParser("MessageIDs",["RMC","GGA"]);
[rmcStruct, ggaStruct] = pnmea(unParsedNMEAdata)
rmcStruct=1×9 struct array with fields:
    TalkerID
    MessageID
    FixStatus
    Latitude
    Longitude
    GroundSpeed
    TrueCourseAngle
    UTCDateTime
    MagneticVariation
    ModeIndicator
    NavigationStatus
    Status

ggaStruct=1×9 struct array with fields:
    TalkerID
    MessageID
    UTCTime
    Latitude
    Longitude
    QualityIndicator
    NumSatellitesInUse
    HDOP
    Altitude
    GeoidSeparation
    AgeOfDifferentialData
    DifferentialReferenceStationID
    Status

Подробнее

развернуть все

Представлен в R2020b