欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?

文檔序號:7798820閱讀:410來源:國知局
一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?br> 【專利摘要】本發(fā)明涉及ZigBee【技術領域】,具體為一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?。所述方法由分組方法和重組方法兩部分組成;對于發(fā)送數(shù)據(jù)方來說,通過直接調用本發(fā)明的分組傳輸接口就可以發(fā)送大數(shù)據(jù),屏蔽ZigBee底層發(fā)送機制。本發(fā)明能將多個數(shù)據(jù)包同時發(fā)送,下一個數(shù)據(jù)包啟動分組發(fā)送不受上一個數(shù)據(jù)包發(fā)送是否結束的影響。本發(fā)明采用自定義的分組傳輸技術,可更靈活地利用ZigBee來發(fā)送大數(shù)據(jù)。發(fā)送端可以發(fā)送的最大數(shù)據(jù)包長為10368B。若將7位目的分組標號擴展為15位目的分組標號,一個ZigBee包包含最大數(shù)據(jù)為2621440B。本發(fā)明根據(jù)當前網絡狀態(tài)來動態(tài)設定當前發(fā)送幀的超時時間。對于接收數(shù)據(jù)方來說,通過ZigBee幀頭部信息和分組頭部信息進行重組,不需要考慮接收的幀的順序。
【專利說明】—種Z i gBee數(shù)據(jù)傳輸?shù)姆椒?br> 【技術領域】
[0001]本發(fā)明涉及ZigBee【技術領域】,具體為一種ZigBee數(shù)據(jù)傳輸?shù)姆椒??!颈尘凹夹g】
[0002]ZigBee技術是一種短距離、低功耗的無線通信技術。其特點是近距離、低復雜度、自組織、低功耗、低數(shù)據(jù)速率、低成本,適用于自動控制和遠程控制領域,可以嵌入各種設備,滿足低成本、低功耗無線傳感器網絡的需求。
[0003]當應用程序在傳送數(shù)據(jù)時,除去ZigBee協(xié)議開銷后,每幀可攜帶的有效負荷最大長度為84字節(jié)。在ZigBee協(xié)議中,提供了分組傳輸機制,在該分組傳輸機制中,API發(fā)送幀最多可包含255個字節(jié)的數(shù)據(jù),這將被分成多個分組,并在接收側重組。如果接收側沒有收到其中的一個或多個分組,接收器將丟棄整個數(shù)據(jù),并且向發(fā)送側反饋一個傳輸失敗的API幀。
[0004]現(xiàn)有技術ZigBee協(xié)議提供的分組傳輸方法存在如下技術缺陷:API發(fā)送幀最多只能傳輸最多255個字節(jié)的數(shù)據(jù);傳輸當中若存在一個或者多個分組接收失敗,接收器將丟棄整個數(shù)據(jù),故數(shù)據(jù)通信的可靠性和傳輸效率比較低。
[0005]中國專利“CN101860423 —種協(xié)議分組傳輸?shù)闹貍鞣椒ê脱b置”提供了一種協(xié)議分組傳輸?shù)闹貍鞣椒ê脱b置。發(fā)送方依次發(fā)送其傳輸窗口內的數(shù)據(jù)塊,每發(fā)送完一塊數(shù)據(jù)塊,就啟動幀間定時器,在延時設定的時間后,再接著發(fā)送下一塊,直到窗口內所有數(shù)據(jù)塊被發(fā)送完。數(shù)據(jù)塊也可稱為分組。當傳輸窗口內所有數(shù)據(jù)塊發(fā)送完以后,發(fā)送啟動第一個超時定時器。若在第一個超時定時器溢出時仍然沒有收到對已發(fā)送分組的確認巾貞,則生成一個請求確認幀并發(fā)送至接收方,同時啟動第二個超時定時器。若第二個超時定時器溢出前收到確認幀,判斷確認幀是否有效,確認有效后,根據(jù)確認幀攜帶的確認信息的指示,重傳已發(fā)送分組中未被接收方正確接收的分組。若在第二個超時定時器溢出前仍然沒有收到確認幀,則重傳請求確認幀。
[0006]中國專利“CN101860423所述的技術方案在發(fā)送失敗時,需啟動兩個定時器,并需要再重發(fā)一次請求確認幀,增加發(fā)送次數(shù),延長發(fā)送時間。此外,需要等待上一個窗口發(fā)送成功才能發(fā)送下一個窗口,這樣極大地降低了信道的使用率。

【發(fā)明內容】

[0007](一)要解決的技術問題
[0008]本發(fā)明的目的為提出一種既能提高數(shù)據(jù)傳輸?shù)目煽啃?,又能避免重發(fā)請求確認幀的分組傳輸?shù)姆椒ā?br> [0009]對于發(fā)送數(shù)據(jù)方來說,本發(fā)明所述方法通過直接調用分組傳輸接口發(fā)送大數(shù)據(jù),屏蔽ZigBee底層發(fā)送機制。本發(fā)明所述方法能將多個數(shù)據(jù)包同時發(fā)送,下一個數(shù)據(jù)包是否啟動分組發(fā)送不受上一個數(shù)據(jù)包發(fā)送是否結束的約束。針對采用ZigBee模塊自帶的分包重組協(xié)議發(fā)送端發(fā)送的最大數(shù)據(jù)包長為255B這一技術問題,本發(fā)明采用自定義的分組傳輸技術,可更靈活地利用ZigBee來發(fā)送大數(shù)據(jù),發(fā)送端發(fā)送的最大數(shù)據(jù)包長為10368B。針對現(xiàn)有技術中超時時間設為固定值時無法適應由于網絡規(guī)模的大小導致傳輸速率快慢的變化這一技術問題,本發(fā)明所述方法根據(jù)當前網絡狀態(tài)來動態(tài)設定當前發(fā)送幀的超時時間。當網絡規(guī)模大時,傳輸速率慢,超時時間設定為一個較大值;當網絡規(guī)模小時,傳輸速率快,超時時間設定為一個較小值。
[0010]對于接收數(shù)據(jù)方來說,本發(fā)明所述方法通過ZigBee幀頭部信息和分組頭部信息進行重組,不需要考慮接收的幀的順序。
[0011](二)技術方案
[0012]為了解決上述技術問題,本發(fā)明提供了
[0013]一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?,其特征為,所述方法由分組方法和重組方法兩部分組成;所述分組方法使用=ZigBee包、ZigBee巾貞格式、ZigBee模塊和ZigBee協(xié)議;所述分組方法中ZigBee巾貞協(xié)議由定界符、長度、負載和校驗組成;所述ZigBee巾貞格式為依照ZigBee幀協(xié)議形成的數(shù)據(jù)格式;所述負載包括有效負荷;所述有效負荷中插入分組發(fā)送的標志字段,所述標志字段由分包標號、結束分組標志位和分組標號組成;
[0014]所述分組方法步驟如下:
[0015](I)將ZigBee包分為η個分組;
[0016](2)填充所述有效負荷;
[0017](3)將每個所述有效負荷填充ZigBee協(xié)議規(guī)定的幀開銷并封裝為ZigBee幀格式,得到封裝完的ZigBee幀;
[0018](4)將所述封裝完的ZigBee幀添加到發(fā)送緩存中準備發(fā)送;
[0019](5)發(fā)送完所述封裝完的ZigBee巾貞的同時將所述ZigBee巾貞添加到已發(fā)送列表中,
等待應答信息;
[0020](6)根據(jù)接收ZigBee模塊的應答幀和發(fā)送超時判斷分組發(fā)送成功或失??;
[0021 ] 所述重組方法步驟如下:
[0022](I)程序啟動時創(chuàng)建接收線程和接收監(jiān)控線程;
[0023](2)當所述接收監(jiān)控線程接收到一個ZigBee巾貞后,所述接收線程解析其ZigBee中貞頭部信息和分組頭部信息,獲取64位目的節(jié)點物理地址、分包標號、分組標志和結束分組標志位;
[0024](3)根據(jù)64位目的節(jié)點物理地址和分包標號查找已接收的數(shù)據(jù)包列表,獲取所述數(shù)據(jù)包的接收情況;
[0025](4)如果沒有找到對應的所述數(shù)據(jù)包,說明這是一個新數(shù)據(jù)包,創(chuàng)建所述新數(shù)據(jù)包的信息,把所述新數(shù)據(jù)包也添加到已接收包列表中,并將所述接收監(jiān)控線程接當前接收到的ZigBee幀的分組也添加到所述新數(shù)據(jù)包中;
[0026](5)如果已找到對應的所述數(shù)據(jù)包,若所述數(shù)據(jù)包中已經存在與當前接收到的ZigBee幀的分組標志相同的分組,則丟棄當前接收到的ZigBee幀;若所述數(shù)據(jù)包中不存在與當前接收到的ZigBee巾貞的分組標志相同的分組,則添加當前接收到的ZigBee巾貞的分組到所述數(shù)據(jù)包的分組列表中,并將已接收分組數(shù)加I ;
[0027](6)設置最后一次接收時間為當前時間,用于超時處理,并判斷結束分組標志位是否為I ;當結束分組標志位為I時,將所述數(shù)據(jù)包的分組數(shù)設置為該分組標志加I ;當結束分組標志位為O時,繼續(xù)等待接收分組;
[0028](7)判斷已接收分組數(shù)是否等于所述數(shù)據(jù)包的分組數(shù);如不相等,分組接收沒有結束,還需繼續(xù)等待;若相等,則所述數(shù)據(jù)包接收完畢,對該包的所有分組進行接收重組;
[0029](8)接收監(jiān)控線程也在定時輪詢方式執(zhí)行,若已接收列表中的包接收下一個分組的已等待時間超過接收超時時間,則判斷所述數(shù)據(jù)包接收失敗,把所述數(shù)據(jù)包從已接收列表中刪除。
[0030]優(yōu)選地,所述負載由幀類型、分組標志、64位目的節(jié)點物理地址、16位目的節(jié)點網絡地址、廣播深度、發(fā)送選項和有效負荷組成;所述有效負荷由標志字段和數(shù)據(jù)組成;所述標志字段共3個字節(jié);所述標志字段由16位目的分包標號、I位目的結束分組標志位和7位目的分組標號組成;所述傳輸?shù)膫鬏攲ο鬄閆igBee包,所述分包標號所標識的對象為ZigBee包分組后的數(shù)據(jù)包;所述結束分組標志位結合所述分組標號用于獲取ZigBee包所包含的分組數(shù)量;所述分組方法包括ZigBee模塊串口,在ZigBee模塊串口中設置硬件流控。
[0031]優(yōu)選地,所述16位目的分包標號用于標識ZigBee模塊的ZigBee分包標號;所述I位目的結束分組標志位中O表示所述ZigBee分組不是最后一個分組,I表示所述ZigBee分組是最后一個分組;所述分組標號用于對分組進行排序,接收方按照所述分組標志位進行重組數(shù)據(jù)。
[0032]優(yōu)選地,一個所述ZigBee包最大分組為128個,一個所述ZigBee包包含最大數(shù)據(jù)為10368B;將所述7位目的分組標號擴展為15位目的分組標號,一個所述ZigBee包包含最大數(shù)據(jù)為2621440B。
[0033]優(yōu)選地,所述硬件流控在ZigBee模塊數(shù)據(jù)處理超負荷時通知本端設備停止向ZigBee模塊發(fā)送數(shù)據(jù);當ZigBee模塊可利用資源空閑時所述硬件流控通知本端設備向ZigBee模塊發(fā)送數(shù)據(jù)。
[0034]優(yōu)選地,所述重組方法第(7)步中采用的接收重組步驟如下:
[0035](I)計算出數(shù)據(jù)的總長度,遍歷該包下的各個分組,把每個分組的長度進行相加,得出總長度;
[0036](2)依照總長度大小分配用于存儲數(shù)據(jù)的緩存空間;
[0037](3)把該包的分組按照分組標號的大小進行從小到大排序并根據(jù)排序依次把各個分組的數(shù)據(jù)拷入緩存空間;
[0038](4)把該包從已接收列表中刪除;
[0039](5)把數(shù)據(jù)交給上層應用進行處理。
[0040](三)有益效果
[0041]本發(fā)明通過在ZigBee幀中插入自定義的標志字段,共3個字節(jié):分包標號、分組標號和結束分組標志位,將超過ZigBee幀的最大長度有效負荷(84字節(jié))的數(shù)據(jù)進行分組發(fā)送。針對現(xiàn)有技術采用ZigBee模塊自帶的分包重組協(xié)議,發(fā)送端發(fā)送的最大數(shù)據(jù)包長為255B,本發(fā)明所述方法采用自定義的分組傳輸技術,可更靈活地利用ZigBee來發(fā)送大數(shù)據(jù),發(fā)送端發(fā)送的最大數(shù)據(jù)包長為10368B。同時,在ZigBee模塊串口中設置硬件流控,使得每個ZigBee幀都能根據(jù)流控調節(jié)及時發(fā)送出去,不需要延時等待或超時設定,也有效地防止瞬間大量數(shù)據(jù)對ZigBee網絡帶來的沖擊,確保網絡高效而穩(wěn)定。
[0042]對于發(fā)送數(shù)據(jù)方來說,針對現(xiàn)有技術每次發(fā)送大數(shù)據(jù)都要考慮數(shù)據(jù)需要分成多少個幀,本發(fā)明所述方發(fā)通過直接調用本發(fā)明的分組傳輸接口就可以發(fā)送大數(shù)據(jù),屏蔽ZigBee底層發(fā)送機制。
[0043]針對現(xiàn)有技術中發(fā)送超時時間設為固定值時,無法適應由于網絡規(guī)模的大小導致傳輸速率快慢的變化,本發(fā)明所述方法根據(jù)當前網絡狀態(tài)來動態(tài)設定當前發(fā)送幀的超時時間。當網絡規(guī)模大時,傳輸速率慢,超時時間設定為一個較大值;當網絡規(guī)模小時,傳輸速率快,超時時間設定為一個較小值。
[0044]對于接收數(shù)據(jù)方來說,針對現(xiàn)有技術重組時需要考慮接收的幀的順序,本發(fā)明所述方發(fā)通過ZigBee幀頭部信息和分組頭部信息進行重組。本發(fā)明根據(jù)接收ZigBee模塊的應答幀和發(fā)送超時判斷來判斷分組發(fā)送是否成功。本發(fā)送可單獨判斷每一個發(fā)送分組是否發(fā)送成功,如果發(fā)送超時或者失敗,不需要像中國專利“CN101860423 —種協(xié)議分組傳輸?shù)闹貍鞣椒ê脱b置” 一樣,再次發(fā)送請求確認幀后至接收方來確認哪個數(shù)據(jù)塊發(fā)送失敗。
[0045]接收方解析出ZigBee幀頭部信息和分組頭部信息,根據(jù)64位目的節(jié)點物理地址、分包標號、分組標號和結束分組標志位進行接收重組,這樣使得接收方不必考慮接收幀的順序,即接收到ZigBee幀不需要根據(jù)分組標號進行順序接收,有效防止出現(xiàn)網絡異常導致ZigBee幀沒有按照順序傳輸?shù)浇邮辗降那闆r。
[0046]當ZigBee包中的某一個或者多個分組沒有接收成功時,如果超過接收超時時間(接收超時時間必須大于發(fā)送次數(shù)最大值*平均發(fā)送超時時間,如超過40臺網絡時設定為90s),則判斷該包接收失敗,把該包從已接收列表中刪除。這樣使得接收方不必為某一個分組接收失敗而超長時間等待。針對中國專利“CN101860423 —種協(xié)議分組傳輸?shù)闹貍鞣椒ê脱b置”需要等待上一個傳輸窗口內所有數(shù)據(jù)塊發(fā)送完后,才能發(fā)送下一個傳輸窗口,本發(fā)明所述方法可多個數(shù)據(jù)包同時發(fā)送,下一個數(shù)據(jù)包是否啟動分組發(fā)送不受上一個數(shù)據(jù)包是否發(fā)送結束的約束。
【專利附圖】

【附圖說明】
[0047]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0048]圖1是根據(jù)本發(fā)明一種ZigBee數(shù)據(jù)傳輸?shù)姆椒ㄒ粋€實施例的插入分組標志的幀結構示意圖;
[0049]圖2是根據(jù)本發(fā)明一種ZigBee數(shù)據(jù)傳輸?shù)姆椒ㄒ粋€實施例的分組示意圖;
[0050]圖3是根據(jù)本發(fā)明一種ZigBee數(shù)據(jù)傳輸?shù)姆椒ㄒ粋€實施例的發(fā)送幀示意圖;
[0051]圖4是根據(jù)本發(fā)明一種ZigBee數(shù)據(jù)傳輸?shù)姆椒ㄒ粋€實施例的超時重傳示意圖。
[0052]圖中:Frame Type:巾貞類型;Frame ID:分組標志;64-bit Destination Addr:64位目的節(jié)點物理地址;16-bit Destination Addr:16位目的節(jié)點網絡地址!BroadcastRadius:廣播深度;0ptions:發(fā)送選項,RF Data:有效負荷。
【具體實施方式】
[0053]下面結合說明書附圖和實施例,對本發(fā)明的【具體實施方式】作進一步詳細描述。以下實施例僅用于說明本發(fā)明,但不能用來限制本發(fā)明的范圍。[0054]本發(fā)明分為兩個部分:分組方法和重組方法。
[0055]分組方法:
[0056]圖1所示,ZigBee幀結構包括定界符、長度、負載、校驗,其中負載包括:幀類型、分組標志、64位目的節(jié)點物理地址、16位目的節(jié)點網絡地址、廣播深度、發(fā)送選項、有效負荷。除了有效負荷之外的字段,都是ZigBee幀攜帶的必要開銷。
[0057]本發(fā)明在有效負荷中插入分組發(fā)送的標志字段,共3個字節(jié),包括:
[0058](I) 16bit的分包標號,標識了 ZigBee模塊的ZigBee分包標號。
[0059](2) Ibit的結束分組標志位,O表示該分組不是最后一個分組,I表示該分組是最后一個分組,這樣可以結合下面的分組ID來獲取該包所包含的分組數(shù)量。
[0060](3)7bit的分組標號,用來對分組進行排序,接收方按照分組ID進行重組數(shù)據(jù)。一個包最大分組為128個(0x0?0x7F)。因此對于一個ZigBee包所能包含的最大數(shù)據(jù)為(84-3)B*128=10368B,大約為10KB。相比ZigBee自帶的分組協(xié)議最大傳輸為255B,本發(fā)明的分組協(xié)議最大傳輸長度可到達IOKB左右,這對于一般的嵌入式應用已經是足夠的。注:如果需要傳輸更大數(shù)據(jù),可將分組標號擴展為15bit,這樣最大傳輸長度將可達到(84-4)B*32768=2621440B。
[0061]給定一個長度為length的發(fā)送數(shù)據(jù)包。假設ZigBee幀能發(fā)送的有效負荷最大長度為max_send,則采用分組后,能發(fā)送的最大長度為max_send_frag=max_send-3,即去掉上述的頭部信息,共3個字節(jié)。
[0062]將發(fā)送數(shù)據(jù)包分為η個分組:n=[length/max_send_frag]向上取整數(shù)。例如,當length 為 1000B, max_send_frag 為 81B,貝丨J η 為 13,即分為 13 個分組。
[0063]前(η-1)個分組的有效負荷長度均為max_send_frag,最后一個分組有效負荷長度為 length-(n_l)氺max_send_frag。
[0064]圖2所示,填充有效負荷步驟如下:
[0065](I)將前(η-1)個分組的結束分組標志位寫0,分組標號分別寫入
O,I, 2,, (n-2);
[0066](2)將最后一個分組的結束分組標志位寫1,分組標號寫入(η-1);
[0067](3)將這η個分組的分包標號寫為(已發(fā)送的包數(shù)量+1);
[0068](4)將數(shù)據(jù)data按照順序填充到各個frag分組中。
[0069]當每個分組的有效負荷填充完成后,將每個有效負荷填充ZigBee協(xié)議規(guī)定的幀開銷,封裝成為ZigBee幀格式。ZigBee幀開銷需要對長度、幀類型、分組標志、64位目的節(jié)點物理地址、16位目的節(jié)點網絡地址、廣播深度、發(fā)送選項進行賦值。分組標志結合16位目的節(jié)點網絡地址來定位發(fā)送的幀,在一定時間內必須確保分組標志值的唯一性,分組標志值根據(jù)上一次分配的值加I后模255來分配,因為分組標志為O則設置為不需要應答故分組標志若被分配到O則需再次分配。
[0070]ZigBee幀封裝完后即可添加到發(fā)送緩存中準備發(fā)送出去。發(fā)送結束的同時將發(fā)送幀添加到已發(fā)送列表中,并等待應答信息。
[0071]圖3所示,每兩個幀之間存在幀間隙,即時間片段,其作用是使介質中的信號處于穩(wěn)定狀態(tài),同時讓接收端對接收的幀作相應處理。Digi公司對XBee PRO模塊的IFG建議是IOOms0此外,在ZigBee模塊串口中設置硬件流控。當ZigBee模塊數(shù)據(jù)處理超負荷時,硬件流控通知本端設備停止往ZigBee模塊發(fā)送數(shù)據(jù)。待ZigBee模塊數(shù)據(jù)處理完畢,可以接收更多數(shù)據(jù)時,硬件流控通知本端設備繼續(xù)發(fā)送數(shù)據(jù)。由硬件流控進行調節(jié),使ZigBee模塊對每個幀都能及時處理,避免了規(guī)定每兩幀之間的幀間隙。ZigBee模塊連續(xù)發(fā)送分組時不需要設置傳輸窗口。
[0072]判斷分組發(fā)送成功或失敗根據(jù)接收ZigBee模塊的應答幀和發(fā)送超時判斷。
[0073]接收Zigbee模塊的應答巾貞:接收方接收到Zigbee巾貞后,ZigBee模塊會自動反饋應答幀給發(fā)送方。發(fā)送方獲取該幀的16位目的節(jié)點網絡地址、分組標志以及發(fā)送狀態(tài)。根據(jù)16位目的節(jié)點網絡地址和分組標志查找已發(fā)送列表中的分組,如果查找不到該分組,說明該分組已經被判斷超時了(見下述超時判斷),則丟棄該應答幀,不進行任何處理。如果查找到該分組,則從已發(fā)送列表中刪除該分組,并根據(jù)發(fā)送狀態(tài)的值來判斷該分組是否發(fā)送成功。
[0074]圖4所示在超過超時時間,沒有收到B的應答巾貞或者應答巾貞反饋發(fā)送失敗,則啟動超時重傳,重新發(fā)送Fl幀,直到收到接收方應答幀反饋成功后,才從發(fā)送列表中刪除Fl幀。
[0075]1、當發(fā)送狀態(tài)的值為O時,則表明發(fā)送成功,根據(jù)公式I來計算該分組的發(fā)送時間,公式2計算分組發(fā)送平均時間,公式3計算分組加權發(fā)送時間,以便用于發(fā)送超時判斷。初始化時,將上次分組發(fā)送平均時間和最近一次分組發(fā)送時間設置為一個較大值,可根據(jù)網絡設備節(jié)點的多少進行設置,如超過40臺組網通信時,將上次分組發(fā)送平均時間和最近一次分組發(fā)送時間的初始值可設置為10s。
[0076]分組發(fā)送時間=確認幀接收時間戳-分組發(fā)送時間戳(公式I)
[0077]分組發(fā)送平均時間=(n*上次分組發(fā)送平均時間+最近一次分組發(fā)送時間)/(n+l)(公式2)
[0078]其中η為已發(fā)送成功的次數(shù)。
[0079]分組加權發(fā)送時間=(1-α )*分組發(fā)送平均時間+α*最近一次分組發(fā)送時間(公式3)
[0080]其中α為計算因子。本案例取0.6,即最近一次分組發(fā)送時間比分組發(fā)送平均時間的影響因子要大些。
[0081]2、當發(fā)送狀態(tài)的值不為O時,則認為發(fā)送失敗,按照以下步驟進行重發(fā)操作:
[0082]( I)發(fā)送失敗次數(shù)加I ;
[0083](2)判讀失敗次數(shù)是否超過發(fā)送次數(shù)最大值(發(fā)送次數(shù)最大值可由用戶自設定),超過最大值,則判定該分組發(fā)送失敗;
[0084](3)未超過發(fā)送次數(shù)最大值,則重新分配分組標志,并再次嘗試發(fā)送該分組,發(fā)送完畢后把分組添加到已發(fā)送列表中;
[0085]超時判斷:程序啟動時創(chuàng)建一個發(fā)送監(jiān)控線程,該線程主要定時監(jiān)控發(fā)送列表中的分組,用于掃描判斷各個分組發(fā)送是否超時,定時時間可設置為I秒,也可由用戶根據(jù)ZigBee組網設備規(guī)模來確定。
[0086]本發(fā)明根據(jù)當前網絡狀態(tài)來動態(tài)判斷各個分組發(fā)送是否超時:
[0087]分組發(fā)送超時時間=3* (分組加權發(fā)送時間)(公式4)
[0088]公式4表明分組發(fā)送超時時間是分組加權發(fā)送時間的3倍。其中分組加權發(fā)送時間由公式3給出,即分組發(fā)送平均時間、最近一次分組發(fā)送時間和計算因子α這三個因素來確定。當α取值為0.6時,則表明最近一次分組發(fā)送時間的影響因素大于分組發(fā)送平均時間。如果當前ZigBee網絡速率變慢時,最近一次分組發(fā)送時間比分組發(fā)送平均時間大,則分組發(fā)送超時時間也會變大。如果當前ZigBee網絡速率變快時,最近一次分組發(fā)送時間比分組發(fā)送平均時間小,則分組發(fā)送超時時間也會變小。這樣使得分組發(fā)送超時時間能夠動態(tài)設定以適應網絡速率的變化。
[0089]分組發(fā)送等待時間=當前時間-分組發(fā)送時間戳(公式5)
[0090]當公式5的分組發(fā)送等待時間大于公式4的分組發(fā)送超時時間,則認為分組發(fā)送失敗,把分組從發(fā)送列表中刪除,并按以下步驟進行重發(fā)操作:
[0091 ] (I)發(fā)送失敗次數(shù)加I ;
[0092](2)判讀失敗次數(shù)是否超過發(fā)送次數(shù)最大值,超過最大值,則判定該分組發(fā)送失??;
[0093](3)未超過發(fā)送次數(shù)最大值,則重新分配分組標志,并再次嘗試發(fā)送該分組,發(fā)送完畢后把分組添加到已發(fā)送列表中。
[0094]第二部分:重組方法
[0095]程序啟動時創(chuàng)建接收線程和接收監(jiān)控線程。當接收到ZigBee巾貞時,接收線程用于接收重組。接收監(jiān)控線程用于判斷接收的包是否超時,當接收一個包含多個分組的包時,可能存在其中一個或者多個分組發(fā)送失敗的情況,此時接收方就接收不到發(fā)送失敗的分組,因此需要引入超時判斷功能來決定該包是否接收失敗。接收監(jiān)控線程定時時間設置為IOs的定時檢查,檢查包是否接收失敗。
[0096]當接收方接收到一個ZigBee巾貞后,接收線程解析其ZigBee巾貞頭部信息和分組頭部信息,獲取64位目的節(jié)點物理地址、分包標號、分組標號和結束分組標志位。根據(jù)64位目的節(jié)點物理地址和分包標號查找已接收的數(shù)據(jù)包列表,獲取所述數(shù)據(jù)包的接收情況。按照以下步驟進行處理:
[0097](I)如果沒有找到對應的包,說明這是一個新包,就創(chuàng)建該新包的信息,把該新包也添加到已接收包列表中,并該接收方接收到的ZigBee巾貞的分組添加到該新包中。繼續(xù)往下執(zhí)行。
[0098](2)如果已找到對應的包,存在以下兩種情況:
[0099]若所述數(shù)據(jù)包中已經存在與當前接收到的ZigBee幀的分組標志相同的分組,說明已經接收過當前接收到的ZigBee巾貞,貝U丟棄當前接收到的ZigBee巾貞;
[0100]若所述數(shù)據(jù)包中不存在與當前接收到的ZigBee幀的分組標志相同的分組,則添加當前接收到的ZigBee幀的分組到所述數(shù)據(jù)包的分組列表中,并將已接收分組數(shù)加I。
[0101](3)計算當前接收到的ZigBee幀的分組中數(shù)據(jù)的長度,并將數(shù)據(jù)存到該包的分組鏈表中。
[0102](4)設置最后一次接收時間為當前時間,用于超時處理。并判斷結束分組標志位是否為I。
[0103]當結束分組標志位為1,則置該包的分組數(shù)設置為
[0104]分組數(shù)=(分組標號+1),(公式6)
[0105]注:分組標號是從O開始計數(shù)。
[0106]當結束分組標志位為0,則說明該分組不是最后一個分組,繼續(xù)等待接收幀。[0107](5)判斷已接收分組數(shù)是否等于所述數(shù)據(jù)包的分組數(shù)。如果不相等,分組接收沒有結束,還需繼續(xù)等待。
[0108]如果相等,則所述數(shù)據(jù)包接收完畢,然后對該包的所有分組進行接收重組。重組步驟如下:
[0109](I)計算出數(shù)據(jù)的總長度。遍歷所述數(shù)據(jù)包下的各個分組,把每個分組的長度進行相加,得出總長度。
[0110](2)分配大小為總長度用于存儲數(shù)據(jù)的緩存空間。
[0111](3)把所述數(shù)據(jù)包的分組按照分組標號的大小進行從小到大排序,然后根據(jù)排序依次把各個分組的數(shù)據(jù)拷入到緩存空間。
[0112](4)把該包從已接收列表中刪除。
[0113](5)把數(shù)據(jù)交給上層應用進行處理。
[0114]與此同時,接收監(jiān)控線程也在定時輪詢方式執(zhí)行。如果已接收列表中的包接收下一個分組的已等待時間超過接收超時時間(接收超時時間可有用戶根據(jù)網絡大小設定,如超過40臺時可設定90s),貝U判斷該包接收失敗,把該包從已接收列表中刪除。
[0115]已等待時間=當前時間-最近該包的分組接收時間(公式7)
[0116]以上實施方式僅用于說明本發(fā)明,而非對本發(fā)明的限制。盡管參照實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解,對本發(fā)明的技術方案進行各種組合、修改或者等同替換,都不脫離本發(fā)明技術方案的精神和范圍,均應涵蓋在本發(fā)明的權利要求范圍當中。
【權利要求】
1.一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?,其特征為,所述方法由分組方法和重組方法兩部分組成;所述分組方法使用:ZigBee包、ZigBee幀格式、ZigBee模塊和ZigBee協(xié)議;所述分組方法中ZigBee幀協(xié)議由定界符、長度、負載和校驗組成;所述ZigBee幀格式為依照ZigBee幀協(xié)議形成的數(shù)據(jù)格式;所述負載包括有效負荷;所述有效負荷中插入分組發(fā)送的標志字段,所述標志字段由分包標號、結束分組標志位和分組標號組成; 所述分組方法步驟如下: (1)將ZigBee包分為η個分組; (2)填充所述有效負荷; (3)將每個所述有效負荷填充ZigBee協(xié)議規(guī)定的幀開銷并封裝為ZigBee幀格式,得到封裝完的ZigBee幀; (4)將所述封裝完的ZigBee幀添加到發(fā)送緩存中準備發(fā)送; (5)發(fā)送完所述封裝完的ZigBee幀的同時將所述ZigBee幀添加到已發(fā)送列表中,等待應答信息; (6)根據(jù)接收ZigBee模塊的應答幀和發(fā)送超時判斷分組發(fā)送成功或失敗; 所述重組方法步驟如下: (1)程序啟動時創(chuàng)建接收線程和接收監(jiān)控線程; (2)當所述接收監(jiān)控線程接收到一個ZigBee幀后,所述接收線程解析其ZigBee幀頭部信息和分組頭部信息,獲取64位目的節(jié)點物理地址、分包標號、分組標志和結束分組標志位; (3)根據(jù)64位目的節(jié)點物理地址和分包標號查找已接收的數(shù)據(jù)包列表,獲取所述數(shù)據(jù)包的接收情況; (4)如果沒有找到對應的所述數(shù)據(jù)包,說明這是一個新數(shù)據(jù)包,創(chuàng)建所述新數(shù)據(jù)包的信息,把所述新數(shù)據(jù)包也添加到已接收包列表中,并將所述接收監(jiān)控線程接當前接收到的ZigBee幀的分組也添加到所述新數(shù)據(jù)包中; (5)如果已找到對應的所述數(shù)據(jù)包,若所述數(shù)據(jù)包中已經存在與當前接收到的ZigBee幀的分組標志相同的分組,則丟棄當前接收到的ZigBee幀;若所述數(shù)據(jù)包中不存在與當前接收到的ZigBee幀的分組標志相同的分組,則添加當前接收到的ZigBee幀的分組到所述數(shù)據(jù)包的分組列表中,并將已接收分組數(shù)加I ; (6)設置最后一次接收時間為當前時間,用于超時處理,并判斷結束分組標志位是否為I ;當結束分組標志位為I時,將所述數(shù)據(jù)包的分組數(shù)設置為該分組標志加I ;當結束分組標志位為O時,繼續(xù)等待接收分組; (7)判斷已接收分組數(shù)是否等于所述數(shù)據(jù)包的分組數(shù);如不相等,分組接收沒有結束,還需繼續(xù)等待;若相等,則所述數(shù)據(jù)包接收完畢,對該包的所有分組進行接收重組; (8)接收監(jiān)控線程也在定時輪詢方式執(zhí)行,若已接收列表中的包接收下一個分組的已等待時間超過接收超時時間,則判斷所述數(shù)據(jù)包接收失敗,把所述數(shù)據(jù)包從已接收列表中刪除。
2.根據(jù)權利要求1所述的一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?,其特征在于,所述負載由幀類型、分組標志、64位目的節(jié)點物理地址、16位目的節(jié)點網絡地址、廣播深度、發(fā)送選項和有效負荷組成;所述有效負荷由標志字段和數(shù)據(jù)組成;所述標志字段共3個字節(jié);所述標志字段由16位目的分包標號、I位目的結束分組標志位和7位目的分組標號組成;所述傳輸?shù)膫鬏攲ο鬄閆igBee包,所述分包標號所標識的對象為ZigBee包分組后的數(shù)據(jù)包;所述結束分組標志位結合所述分組標號用于獲取ZigBee包所包含的分組數(shù)量;所述分組方法包括ZigBee模塊串口,在ZigBee模塊串口中設置硬件流控。
3.根據(jù)權利要求2所述的一種ZigBee數(shù)據(jù)傳輸?shù)姆椒ǎ涮卣髟谟?,所?6位目的分包標號用于標識ZigBee模塊的ZigBee分包標號;所述I位目的結束分組標志位中O表不所述ZigBee分組不是最后一個分組,I表示所述ZigBee分組是最后一個分組;所述分組標號用于對分組進行排序,接收方按照所述分組標志位進行重組數(shù)據(jù)。
4.根據(jù)權利要求3所述的一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?其特征在于,一個所述ZigBee包最大分組為128個,一個所述ZigBee包包含最大數(shù)據(jù)為10368B ;將所述7位目的分組標號擴展為15位目的分組標號,一個所述ZigBee包包含最大數(shù)據(jù)為2621440B。
5.根據(jù)權利要求4所述的一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?,其特征在于,所述硬件流控在ZigBee模塊數(shù)據(jù)處理超負荷時通知本端設備停止向ZigBee模塊發(fā)送數(shù)據(jù);當ZigBee模塊可利用資源空閑時所述硬件流控通知本端設備向ZigBee模塊發(fā)送數(shù)據(jù)。
6.根據(jù)權利要求1~5項中任一項所述的一種ZigBee數(shù)據(jù)傳輸?shù)姆椒?,其特征在于,所述重組方法第(7)步中采用的接收重組步驟如下: (1)計算出數(shù)據(jù)的總長度,遍歷該包下的各個分組,把每個分組的長度進行相加,得出總長度; (2)依 照總長度大小分配用于存儲數(shù)據(jù)的緩存空間; (3)把該包的分組按照分組標號的大小進行從小到大排序并根據(jù)排序依次把各個分組的數(shù)據(jù)拷入緩存空間; (4)把該包從已接收列表中刪除; (5)把數(shù)據(jù)交給上層應用進行處理。
【文檔編號】H04L1/00GK103944880SQ201410092532
【公開日】2014年7月23日 申請日期:2014年3月13日 優(yōu)先權日:2014年3月13日
【發(fā)明者】席小鷺, 吳宏, 姚紅春, 仇潔婷, 陳儒軍 申請人:湖南強軍科技有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
汾阳市| 泰顺县| 长治市| 久治县| 永胜县| 灌南县| 攀枝花市| 全椒县| 信宜市| 贡觉县| 雷州市| 三台县| 上杭县| 崇明县| 苏尼特左旗| 灵丘县| 隆德县| 句容市| 六盘水市| 宜阳县| 贵定县| 扶沟县| 隆德县| 连山| 涞源县| 鲁山县| 孟连| 延安市| 通渭县| 长岛县| 丰镇市| 肃北| 荥经县| 海原县| 定结县| 兴义市| 溧阳市| 仲巴县| 阿鲁科尔沁旗| 思南县| 赤壁市|