بررسی پروتکل NMEA

بررسی پروتکل NMEA
حسین سلطانی
نوشته شده توسط

شاید تا به حال از ماژول های موقعیت GPS یا GNSS استفاده کرده باشید. ماژول هایی از برند هایی مانند سیمکام، کویکتل و یا یوبلاکس. خروجی این ماژول ها برای بررسی و استفاده از اطلاعات ارسالی از سمت ماهواره ها به یک شکل است. بدیهی است چنانچه هر ماژول یک استاندارد برای خود داشته باشد، رمز گشایی و استخراج اطلاعات برای هر کدام از آنها متفاوت است و نیاز به برنامه نویسی برای هر کدام دارد. پس برای رفع این در هم ریختگی یک استاندادر مشخص تعریف شد.

موسسه NMEA که اختصار یافته “National Marine Electronics Association” می‌باشد، حتی قبل از اختراع GPS نیز وجود داشت. امروزه NMEA یک فرمت داده استاندارد است که توسط تمام تولید کننده های GPS پشتیبانی می‌شود. هدف NMEA توانا ساختن کاربر برای تلفیق و مچ کردن سخت افزار و نرم افزار است. با استفاده از این استاندارد کار تولید و طراحی و برنامه نویسی برای دریافت و به نمایش گذاشتن اطلاعات آن، ساده شده است. طوری که برای استخراج اطلاعات از یک الگوریتم و روشی مشابه هم میتوان در انواع گیرنده ها استفاده کرد.

چیزی که باعث کمی سر درگمی خواهد شد، وجود چندین پیغام در این استاندارد می‌باشد. همانطور که انواع گیرنده GPS با قابلیت های متفاوت وجود دارد، انواع پیغام های NMEA با قابلیت و مفهوم متفاوت نیز وجود دارد. در ادامه به تشریح آن خواهیم پرداخت. پس با ما همراه باشید.

NMEA
NMEA

ساختار پیغام NMEA

هر دیتا یا پیام NMEA در ابتدا با یک کاراکتر “$” شروع خواهد شد. پس دانستن همین موضوع کمکی شایانی در خواندن اطلاعات خواهد کرد. هر فیلد از پیام های NMEA نیز با یک کاما از یکدیگر جدا می‌شود.

Bearing using Great Circle route BWC 1
Datum being used DTM 2
Fix information GGA 3
at/Lon data GLL 4
GPS Range Residuals GRS 5
Overall Satellite data GSA 6
GPS Pseudorange Noise Statistics GST 7
Detailed Satellite data GSV 8
send control for a beacon receiver MSK 9
Beacon receiver status information MSS 10
recommended Loran data RMA 11
recommended minimum data for GPS RMC 12
recommended minimum data for GPS RMC 13
route message RTE 14
Transit Fix Data TRF 15
Multiple Data ID STN 16
dual Ground/Water Speed VBW 17
Vector track an Speed over the Ground VTG 18
Waypoint closure velocity (Velocity Made Good) WCV 19
Waypoint Location information WPL 20
cross track error XTC 21
measured cross track error XTE 22
Zulu (UTC) time and time to go (to destination) ZTG 23
Date and Time ZDA 24

هر ماژول گیرنده از یک سری از قالب های ذکر شده در بالا پشنیبانی میکند. مثلا در استفاده از دستورات AT در ماژول SIM808 برای قسمت GPS، میتوان از قالب های ردیف 3، 4، 6، 8، 13، 18 و 24 استفاده کرد. و در زمان استفاده از دستورات AT مربوط به GNSS میتوان از قالب های ردیف 3، 6، 8 و 13 استفاده نمود.

مثالی از قالب GGA:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,…,…,*47

اطلاعات و مفاهیم پیغام بالا در زیر بصورت جز به جز اشاره شده است.

  • تمام پیام های NMEA با کاراکتر $ شروع می‌شوند.
  • GP بیانگر این است که این داده مربوط به GPS است. “GL مربوط به GLONASS و GN مربوط به سامانه GNSS است.”
  • پس از آن، فرمت قالب قرار می گیرد. به طور مثال در اینجا GGA قرار گرفته است.
  • عدد 133019 زمان UTC از چپ به راست به شکل ساعت، دقیقه و ثانیه است. در این مثال برابر با 13:30:19 است.
  • عدد 4807.038 عرض جغرافیایی به فرمت DDMM.MMM است. تعداد ارقام اعشار متغیر است.
  • حرف N بیانگر نیم کرۀ شمالی است.
  • عدد 01131.000 طول جغرافیایی به فرمت DDMM.MMM است. تعداد ارقام اعشار متغیر است.
  • حرف E بیانگر نیم کرۀ شرقی است.
  • عدد 1 بیانگر شاخص کیفیت و انواع آن بصورت زیر است:

A) Invalid = 0
B) GPS fix (SPS) = 1
C) DGPS fix = 2
D) PPS fix = 3
E) Real Time Kinematic = 4
F) Float RTK = 5
G) Estimated (Dead reckoning) (2.3 feature) = 6
H) Manual input mode = 7
I) Simulation mode = 8

  • عدد 08 بیانگر تعداد ماهواره های به کار گرفته شده در بدست آوردن این مختصات است.
  • عدد 0.9 ضریب تعدیل دقت مسطحاتی HDOP است.
  • عدد 545.4 و حرف M بیانگر ارتفاع بالاتر از سطح دریا بر حسب متر است.
  • عدد 46.9 و حرف M ارتفاع (بر حسب متر) بر مبنی شکل واقعی کرۀ زمین است (ژئوئید یا بیضوی)
  • فیلد خالی: در صورتی که موجود باشد، محتوی این فیلد سن ماهواره است.
  • فیلد خالی: در صورتی که موجود باشد، محتوی این فیلد آیدی ماهواره است.
  • عدد و کاراکتر 47* بیانگر Checksum داده بین علامت “$” و “*” است.

علاوه بر پیغام های NMEA که شامل مختصات GPS می‌باشند، چندین پیام NMEA دیگر اطلاعات بیشتری را در کنار مختصات GPS ارائه می دهد که در زیر به برخی از آن ها اشاره شده است.

GPGSA$   اطلاعات جزئی ردیابی ماهواره (به عنوان مثال شماره ماهواره) و اطلاعات جزئی مربوط به ضرایب تعدیل دقت GPS DOP. (پیغام GNGSA$ برای گیرنده های GNSS می‌باشد.)

GPVTG$   اطلاعات سرعت و آفست های ردیابی ماهواره.

GPGSV$   اطلاعات جزئی ماهواه های GPS مانند ارتفاع هر ماهواره ای که ردیابی می شود. (پیغام GNGSV$ برای گیرنده های GNSS می‌باشد.)

GPGST$   دقت مسطحاتی و ارتفاعی تخمینی. (GNGST$ مخصوص گیرنده های GNSS می‌باشد.)


نکاتی مربوط به NMEA

1- در بعضی از کاربرد ها مانند کاربرد های میکروکنترلی، تنها موارد ردیف 4، 5، 6، 7، 8 و 16 از فرمت GGA از داده های خروجی ماژول موقعیت یاب نیاز می‌باشد.

2- در برخی از ماژول های موقعیت یابی علاوه بر خروجی دیتا بر مبنای استاندارد NMEA، قابلیت ارسال در یک قالب پیش فرض ماژول نیز می‌باشد. مثلا با ارسال دستور AT+CGPSINF=0 در ماژول SIM808، اطلاعات در قالب پیش فرضِ ماژول، توسط درگاه UART برای کاربر ارسال خواهند شد.

3- در پاره ای از موارد استفاده از اطلاعات GGA نیاز های پروژه را پاسخگو خواهد بود و از آنها میتوان استفاده کرد. در صورت نیاز به سایر اطلاعات مانند سرعت ماهواره، شماره ماهواره ها و… نیازمند استفاده از سایر قالب هاهی NMEA می‌باشد.

در برخی از ماژول های موقعیت یابی که  GNSS را پشتیبانی میکنند، هم میتوان از GPS به تنهایی استفاده کرد و هم از GNSS. در مواردی که دقت حائز اهمیت باشد از سیستم موقعیت یابی GNSS استفاده خواهد شد. برای این کار باید از دستورات AT مربوط به آن استفاده نمود.

در ماژول هایی که از GNSS پشتیبانی میکنند، اگر از دستورات AT مربوط به GPS استفاده شود، طول و عرض جغرافیایی در فرمت DMM و در صورت استفاده از دستورات AT بخش GNSS، طول و عرض جغرافیایی با فرمت DD خواهد بود. در صورتی که بخواهیم طول و عرض جغرافیایی را مستقیما روی گوگل مپ نمایش دهیم، باید از یکی از فرمت های  DMS و DD استفاده شود (برای طول و عرض جغرافیایی 3 فرمت استاندارد DD ،DMS و DMM وجود دارد.). که فرمت DD نیازمند کد نویسی کمتری خواهد بود.

برخی از قابلیت های ماژول های موقعیت یاب GNSS را میتوان با استفاده دستورات AT Command تغییر داد. مانند تغییر Update Rate، Baud Rate و Sentence Selection. این امر دارای مزایایی مانند کاهش توان مصرفی خواهد بود.

مثال:

$ PMTK 314 ,0,1,1,0,0,0,0,0,0,0,0,0,0,0 * 34

قسمت اول = یک بایت = کارکتر $

قسمت دوم = چهار بایت = عبارت PMTK

قسمت سوم = سه بایت = عددی بین 000 تا 999 = شناسه ای که به دیکودر، نحوۀ کد گذاری را اطلاع خواهد داد.

قسمت چهارم = تعداد بایت متغیر = دیتا ارسالی که حاوی یک فرمان اجرایی است در این قسمت قرار خواهد گرفت.

قسمت پنجم = یک بایت = کاراکتر “*” نشانگر پایان داده است.

قسمت ششم = دو بایت = در این قسمت Check Sum بین عبارات “$” و “*” قرار دارد.

قسمت هفتم = دو بایت = کاراکتر های CR و LF (همان /r و /n) که بیانگر پایان پیام است.

مثال: با ارسال دستور زیر میتوان زمان آپدیت دیتا GNSS را تنظیم کرد. در این مثال 2000ms تنظیم شده است.

AT+CGNSCMD = 0 , “$ PMTK 220 ,3000 * 1D”

در مثال بالا عدد صفر نماینگر این است که فرمت داده ارسالی بصورت NMEA می‌باشد. در صورتی که بخواهیم فرمت داده ارسالی بصورت پیش فرض باشد به جای آن از عدد 1 استفاده خواهد شد.

AT+CGNSCMD = 1 , “2420504d544b20323230202c33303030202a20314420”

در این مطلب سعی شد بصورت اجمالی و خلاصه به موضوع پرداخته شود. چنانچه در این خصوص سوال یا نظر و یا اطلاعات بیشتری دارید، آن را از قسمت کامنت ها با ما در میان بگذارید تا در اسرع وقت پاسخ داده بشه و از تجربیات و اطلاعات شما هم استفاده شود. امیدوارم که از این مطلب راضی بوده باشید و از اون استفاده کنید.

 

۳ دیدگاه برای “بررسی پروتکل NMEA

  1. سلام مهندس
    میخواستم بدونم دستور AT COMMAND ای هست که بشه با اون بعضی از اطلاعات NMEA نمایش داده نشن مثلا من الان دارم اطلاعات مربوط به GNGGA،GPGSA،GLGSA،GPGSV،GLGSV،GNRMC،GNVTG دریافت میکنم اگر بخوام فقط اطلاعات مریوط به GNRMC , GPGSA ,GNGGA نمایش داده شوند و بقیه اطلاعات نمایش داده نشوند چکار باید بکنم؟ ماژول مورد استفاده من sim868 هست.

    1. سلام و وقت بخیر؛
      در باره مورد اول که فرمودید باید به فایل AT Command مربوط به ماژول مورد استفاده خودتون مراجعه کنید و اون رو بررسی کنید.
      در خصوص مورد دوم، بله شما میتونید نسبت به دیتا های NMEA دریافتی تفاوت قائل بشید. به این صورت که بعد از دریافت دیتا از ماژول، بررسی کنید ابتدای هر کدوم رو و مثلا اگر برابر GNGGA بود کار خاصی رو انجام بدید و… . در واقع داخل خود برنامه میتونید مشخص کنید از بین دیتا های دریافتی کدوم موارد رو در نظر بگیرید و کدوم موارد رو در نظر نگیرید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *