基于GPRS的出租車(chē)監控調度系統方案
該終端的軟件設計主要包含兩個(gè)部分:GPS 定位信息的接收和GPRS 撥號上網(wǎng)的實(shí)現。
由于終端移植了嵌入式Linux(內核版本為2.6.16),它提供豐富的設備支持和成熟的系統管理能力,因而大大地簡(jiǎn)化了軟件的開(kāi)發(fā)過(guò)程。
(1)GPS 定位信息接收的實(shí)現
該過(guò)程主要通過(guò) Linux 串口通信編程來(lái)實(shí)現,在實(shí)現過(guò)程中的關(guān)鍵處理部分是:串口屬性設置以及對接收到的GPS 信息的解析。
由于 GPS 模塊輸出的每幀數據都是以換行符結束,所以在設置串口屬性的時(shí)候可將其模式設為規范(Canonical)模式,即每次讀取串口時(shí)先將數據保存到緩存,直到讀到換行符時(shí)所有數據才會(huì )被傳輸,這樣就能保證每次讀取的是整幀數據,方便之后的幀頭判斷和信息解析。接下來(lái)還要根據GPS 模塊的默認參數配置串口傳輸速率為4800bps,8 位數據位,1 位停止位,無(wú)校驗位,串口屬性就設置完畢了。
GPS 模塊的輸出幀遵循NMEA0183 標準,具有多種格式,主要由幀頭進(jìn)行標志,包括$GPGGA、$GPGLL、$GPGSA、 $GPGSV、$GPGMC、$GPVTG 六種幀,分別描述不同信息,一般來(lái)說(shuō)$GPRMC 幀就可以提供我們所關(guān)心的數據,如經(jīng)緯度、速度、時(shí)間等,所以只需對該幀信息進(jìn)行提取。$GPRMC 幀的格式如圖2:
圖2 GPRMC 幀的格式
在每次讀取的時(shí)候首先需要對幀頭進(jìn)行判斷是否是$GPRMC 幀,然后再根據幀中的逗號位置,對該幀數據進(jìn)行解析,提取所需的定位、速度和時(shí)間信息。
(2)GPRS 撥號上網(wǎng)的實(shí)現
該部分是整個(gè)系統的關(guān)鍵,是實(shí)現出租車(chē)終端和監控中心進(jìn)行無(wú)線(xiàn)通信的基礎,該過(guò)程主要依靠PPP(點(diǎn)到點(diǎn)協(xié)議)來(lái)實(shí)現,它可以實(shí)現在串行鏈路上創(chuàng )建和運行IP 協(xié)議。
為了能夠實(shí)現PPP 連接,首先需要配置內核使其支持PPP,然后通過(guò)交叉編譯生成ARM平臺下的pppd 和chat 應用程序。PPP 連接的建立和維持需要由pppd 和內核中的PPP 驅動(dòng)程序配合完成。chat 程序主要用于和GPRS 模塊進(jìn)行交互,完成撥號和各項配置。執行pppd的時(shí)候將首先調用chat 程序進(jìn)行撥號連接,PPP 鏈路的建立流程如圖3:
圖3 PPP 鏈路建立流程
首先執行 chat 程序對中國移動(dòng)的接入號碼進(jìn)行撥號,建立與PPP 服務(wù)器端的物理連接,然后進(jìn)行LCP 鏈路的協(xié)商,主要協(xié)商一些鏈路參數(數據幀格式、最大傳輸單元等),協(xié)商成功后將建立與PPP 服務(wù)器端的數據鏈路,接著(zhù)向PPP 服務(wù)器端提供用戶(hù)和口令進(jìn)行PAP驗證,在未通過(guò)驗證之前是不能進(jìn)行任何數據傳輸的,最后,進(jìn)行IPCP 協(xié)商,主要進(jìn)行IP地址的協(xié)商,協(xié)商成功后,出租車(chē)終端將獲得GGSN(GPRS 網(wǎng)關(guān))為其動(dòng)態(tài)分配的IP 地址。PPP 鏈路就建立完成了,之后出租車(chē)終端就相當于公網(wǎng)上的一臺主機,可以自由地與Internet 的其他主機進(jìn)行數據交互了。
3.2 監控中心的軟件設計
監控中心是位于出租車(chē)公司的控制中心,它與公司服務(wù)器進(jìn)行局域網(wǎng)連接如圖1,服務(wù)器具有固定公網(wǎng)(Internet)IP 地址,而監控中心的IP 地址為局域網(wǎng)IP,公網(wǎng)上的主機(出租車(chē)終端)是不能通過(guò)該IP 來(lái)訪(fǎng)問(wèn)監控中心的,要想實(shí)現這個(gè)過(guò)程,必須在公司服務(wù)器設置端口映射,端口映射的原理是將擁有固定IP 地址的服務(wù)器端口映射到處于局域網(wǎng)的某臺主機端口上,如圖4:
圖4 端口映射示意
上圖中,將服務(wù)器的1111 端口映射到局域網(wǎng)內監控中心的2222 端口,這樣外網(wǎng)主機發(fā)往服務(wù)器1111 端口的數據都將被重定向到監控中心的2222 端口,監控中心只要開(kāi)放并監聽(tīng)該端口,即可獲得相關(guān)數據。
監控中心主機采用 Debian Linux 操作系統,Debian 是一套為計算機設計的自由操作系統,它包含一萬(wàn)五千多個(gè)軟件包,都是自由開(kāi)源的,并被包裝成容易安裝的deb 格式,Debian是一款功能強大的Linux 操作系統。
監控中心的軟件設計主要完成以下兩個(gè)任務(wù):接收出租車(chē)終端發(fā)送過(guò)來(lái)的信息并寫(xiě)入數據庫;設計圖形管理軟件,方便各項功能的實(shí)現。
(1)接收出租車(chē)終端發(fā)送過(guò)來(lái)的定位信息并寫(xiě)入數據庫
設計一個(gè)守護(Daemon)進(jìn)程,它可以實(shí)現在操作系統啟動(dòng)后一直在后臺運行,不受控制終端的控制,該進(jìn)程主要用于監聽(tīng)本監控中心的指定端口,接收由出租車(chē)終端發(fā)送過(guò)來(lái)的定位、速度和時(shí)間信息,然后將所有信息寫(xiě)入POSTGRESQL8.0 數據庫[4]。POSTGRESQL數據庫是世界上可以獲得開(kāi)放源碼的最先進(jìn)的數據庫系統,支持幾乎所有 SQL 構件(包括子查詢(xún),事務(wù)和用戶(hù)定義類(lèi)型和函數),并且為多種開(kāi)發(fā)語(yǔ)言提供接口(包括 C,C++,Java 等)。
Linux 系統下采用C 語(yǔ)言對該數據庫進(jìn)行操作,主要用到以下三個(gè)函數:
PQconnectdb(“dbname=psql_data”)用于打開(kāi)名為psql_data 的POSTGRESQL 數據庫;PQexec(PQconnectdb(),sql_query)用于對打開(kāi)的數據庫執行各種SQL 語(yǔ)句;PQfinish()用于關(guān)閉打開(kāi)的數據庫。
評論