<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于全球星實(shí)現(xiàn)無人機(jī)遠(yuǎn)程通信

          基于全球星實(shí)現(xiàn)無人機(jī)遠(yuǎn)程通信

          作者: 時(shí)間:2009-07-03 來源:網(wǎng)絡(luò) 收藏
          4.1.5 數(shù)據(jù)維護(hù)階段
          平時(shí)可利用數(shù)據(jù)維護(hù)軟件對數(shù)據(jù)庫進(jìn)行備份、刪除等管理,可對歷史數(shù)據(jù)查詢、調(diào)閱、生成報(bào)表、打印、導(dǎo)出等工作。
          4.2 關(guān)鍵技術(shù)
          4.2.1 多線程技術(shù)
          本系統(tǒng)涉及撥號連接、網(wǎng)絡(luò)、串口、數(shù)據(jù)分包、狀態(tài)監(jiān)視等。眾多任務(wù)實(shí)時(shí)完成,如果管理不慎,將造成系統(tǒng)資源沖突,使系統(tǒng)穩(wěn)定性降低。因此,在開發(fā)時(shí)采用多線程技術(shù)管理任務(wù),共創(chuàng)建了四個服務(wù)線程:串口線程,負(fù)責(zé)管理有關(guān)串口通信的所有任務(wù);網(wǎng)關(guān)連接線程,負(fù)責(zé)撥號連接,監(jiān)視星星歷狀態(tài),系統(tǒng)斷開后自動實(shí)時(shí)連接;網(wǎng)絡(luò)通信線程,負(fù)責(zé)有關(guān)網(wǎng)絡(luò)SOCKET通信的所有任務(wù);數(shù)據(jù)處理線程,負(fù)責(zé)實(shí)時(shí)生成傳輸?shù)臄?shù)據(jù)包,對數(shù)據(jù)進(jìn)行加密、壓縮、分包、合包等任務(wù)。依靠線程中斷、掛起、通信等線程服務(wù)手段來各個任務(wù)之間的信息交互,有效防止資源沖突互鎖。
          4.2.2 撥號連接網(wǎng)關(guān)
          在使用星提供的通信服務(wù)時(shí),必須使GSP-1620與網(wǎng)關(guān)保持連接,而且要實(shí)時(shí)監(jiān)測連接狀態(tài),在斷開時(shí),重新連接。連接方式采用的是撥號連接的方式。以WINDOWS平臺為例撥號連接的程序如下:

          本文引用地址:http://www.ex-cimer.com/article/158020.htm


          定義連接參數(shù)rdParams,并根據(jù)需要初始化該連接參數(shù)。
          DWORD dwError=RasDial(NULL,NULL,rdParams,0L,(RASDIALFUNC)RasDialFunc,&m_hRasConn);
          調(diào)用API函數(shù)RasDial進(jìn)行撥號連接,入口參數(shù)主要有連接參數(shù)rdParams和回調(diào)函數(shù)RasDialFunc。
          回調(diào)函數(shù)RasDialFunc定義如下:


          回調(diào)函數(shù)的主要作用為根據(jù)連接狀態(tài)執(zhí)行相應(yīng)的任務(wù),比如連接成功時(shí)則調(diào)用API函數(shù)RasGetProjec-tionInfo獲取網(wǎng)關(guān)給本用戶分配的IP,獲得IP后才可以應(yīng)用TCP/IP或UDP協(xié)議進(jìn)行信息傳輸。
          另一個比較重要的API函數(shù)是RasGetConnect-Status,利用該函數(shù)可實(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é)議,開發(fā)時(shí)根據(jù)需要確定。以UDP協(xié)議為例,網(wǎng)絡(luò)通信程序如下:


          如果創(chuàng)建成功,則綁定該SOCKET,綁定端口號為port。綁定后,則可創(chuàng)建網(wǎng)絡(luò)數(shù)據(jù)處理線程,實(shí)時(shí)接收和發(fā)送數(shù)據(jù)。接收和發(fā)送數(shù)據(jù)的程序分別為:


          resulut和sent分別代表接收的字節(jié)數(shù)和發(fā)送的字節(jié)數(shù)。
          4.2.4 串口通信
          串口可以被當(dāng)作文件資源來管理,因此利用Cre-ateFile,OpenFile和WriteFile三個文件操作API函數(shù)即可打開串口、讀寫數(shù)據(jù)的功能。以Windows操作系統(tǒng)為例,程序如下:


          該函數(shù)實(shí)現(xiàn)了打開串口號為port的串口,打開成功返回真,失敗返回假。


          該函數(shù)實(shí)現(xiàn)了從打開的串口中讀取緩沖區(qū)中的數(shù)據(jù)。


          該函數(shù)實(shí)現(xiàn)了將數(shù)據(jù)寫入打開的串口。
          4.2.5 數(shù)據(jù)分包
          由于網(wǎng)口和串口每次傳輸?shù)臄?shù)據(jù)量有限,為了滿足信息批量傳輸?shù)男枨螅仨殞⑿枰獋鬏數(shù)臄?shù)據(jù)(例如:一個2 MB的圖像文件)首先分解成一個個獨(dú)立的數(shù)據(jù)包,發(fā)送時(shí)每次發(fā)送一個數(shù)據(jù)包,等接收端接收到所有的數(shù)據(jù)包時(shí),將數(shù)據(jù)包進(jìn)行合包,解析出原始數(shù)據(jù)。在發(fā)送時(shí)可能出現(xiàn)個別數(shù)據(jù)包丟失的情況,在接收端根據(jù)數(shù)據(jù)包內(nèi)的標(biāo)識判斷丟失的數(shù)據(jù)包,然后向發(fā)送端請求重發(fā)丟失的數(shù)據(jù)包。數(shù)據(jù)包數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如表1所示。數(shù)據(jù)包序號為每個數(shù)據(jù)包的惟一的標(biāo)識序號;子包個數(shù)代表該數(shù)據(jù)包所屬的需要傳輸數(shù)據(jù)分包后形成的子包的個數(shù);子包序號代表該數(shù)據(jù)包所屬的需要傳輸數(shù)據(jù)分包后形成的子包群中的排序號;信息頭代表傳輸?shù)男畔㈩愋途幋a。利用該數(shù)據(jù)結(jié)構(gòu)即可編制任意長度數(shù)據(jù)的傳輸程序,而且能夠保證數(shù)據(jù)傳輸?shù)乃俣群驼_性。

          5 結(jié) 語
          應(yīng)用星的通信功能為設(shè)計(jì)了一套通信系統(tǒng),并解決了在開發(fā)中遇到的連接網(wǎng)關(guān)、網(wǎng)絡(luò)通信、數(shù)據(jù)分包等關(guān)鍵技術(shù)問題。該系統(tǒng)通信不受時(shí)間、距離、地域限制,通信能力強(qiáng),可傳輸語音、數(shù)據(jù)、圖像等信息。系統(tǒng)造價(jià)低及開發(fā)風(fēng)險(xiǎn)低,因此具有廣泛的應(yīng)用前景。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();