基于全球星實(shí)現無(wú)人機遠程通信
平時(shí)可利用數據維護軟件對數據庫進(jìn)行備份、刪除等管理,可對歷史數據查詢(xún)、調閱、生成報表、打印、導出等工作。
4.2 關(guān)鍵技術(shù)實(shí)現
4.2.1 多線(xiàn)程技術(shù)
本系統涉及撥號連接、網(wǎng)絡(luò )通信、串口通信、數據分包、狀態(tài)監視等。眾多任務(wù)實(shí)時(shí)完成,如果管理不慎,將造成系統資源沖突,使系統穩定性降低。因此,在開(kāi)發(fā)時(shí)采用多線(xiàn)程技術(shù)管理任務(wù),共創(chuàng )建了四個(gè)服務(wù)線(xiàn)程:串口通信線(xiàn)程,負責管理有關(guān)串口通信的所有任務(wù);網(wǎng)關(guān)連接線(xiàn)程,負責撥號連接,監視全球星星歷狀態(tài),系統斷開(kāi)后自動(dòng)實(shí)時(shí)連接;網(wǎng)絡(luò )通信線(xiàn)程,負責有關(guān)網(wǎng)絡(luò )SOCKET通信的所有任務(wù);數據處理線(xiàn)程,負責實(shí)時(shí)生成傳輸的數據包,對數據進(jìn)行加密、壓縮、分包、合包等任務(wù)。依靠線(xiàn)程中斷、掛起、通信等線(xiàn)程服務(wù)手段來(lái)實(shí)現各個(gè)任務(wù)之間的信息交互,有效防止資源沖突互鎖。
4.2.2 撥號連接網(wǎng)關(guān)
在使用全球星提供的通信服務(wù)時(shí),必須使GSP-1620與網(wǎng)關(guān)保持連接,而且要實(shí)時(shí)監測連接狀態(tài),在斷開(kāi)時(shí),重新連接。連接方式采用的是撥號連接的方式。以WINDOWS平臺為例撥號連接的程序如下:本文引用地址:http://dyxdggzs.com/article/158020.htm
定義連接參數rdParams,并根據需要初始化該連接參數。
DWORD dwError=RasDial(NULL,NULL,rdParams,0L,(RASDIALFUNC)RasDialFunc,&m_hRasConn);
調用API函數RasDial進(jìn)行撥號連接,入口參數主要有連接參數rdParams和回調函數RasDialFunc。
回調函數RasDialFunc定義如下:
回調函數的主要作用為根據連接狀態(tài)執行相應的任務(wù),比如連接成功時(shí)則調用API函數RasGetProjec-tionInfo獲取網(wǎng)關(guān)給本用戶(hù)分配的IP,獲得IP后才可以應用TCP/IP或UDP協(xié)議進(jìn)行信息傳輸。
另一個(gè)比較重要的API函數是RasGetConnect-Status,利用該函數可實(shí)時(shí)獲取網(wǎng)關(guān)連接狀態(tài)。
4.2.3 網(wǎng)絡(luò )通信
撥號連接網(wǎng)關(guān)成功后,獲得分配IP,則進(jìn)行網(wǎng)絡(luò )通信,通信時(shí)即可采用TCP/IP協(xié)議也可采用UDP協(xié)議,開(kāi)發(fā)時(shí)根據需要確定。以UDP協(xié)議為例,網(wǎng)絡(luò )通信程序如下:
如果創(chuàng )建成功,則綁定該SOCKET,綁定端口號為port。綁定后,則可創(chuàng )建網(wǎng)絡(luò )數據處理線(xiàn)程,實(shí)時(shí)接收和發(fā)送數據。接收和發(fā)送數據的程序分別為:
resulut和sent分別代表接收的字節數和發(fā)送的字節數。
4.2.4 串口通信
串口可以被當作文件資源來(lái)管理,因此利用Cre-ateFile,OpenFile和WriteFile三個(gè)文件操作API函數即可實(shí)現打開(kāi)串口、讀寫(xiě)數據的功能。以Windows操作系統為例,程序如下:
該函數實(shí)現了打開(kāi)串口號為port的串口,打開(kāi)成功返回真,失敗返回假。
該函數實(shí)現了從打開(kāi)的串口中讀取緩沖區中的數據。
該函數實(shí)現了將數據寫(xiě)入打開(kāi)的串口。
4.2.5 數據分包
由于網(wǎng)口和串口每次傳輸的數據量有限,為了滿(mǎn)足信息批量傳輸的需求,必須將需要傳輸的數據(例如:一個(gè)2 MB的圖像文件)首先分解成一個(gè)個(gè)獨立的數據包,發(fā)送時(shí)每次發(fā)送一個(gè)數據包,等接收端接收到所有的數據包時(shí),將數據包進(jìn)行合包,解析出原始數據。在發(fā)送時(shí)可能出現個(gè)別數據包丟失的情況,在接收端根據數據包內的標識判斷丟失的數據包,然后向發(fā)送端請求重發(fā)丟失的數據包。數據包數據結構設計如表1所示。數據包序號為每個(gè)數據包的惟一的標識序號;子包個(gè)數代表該數據包所屬的需要傳輸數據分包后形成的子包的個(gè)數;子包序號代表該數據包所屬的需要傳輸數據分包后形成的子包群中的排序號;信息頭代表傳輸的信息類(lèi)型編碼。利用該數據結構即可編制任意長(cháng)度數據的傳輸程序,而且能夠保證數據傳輸的速度和正確性。
5 結 語(yǔ)
應用全球星的通信功能為無(wú)人機設計了一套遠程通信系統,并解決了在開(kāi)發(fā)中遇到的連接網(wǎng)關(guān)、網(wǎng)絡(luò )通信、數據分包等關(guān)鍵技術(shù)問(wèn)題。該系統通信不受時(shí)間、距離、地域限制,通信能力強,可傳輸語(yǔ)音、數據、圖像等信息。系統造價(jià)低及開(kāi)發(fā)風(fēng)險低,因此具有廣泛的應用前景。
評論