nmeaParser
Analizar datos de sentencias NMEA estándar y específicas del fabricante enviadas desde dispositivos electrónicos marinos.
Desde R2020b
Descripción
El nmeaParser
System object™ analiza datos de cualquier sentencia NMEA (Asociación Nacional de Electrónica Marina). Las sentencias que necesitan análisis de datos pueden ser cualquier sentencia estándar que cumpla con las especificaciones NMEA 0183® (que se envían desde un receptor GNSS (Sistema global de navegación por satélite)) u otras sentencias específicas del fabricante aprobadas por el NMEA (que se envían desde otros dispositivos electrónicos marinos).
El nmeaParser
System object proporciona:
Soporte integrado para analizar datos enviados desde receptores GNSS e identificados por estos nueve tipos de mensajes NMEA: RMC, GGA, GSA, VTG, GLL, GST, ZDA, GSV y HDT
Configuración adicional utilizando el par nombre-valor
CustomSentence
para analizar datos NMEA de múltiples categorías de dispositivos, incluidas sentencias específicas de diferentes fabricantes de hardware.
Para analizar datos de sentencias NMEA:
Cree el objeto
nmeaParser
y establezca sus propiedades.Llame al objeto con argumentos, como si fuera una función.
Para obtener más información sobre cómo funcionan los System objects, consulte What Are System Objects?
El nmeaParser
System object genera un arreglo de estructuras correspondientes a los valores extraídos de las sentencias NMEA especificadas.
Creación
Sintaxis
Descripción
devuelve un pnmea
= nmeaParsernmeaParser
System object, pnmea
, con propiedades predeterminadas, que extrae datos de estos estándares Mensajes NMEA: RMC, GGA y GSA. El orden de los arreglos de estructura en los datos de salida extraídos también es: RMC, GGA y GSA.
devuelve un pnmea
= nmeaParser("MessageIDs", 'msgID')nmeaParser
System object, pnmea
, que extrae datos de uno de los nueve estándares NMEA mensajes con soporte integrado, especificados mediante los ID de mensaje. Especifique msgID
como "RMC"
, "GGA"
, "GSA"
, "GSV"
, "VTG"
, "GLL"
, "GST"
, "ZDA"
y "HDT"
o una combinación de estos ID (por ejemplo: ["VTG","GLL","HDT"]
). El orden en el que especifica los ID de mensaje determina el orden de los arreglos de estructura en los datos de salida extraídos. El valor predeterminado es ["RMC","GGA","GSA"]
.
establece propiedades usando el par nombre-valor pnmea
= nmeaParser("CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']})CustomSentence
y devuelve un nmeaParser
System object, pnmea
, que extrae datos de cualquier mensaje NMEA personalizado (ya sea un mensaje NMEA estándar o un mensaje NMEA específico del fabricante), especificado mediante los ID de mensaje.
El par nombre-valor CustomSentence
acepta un arreglo de celdas anidadas donde cada elemento es un par de nombre de ID de mensaje (ya sea nombre de ID de mensaje NMEA estándar o ID de mensaje específico del fabricante) y la función de analizador correspondiente definido por el usuario, que se crea incluyendo la función extractNMEASentence
en un archivo de función. El orden en el que especifica los ID de los mensajes determina el orden de los arreglos de estructura en los datos de salida extraídos.
devuelve un pnmea
= nmeaParser("MessageIDs", {'msgID1','msgID2'},"CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']})nmeaParser
System object, pnmea
, que extrae datos de dos de los nueve mensajes NMEA estándar con soporte integrado y también de mensajes NMEA personalizados que haya especificado utilizando el par nombre-valor CustomSentence
.
Argumentos de entrada
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.
Antes de R2021a, utilice comas para separar cada nombre y valor, y encierre Name
entre comillas.
Ejemplo: pnmea = nmeaParser("CustomSentence", {['CustomMessageId1','parserFunctionName1'],['CustomMessageId2','parserFunctionName2']});
CustomSentence
— Especifique el ID del mensaje de cualquier sentencia y el nombre de su función de análisis.
arreglo de celdas de vectores de caracteres
Especifique el ID del mensaje de cualquier sentencia NMEA de la que desee extraer datos y el nombre de la función del analizador. Puede especificar varios ID de mensajes y funciones de analizador como un arreglo de celdas de vectores de caracteres. La función del analizador se define en un archivo de función, que opcionalmente puede incluir la función extractNMEASentence
.
Nota
El archivo de función para la función del analizador debe estar presente en el directorio actual o en la ruta de MATLAB .
CustomSentence
acepta el nombre de la función o el identificador de la función. Por ejemplo, ambos formatos son válidos:
pnmea = nmeaParser('CustomSentence', {['standardnmeaMessageId1','parserFunctionName1']}
parserFunctionHandle=@parserFunctionName1 pnmea = nmeaParser('CustomSentence', {['standardnmeaMessageId1',parserFunctionHandle]}
Nota
El uso de CustomSentence
par nombre-valor para analizar datos en lugar de la función de analizador incorporada da como resultado la anulación de los campos predeterminados cuando se analizan los datos. Por ejemplo, nmeaParser('CustomSentence',{["RMC","parserRMC"]})
anula el formato predeterminado de los datos analizados, ya que RMC es una de las nueve sentencias con soporte integrado para analizar datos.
Tipos de datos: char
| string
Propiedades
A menos que se indique lo contrario, las propiedades son no ajustables, lo que significa que no se pueden cambiar sus valores después de llamar al objeto. Los objetos se bloquean cuando los llamas y la función release
los desbloquea.
Si una propiedad es ajustable, puedes cambiar su valor en cualquier momento.
Para obtener más información sobre cómo cambiar los valores de las propiedades, consulte System Design in MATLAB Using System Objects.
MessageIDs
— ID de mensajes de nueve sentencias NMEA estándar con soporte integrado para extraer datos
["RMC","GGA","GSA"]
(predeterminado) | RMC
| GGA
| GSA
| GSV
| VTG
| GLL
| GST
| ZDA
| HDT
ID de mensajes de nueve sentencias NMEA con soporte integrado, que cumplen con el estándar NMEA 0183 , del cual desea extraer datos. Puede especificar varios ID de mensajes como un arreglo de cadenas para extraer datos de sentencias NMEA.
Tipos de datos: char
| string
Uso
Sintaxis
Descripción
[
analiza datos de nueve sentencias NMEA estándar con soporte integrado y devuelve un arreglo de estructuras, donde cada estructura corresponde a un único ID de mensaje. La secuencia que especifique para los argumentos de salida debe ser la misma secuencia que especificó para los ID de mensajes al crear el rmcData
,ggaData
,gsaData
,vtgData
,gllData
,gstData
,gsvData
,zdaData
,hdtData
] = pnmea(rawData
)nmeaParser
System object.
[
analiza datos de dos sentencias NMEA personalizadas (ya sea una sentencia NMEA estándar o una sentencia NMEA específica del fabricante) y devuelve un arreglo de estructuras, donde cada estructura corresponde a un único ID de mensaje. La secuencia que especifique para los argumentos de salida debe ser la misma secuencia que especificó en el par nombre-valor customNmeaData1
,customNmeaData2
] = pnmea(rawData
)CustomSentence
al crear el nmeaParser
System object.
Argumentos de entrada
rawData
— Datos NMEA obtenidos de un dispositivo electrónico marino
arreglo de cadenas
Datos NMEA, que cumplen con el estándar NMEA, obtenidos de un dispositivo electrónico marino.
Tipos de datos: string
| char
Argumentos de salida
rmcData
— Datos extraídos de la sentencia RMC
estructura
Datos extraídos de una sentencia RMC. La estructura de salida contiene la información analizada de una sentencia RMC junto con el estado del análisis. Si se encuentran varias sentencias RMC en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias RMC.
ggaData
— Datos extraídos de la sentencia GGA
estructura
Datos extraídos de una sentencia GGA. La estructura de salida contiene la información analizada de una sentencia GGA junto con el estado del análisis. Si se encuentran varias sentencias GGA en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias GGA.
gsaData
— Datos extraídos de la sentencia GSA
estructura
Datos extraídos de una sentencia GSA. La estructura de salida contiene la información analizada de una sentencia GSA junto con el estado del análisis. Si se encuentran varias sentencias GSA en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias GSA.
vtgData
— Datos extraídos de sentencia VTG
estructura
Datos extraídos de una sentencia VTG. La estructura de salida contiene la información analizada de una sentencia VTG junto con el estado del análisis. Si se encuentran varias sentencias VTG en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias VTG.
gllData
— Datos extraídos de la sentencia GLL
estructura
Datos extraídos de una sentencia GLL. La estructura de salida contiene la información analizada de una sentencia GLL junto con el estado de análisis. Si se encuentran varias sentencias GLL en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias GLL.
gstData
— Datos extraídos de la sentencia GST
estructura
Datos extraídos de una sentencia GST. La estructura de salida contiene la información analizada de una sentencia GST junto con el estado de análisis. Si se encuentran varias sentencias GST en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias GST.
gsvData
— Datos extraídos de la sentencia GSV
estructura
Datos extraídos de una sentencia GSV. La estructura de salida contiene la información analizada de una sentencia GSV junto con el estado del análisis. La información completa del satélite está disponible en múltiples estructuras gsvData. Cada estructura gsvData puede tener un máximo de cuatro información de satélite. Para obtener más detalles, consulte Sentencias GSV.
zdaData
— Datos extraídos de la sentencia ZDA
estructura
Datos extraídos de una sentencia ZDA. La estructura de salida contiene la información analizada de una sentencia ZDA junto con el estado del análisis. Si se encuentran varias sentencias ZDA en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias ZDA.
hdtData
— Datos extraídos de la sentencia HDT
estructura
Datos extraídos de una sentencia HDT. La estructura de salida contiene la información analizada de una sentencia HDT junto con el estado de análisis. Si se encuentran varias sentencias HDT en los datos de entrada, se devuelve un arreglo de estructuras. Para obtener más detalles, consulte Sentencias HDT.
customNmeaData1
— Datos extraídos de cualquier sentencia NMEA estándar o específica del fabricante.
estructura
Datos extraídos de cualquier sentencia NMEA estándar o específica del fabricante. La estructura de salida contiene la información analizada de la sentencia personalizada junto con el estado del análisis. Si se encuentran varias sentencias del mismo tipo de mensaje NMEA en los datos de entrada, se devuelve un arreglo de estructuras.
Funciones del objeto
Para utilizar una función de objeto, especifique System object como primer argumento de entrada. Por ejemplo, para liberar recursos del sistema de un System object llamado obj
, use esta sintaxis:
release(obj)
Ejemplos
Extraiga datos de sentencias NMEA utilizando la propiedad MessageID
Extraiga datos de cualquiera de las nueve sentencias NMEA estándar como parte del soporte integrado utilizando la propiedad MessageID. Los datos NMEA se obtienen de un receptor GNSS.
Extraer datos de la sentencia RMC
Cree un System object nmeaParser especificando el ID del mensaje como "RMC".
pnmea = nmeaParser("MessageID","RMC");
Proporcione la sentencia RMC obtenida del receptor GNSS como datos de entrada y extracción.
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
Extraiga datos de múltiples tipos de mensajes NMEA
Proporcione sentencias GGA, GSA y RMC como entrada.
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'];
Crea un arreglo de cadenas para incluir las tres sentencias.
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'
Sin embargo, tenga en cuenta que sólo necesita extraer datos de sentencias GGA y GSA. Así que cree el System object nmeaParser 'pnmea' y especifique los ID de mensaje 'GGA' y 'GSA' como un arreglo de cadenas.
pnmea=nmeaParser("MessageIDs",["GGA","GSA"]);
Especifique los argumentos de salida de las tres sentencias para extraer los datos como estructuras.
[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
El resultado anterior muestra que solo se extraen sentencias GGA y GSA en función de los ID de mensaje especificados como entrada.
Proporcione otra sentencia GGA como entrada adicional y extraiga datos. En este caso, no es necesario modificar el System object ya que el ID del mensaje no ha cambiado.
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
Un estado de 0 indica que los datos se analizaron correctamente.
Extraer datos de la sentencia GSV
Cree un System object nmeaParser especificando el ID del mensaje como "GSV".
pnmea = nmeaParser("MessageID","GSV");
Proporcione la sentencia GSV obtenida del receptor GNSS como datos de entrada y extracción.
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
Extraiga datos de múltiples sentencias GSV
Proporcione varias sentencias GSV como entrada.
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';
Cree un arreglo de cadenas para incluir las tres sentencias.
CRLF = [char(13),newline]; unparsedGSVLines = [unparsedGSVLine1,CRLF, unparsedGSVLine2, CRLF, unparsedGSVLine3];
Cree el System object nmeaParser 'pnmea', especifique el ID del mensaje 'GSV' y extraiga los datos.
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
Leer datos del registro NMEA
Lea datos de un registro NMEA de muestra, para que los datos se puedan analizar utilizando el System object nmeaParser.
El archivo de registro de muestra es nmeaLog.nmea
, que se incluye en este ejemplo.
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
Extraiga datos utilizando el par nombre-valor de CustomSentence
Puede extraer datos de cualquier sentencia NMEA utilizando el par nombre-valor CustomSentence
. Los datos NMEA que se van a analizar se obtienen de dispositivos electrónicos marinos.
Identificar la estructura de la sentencia NMEA y crear la función de analizador
Debe identificar la estructura de la sentencia NMEA, tal como se define en la especificación, y usar esa información para definir la estructura de los datos de salida que se usarán en el System object nmeaParser.
Por ejemplo, consideremos una sentencia de ejemplo con ID de mensaje, SSS
.
Después de identificar la estructura, crea un archivo de función que define la función del analizador, fsssParser. En el archivo de función, usted define los datos de salida como un arreglo de estructura con sus campos que coinciden con la secuencia tal como aparece en la especificación.
Navigation Toolbox™ proporciona una función preconfigurada opcional, extractNMEASentence
, que verifica si la sentencia es válida y convierte los campos de la sentencia en un arreglo de cadenas. Puede llamar a extractNMEASentence
dentro del archivo de función. También puede usar cualquier otra función (que genera un arreglo de cadenas a partir de datos no analizados) y luego llamarla dentro del archivo de función.
La siguiente imagen muestra el archivo de función con el código, asumiendo que los campos disponibles en la sentencia SSS
son TalkerID, MessageID, UTC y LatitudeError. Consulte los comentarios adicionales para obtener más detalles.
En el archivo de muestra anterior, define la asignación entre los campos del arreglo de estructura y los elementos del arreglo de cadenas. Para ciertos campos (por ejemplo, hora UTC), es posible que necesite definir un arreglo de caracteres para asignar los campos.
Después de incluir el código MATLAB como se mencionó anteriormente, guarde el archivo de función (fsssParser.m) en la ruta de MATLAB , para que pueda llamarlo para obtener datos analizados usando el nombre-valor CustomSentence
par de System object nmeaParser.
Para descargar otro archivo de función de muestra parserRMB.m que se utiliza en este ejemplo, haga clic en Abrir Live Script. Este es un archivo de función específico para los campos de una sentencia RMB (mencionada en el estándar NMEA, versión 4.1).
Extraer datos de la sentencia RMB
Cree un System object nmeaParser utilizando el par nombre-valor de CustomSentence y especificando el ID del mensaje como "RMB" y la función como "parserRMB" (descargado en el paso anterior).
pnmea = nmeaParser("CustomSentence",{["RMB","parserRMB"]});
Proporcione la sentencia RMB obtenida del receptor GNSS como datos de entrada y extracción.
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
Extraiga datos de varias sentencias en RMB
Proporcione varias sentencias RMB como entrada.
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'];
Crea un arreglo de caracteres para incluir las dos sentencias.
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'
Especifique el argumento de salida de la sentencia RMB para extraer los datos.
[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
Extraiga datos de una sentencia con soporte integrado (RMC) y sentencia RMB
Cree un System object nmeaParser usando la propiedad MessageID (para analizar una sentencia con soporte integrado - RMC) y también usando el par nombre-valor CustomSentence (especificando el ID del mensaje como "RMB" y la función como "parserRMB" (creado en un paso previo)).
pnmea = nmeaParser("MessageID","RMC","CustomSentence",{["RMB","parserRMB"]});
Proporcione sentencias RMC y RMB como entrada.
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'];
Crea un arreglo de cadenas para incluir las dos sentencias.
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'
Especifique el argumento de salida de la sentencia RMB para extraer los datos.
[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
Extraiga datos de una sentencia específica del fabricante utilizando el par nombre-valor de CustomSentence
Identificar la estructura de una sentencia específica del fabricante y crear un archivo de función con la función de analizador
La estructura de la sentencia NMEA que se va a analizar está disponible en las especificaciones del dispositivo del fabricante. Debe identificar la estructura y utilizar la información para definir la estructura de los datos de salida que se utilizarán en el System object nmeaParser.
Por ejemplo, la estructura de la sentencia NMEA de un fabricante de hardware puede verse así:
$PMMCZ,hhmmss.ss,Latitude,N,Longitude,E,NavSatellite,DR*hh<CR><LF>
Aquí, P indica que la sentencia es específica del fabricante, MMC es el código mnemotécnico del fabricante y Z es el tipo de sentencia. A partir de entonces, cada campo indica un dato específico (posición, velocidad, tiempo, etc.). Algunos fabricantes utilizan dos caracteres para el tipo de sentencia, seguidos de los campos de datos.
Después de identificar la estructura, cree la función de analizador,
parserMMCZ
, usando la función opcionalextractNMEASentence
, como se muestra a continuación (también puede usar otras funciones para extraer los datos no analizados a cadenas, en lugar deextractNMEASentence
).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
Guarde
parserMMCZ.m
en la ruta de MATLAB .Extraer datos de una sentencia específica del fabricante
Cree un System object
nmeaParser
utilizando el par nombre-valorCustomSentence
y especificando el ID del mensaje como "MMCZ" y la función como "parserMMCZ" (creada en la versión anterior). paso).pnmea = nmeaParser("CustomSentence",{["MMCZ","parserMMCZ"]});
Proporcione una sentencia MMC obtenida del dispositivo como datos de entrada y extracción:
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
Más acerca de
Campo de estado
El campo de estado que se muestra junto con los valores extraídos en cada estructura de salida se puede utilizar para determinar el estado de análisis:
Status: 0
: la sentencia es válida (la validación de la suma de verificación es exitosa y los datos extraídos corresponden al ID del mensaje solicitado)Status: 1
— La suma de verificación de la sentencia a analizar no es válidaStatus: 2
— La sentencia solicitada no se encuentra en los datos de entrada
Nota
Si un valor no está disponible en la sentencia de entrada, el valor de salida correspondiente se muestra como "NA" para valores de cadena y "NaN" para valores numéricos.
Sentencias RMC
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Estado de reparación | Valores posibles:
Tipo de datos: |
Latitud | Latitud en grados. El norte se considera positivo. Tipo de datos: |
Longitud | Longitud en grados. Este se considera positivo. Tipo de datos: |
Pista de velocidad | velocidad de desplazamiento en metros por segundo (m/s) Tipo de datos: |
Ángulo de curso verdadero | Curso sobre el terreno en grados. Tipo de datos: |
UTCFechaHora | Fecha y hora UTC Tipo de datos: |
Variación magnética | Valor de variación magnética. La dirección W se considera negativa. Tipo de datos: |
Indicador de modo | Valores posibles:
Tipo de datos: |
Estado de navegación | Valores posibles:
Tipo de datos: |
Sentencias GGA
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Hora UTC | Hora UTC ( Tipo de datos: |
Latitud | Latitud en grados. El norte se considera positivo. Tipo de datos: |
Longitud | Longitud en grados. Este se considera positivo. Tipo de datos: |
Indicador de calidad | Valores posibles:
Tipo de datos: |
NúmSatélitesEnUso | Número de satélites utilizados. Esto podría ser diferente del número de satélites a la vista. Tipo de datos: |
HDOP | Dilución horizontal de precisión. Tipo de datos: |
Altitud | Altitud sobre el nivel medio del mar en metros Tipo de datos: |
Separación Geoide | Diferencia entre elipsoide y nivel medio del mar en metros Tipo de datos: |
Edad de datos diferenciales | Edad de las correcciones diferenciales. Tipo de datos: |
ID de estación de referencia diferencial | ID de la estación que proporciona correcciones diferenciales Tipo de datos: |
Sentencias GSA
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Modo | Valores posibles:
Tipo de datos: |
Tipo de reparación | Valores posibles:
Tipo de datos: |
Número de identificación de satélites | Números de satélite (arreglo de 12 bytes). Los campos vacíos se mostrarán como Tipo de datos: |
PDOP | Dilución de posición de precisión Tipo de datos: |
VDOP | Dilución vertical de precisión. Tipo de datos: |
HDOP | Dilución horizontal de precisión Tipo de datos: |
ID del sistema | ID del sistema GNSS definido por NMEA Tipo de datos: |
Sentencias GSV
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
NumSentences | Número total de sentencias. La información satelital completa está disponible en múltiples sentencias GSV. Este campo indica el número total de estructuras Tipo de datos: |
Número de sentencia | Número de sentencia de la línea GSV analizada actualmente Tipo de datos: |
SatélitesInView | Número total de satélites a la vista Tipo de datos: |
ID de satélite | Números de identificación de satélite especificados como un vector fila de tamaño 1 por N, donde N es la cantidad de información de satélite disponible en una sentencia. El valor máximo permitido de N es 4. Tipo de datos: |
Elevación | Elevación en grados, especificada como un vector fila de tamaño 1 por N, donde N es el número de información satelital disponible en una sentencia. El valor máximo permitido de N es 4. El valor máximo de Elevación es 90 grados. Tipo de datos: |
Azimut | Azimut en grados, especificado como un vector fila de tamaño 1 por N, donde N es el número de información satelital disponible en una sentencia. El valor máximo permitido de N es 4. El rango del valor de acimut es [0-359] grados. Tipo de datos: |
SNR | Relación señal-ruido en dB-Hz, especificada como un vector fila de tamaño 1 por N, donde N es el número de información satelital disponible en una sentencia. El valor máximo permitido de N es 4. El rango del valor SNR es [0,99] dB. Tipo de datos: |
ID de señal | ID de señal correspondiente al SatelliteID. Este valor se muestra solo si las sentencias cumplen con el estándar NMEA 0183, versión 4.1. De lo contrario, el valor mostrado es Tipo de datos: |
Los posibles valores de SignalID y el canal de señal correspondiente se enumeran en esta tabla.
Sistema | TalkerID mostrado en los datos analizados | ID de satélite | ID de señal | Canal de señal |
---|---|---|---|---|
GPS | médico de cabecera |
| 0 | Todas las señales |
1 | L1 C/A | |||
2 | L1P (Y) | |||
3 | L1M | |||
4 | L2P (Y) | |||
5 | L2C-M | |||
6 | L2C-L | |||
7 | L5-I | |||
8 | L5-Q | |||
GLONASS | GL |
| 0 | Todas las señales |
1 | G1 C/A | |||
2 | G1P | |||
3 | G2 C/A | |||
4 | GLONASS (M) G2P | |||
GALILEO | Georgia |
| 0 | Todas las señales |
1 | E5a | |||
2 | E5b | |||
3 | E5a y E5b | |||
4 | E6-A | |||
5 | E6-BC | |||
6 | L1-A | |||
7 | L1-BC |
Sentencias ZDA
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Hora UTC | Hora UTC Tipo de datos: |
Día UTC | Día UTC Tipo de datos: |
UTCMes | Mes UTC Tipo de datos: |
UTCAño | Año UTC Tipo de datos: |
HorasZonaLocal | Horarios de zona local que van desde Tipo de datos: |
Minutos de zona local | Minutos de zona local que van desde Tipo de datos: |
Sentencias GLL
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Latitud | Latitud en grados. El norte se considera positivo. Tipo de datos: |
Longitud | Longitud en grados. Este se considera positivo. Tipo de datos: |
Hora UTC | Hora UTC Tipo de datos: |
Validez de datos | Estado de validez de los datos:
Tipo de datos: |
Modo de posicionamiento | Valores posibles:
Tipo de datos: |
Sentencias VTG
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Ángulo de curso verdadero | Curso sobre el terreno (verdadero) en grados Tipo de datos: |
Ángulo De Curso Magnético | Curso sobre el terreno (magnético) en grados Tipo de datos: |
Pista de velocidad | Velocidad de desplazamiento en metros por segundo (m/s) Tipo de datos: |
Indicador de modo | Valores posibles:
Tipo de datos: |
Sentencias GST
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Hora UTC | Hora UTC Tipo de datos: |
RMSStdDeviationOfRanges | Valor RMS de la desviación estándar de los rangos en metros. Tipo de datos: |
Desviación estándarEje semimayor | Desviación estándar del semieje mayor en metros Tipo de datos: |
Desviación estándarEje semimenor | Desviación estándar del semieje menor en metros Tipo de datos: |
OrientaciónSemiMayorEje | Orientación del semieje mayor, en grados Tipo de datos: |
Error de latitud y desviación estándar | Desviación estándar del error de latitud, en metros Tipo de datos: |
Error de longitud de desviación estándar | Desviación estándar del error de longitud en metros Tipo de datos: |
Error de altitud de desviación estándar | Desviación estándar del error de altitud en metros Tipo de datos: |
Sentencias HDT
Nombre del campo que se muestra en la estructura de salida una vez completado el análisis | Descripción |
---|---|
ID del hablante | Identificar el tipo de dispositivo que transmite datos. Por ejemplo, para un receptor GPS, el TalkerID es Tipo de datos: |
ID de mensaje | Tipo de mensaje NMEA – Tipo de datos: |
Ángulo de rumbo verdadero | Rumbo en grados con respecto al norte verdadero Tipo de datos: |
Historial de versiones
Introducido en R2020b
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)