MIS系統中GPS15L模塊的應用
一般情況下,GPS接收機只要處于工作狀態,就會源源不斷地把接收到的信息通過串口傳送到主控制板中。它的每一條NMEA語句都是以“$”為開始標志、以“\n”為結束標志。接收到的GPRMC語句格式為:

其中,CR、LF分別表示ASCII字符“回車”和“換行”,hh代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個字符)。其含義見表1所列。

通過讀串口得到的數據可能會出現兩種情況,一種情況是每次讀到的數據中都會有完整的GPRMC語句,另一種情況是GPRMC分兩次獲得。獲得完整的句子之后。接著判斷得到的句子是否為GPRMC語句(即判斷句子是否以GPRMC開頭),如果是GPRMC語句,再就開始判斷每個數據格式是否正確,包括表1中的UTC時間格式、定位有效性、緯度格式、緯度半球表示方法、經度格式、經度半球表示方法、UTC日期格式信息等,最后還將“$”和“*”之間的所有字符按位異或(不包括這兩個字符),并計算校驗和,看其是否為hh值(“*”之后的值)。
判斷語句是否為GPRMC語句的流程如圖2所示。

其部分關鍵函數如下所示:
int Init();初始化函數,用來打開串口,進行串口設置(波特率、數據位、校驗位)等;
void Tick ();讀串口數據函數;
void Cleanup ();關閉串口函數;
void Decode(char*szData);判斷GPRMC語句函數;
bool VeriLine(char*szBuffer);判斷GPRMC語句中數據格式是否正確函數;
void DecodeLine (char*szBuffer);提取GPRMC語句中有用信息并打印,包括時間、經
緯度、日期。
以下是部分相關函數:
bool VeriLine(char*szBuffer);判斷GPRMC語句中數據格式是否正確函數;
bool VeriTimeForm(char*szBuffer2);判斷時間格式函數;
bool VeriLonForm(char*szBuffer2);判斷經度格式函數;
bool VeriLatForm(char*szBuffer2);判斷緯度格式函數;
bool VeriDayForm(char*szBuffer2);判斷日期格式函數;
如果語句為正確的GPRMC語句,接下來就可以提取所需信息,提取時間、經緯度和日期信息的部分程序如下:
void PrintTime(char*szBuffer2);打印時間函數,在此要將UTC時間轉換為北京時間;
void PrintLonLat (char*szBuffer2,int n);打印經緯度函數;
void PrintDay (char*szBuffer2);打印日期函數,以年/月/日形式打印。
3 結束語
全球定位系統具有性能好、精度高、應用廣等特點,是迄今最好的導航定位系統。隨著全球定位系統的不斷改進,以及硬件和軟件的不斷完善,其應用領域還在不斷地開拓。目前,GPS應用已開始逐步深入人們的日常生活。GARMIN的GPS接收機功耗非常小,數據更新很快,而且,其優良的性能既能滿足陸地導航的靈敏度要求,也能滿足飛行器的動態要求。
評論