Проанализируйте данные из стандартных и специфичных для производителя предложений 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:
Создайте nmeaParser
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?
nmeaParser
Системный объект выводит массив структур, соответствующих значениям, извлеченным из заданных предложений NMEA.
возвращает pnmea
= nmeaParsernmeaParser
Системный объект, 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']});
CustomSentence
— Задайте идентификатор сообщения предложения и имя его функции синтаксического анализатораЗадайте идентификатор сообщения предложения 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 Используя Системные объекты.
MessageIDs
— Идентификаторы сообщений девяти стандартных предложений NMEA со встроенной поддержкой, чтобы извлечь данные["RMC","GGA","GSA"]
(значение по умолчанию) | RMC
| GGA
| GSA
| GSV
| VTG
| GLL
| GST
| ZDA
| HDT
Идентификаторы сообщений девяти предложений NMEA со встроенной поддержкой, которые совместимы со Стандартом NMEA 0183, из которого вы хотите извлечь данные. Можно задать несколько идентификаторов сообщений как массив строк, чтобы извлечь данные из предложений NMEA.
Типы данных: char |
string
[
данные о синтаксических анализах из девяти стандартных предложений NMEA со встроенной поддержкой, и возвращают массив структур, где каждая структура соответствует одному Идентификатору сообщения. Последовательность, которую вы задаете для выходных аргументов, должна быть той же последовательностью, которую вы задали для Идентификаторов сообщений при создании rmcData
,ggaData
,gsaData
,vtgData
,gllData
,gstData
,gsvData
,zdaData
,hdtData
] = pnmea(rawData
)nmeaParser
Системный объект.
[
данные о синтаксических анализах из двух пользовательских предложений NMEA (или стандартное предложение NMEA или специфичное для производителя предложение NMEA), и возвращают массив структур, где каждая структура соответствует одному Идентификатору сообщения. Последовательность, которую вы задаете для выходных аргументов, должна быть той же последовательностью, которую вы задали в customNmeaData1
,customNmeaData2
] = pnmea(rawData
)CustomSentence
пара "имя-значение" при создании nmeaParser
Системный объект.
rawData
— Данные NMEA, как получено из морского электронного устройстваДанные NMEA, которые совместимы со стандартом NMEA, как получено из морского электронного устройства.
Типы данных: string
| char
rmcData
— Данные извлечены из предложения RMCДанные извлечены из предложения RMC. Структура output содержит информацию, проанализированную от предложения RMC наряду с состоянием парсинга. Если несколько предложений RMC найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения RMC.
ggaData
— Данные извлечены из предложения GGAДанные извлечены из предложения GGA. Структура output содержит информацию, проанализированную от предложения GGA наряду с состоянием парсинга. Если несколько предложений GGA найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения GGA.
gsaData
— Данные извлечены из предложения GSAДанные извлечены из предложения GSA. Структура output содержит информацию, проанализированную от предложения GSA наряду с состоянием парсинга. Если несколько предложений GSA найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения GSA.
vtgData
— Данные извлечены из предложения VTGДанные извлечены из предложения VTG. Структура output содержит информацию, проанализированную от предложения VTG наряду с состоянием парсинга. Если несколько предложений VTG найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения VTG.
gllData
— Данные извлечены из предложения GLLДанные извлечены из предложения GLL. Структура output содержит информацию, проанализированную от предложения GLL наряду с состоянием парсинга. Если несколько предложений GLL найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения GLL.
gstData
— Данные извлечены из предложения GSTДанные извлечены из предложения GST. Структура output содержит информацию, проанализированную от предложения GST наряду с состоянием парсинга. Если несколько предложений GST найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации смотрите Предложения GST.
gsvData
— Данные извлечены из предложения GSVДанные извлечены из предложения GSV. Структура output содержит информацию, проанализированную от предложения GSV наряду с состоянием парсинга. Полная спутниковая информация доступна в нескольких gsvData структурах. Каждая gsvData структура может иметь максимум четырех спутниковой информации. Для получения дополнительной информации см. Предложения GSV.
zdaData
— Данные извлечены из предложения ZDAДанные извлечены из предложения ZDA. Структура output содержит информацию, проанализированную от предложения ZDA наряду с состоянием парсинга. Если несколько предложений ZDA найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения ZDA.
hdtData
— Данные извлечены из предложения HDTДанные извлечены из предложения HDT. Структура output содержит информацию, проанализированную от предложения HDT наряду с состоянием парсинга. Если несколько предложений HDT найдены во входных данных, то массив структур возвращен. Для получения дополнительной информации см. Предложения HDT.
customNmeaData1
— Данные извлечены из стандартного или специфичного для производителя предложения NMEAДанные извлечены из стандартного или специфичного для производителя предложения 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
Идентифицируйте структуру специфичного для производителя предложения и файла Создания функции с функцией синтаксического анализатора
Структура предложения 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.
Извлеките данные из специфичного для производителя предложения
Создайте 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
Поле состояния, отображенное наряду с извлеченными значениями в каждой структуре output, может использоваться, чтобы определить состояние парсинга:
Status: 0
— Предложение допустимо (валидация контрольной суммы успешна, и извлеченные данные согласно требуемому Идентификатору сообщения),
Status: 1
— Контрольная сумма предложения, которое будет проанализировано, недопустима
Status: 2
— Требуемое предложение не найдено во входных данных
Примечание
Если значение не доступно во входном предложении, соответствующее выходное значение отображено как “NA” для значений строки и "NaN" для числовых значений.
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
FixStatus | Возможные значения:
Тип данных: |
Широта | Широта в градусах. Север рассматривается положительным. Тип данных: |
Долгота | Долгота в градусах. Восток рассматривается положительным. Тип данных: |
GroundSpeed | Скорость по земле в метрах в секунду (m/s) Тип данных: |
TrueCourseAngle | Курс по земле в градусах. Тип данных: |
UTCDateTime | Дата и время UTC Тип данных: |
MagneticVariation | Магнитное значение изменения. Направление W рассматривается как отрицательное Тип данных: |
ModeIndicator | Возможные значения:
Тип данных: |
NavigationStatus | Возможные значения:
Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
UTCTime | Время UTC ( Тип данных: |
Широта | Широта в градусах. Север рассматривается положительным. Тип данных: |
Долгота | Долгота в градусах. Восток рассматривается положительным. Тип данных: |
QualityIndicator | Возможные значения:
Тип данных: |
NumSatellitesInUse | Количество спутников используется. Это могло отличаться от количества спутников в поле зрения. Тип данных: |
HDOP | Горизонтальное растворение точности Тип данных: |
Высота | Высота над средним уровнем моря в метрах Тип данных: |
GeoidSeparation | Различие между эллипсоидом и средним уровнем моря в метрах Тип данных: |
AgeOfDifferentialData | Возраст дифференциальных коррекций Тип данных: |
DifferentialReferenceStationID | ID станции, обеспечивающей дифференциальные коррекции Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
Режим | Возможные значения:
Тип данных: |
FixType | Возможные значения:
Тип данных: |
SatellitesIDNumber | Спутниковые числа (массив 12 байтов). Пустые поля будут отображены как Тип данных: |
PDOP | Растворение положения точности Тип данных: |
VDOP | Вертикальное растворение точности Тип данных: |
HDOP | Горизонтальное растворение точности Тип данных: |
SystemID | NMEA задал Системный ID GNSS Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
NumSentences | Общее количество предложений. Полная спутниковая информация доступна в нескольких предложениях GSV. Это поле указывает на общее количество Тип данных: |
SentenceNumber | Количество предложения в настоящее время проанализированной линии GSV Тип данных: |
SatellitesInView | Общее количество спутников в поле зрения Тип данных: |
SatelliteID | Спутниковые идентификационные номера задали как вектор-строка из размера 1 на n, где N является количеством спутниковой информации, доступной в одном предложении. Максимум, позволенный оцененным N, равняется 4. Тип данных: |
Вертикальное изменение | Вертикальное изменение в градусах в виде вектора-строки из размера 1 на n, где N является количеством спутниковой информации, доступной в одном предложении. Максимум, позволенный оцененным N, равняется 4. Максимальное значение Вертикального изменения является 90 градусами. Тип данных: |
Азимут | Азимут в градусах в виде вектора-строки из размера 1 на n, где N является количеством спутниковой информации, доступной в одном предложении. Максимум, позволенный оцененным N, равняется 4. Область значений значения Азимута [0-359] степени. Тип данных: |
ОСШ | Отношение сигнал-шум в дБ-Гц в виде вектора-строки из размера 1 на n, где N является количеством спутниковой информации, доступной в одном предложении. Максимум, позволенный оцененным N, равняется 4. Область значений значения ОСШ [0,99] дБ. Тип данных: |
SignalID | ID сигнала, соответствующий SatelliteID. Это значение отображено, только если предложения соответствуют Стандарту NMEA 0183, Версии 4.1. В противном случае отображенным значением является Тип данных: |
Возможные значения SignalID и соответствующего Канала Сигнала перечислены в этой таблице.
Система | TalkerID отображен в проанализированных данных | SatelliteID | SignalID | Канал сигнала |
---|---|---|---|---|
GPS | GP |
| 0 | Все сигналы |
1 | L1 C/A | |||
2 | L1 P (Y) | |||
3 | 1 МИЛЛИОН ФУНТОВ | |||
4 | L2 P (Y) | |||
5 | L2C-M | |||
6 | L2C-L | |||
7 | L5-I | |||
8 | L5-Q | |||
ГЛОНАСС | GL |
| 0 | Все сигналы |
1 | G1 C/A | |||
2 | G1 P | |||
3 | G2 C/A | |||
4 | ГЛОНАСС (M) G2 P | |||
ГАЛИЛЕО | GA |
| 0 | Все сигналы |
1 | E5a | |||
2 | 5 миллиардов евро | |||
3 | E5a и 5 миллиардов евро | |||
4 | E6-A | |||
5 | E6 ДО Н.Э | |||
6 | L1-A | |||
7 | L1-BC |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
UTCTime | Время UTC Тип данных: |
UTCDay | День UTC Тип данных: |
UTCMonth | Месяц UTC Тип данных: |
UTCYear | Год UTC Тип данных: |
LocalZoneHours | Локальные зональные часы в пределах от Тип данных: |
LocalZoneMinutes | Локальные зональные минуты в пределах от Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
Широта | Широта в градусах. Север рассматривается положительным. Тип данных: |
Долгота | Долгота в градусах. Восток рассматривается положительным. Тип данных: |
UTCTime | Время UTC Тип данных: |
DataValidity | Состояние валидности данных:
Тип данных: |
PositioningMode | Возможные значения:
Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
TrueCourseAngle | Курс по земле, (TRUE) в градусах Тип данных: |
MagneticCourseAngle | Курс по земле (магнитной) в градусах Тип данных: |
GroundSpeed | Скорость по земле в метрах в секунду (m/s) Тип данных: |
ModeIndicator | Возможные значения:
Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
UTCTime | Время UTC Тип данных: |
RMSStdDeviationOfRanges | Значение RMS стандартного отклонения областей значений в метрах. Тип данных: |
StdDeviationSemiMajorAxis | Стандартное отклонение полуглавной оси в метрах Тип данных: |
StdDeviationSemiMinorAxis | Стандартное отклонение полунезначительной оси в метрах Тип данных: |
OrientationSemiMajorAxis | Ориентация полуглавной оси, в градусах Тип данных: |
StdDeviationLatitudeError | Стандартное отклонение ошибки широты, в метрах Тип данных: |
StdDeviationLongitudeError | Стандартное отклонение ошибки долготы в метрах Тип данных: |
StdDeviationAltitudeError | Стандартное отклонение погрешности в определении высоты в метрах Тип данных: |
Имя поля, отображенного в структуре output после парсинга, завершено | Описание |
---|---|
TalkerID | Идентифицируйте тип устройства, которое передает данные. Например, для GPS-приемника, TalkerID является Тип данных: |
MessageID | Тип сообщения NMEA – Тип данных: |
TrueHeadingAngle | Заголовок в градусах относительно истинного севера Тип данных: |
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.