索菲
摘 要:文章以北斗2號(hào)和GPS雙系統(tǒng)接收模塊UM220為硬件平臺(tái),利用嵌入式C#二次開發(fā)BD2/GPS-OEM板的方法,開發(fā)出了能同時(shí)運(yùn)行于PC和Windows CE的跨平臺(tái)程序,實(shí)現(xiàn)了PDA與OEM板之間的串行通訊,同時(shí)對(duì)接收到的北斗數(shù)據(jù)進(jìn)行簡(jiǎn)單的解析應(yīng)用,如利用GDI+繪制北斗二維星空?qǐng)D、采集PDA終端運(yùn)行軌跡等。
關(guān)鍵詞:北斗2號(hào);Windows CE 操作系統(tǒng);PDA;串口通訊;網(wǎng)絡(luò)通訊
中圖分類號(hào):TN967.1 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)24-0001-03
1 概述
北斗衛(wèi)星導(dǎo)航系統(tǒng)是中國(guó)正在實(shí)施的自主研發(fā)、獨(dú)立運(yùn)行的全球衛(wèi)星導(dǎo)航系統(tǒng),是除美國(guó)的全球定位系統(tǒng)(GPS)、俄羅斯的GLONASS(GLOBAL NAVIGATION SATELLITE SYSTEM)之后第三個(gè)成熟的衛(wèi)星導(dǎo)航系統(tǒng)。北斗衛(wèi)星導(dǎo)航系統(tǒng)可在全球范圍內(nèi)為用戶提供全天候、全天時(shí)、高精度的定位、導(dǎo)航、受時(shí)服務(wù),并具有短報(bào)通信能力。近年來隨著北斗導(dǎo)航系統(tǒng)的逐步建設(shè)完善,北斗巨大的經(jīng)濟(jì)效益已初具端倪,但是由于北斗導(dǎo)航系統(tǒng)建設(shè)不久,整體用戶數(shù)量少,未形成一定規(guī)模的產(chǎn)業(yè)化機(jī)制,從而導(dǎo)致北斗系統(tǒng)的終端價(jià)格昂貴,所以如何將北斗數(shù)據(jù)有效接收加以廣泛利用成為了當(dāng)前中國(guó)衛(wèi)星導(dǎo)航產(chǎn)業(yè)的關(guān)鍵課題[1]。
加快推進(jìn)北斗民用化進(jìn)程,不僅需要設(shè)備有較好的性能,而且具有便攜、低功耗、低價(jià)格等特點(diǎn)。UM220接收機(jī)模塊是目前市場(chǎng)上尺寸最小的BD2/GPS雙系統(tǒng)模塊,具有集成度高,啟動(dòng)時(shí)間快,功耗低,協(xié)議簡(jiǎn)單通用等特點(diǎn),可用于車輛導(dǎo)航、車輛監(jiān)控、氣象探測(cè)、海洋漁業(yè)和電信電力受時(shí)等領(lǐng)域[2],特別適合北斗系統(tǒng)大規(guī)模應(yīng)用的需求。
2 UM220接收機(jī)模塊性能特點(diǎn)和通訊協(xié)議
作為BD/GPS接收機(jī)的核心部件,BD/GPS-OEM板接收來自BD/GPS天線單元的衛(wèi)星信號(hào),通過變頻、放大、濾波等處理過程產(chǎn)生大量的數(shù)據(jù)信息,通過進(jìn)一步的解析數(shù)據(jù)可以為地理信息系統(tǒng)、車載導(dǎo)航、氣象探測(cè)等領(lǐng)域提供三維定位功能[3]。本文所用的UM220模塊支持NMEA-0183通信標(biāo)準(zhǔn)格式,輸入ASCII形式的數(shù)據(jù)信息。BD/GPS-OEM板輸出的NMEA-0183語(yǔ)句有多種數(shù)據(jù)句型,每種句型包含的數(shù)據(jù)信息不同,通過解析提取可以得到所需要的數(shù)據(jù),例如:經(jīng)緯度、高程、方位角、地面速率、UTC時(shí)間、幾何精度、衛(wèi)星顆數(shù)、仰角、信噪比等。UM220模塊提供的北斗語(yǔ)句有$BDGGA、$BDGLL、$BDGSA、$BDGSV、$BDRMC、$BDVTG等,每條語(yǔ)句都以特定的格式承載著不同的數(shù)據(jù)信息,例如$BDGSV語(yǔ)句,它的信息內(nèi)容是當(dāng)前衛(wèi)星狀態(tài)信息,其格式如下:
$BDGSV,NoMsg,MsgNo,NoSv,sv1,elv1,az1,cno1,sv2,elv2,az2,cno2,sv3,elv3,az3,cno3,sv4,elv4,az4,cno4*cs
其中:$為起始符;BD為信息來源;GSV為句型識(shí)別符;其后依次為GSV消息總數(shù)(NoMsg);本條GSV消息的編號(hào)(MsgNo);本系統(tǒng)可見衛(wèi)星總數(shù)(NoSv);第一~第四顆衛(wèi)星的衛(wèi)星號(hào)(sv1~sv4);第一~第四顆衛(wèi)星的仰角(sv1~sv4);第一~第四顆衛(wèi)星的方位角(sv1~sv4);第一~第四顆衛(wèi)星的信噪比(sv1~sv4);校驗(yàn)和(cs)。
3 PDA與BD/GPS-OEM之間的串行通訊
PDA終端軟件是從串口接收數(shù)據(jù),首先判斷是否需要數(shù)據(jù),如果不需要,則不進(jìn)行緩存,僅僅顯示數(shù)據(jù),如果需要?jiǎng)t將接收到的數(shù)據(jù)緩存起來,繼續(xù)接收數(shù)據(jù),與此同時(shí)異步調(diào)用緩存起來的數(shù)據(jù)。發(fā)送之前,需要先檢驗(yàn)數(shù)據(jù)的完整性,如果不完整則將數(shù)據(jù)緩存起來,將下一次接收到的原始數(shù)據(jù)補(bǔ)充在不完整數(shù)據(jù)之后,接收校驗(yàn)數(shù)據(jù)的完整性。如果數(shù)據(jù)完整,則對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),校驗(yàn)不通過,校驗(yàn)不通過的數(shù)據(jù)直接舍棄,若校驗(yàn)通過,則將數(shù)據(jù)發(fā)往各個(gè)子窗體,解析處理數(shù)據(jù),數(shù)據(jù)流程圖如圖1所示。
由于.NET Framework 2.0類庫(kù)中提供了Serial Port類,方便地實(shí)現(xiàn)了所需要串口通訊的多種功能。Serial Port中數(shù)據(jù)的讀取與寫入有較大不同。由于串口不知道數(shù)據(jù)何時(shí)到達(dá),因此有兩種方法可以實(shí)現(xiàn)串口數(shù)據(jù)的讀取:一、線程實(shí)時(shí)讀串口;二、事件觸發(fā)方式實(shí)現(xiàn)。由于線程實(shí)時(shí)讀串口的效率不是十分高效,因此本文采用事件觸發(fā)的方式。在Serial Port類中有Data Received事件,當(dāng)串口的讀緩存有數(shù)據(jù)到達(dá)時(shí)則觸發(fā)Data Received事件,需要注意的是Serial Port. Data Received事件運(yùn)行在輔線程,不能與主線程中的顯示數(shù)據(jù)控件直接進(jìn)行數(shù)據(jù)傳輸,必須用間接的方式實(shí)現(xiàn),本文采用了同步委托的方法Invoke[4],實(shí)現(xiàn)結(jié)果如圖2所示。
{
int n = com.BytesToRead;
byte[] buf = new byte[n];
com.Read(buf, 0, n);
if(getBinaryData!=null&&com.IsOpen)
{
lock (thelock)
{
binaryData.Enqueue(buf);
}
}
stringbuilder.Remove(0, stringbuilder.Length);
this.Invoke((EventHandler)(delegate
{
stringbuilder.Append(Encoding.ASCII.GetString(buf, 0, n));endprint
this.txtShowData.Text+= stringbuilder.ToString();
}));
}
4 北斗數(shù)據(jù)簡(jiǎn)單應(yīng)用
前面我們已經(jīng)通過串口通訊獲得了北斗數(shù)據(jù),本文在移動(dòng)終端開發(fā)出了一個(gè)簡(jiǎn)單的程序?qū)Λ@得的北斗衛(wèi)星數(shù)據(jù)加以簡(jiǎn)單的分析利用。
本文所選的PDA終端操作系統(tǒng)為Windows Embedded CE 6.0,其設(shè)計(jì)的內(nèi)核具有32,000個(gè)處理器的并發(fā)處理能力,每個(gè)處理有2GB虛擬內(nèi)存尋址空間,同時(shí)還能保持系統(tǒng)的實(shí)時(shí)響應(yīng),這使得Windows Embedded CE 6.0具備更強(qiáng)的圖形處理能力[5]。
GDI+(Graphics Device Interface Plus)也就是圖形設(shè)備接口,它提供了各種豐富的圖像處理功能,在Windows CE 6.0系統(tǒng)中,它充當(dāng)應(yīng)用程序和硬件設(shè)備之間的中間層,封裝與硬件交互所需的低級(jí)API,這些API函數(shù)可用于繪制圖形和文本。作為GDI的升級(jí)版,GDI+新增了諸如漸變畫筆、基數(shù)樣條、alpha混合等功能,并且實(shí)現(xiàn)了繪制邊框和填充的分離,使得GDI+在繪圖方面比GDI更加出色[6],使用GDI+的這些新特性可以輕松繪制出漂亮的衛(wèi)星視圖界面和PDA終端運(yùn)行軌跡。
4.1 二維星空?qǐng)D的繪制
為了繪制星空?qǐng)D,首先需要對(duì)包含衛(wèi)星方位信息數(shù)據(jù)的$BDGSV語(yǔ)句進(jìn)行解析,以$BDGSV數(shù)據(jù)為例,$BDGSV,2,1,7,161,50,126,38,163,47,235,40,164,32,109,37,166,65,148,40*53
可以看出本系統(tǒng)中的GSV消息總數(shù)2,本條消息為1號(hào)消息,本系統(tǒng)可見的衛(wèi)星總數(shù)為7顆,第1~第4顆衛(wèi)星的衛(wèi)星號(hào)依次為:161、163、164、166, 第1~第4顆衛(wèi)星的仰角(0~90度)依次為:50、47、32、65,第1~第4顆衛(wèi)星的方位角(0~359度)依次為:126、235、109、148,第1~第4顆衛(wèi)星的信噪比(0~99dBHz)依次為:38、40、37、40。提取繪圖所需的衛(wèi)星的顆數(shù)以及各個(gè)衛(wèi)星的衛(wèi)星號(hào)、方位角、仰角、信噪比等信息,利用GDI+繪制出北斗二維星空?qǐng)D,實(shí)現(xiàn)結(jié)果如圖3所示。程序運(yùn)行繪制過程中為避免繪制時(shí)間過長(zhǎng)或者星空?qǐng)D界面閃爍,采用了雙倍緩沖的方法,即先把文本繪制到圖像上,再在完成了所有的繪圖操作后,把整個(gè)圖像繪制到窗口中。
4.2 PDA移動(dòng)終端的軌跡采集
當(dāng)前基于衛(wèi)星導(dǎo)航系統(tǒng)的巡檢、監(jiān)控和導(dǎo)航等軟件已經(jīng)非常成熟,但是大多都是基于美國(guó)的GPS系統(tǒng)的,基于北斗衛(wèi)星導(dǎo)航系統(tǒng)的巡檢監(jiān)控軟件剛開始發(fā)展不久,還處于起步階段,而其中,PDA終端的軌跡采集無(wú)疑是這類應(yīng)用軟件中的核心功能之一,這類導(dǎo)航監(jiān)控軟件大部分的其他擴(kuò)展應(yīng)用功能都是建立在此基礎(chǔ)之上完成的。因此本文對(duì)PDA終端的軌跡采集功能的實(shí)現(xiàn)原理進(jìn)行了初步討論并且編寫了程序進(jìn)行實(shí)現(xiàn)。
首先對(duì)$BDGGA數(shù)據(jù)進(jìn)行解析,提取出經(jīng)緯度等信息。以$BDGGA數(shù)據(jù)為例:$BDGGA,071437.000,2258.8881,N,11321.4923,E,1,5,0.702,48.137,M,0,M,*58
可以看出當(dāng)前移動(dòng)終端所處的位置是:北緯22度58.8881分,東經(jīng)113度21.4923分,橢球高是48.173米,接收時(shí)間是7點(diǎn)14分37秒(UTC),參與定位的北斗衛(wèi)星是5顆,定位狀態(tài)為單點(diǎn)定位,這里每隔1秒接收一次數(shù)據(jù),因此在進(jìn)行跟蹤定位時(shí)可以實(shí)時(shí)得到所處的位置。然后提取出精度、緯度信息,通過高斯正算轉(zhuǎn)換為平面坐標(biāo),通過屏幕校正處理,利用GDI+將坐標(biāo)繪制在終端屏幕上,繼而得到終端的運(yùn)行軌跡。
5 網(wǎng)絡(luò)通訊
PDA終端作為客戶端,通過IP地址和PC端服務(wù)器進(jìn)行網(wǎng)絡(luò)通信,將采集的衛(wèi)星數(shù)據(jù)發(fā)送至PC服務(wù)端,這樣可以利用PC機(jī)對(duì)衛(wèi)星數(shù)據(jù)進(jìn)行進(jìn)一步的存儲(chǔ)應(yīng)用。為節(jié)省資源同時(shí)提高通信效率手持機(jī)端將數(shù)據(jù)重新組織按照自定義的格式發(fā)網(wǎng)PC服務(wù)端,自定義數(shù)據(jù)格式表1所示,PC服務(wù)器端接收自定義的定位數(shù)據(jù)進(jìn)行相關(guān)的解析和應(yīng)用。
本文采用Socket接口進(jìn)行PDA端和PC端的網(wǎng)絡(luò)通訊,Socket接口是TCP/IP網(wǎng)絡(luò)的API,通常也稱作“套接字”,應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求[7]。Socket接口定義了許多函數(shù)或例程,可以用它們來開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序,程序根據(jù)連接啟動(dòng)的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。
PDA客戶端:
socketSender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry ipHost = Dns.GetHostEntry(ipaddress);
PAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, portnumber);
socketSender.Connect(ipEndPoint);//連接
socketSender.Send(bytesenddata);//發(fā)送組織好的數(shù)據(jù)
PC服務(wù)端:
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
portnumber = int.Parse(txtPortNumber.Text.Trim());endprint
listener.Bind(new IPEndPoint(IPAddress.Any, portnumber));
listener.Listen(10);
byte[] receivedBytes = new byte[4096];
int bytesNum = socket.Receive(receivedBytes);
receivedValue = Encoding.ASCII.GetString(receivedBytes, 0, bytesNum);
6 結(jié)束語(yǔ)
本文討論了在Windows CE6.0操作系統(tǒng)基礎(chǔ)之上如何接收北斗衛(wèi)星數(shù)據(jù),實(shí)現(xiàn)了OEM板與PDA之間的通訊,并且對(duì)接收到的北斗數(shù)據(jù)進(jìn)行解析,初步實(shí)現(xiàn)了對(duì)于北斗數(shù)據(jù)的簡(jiǎn)單應(yīng)用,可進(jìn)一步應(yīng)用于車輛監(jiān)控、車載導(dǎo)航、氣象探測(cè)、海洋漁業(yè)和電信電力受時(shí)等領(lǐng)域,對(duì)推動(dòng)實(shí)現(xiàn)北斗衛(wèi)星導(dǎo)航系統(tǒng)民用化、產(chǎn)業(yè)化有著現(xiàn)實(shí)的意義。
參考文獻(xiàn):
[1]劉偉.基于“北斗一號(hào)”車載導(dǎo)航終端系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010:1-80.
[2]劉興,王德明,劉維亭.基于Windows CE的GPS-OEM板的數(shù)據(jù)接收與處理[J].華東船舶工業(yè)學(xué)院學(xué)報(bào),2005,19(2):50-53.
[3]Zhou Jing translate. Visual C# 2005 From approaches to master. Beijing Tsinghua University presse [M].2006.
[4]李永隆.PDA程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002.
[5]徐成,秦云川,劉彥.Windows CE內(nèi)核定制與驅(qū)動(dòng)程序開發(fā)[M].中國(guó)電力出版社,2011.
[6]John C.Database design and programming with access,SQL and visual C[M].[S1]:The MacGraw-Hill Co.Ltd,2002.
[7]Joan Daemen,Vincent Aijme. The Design of Rijindael:AES-the Advanced Eneryption Standard[J]. Springer Verlag, 2003:57-72.endprint