nmeaParser

Проанализируйте данные из стандартных и специфичных для производителя предложений NMEA, отправленных от морских электронных устройств

Описание

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

nmeaParser Системный объект обеспечивает:

  • Встроенная поддержка, чтобы проанализировать данные, отправленные от приемников GNSS и идентифицированные этими девятью типами сообщений NMEA: RMC, GGA, GSA, VTG, GLL, GST, ZDA, GSV и HDT

  • Дополнительная настройка с помощью CustomSentence пара "имя-значение", чтобы проанализировать данные NMEA из нескольких категорий устройств, включая специфичные для производителя предложения от различных производителей оборудования

Проанализировать данные из предложений 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"].

пример

pnmea = nmeaParser("CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']}) свойства наборов с помощью CustomSentence пара "имя-значение" и возвращает nmeaParser Системный объект, pnmea, это извлекает данные из пользовательского сообщения NMEA (или стандартное сообщение NMEA или специфичное для производителя сообщение NMEA), заданное использование идентификаторов сообщений.

CustomSentence пара "имя-значение" принимает вложенный массив ячеек, где каждым элементом является пара имени идентификатора сообщения (или стандартное имя идентификатора сообщения NMEA или специфичный для производителя идентификатор сообщения) и соответствующая пользовательская функция синтаксического анализатора, которая создается включением extractNMEASentence функция в файле функции. Порядок, в котором вы задаете идентификаторы сообщений, определяет порядок массивов структур в извлеченных выходных данных.

пример

pnmea = nmeaParser("MessageIDs", {'msgID1','msgID2'},"CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']}) возвращает nmeaParser Системный объект, pnmea, это извлекает данные из двух из девяти стандартных сообщений NMEA со встроенной поддержкой и также из пользовательских сообщений NMEA, что вы задали использование CustomSentence пара "имя-значение".

Входные параметры

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

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: pnmea = nmeaParser("CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']});

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

Примечание

Файл функции для функции синтаксического анализатора должен присутствовать в текущем каталоге или на пути MATLAB.

CustomSentence принимает имя функции или указатель на функцию. Например, оба этих формата допустимы:

  • pnmea = nmeaParser('CustomSentence', {['standardnmeaMessageId1','parserFunctionName1']}
  • parserFunctionHandle=@parserFunctionName1
    pnmea = nmeaParser('CustomSentence', {['standardnmeaMessageId1',parserFunctionHandle]}

Примечание

Используя CustomSentence пара "имя-значение", чтобы проанализировать данные вместо встроенного синтаксического анализатора функционирует результаты в переопределении полей по умолчанию, когда данные анализируются. Например, nmeaParser('CustomSentence',{["RMC","parserRMC"]}) заменяет формат по умолчанию проанализированных данных, когда RMC является одним из этих девяти предложений со встроенной поддержкой парсинга данных.

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

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

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

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

Описание

пример

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

пример

[customNmeaData1,customNmeaData2] = pnmea(rawData) данные о синтаксических анализах из двух пользовательских предложений NMEA (или стандартное предложение NMEA или специфичное для производителя предложение NMEA), и возвращают массив структур, где каждая структура соответствует одному Идентификатору сообщения. Последовательность, которую вы задаете для выходных аргументов, должна быть той же последовательностью, которую вы задали в CustomSentence пара "имя-значение" при создании nmeaParser Системный объект.

Входные параметры

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

Данные NMEA, которые совместимы со стандартом NMEA, как получено из морского электронного устройства.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

release(obj)

Примеры

свернуть все

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

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

Создайте nmeaParser Системный объект путем определения Идентификатора сообщения как "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. Поэтому создайте nmeaParser Системный объект '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=2×1 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

Создайте nmeaParser Системный объект путем определения Идентификатора сообщения как "GSV".

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

Обеспечьте предложение GSV, полученное из приемника GNSS как вход, и извлеките данные.

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];

Создайте nmeaParser Системный объект 'pnmea', задайте Идентификатор сообщения 'GSV' и извлеките данные.

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

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

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

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

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

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

Можно извлечь данные из предложений NMEA с помощью CustomSentence пара "имя-значение". Данные NMEA, которые будут проанализированы, получены из морских электронных устройств.

Идентифицируйте структуру предложения NMEA и создайте функцию синтаксического анализатора

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

Например, давайте рассмотрим предложение в качестве примера с Идентификатором сообщения, SSS.

После идентификации структуры вы создаете файл функции, который задает функцию синтаксического анализатора, fsssParser. В файле функции вы задаете выходные данные как массив структур с его полями, совпадающими с последовательностью, как это появляется в спецификации.

Navigation Toolbox™ обеспечивает дополнительную предварительно сконфигурированную функцию, extractNMEASentence, это проверяет, допустимо ли предложение, и преобразуйте поля в предложении в массив строк. Можно вызвать extractNMEASentence в файле функции. Можно также использовать любую другую функцию вместо этого (который выводит массив строк из непроанализированных данных), и затем вызовите его в файле функции.

Ниже изображения показывает файл функции с кодом, учитывая, что поля, доступные в SSS предложением является TalkerID, MessageID, UTC и LatitudeError. Отошлите дополнительные комментарии для деталей.

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

После того, как вы будете включать код MATLAB, как упомянуто выше, будете сохранять файл функции (fsssParser.m) в пути MATLAB, так, чтобы можно было вызвать его, чтобы получить проанализированные данные с помощью CustomSentence пара "имя-значение" nmeaParser Системного объекта.

Чтобы загрузить другой демонстрационный файл функции parserRMB.m, который используется этот пример, нажмите Open Live Script. Это - файл функции, характерный для полей предложения китайского юаня (упомянутый в Стандарте NMEA, Версии 4.1).

Извлеките данные из предложения китайского юаня

Создайте nmeaParser Системный объект при помощи пары "имя-значение" CustomSentence и определения идентификатора сообщения как "китайский юань" и функция как "parserRMB" (загруженный на предыдущем шаге).

pnmea = nmeaParser("CustomSentence",{["RMB","parserRMB"]});

Обеспечьте предложение китайского юаня, полученное из приемника GNSS как вход, и извлеките данные.

unparsedRMBLine='$GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D';
rmbData = pnmea(unparsedRMBLine)
rmbData = struct with fields:
                        TalkerID: "GP"
                       MessageID: "RMB"
                      DataStatus: 'A'
                 CrossTrackError: 4.0800
                DirectionToSteer: NaN
                OriginWaypointID: NaN
           DestinationWaypointID: NaN
     DestinationWaypointLatitude: '5130.02 N'
    DestinationWaypointLongitude: '00046.34 W'
              RangeToDestination: 4.6000
            BearingToDestination: 213.9000
      DestinationClosingVelocity: 122.9000
                   ArrivalStatus: 'A'
                   ModeIndicator: "NA"
                          Status: 0

Извлеките данные из нескольких предложений китайского юаня

Обеспечьте несколько предложений китайского юаня как вход.

unparsedRMBLine1 = ['$GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20'];
unparsedRMBLine2 = ['$GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D'];

Создайте символьный массив, чтобы включать эти два предложения

rawNMEAData = [unparsedRMBLine1 ,newline,  unparsedRMBLine2]
rawNMEAData = 
    '$GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20
     $GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D'

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

[rmbData] =  pnmea(rawNMEAData)
rmbData=2×1 struct array with fields:
    TalkerID
    MessageID
    DataStatus
    CrossTrackError
    DirectionToSteer
    OriginWaypointID
    DestinationWaypointID
    DestinationWaypointLatitude
    DestinationWaypointLongitude
    RangeToDestination
    BearingToDestination
    DestinationClosingVelocity
    ArrivalStatus
    ModeIndicator
    Status

Извлеките данные из предложения со встроенной поддержкой предложения китайского юаня и (RMC)

Создайте nmeaParser Системный объект при помощи свойства MessageID (чтобы разобрать предложение со встроенной поддержкой - RMC) и также использование пары "имя-значение" CustomSentence (задающий идентификатор сообщения как "китайский юань" и функция как "parserRMB" (созданный на предыдущем шаге)).

pnmea = nmeaParser("MessageID","RMC","CustomSentence",{["RMB","parserRMB"]});

Обеспечьте RMC и предложения китайского юаня как вход.

unparsedRMCLine1 = ['$GNRMC,143909.00,A,5107.0020216,N,11402.3294835,W,0.036,348.3,210307,0.0,E,A*31'];
unparsedRMBLine2 = ['$GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D'];

Создайте массив строк, чтобы включать эти два предложения

rawNMEAData = [unparsedRMCLine1 ,newline,  unparsedRMBLine2]
rawNMEAData = 
    '$GNRMC,143909.00,A,5107.0020216,N,11402.3294835,W,0.036,348.3,210307,0.0,E,A*31
     $GPRMB,A,4.08,L,EGLL,EGLM,5130.02,N,00046.34,W,004.6,213.9,122.9,A*3D'

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

[rmcdata,rmbData] =  pnmea(rawNMEAData)
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

rmbData = struct with fields:
                        TalkerID: "GP"
                       MessageID: "RMB"
                      DataStatus: 'A'
                 CrossTrackError: 4.0800
                DirectionToSteer: NaN
                OriginWaypointID: NaN
           DestinationWaypointID: NaN
     DestinationWaypointLatitude: '5130.02 N'
    DestinationWaypointLongitude: '00046.34 W'
              RangeToDestination: 4.6000
            BearingToDestination: 213.9000
      DestinationClosingVelocity: 122.9000
                   ArrivalStatus: 'A'
                   ModeIndicator: "NA"
                          Status: 0

  1. Идентифицируйте структуру специфичного для производителя предложения и файла Создания функции с функцией синтаксического анализатора

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

    Например, структура предложения NMEA от производителя оборудования может выглядеть так:

    $PMMCZ,hhmmss.ss,Latitude,N,Longitude,E,NavSatellite,DR*hh<CR><LF>

    Здесь, P обозначает, что предложение специфично для производителя, MMC является кодом мнемосхемы производителя, и Z является типом предложения. Каждое поле после этого указывает на определенные данные (положение, скорость, время, и так далее). Некоторые производители используют два символа для типа предложения, сопровождаемого по условию поля.

    После идентификации структуры создайте функцию синтаксического анализатора, parserMMCZ, использование дополнительного extractNMEASentence функция, как показано ниже (можно также использовать другие функции, чтобы извлечь непроанализированные данные к строкам, вместо extractNMEASentence).

    function OutputData = parserMMCZ(unparsedData, MessageID)
     
      OutputData = struct("MessageID",MessageID,...
      "UTC","NA",...
      "Latitude",NaN,...
      "Longitude",NaN,...
      "NavigationSatellites",NaN,...
      "Status",uint8(1));
     
      [isValid, splitString] = extractNMEASentence(unparsedData, MessageID);
      
    if(isValid)
        OutputData.MessageID = splitString(1);
        temp = char(splitString(2));
        utcOutput = [temp(1:2), ':', temp(3:4), ':', temp(5:6)];
        OutputData.UTC = utcOutput;
        OutputData.Latitude = str2double(splitString{3});
        OutputData.Longitude = str2double(splitString{5});
        OutputData.NavigationSatellites = str2double(splitString{7});
        OutputData.Status = uint8(0);
      end
    end

    Сохранение parserMMCZ.m в пути MATLAB.

  2. Извлеките данные из специфичного для производителя предложения

    Создайте nmeaParser Системный объект при помощи CustomSentence пара "имя-значение" и определение идентификатора сообщения как "MMCZ" и функция как "parserMMCZ" (созданный на предыдущем шаге).

    pnmea = nmeaParser("CustomSentence",{["MMCZ","parserMMCZ"]});

    Обеспечьте предложение MMC, полученное из устройства как вход, и извлеките данные:

    unparsedMMCLine='$PMMCZ,225444,4917.24,N,00046.34,E,3,DR*7C';
    mmcData = pnmea(unparsedMMCLine)
    mmcData = 
    
      struct with fields:
    
                   MessageID: "MMCZ"
                         UTC: '22:54:44'
                    Latitude: 4.9172e+03
                   Longitude: 46.3400
        NavigationSatellites: 3
                      Status: 0

Больше о

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

Введенный в R2020b