MIS系統(tǒng)中GPS15L模塊的應(yīng)用
一般情況下,GPS接收機(jī)只要處于工作狀態(tài),就會(huì)源源不斷地把接收到的信息通過串口傳送到主控制板中。它的每一條NMEA語句都是以“$”為開始標(biāo)志、以“\n”為結(jié)束標(biāo)志。接收到的GPRMC語句格式為:
其中,CR、LF分別表示ASCII字符“回車”和“換行”,hh代表了“$”和“*”之間所有字符的按位異或值(不包括這兩個(gè)字符)。其含義見表1所列。
通過讀串口得到的數(shù)據(jù)可能會(huì)出現(xiàn)兩種情況,一種情況是每次讀到的數(shù)據(jù)中都會(huì)有完整的GPRMC語句,另一種情況是GPRMC分兩次獲得。獲得完整的句子之后。接著判斷得到的句子是否為GPRMC語句(即判斷句子是否以GPRMC開頭),如果是GPRMC語句,再就開始判斷每個(gè)數(shù)據(jù)格式是否正確,包括表1中的UTC時(shí)間格式、定位有效性、緯度格式、緯度半球表示方法、經(jīng)度格式、經(jīng)度半球表示方法、UTC日期格式信息等,最后還將“$”和“*”之間的所有字符按位異或(不包括這兩個(gè)字符),并計(jì)算校驗(yàn)和,看其是否為hh值(“*”之后的值)。
判斷語句是否為GPRMC語句的流程如圖2所示。
其部分關(guān)鍵函數(shù)如下所示:
int Init();初始化函數(shù),用來打開串口,進(jìn)行串口設(shè)置(波特率、數(shù)據(jù)位、校驗(yàn)位)等;
void Tick ();讀串口數(shù)據(jù)函數(shù);
void Cleanup ();關(guān)閉串口函數(shù);
void Decode(char*szData);判斷GPRMC語句函數(shù);
bool VeriLine(char*szBuffer);判斷GPRMC語句中數(shù)據(jù)格式是否正確函數(shù);
void DecodeLine (char*szBuffer);提取GPRMC語句中有用信息并打印,包括時(shí)間、經(jīng)
緯度、日期。
以下是部分相關(guān)函數(shù):
bool VeriLine(char*szBuffer);判斷GPRMC語句中數(shù)據(jù)格式是否正確函數(shù);
bool VeriTimeForm(char*szBuffer2);判斷時(shí)間格式函數(shù);
bool VeriLonForm(char*szBuffer2);判斷經(jīng)度格式函數(shù);
bool VeriLatForm(char*szBuffer2);判斷緯度格式函數(shù);
bool VeriDayForm(char*szBuffer2);判斷日期格式函數(shù);
如果語句為正確的GPRMC語句,接下來就可以提取所需信息,提取時(shí)間、經(jīng)緯度和日期信息的部分程序如下:
void PrintTime(char*szBuffer2);打印時(shí)間函數(shù),在此要將UTC時(shí)間轉(zhuǎn)換為北京時(shí)間;
void PrintLonLat (char*szBuffer2,int n);打印經(jīng)緯度函數(shù);
void PrintDay (char*szBuffer2);打印日期函數(shù),以年/月/日形式打印。
3 結(jié)束語
全球定位系統(tǒng)具有性能好、精度高、應(yīng)用廣等特點(diǎn),是迄今最好的導(dǎo)航定位系統(tǒng)。隨著全球定位系統(tǒng)的不斷改進(jìn),以及硬件和軟件的不斷完善,其應(yīng)用領(lǐng)域還在不斷地開拓。目前,GPS應(yīng)用已開始逐步深入人們的日常生活。GARMIN的GPS接收機(jī)功耗非常小,數(shù)據(jù)更新很快,而且,其優(yōu)良的性能既能滿足陸地導(dǎo)航的靈敏度要求,也能滿足飛行器的動(dòng)態(tài)要求。
評(píng)論