




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、車載GPS智能終端通信模塊的設(shè)計與 實現(xiàn)蔣治平 裴文江摘要本文以車載GPS系統(tǒng)為基礎(chǔ),設(shè)計并實現(xiàn)了車載GPS監(jiān)控系統(tǒng)通信模 塊。結(jié)合串口通信與SOCKET通信知識,詳細(xì)分析了GPS終端與服務(wù)器,以 及服務(wù)器與客戶端之間通信的設(shè)計思路與實現(xiàn)方法。關(guān)鍵詞: GPS 通信模塊 串口通信 SOCKET通信 通 信 熱 點蔣治平男,東南大學(xué)信息科學(xué)與工程學(xué)院,碩士研究生。裴文江男,東南大學(xué)信息科學(xué)與工程學(xué)院,教授,博士生導(dǎo)師。GPS車輛監(jiān)控系統(tǒng)整合了全球定位系統(tǒng)、數(shù)字移動 通信系統(tǒng)、計算機(jī)網(wǎng)絡(luò)系統(tǒng)、地理信息系統(tǒng)和應(yīng)用軟件, 它能對車輛進(jìn)行實時監(jiān)控、跟蹤、調(diào)度和管理。GPS監(jiān) 控系統(tǒng)主要由通信模塊、數(shù)據(jù)處
2、理模塊、數(shù)據(jù)顯示模塊構(gòu) 成。心3部分組成,終端主要實現(xiàn)車輛定位、信息收發(fā)及車輛 的實時安全監(jiān)控; 通信網(wǎng)絡(luò)完成車載終端與監(jiān)控中心的雙 向數(shù)據(jù)傳輸; 監(jiān)控中心完成對車載終端的數(shù)據(jù)存儲、遠(yuǎn)程 調(diào)度及監(jiān)控等功能1。本文介紹了車載GPS智能通信模塊的設(shè)計與實現(xiàn)。 通信模塊主要完成GPS接收機(jī)-服務(wù)器-客戶端三者間的數(shù) 據(jù)傳遞,包括基于串行通信的服務(wù)器端與車載GPS終端通 信的實現(xiàn),以及基于WinSock的服務(wù)器端與客戶端通信的 實現(xiàn)。1車載GPS系統(tǒng)結(jié)構(gòu)如圖1所示,該系統(tǒng)由車載終端、通信網(wǎng)絡(luò)、監(jiān)控中圖1 車載GPS系統(tǒng)結(jié)構(gòu)整個系統(tǒng)的工作原理大致如下:車載終端通過接收 到的GPS信息,計算出車輛當(dāng)前的經(jīng)
3、度、緯度、速度、方412009.7.廣東通信技術(shù)通 信 熱 點向和其他信息(時間、狀態(tài)等),然后利用GPRS模塊通過 移動通信網(wǎng)絡(luò)傳送至監(jiān)控中心,監(jiān)控中心在接到車輛上傳 的信息后,根據(jù)車輛的當(dāng)前狀況科學(xué)地進(jìn)行調(diào)度和管理。2 系統(tǒng)硬件設(shè)計如圖2所示,車載調(diào)度監(jiān)控系統(tǒng)終端由智能控制系 統(tǒng)、 電源系統(tǒng)、 通信系統(tǒng)( GPS接收機(jī)和GPRS通信 機(jī))、接口擴(kuò)展系統(tǒng)以及攝像系統(tǒng)組成,用以實現(xiàn)對GPS 信息、報警信號、故障信息、車輛狀態(tài)和管理信息等數(shù)據(jù) 的采集。uint8 time6;/*中心命令時間*/ uint8 reqTime6; /*回復(fù)命令時間*/ uint8 avi;/*數(shù)據(jù)有效位*/uint
4、8 latitude9; /*緯度*/uint8 latitudeType; /*緯度標(biāo)志*/ uint8 longitude9; /*經(jīng)度*/uint8 longitudeType; /*經(jīng)度標(biāo)志*/ uint8 speed6; /*速度*/uint8 status;/*車輛狀態(tài)*/ ComRequest; 3.1.2 通信過程的實現(xiàn)GPS接收機(jī)與服務(wù)器的串行通信利用Windows提供 的API函數(shù)來實現(xiàn)2,實現(xiàn)過程主要包括:串口打開、設(shè) 置串口、讀取串口信息、寫串口信息。具體實現(xiàn)如下所 述:通 信 熱 點圖2 車載GPS系統(tǒng)硬件設(shè)計圖3通信模塊的設(shè)計與實現(xiàn)3.1 GPS接收機(jī)與服務(wù)器串行通
5、信的設(shè)計3.1.1 通信協(xié)議GPS接收機(jī)與服務(wù)器間的通信需要合理的數(shù)據(jù)協(xié) 議,為交互提供有效的平臺。服務(wù)器向GPS接收機(jī)發(fā)送的數(shù)據(jù)結(jié)構(gòu)如下:typedef struct uint8 serialNo10;/*車載機(jī)序列號*/ uint8 command; /*發(fā)送命令號*/uint8 time6;/*發(fā)送命令時間*/ uint8 param3117; /*命令參數(shù)指針*/ uint8 nParam;/*命令參數(shù)個數(shù)*/ GPS接收機(jī)返回的數(shù)據(jù)結(jié)構(gòu)如下: typedef struct uint8 sn10;/*車載機(jī)序列號*/uint8 type2; /*車載機(jī)返回信息類型*/ uint8 co
6、mmand3; /*中心命令號*/(1) 串口打開 在進(jìn)行通信前, 必須首先創(chuàng)建一個串行通信的句柄,并且調(diào)用CreateFile函數(shù)打開串口,具體實現(xiàn)如下:Handle m_SCom;m_ SCom= Create File(“ COM 2 ”, GENERIC_ R e a d | G E N E R I C _ W R I T E , 0 , N U L L , O P E N _ EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);CreateFile函數(shù)中標(biāo)示了要打開的串口為COM2,GENERIC_Read和GENERIC_WRITE表示可以對該串口 進(jìn)行讀寫
7、操作,0PEN_EXISTING表示COM2串口是已經(jīng) 存在的。(2) 設(shè)置串口通信內(nèi)部緩存 在打開通信設(shè)備句柄后,常常需要對串行口進(jìn)行一些初始化工作,這需要通過一個DCB結(jié)構(gòu)來進(jìn)行,具體實 現(xiàn)如下:DCB dcb;DCB是串行通信設(shè)備的控制字,DCB結(jié)構(gòu)包含了諸 如波特率、每個字符的數(shù)據(jù)位數(shù)、奇偶校驗和停止位數(shù)等 信息。在查詢或配置置串行口的屬性時,都要用DCB結(jié)構(gòu) 來作為緩沖區(qū)。下面舉例說明設(shè)置的過程:首先通過GetCommState函數(shù)獲得串口默認(rèn)設(shè)置,該 函數(shù)把當(dāng)前配置填充到一個DCB結(jié)構(gòu)中。42車載GPS智能終端通信模塊的設(shè)計與實現(xiàn)GetCommState(m_SCom,&d
8、cb);根據(jù)通信需求,必須修改相應(yīng)的DCB參數(shù),如下所示:dcb.BaudRate = CBR_9600; /*設(shè)置波特率*/ dcb.Parity = NOPARITY; /*無校驗*/dcb.ByteSize = 8; /*設(shè)置發(fā)送的一個字節(jié)為8比特*/設(shè) 置 完 d c b 這 個 結(jié) 構(gòu) 體 之 后 , 必 須 調(diào) 用 SetCommState函數(shù)使得設(shè)置過的參數(shù)生效,如下所示: SetCommState(m_SCom,&dcb);(3) 設(shè)置串口通信時限COMMTIMEOUTS結(jié)構(gòu)體用于設(shè)置通信設(shè)備時限參 數(shù),結(jié)構(gòu)體定義如下:typedef struct COMMTIMEOU
9、TS DWORD ReadIntervalTimeout;/*設(shè)置兩連續(xù)字節(jié)最大時間間隔*/DWORD ReadTotalTimeoutMultiplier;/*接收每字節(jié)的平均允許時間*/ DWORD ReadTotalTimeoutConstant;/*接收時間常數(shù)*/設(shè)置完成COMMTIMEOUTS的實例對象后需調(diào) 用Set Comm Timeouts函數(shù)使配置生效。 如下所示: SetCommTimeouts(m_SCom,& timeouts);(4) 讀串口信息 從串口讀信息應(yīng)調(diào)用ReadFile函數(shù),實現(xiàn)如下 ReadFile(m_SCom,pBuffer,iLen,&a
10、mp;pRead,NULL); 將讀到的數(shù)據(jù)放在內(nèi)存pBuffer里,pBuffer為申請的內(nèi)存空間,iLen為需要讀的數(shù)據(jù)長度,pRead存放實際讀 的數(shù)據(jù)長度。(5) 寫串口信息 向串口寫信息應(yīng)調(diào)用WriteFile函數(shù)3:writeFile (m_SCom,pBuffer,iLen,&pRead,NULL);將要寫的數(shù)據(jù)放在內(nèi)存pBuffer里,iLength為需要寫 的數(shù)據(jù)長度,pRead存放實際寫的數(shù)據(jù)長度。3.2 服務(wù)器與客戶端通信的設(shè)計服務(wù)器與客戶端間的通信主要傳送定位數(shù)據(jù)和控制信息,控制信息主要用來完成客戶端對服務(wù)器的登陸,退 出,查詢用戶信息以及服務(wù)器端監(jiān)控中心權(quán)限,
11、安全管理 等方面的數(shù)據(jù)請求。定位數(shù)據(jù)主要包含經(jīng)緯度數(shù)據(jù)和車輛 狀態(tài)數(shù)據(jù)等。如圖3所示,客戶端與服務(wù)器端通信由請求應(yīng)答兩 部分組成,通信采用基于MFC的socket通信實現(xiàn)。圖3 客戶端-服務(wù)器通信模型通 信 熱 點3.2.1 Socket通信原理 Socket是網(wǎng)絡(luò)通信的基本構(gòu)件,它是被命名和尋址的通信端點,使用中的每一個Socket都有其類型和一個與之相連的進(jìn)程。Windows Socket有兩類:數(shù)據(jù)報套接字(SOCK_ DGRAM)和流套接字(SOCK_STREAM)。本文所述的客 戶端與服務(wù)器端的通信采用流套接字?;诹魈捉幼值漠惒絊ocket通信方式采用客戶、服 務(wù)器的模式4,通信流
12、程如圖4所示圖4 Socket通信流程432009.7.廣東通信技術(shù)通 信 熱 點服務(wù)器端和客戶端都必須建立通信套接字。而且服 務(wù)器端應(yīng)先進(jìn)入監(jiān)聽狀態(tài),然后客戶端套接字發(fā)出連接請 求,服務(wù)器端收到請求后,建立另一個套接字進(jìn)行通信。 原來負(fù)責(zé)監(jiān)聽的套接字仍進(jìn)行監(jiān)聽,如果有其他客戶發(fā)來 連接請求,則再建立一個套接字5。3.2.2 請求客戶端在向服務(wù)器端發(fā)起連接請求的過程包括組包 和發(fā)包兩個步驟。(1) 組包 客戶端在向服務(wù)器請求數(shù)據(jù)前,需將數(shù)據(jù)打包發(fā)送通 信 熱 點給服務(wù)器。這些數(shù)據(jù)包括了發(fā)起連接所需的必要信息,例 如客戶端將希望獲得的服務(wù)類型封裝在RequestType結(jié)構(gòu) 體中,然后將此結(jié)構(gòu)體
13、做為請求數(shù)據(jù)包的一部分發(fā)送給服 務(wù)器,服務(wù)器通過解析該結(jié)構(gòu)體即可獲知客戶端所需的服 務(wù)內(nèi)容。該結(jié)構(gòu)體定義如下:typedef enum RequestType REQUEST_LOGIN , /*請求登錄*/ REQUEST_STATUS , /*請求汽車狀態(tài)*/ REQUEST_LOGOUT , /*請求登出*/ REQUEST_TRAIL, /*請求汽車軌跡*/REQUEST_DRIVER_USER_INFO, /*請求用戶信息*/REQUEST_ALARM, /*請求警報*/ REQUEST_UPDATE, /*請求更新*/ REQUEST_CAPTURE , /*請求地圖數(shù)據(jù)*/ (2
14、) 發(fā)包客戶端在完成組包之后,將調(diào)用相應(yīng)的函數(shù)將數(shù)據(jù) 包發(fā)送給服務(wù)器,在這里通過一個實例加以說明。假設(shè)客戶端向服務(wù)端請求地圖數(shù)據(jù),則客戶端將服 務(wù)類型設(shè)置為REQUEST_CAPTURE,同時調(diào)用Send_ REQUEST_GET_PICTURE函數(shù)向服務(wù)器端發(fā)起請求, 服務(wù)器識別接收到的數(shù)據(jù)包中的服務(wù)類型,產(chǎn)生應(yīng)答6。Send_REQUEST_GET_PICTURE核心部分如下:S e n d _ R E Q U E S T _ G E T _ P I C T U R E ( U I N T 3 2iDeviceId)requestPic.iDeviceID = htonl(iDeviceI
15、d);requestPic.iPacketLen= htonl(sizeof(requestPic); requestPic.iRequestType = REQUEST_CAPTURE; SendDataBySocket();該段代碼中,requestPic結(jié)構(gòu)體包含請求信息,該結(jié) 構(gòu)體如下所示:typedef requestPic iDeviceID; iPacketLen; iRequestType其中iDeviceID表示請求數(shù)據(jù)的客戶端ID,iPacketLen為發(fā)送的數(shù)據(jù)包的大小,iRequestType為客戶端請求的服 務(wù)類型。在設(shè)置該結(jié)構(gòu)體之后, SendDataBySocke
16、t()函 數(shù)將被調(diào)用,向服務(wù)器端發(fā)送請求。3.2.3 應(yīng)答服務(wù)器在收到客戶端的請求后,進(jìn)行應(yīng)答的過程包 括解包、連接建立、發(fā)包、連接異常處理。(1) 解包 服務(wù)器端在接收到客戶端的請求之后, 通過調(diào)用ParseBuffer函數(shù),對客戶端發(fā)送的數(shù)據(jù)包進(jìn)行解析,解 析過程如下:ParseBuffer(TCHAR *pBuffer) if ( pBuffer != NULL ) m e m c p y ( ( v o i d * ) & p a r s e d _ d a t a p B u f f e r,sizeof(PARSED_DATA); 該段代碼中,服務(wù)器端首先判斷pBuffer
17、(即緩存)中是否有數(shù)據(jù),如果沒有則繼續(xù)保持等待狀態(tài)。如果收到 數(shù)據(jù),則調(diào)用memcpy函數(shù)將緩存pBuffer中的數(shù)據(jù)放入 parsed_data中,通過sizeof(PARSED_DATA)可以獲得須 接收數(shù)據(jù)的大小。(2) 連接建立 服務(wù)器首先通過一個循環(huán)判斷與客戶端的連接是否建立。若與客戶端未建立連接,則將bRet這個布爾型變量 設(shè)置為FALSE,否則調(diào)用memcpy函數(shù)將緩存szBuffer中44車載GPS智能終端通信模塊的設(shè)計與實現(xiàn)的數(shù)據(jù)包發(fā)送給客戶端,注意iTotalLen這個變量表示數(shù)據(jù) 包的大小,這個變量的存在有助于判斷客戶端接受的數(shù)據(jù) 包是否完全。if(m_ClientSoc
18、ket.m_bConnected =FALSE)bRet= FALSE ;elsememcpy(szBuffer,iTotalLen) (3) 發(fā)包服務(wù)器端調(diào)用send函數(shù)發(fā)送客戶端請求的數(shù)據(jù)包,send(szBufferSend+iOffSet, iTotalLen-iOffSet ); send是WinSock提供的函數(shù),用于向已建立的接口發(fā)送數(shù)據(jù)。szBufferSend這個變量存儲的是已發(fā)送的數(shù)據(jù) 的長度,iTotalLen存儲的是需要發(fā)送的數(shù)據(jù)包的總長, iOffSet則表示每次發(fā)送的數(shù)據(jù)的大小。由于網(wǎng)絡(luò)帶寬等限 制,不可能一次性將數(shù)據(jù)全部發(fā)送完畢,因此在發(fā)方需要 統(tǒng)計已發(fā)送的數(shù)據(jù)量
19、,當(dāng)(iTotalLen-iOffSet)等于0時,發(fā) 送完成,發(fā)方停止數(shù)據(jù)傳輸。(4) 連接異常處理服 務(wù) 器 端 需 要 對 連 接 中 可 能 出 現(xiàn) 的 問 題 進(jìn) 行 處 理 。 如 果 連 接 發(fā) 生 問 題 , 則 服 務(wù) 器 端 可 以 通 過 調(diào) 用WSAGetLastError函數(shù),獲得錯誤類型,然后采取相應(yīng)的 處理。由于篇幅限制,這里只分析一種類型的錯誤處理。下面是一個連接錯誤的實例:if (iErrorCode= WSAECONNABORTED) m_ClientSocket.ShutDown();CString logIf;logIf.Format(“%sSoftware caused connection abort:”);首先根據(jù)iErrorCode判斷可能發(fā)生的錯誤類型。 WSAECONNABORTED表示本機(jī)某種軟件問題所導(dǎo)致的 連接中斷,這種軟件問題可能是數(shù)據(jù)傳輸超時或者是通 信協(xié)議存在錯誤。捕獲到該信息時,通過調(diào)用shutdown 函數(shù), 服務(wù)器端終止與客戶端的通信, 同時創(chuàng)建一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025橙子購銷合同
- 買無手續(xù)房屋合同樣本
- 兒童演員簽約合同樣本
- 二零二五版合同變更申請流程
- 二零二五寵物醫(yī)院獸醫(yī)聘用合同全文
- 借款反擔(dān)保合同樣本
- 國際貿(mào)易實務(wù)復(fù)習(xí)重點
- 二零二五版?zhèn)€人貸款服務(wù)合同書
- 2025年纖維紡制線、繩、索、纜項目建議書
- 銷售業(yè)務(wù)員兼職合同二零二五年
- 專車接送服務(wù)租賃合同
- 華為QSA審核報告
- 鋼筋籠(螺旋箍筋)工程量自動計算表
- 標(biāo)準(zhǔn)入庫授權(quán)委托書
- 雅駿新能源汽車廢舊動力蓄電池梯次應(yīng)用項目環(huán)境影響報告
- 克雅氏病課件
- 馬原第四章資本主義的本質(zhì)及規(guī)律
- 做自己:大學(xué)生職業(yè)生涯發(fā)展智慧樹知到答案章節(jié)測試2023年哈爾濱工程大學(xué)
- 新音樂初放 學(xué)堂樂歌說課課件
- 對外漢語教學(xué)法智慧樹知到答案章節(jié)測試2023年西北師范大學(xué)
- 樂泰膠用戶手冊
評論
0/150
提交評論