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

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

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

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