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