本發(fā)明涉及數(shù)據(jù)采集系統(tǒng),尤其涉及到數(shù)據(jù)采集系統(tǒng)的組網(wǎng)方法。
背景技術(shù):
目前,基于數(shù)據(jù)采集目的的最后一公里的集中式網(wǎng)絡的現(xiàn)場物理拓撲為一個集中器,多個節(jié)點(一般幾百到幾千個),節(jié)點離散分布在距離集中器一公里范圍內(nèi)的每家每戶。集中器和各個節(jié)點一般采用電力線載波或者小無線技術(shù)進行通信,集中器距離最遠節(jié)點距離一般為一公里以內(nèi)。集中器分別對每個節(jié)點發(fā)起數(shù)據(jù)采集命令,節(jié)點收到命令并判讀目的地址是自身時進行應答。集中器搜集并存儲每個節(jié)點的應答,并把采集到的數(shù)據(jù)通過公網(wǎng)或者專網(wǎng)傳遞給數(shù)據(jù)主站。通常情況下集中器和遠距離的節(jié)點之間都不能直達通信,需要通過中繼節(jié)點轉(zhuǎn)發(fā)才能到達目的,地理位置分布離散的節(jié)點可互為中繼,這樣就需要構(gòu)建集中器到各個目的節(jié)點的組網(wǎng)路徑。
目前的組網(wǎng)方法一般都是集中器發(fā)起組網(wǎng)過程,逐級探索到達目的節(jié)點的路徑,當探索成功后就記憶下集中器到該目的節(jié)點的路徑,在進行數(shù)據(jù)采集時集中器就按照歷史記憶路徑去和目的節(jié)點通信。按照這種組網(wǎng)方法,集中器組網(wǎng)時間較長,并且需要記憶自身到下屬每個節(jié)點的路徑。同時,由于集中器記憶的是歷史路徑,而最后一公里的信道往往是時變的,如電力線載波信道會隨著家庭里用戶使用用電器的情況而變化,小無線信道會隨著天氣的變化而變化,所以當按照歷史記憶路徑去和目的節(jié)點通信就可能不成功,這時集中器又需要發(fā)起網(wǎng)絡維護過程去重新探索到該目的節(jié)點的路徑,如果網(wǎng)絡維護的過程頻繁又會影響到系統(tǒng)的正常數(shù)據(jù)采集過程,使得每日的數(shù)據(jù)采集成功率大大降低。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述缺陷,提出一種洪泛式組網(wǎng)的快速收斂方法,能夠大大增加集中器和各節(jié)點之間的通信成功率,并且通信可靠性也大為提高,也最大限度地降低了網(wǎng)絡維護的工作量。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:提供一種洪泛式組網(wǎng)的快速收斂方法,包括:步驟1:集中器構(gòu)建命令包的網(wǎng)絡層協(xié)議數(shù)據(jù)單元,向目標節(jié)點發(fā)出數(shù)據(jù)采集命令;步驟2:收到該命令包的節(jié)點判讀目的地址若非自身,則按照多種處理機制決定應該轉(zhuǎn)發(fā)還是丟棄該命令包,若是應該轉(zhuǎn)發(fā)該命令包,則把網(wǎng)絡層協(xié)議數(shù)據(jù)單元中的下行級數(shù)加一,置數(shù)據(jù)包為轉(zhuǎn)發(fā)包標志,轉(zhuǎn)發(fā)該命令包;若是應該丟棄,則丟棄該命令包;步驟3:收到該命令包的節(jié)點判讀目的地址若為自身,則按照某種處理機制決定是否該處理該命令包,若不處理,則丟棄該命令包;若應處理,則構(gòu)建應答包網(wǎng)絡層協(xié)議數(shù)據(jù)單元,發(fā)送應答;步驟4:收到該應答包的節(jié)點按照多種處理機制決定應該轉(zhuǎn)發(fā)還是丟棄該應答包,若是應該轉(zhuǎn)發(fā)該應答包,則把網(wǎng)絡層協(xié)議數(shù)據(jù)單元中的上行級數(shù)加一,置數(shù)據(jù)包為轉(zhuǎn)發(fā)包標志,轉(zhuǎn)發(fā)該應答包;若是應該丟棄,則丟棄該應答包;步驟5:集中器收到該應答包,則按照某種處理機制決定是否該處理該應答包,若不處理,則丟棄該應答包;若應處理,則提取需要的采集數(shù)據(jù)存儲,再執(zhí)行步驟1,發(fā)出下一條數(shù)據(jù)采集命令。
本發(fā)明的有益效果在于,可以完全自適應通信信道的變化,集中器每次和目標節(jié)點的采集通信過程同時也是一次組網(wǎng)過程,且通信路徑是動態(tài)的,當時的最優(yōu)路徑。組網(wǎng)方法中采取多種措施有效解決了網(wǎng)絡沖突和網(wǎng)絡擁塞的難點,使得每次通信可以快速收斂。通過這種組網(wǎng)方法,能夠大大增加集中器和各節(jié)點之間的通信成功率,并且通信可靠性也大為提高,也最大限度地降低了網(wǎng)絡維護的工作量。
附圖說明
下面將結(jié)合附圖及實施例對本發(fā)明作進一步說明,附圖中:
圖1為節(jié)點的數(shù)據(jù)流圖。
圖2為集中器的數(shù)據(jù)流圖。
圖3為集中器發(fā)出下行數(shù)據(jù)采集命令的過程示意圖。
圖4為收到命令的一級節(jié)點轉(zhuǎn)發(fā)的過程示意圖。
圖5為收到命令的二級節(jié)點轉(zhuǎn)發(fā),到達目的節(jié)點的過程示意圖。
圖6為目的節(jié)點發(fā)出上行應答包的過程示意圖。
圖7為收到應答包的一級節(jié)點轉(zhuǎn)發(fā)的過程示意圖。
圖8為收到應答的二級節(jié)點轉(zhuǎn)發(fā),到達集中器的過程示意圖。
圖9為洪泛式組網(wǎng)的快速收斂方法的流程圖。
圖10為集中器發(fā)送命令處理的流程圖。
圖11為節(jié)點接收下行命令處理的流程圖。
圖12為節(jié)點發(fā)送應答處理的流程圖。
圖13為節(jié)點接收上行應答處理的流程圖。
圖14為集中器接收上行應答處理的流程圖。
圖15為節(jié)點重復包檢測的流程圖。
圖16為集中器重復包檢測的流程圖。
具體實施方式
現(xiàn)結(jié)合附圖,對本發(fā)明的較佳實施例作詳細說明。
首先,描述一下本發(fā)明的數(shù)據(jù)結(jié)構(gòu)。
協(xié)議數(shù)據(jù)單元(pdu)格式描述主要包括:mac層協(xié)議數(shù)據(jù)單元(mpdu)格式描述和網(wǎng)絡層協(xié)議數(shù)據(jù)單元(npdu)格式描述兩個方面。
具體地,mpdu格式描述如下表。
length:8-bits,mpdu的長度(包括length本身),length<=255。
delta_bl:6-bits,規(guī)定提交該mpdu所產(chǎn)生的信道使用統(tǒng)計的增量,變化范圍0-63。
npdu:網(wǎng)絡層協(xié)議數(shù)據(jù)單元。
crcl,crch:從length字節(jié)開始到npdu結(jié)束的crc校驗,低字節(jié)在前。
具體地,npdu格式描述如下表。
srcrelay:1-bit,0,表示數(shù)據(jù)包為轉(zhuǎn)發(fā)包;1,表示數(shù)據(jù)包為源發(fā)送包。
updown:1-bit,上行和下行標識。0,下行包;1,上行包。
ver:4-bits,使用的應用層協(xié)議。
dwnlvl:3-bits,下行級數(shù),0-7級。
uplvl:3-bits,上行級數(shù),0-7級。
domain:48-bits,域標識,一個集中器和下屬所有節(jié)點即屬于同一個唯一域,對應集中器地址。
dstaddr:48-bits,目標地址。
tid:8-bits,事務號,關(guān)聯(lián)的下行命令和上行應答tid要相等。tid范圍1-63。
apdu:應用層協(xié)議數(shù)據(jù)單元。
參見圖1,圖1為節(jié)點的數(shù)據(jù)流圖。描述了節(jié)點上的數(shù)據(jù)在應用層180和網(wǎng)絡層190之間的移動。具體而言,包括:mac層接收緩沖區(qū)(macrxbuffer)110,mac層發(fā)送緩沖區(qū)(mactxbuffer)120,應用層接收緩沖區(qū)(apprxbuffer)130,應用層發(fā)送緩沖區(qū)(apptxbuffer)140,已處理包隊列(dealtpacqueue)150,以及轉(zhuǎn)發(fā)緩沖區(qū)(forwardbuffer)160。其中,已處理包隊列150最多容納30個已處理包。為了節(jié)省空間,一個完整的mpdu數(shù)據(jù)包移入已處理包隊列150時,只移入length、updown、ver、dwnlvl、uplvl、dstaddr、tid這幾項。圖中的箭頭表示數(shù)據(jù)包在緩沖區(qū)和隊列之間的移動。
參見圖2,圖2為集中器的數(shù)據(jù)流圖。描述了集中器上的數(shù)據(jù)在應用層280和網(wǎng)絡層290之間的移動。具體而言,包括:mac層接收緩沖區(qū)(macrxbuffer)210,mac層發(fā)送緩沖區(qū)(mactxbuffer)220,應用層接收緩沖區(qū)(apprxbuffer)230,應用層發(fā)送緩沖區(qū)(apptxbuffer)240以及已處理包隊列(dealtpacqueue)250。其中,已處理包隊列250最多容納30個已處理包。為了節(jié)省空間,一個完整的mpdu數(shù)據(jù)包移入已處理包隊列150時,只移入length、updown、ver、dwnlvl、uplvl、dstaddr、tid這幾項。圖中的箭頭表示數(shù)據(jù)包在緩沖區(qū)和隊列之間的移動。
參見圖3至圖8,示例性地呈現(xiàn)了一個洪泛式組網(wǎng)的過程,該示例假定了一個二級的組網(wǎng)網(wǎng)絡300,其包括集中器310、一級節(jié)點330、二級節(jié)點350和目標節(jié)點370。具體地,圖3為集中器發(fā)出下行數(shù)據(jù)采集命令的過程示意圖。圖4為收到命令的一級節(jié)點轉(zhuǎn)發(fā)的過程示意圖。圖5為收到命令的二級節(jié)點轉(zhuǎn)發(fā),到達目的節(jié)點的過程示意圖。圖6為目的節(jié)點發(fā)出上行應答包的過程示意圖。圖7為收到應答包的一級節(jié)點轉(zhuǎn)發(fā)的過程示意圖。圖8為收到應答的二級節(jié)點轉(zhuǎn)發(fā),到達集中器的過程示意圖。
參見圖9,圖9為洪泛式組網(wǎng)的快速收斂方法的流程圖。該方法大致包括:
步驟910、集中器構(gòu)建命令包npdu(網(wǎng)絡層協(xié)議數(shù)據(jù)單元),向目標節(jié)點發(fā)出數(shù)據(jù)采集命令;然后,轉(zhuǎn)步驟920。
步驟920、收到該命令包的節(jié)點判讀目的地址是否自身的,不是的話轉(zhuǎn)步驟930,是的話轉(zhuǎn)步驟940。
步驟930、按照多種處理機制(多種處理機制詳見圖11,包括判斷域地址是否匹配、是否重復包、下行級數(shù)是否達到最大級數(shù)、tid比較、rssi(接收信號強度)是否超限)決定應該轉(zhuǎn)發(fā)還是丟棄該命令包,若是應該轉(zhuǎn)發(fā)該命令包,則把npdu中的dwnlvl+=1、srcrelay=0(轉(zhuǎn)發(fā)包),轉(zhuǎn)發(fā)該命令包;若是應該丟棄,則丟棄該命令包;然后,轉(zhuǎn)步驟950。
步驟940、按照某種處理機制(某種處理機制詳見圖11,這個處理機制就是判斷是否重復包)決定是否該處理該命令包,若不處理,則丟棄該命令包;若應處理,則構(gòu)建應答包npdu,發(fā)送應答;然后,轉(zhuǎn)步驟950。
步驟950、收到該應答包的節(jié)點,按照多種處理機制(多種處理機制詳見圖13,包括判斷域地址是否匹配、是否重復包、上行級數(shù)是否達到最大級數(shù)、tid(事務號)比較、rssi(接收信號強度)是否超限)決定應該轉(zhuǎn)發(fā)還是丟棄該應答包,若是應該轉(zhuǎn)發(fā)該應答包,則把npdu中的uplvl+=1、srcrelay=0(轉(zhuǎn)發(fā)包),轉(zhuǎn)發(fā)該應答包;若是應該丟棄,則丟棄該應答包;然后,轉(zhuǎn)步驟960。
步驟960、集中器收到該應答包,則按照某種處理機制(某種處理機制詳見圖14,包括判斷是否下行包、域地址是否匹配、是否重復包)決定是否該處理該應答包,若不處理,則丟棄該應答包;若應處理,則提取需要的采集數(shù)據(jù)存儲;然后,轉(zhuǎn)步驟910,去發(fā)出下一條數(shù)據(jù)采集命令。
值得一提的是,下行轉(zhuǎn)發(fā)和上行轉(zhuǎn)發(fā)的最大級數(shù)可以設置。通常對于一公里范圍的現(xiàn)場網(wǎng)絡來說,下行轉(zhuǎn)發(fā)和上行轉(zhuǎn)發(fā)的最大級數(shù)缺省為7級。由于信道下行和上行的物理參數(shù)不對稱,通常每次洪泛通信成功所需的下行級數(shù)和上行級數(shù)并不相同,且參與下行轉(zhuǎn)發(fā)的節(jié)點和參與上行轉(zhuǎn)發(fā)的節(jié)點也并不相同。
參見圖10,圖10為集中器發(fā)送命令處理的流程圖。集中器發(fā)送命令處理的過程具體包括:
步驟1010、集中器儲存floodmaxtid+=1;注:floodmaxtid初始化為0。
步驟1020、判斷floodmaxtid是否>63,是的話,轉(zhuǎn)步驟1030,不是的話,轉(zhuǎn)步驟1040。
步驟1030、floodmaxtid=1,轉(zhuǎn)步驟1040。
步驟1040、構(gòu)造發(fā)送命令包npdu,放入apptxbuffer:srcrelay=1;updown=0;dwnlvl=0;uplvl=0;domain=集中器地址;dstaddr=目標節(jié)點地址;tid=floodmaxtid;然后,轉(zhuǎn)步驟1050。
步驟1050、發(fā)送命令包移入mactxbuffer,等待發(fā)送。
參見圖11,圖11為節(jié)點接收下行命令處理的流程圖。節(jié)點接收下行命令處理的過程具體包括:
步驟1101、節(jié)點macrxbuffer接收到一個下行命令包,轉(zhuǎn)步驟1103。
步驟1103、判斷目的地址是否匹配,是的話,轉(zhuǎn)步驟1105,不是的話,轉(zhuǎn)步驟1107。
步驟1105、判斷是否重復包,是的話,轉(zhuǎn)步驟1149,不是的話,轉(zhuǎn)步驟1131。
步驟1107、判斷域地址是否匹配,是的話,轉(zhuǎn)步驟1109,不是的話,轉(zhuǎn)步驟1149。
步驟1109、判斷是否重復包,是的話,轉(zhuǎn)步驟1149,不是的話,轉(zhuǎn)步驟1111。
步驟1111、判斷接受命令包dwnlvl是否>=7,是的話,轉(zhuǎn)步驟1149,不是的話,轉(zhuǎn)步驟1113。
步驟1113、判斷接收命令包tid是否大于節(jié)點儲存floodmaxtid,是的話,轉(zhuǎn)步驟1115,不是的話,轉(zhuǎn)步驟1149。
步驟1115、節(jié)點儲存floodmaxtid=接收命令包tid,轉(zhuǎn)步驟1117。
步驟1117、判斷轉(zhuǎn)發(fā)緩沖區(qū)是否有數(shù)據(jù)包,是的話,轉(zhuǎn)步驟1119,不是的話,轉(zhuǎn)步驟1121。
步驟1119、把轉(zhuǎn)發(fā)緩沖區(qū)中的數(shù)據(jù)包移入已處理包隊列,不再發(fā)送,轉(zhuǎn)步驟1121。
步驟1121、判斷mactxbuffer是否有積壓包,是的話,轉(zhuǎn)步驟1123,不是的話,轉(zhuǎn)步驟1125。
步驟1123、清除mactxbuffer中的數(shù)據(jù)包,不再發(fā)送。同時清除已處理包隊列中該包的mactxbuffer積壓包標志macblockflag,轉(zhuǎn)步驟1125。
步驟1125、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1127,不是的話,轉(zhuǎn)步驟1129。
步驟1127、該命令包入已處理包隊列,結(jié)束。
步驟1129、該命令包srcrelay=0,dwnlvl+=1,入轉(zhuǎn)發(fā)緩沖區(qū),結(jié)束。
步驟1131、判斷接收命令包tid是否大于節(jié)點儲存floodmaxtid,是的話,轉(zhuǎn)步驟1135,不是的話,轉(zhuǎn)步驟1137。
步驟1135、節(jié)點儲存floodmaxtid=接收命令包tid,轉(zhuǎn)步驟1137。
步驟1137、節(jié)點儲存domainid=接收命令包domain,轉(zhuǎn)步驟1139。
步驟1139、節(jié)點儲存flooddwnlvl=接收命令包dwnlvl,轉(zhuǎn)步驟1141。
步驟1141、把該命令包遞交apprxbuffer;同時把該命令包入已處理包隊列,結(jié)束。
步驟1143、判斷收到命令包的dwnlvl-對應重復包的dwnlvl是否>=2,是的話,轉(zhuǎn)步驟1145,不是的話,轉(zhuǎn)步驟1155。
步驟1145、判斷重復包是否位于轉(zhuǎn)發(fā)緩沖區(qū),是的話,轉(zhuǎn)步驟1147,不是的話,轉(zhuǎn)步驟1151。
步驟1147、把轉(zhuǎn)發(fā)緩沖區(qū)中的數(shù)據(jù)包移入已處理包隊列,不再發(fā)送,轉(zhuǎn)步驟1149。
步驟1149、丟棄該下行命令包,結(jié)束。
步驟1151、判斷位于已處理包隊列中的該重復包是否也是mactxbuffer積壓包,是的話,轉(zhuǎn)步驟1153,不是的話,轉(zhuǎn)步驟1149。
步驟1153、清除mactxbuffer中的數(shù)據(jù)包,不再發(fā)送,同時清除已處理包隊列中該重復包的mactxbuffer積壓包標志macblockflag,轉(zhuǎn)步驟1149。
步驟1155、判斷重復包是否位于轉(zhuǎn)發(fā)緩沖區(qū),是的話,轉(zhuǎn)步驟1157,不是的話,轉(zhuǎn)步驟1159。
步驟1157、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1147,不是的話,轉(zhuǎn)步驟1149。
步驟1159、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1151,不是的話,轉(zhuǎn)步驟1149。
參見圖12,圖12為節(jié)點發(fā)送應答處理的流程圖。節(jié)點發(fā)送應答處理的過程具體包括:
步驟1210、構(gòu)造發(fā)送應答包npdu,放入apptxbuffer:srcrelay=1;updown=l;dwnlvl=節(jié)點儲存flooddwnlvl;uplvl=0;domain=節(jié)點儲存domainid;dstaddr=目標節(jié)點地址;tid=節(jié)點儲存floodmaxtid。
步驟1230、發(fā)送應答包移入mactxbuffer,等待發(fā)送;同時,發(fā)送應答包移入已處理包隊列,置已處理包隊列中該數(shù)據(jù)包的mactxbuffer積壓標志macblockflag,清已處理包隊列中其他數(shù)據(jù)包的macblockflag。
參見圖13,圖13為節(jié)點接收上行應答處理的流程圖。節(jié)點接收上行應答處理的過程具體包括:
步驟1301、節(jié)點macrxbuffer接收到一個上行應答包,轉(zhuǎn)步驟1303。
步驟1303、判斷域地址是否匹配,是的話,轉(zhuǎn)步驟1305,不是的話,轉(zhuǎn)步驟1333。
步驟1305、判斷是否重復包,是的話,轉(zhuǎn)步驟1327,不是的話,轉(zhuǎn)步驟1307。
步驟1307、判斷接受應答包uplvl是否>=7,是的話,轉(zhuǎn)步驟1333,不是的話,轉(zhuǎn)步驟1309。
步驟1309、判斷接收應答包tid是否大于等于節(jié)點儲存floodmaxtid,是的話,轉(zhuǎn)步驟1311,不是的話,轉(zhuǎn)步驟1333。
步驟1311、節(jié)點儲存floodmaxtid=接收應答包tid,轉(zhuǎn)步驟1313。
步驟1313、判斷轉(zhuǎn)發(fā)緩沖區(qū)是否有數(shù)據(jù)包,是的話,轉(zhuǎn)步驟1315,不是的話,轉(zhuǎn)步驟1317。
步驟1315、把轉(zhuǎn)發(fā)緩沖區(qū)中的數(shù)據(jù)包移入已處理包隊列,不再發(fā)送,轉(zhuǎn)步驟1317。
步驟1317、判斷mactxbuffer是否有積壓包,是的話,轉(zhuǎn)步驟1319,不是的話,轉(zhuǎn)步驟1321。
步驟1319、清除mactxbuffer中的數(shù)據(jù)包,不再發(fā)送。同時清除已處理包隊列中該包的mactxbuffer積壓包標志macblockflag,轉(zhuǎn)步驟1321。
步驟1321、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1323,不是的話,轉(zhuǎn)步驟1325。
步驟1323、該應答包入已處理包隊列,結(jié)束。
步驟1325、該應答包srcrelay=0,uplvl+=1,入轉(zhuǎn)發(fā)緩沖區(qū),結(jié)束。
步驟1327、判斷收到應答包的uplvl-對應重復包的uplvl是否>=2,是的話,轉(zhuǎn)步驟1329,不是的話,轉(zhuǎn)步驟1339。
步驟1329、判斷重復包是否位于轉(zhuǎn)發(fā)緩沖區(qū),是的話,轉(zhuǎn)步驟1331,不是的話,轉(zhuǎn)步驟1335。
步驟1331、把轉(zhuǎn)發(fā)緩沖區(qū)中的數(shù)據(jù)包移入已處理包隊列,不再發(fā)送,轉(zhuǎn)步驟1333。
步驟1333、丟棄該上行應答包,結(jié)束。
步驟1335、判斷位于已處理包隊列中的該重復包是否也是mactxbuffer積壓包,是的話,轉(zhuǎn)步驟1337,不是的話,轉(zhuǎn)步驟1333。
步驟1337、清除mactxbuffer中的數(shù)據(jù)包,不再發(fā)送。同時清除已處理包隊列中該重復包的mactxbuffer積壓包標志macblockflag,轉(zhuǎn)步驟1333。
步驟1339、判斷重復包是否位于轉(zhuǎn)發(fā)緩沖區(qū),是的話,轉(zhuǎn)步驟1341,不是的話,轉(zhuǎn)步驟1343。
步驟1341、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1331,不是的話,轉(zhuǎn)步驟1333。
步驟1343、判斷rssi是否超過上限,是的話,轉(zhuǎn)步驟1335,不是的話,轉(zhuǎn)步驟1333。
參見圖14,圖14為集中器接收上行應答處理的流程圖。集中器接收上行應答處理的過程具體包括:
步驟1410、集中器macrxbuffer接收到一個數(shù)據(jù)包,轉(zhuǎn)步驟1420。
步驟1420、判斷是否下行包,是的話,轉(zhuǎn)步驟1460,不是的話,轉(zhuǎn)步驟1430。
步驟1430、判斷域地址是否匹配,是的話,轉(zhuǎn)步驟1440,不是的話,轉(zhuǎn)步驟1460。
步驟1440、判斷是否重復包,是的話,轉(zhuǎn)步驟1460,不是的話,轉(zhuǎn)步驟1450。
步驟1450、該上行應答包移入apprxbuffer,等待應用層處理,結(jié)束。
步驟1460、丟棄該數(shù)據(jù)包,結(jié)束。
參見圖15,圖15為節(jié)點重復包檢測的流程圖。節(jié)點重復包檢測的過程具體包括:
步驟1501、節(jié)點macrxbuffer接收到一個數(shù)據(jù)包。
步驟1503、判斷轉(zhuǎn)發(fā)緩沖區(qū)是否有數(shù)據(jù)包,是的話,轉(zhuǎn)步驟1505,不是的話,轉(zhuǎn)步驟1519。
步驟1505、和轉(zhuǎn)發(fā)緩沖區(qū)數(shù)據(jù)包進行比較。
步驟1507、判斷包長度length是否相等,是的話,轉(zhuǎn)步驟1509,不是的話,轉(zhuǎn)步驟1519。
步驟1509、判斷updown是否相等,是的話,轉(zhuǎn)步驟1511,不是的話,轉(zhuǎn)步驟1519。
步驟1511、判斷ver是否相等,是的話,轉(zhuǎn)步驟1513,不是的話,轉(zhuǎn)步驟1519。
步驟1513、判斷dstaddr是否相等,是的話,轉(zhuǎn)步驟1515,不是的話,轉(zhuǎn)步驟1519。
步驟1515、判斷tid是否相等,是的話,轉(zhuǎn)步驟1517,不是的話,轉(zhuǎn)步驟1519。
步驟1517、接收數(shù)據(jù)包為重復包,結(jié)束。
步驟1519、判斷已處理包隊列是否有數(shù)據(jù)包,是的話,轉(zhuǎn)步驟1523,不是的話,轉(zhuǎn)步驟1521。
步驟1521、接收數(shù)據(jù)包非重復包,結(jié)束。
步驟1523、取已處理包隊列一個數(shù)據(jù)包,和接收數(shù)據(jù)包進行比較。
步驟1525、判斷包長度length是否相等,是的話,轉(zhuǎn)步驟1527,不是的話,轉(zhuǎn)步驟1535。
步驟1527、判斷updown是否相等,是的話,轉(zhuǎn)步驟1529,不是的話,轉(zhuǎn)步驟1535。
步驟1529、判斷ver是否相等,是的話,轉(zhuǎn)步驟1531,不是的話,轉(zhuǎn)步驟1535。
步驟1531、判斷dstaddr是否相等,是的話,轉(zhuǎn)步驟1533,不是的話,轉(zhuǎn)步驟1535。
步驟1533、判斷tid是否相等,是的話,轉(zhuǎn)步驟1517,不是的話,轉(zhuǎn)步驟1535。
步驟1535、判斷已處理包隊列是否比較完,是的話,轉(zhuǎn)步驟1521,不是的話,轉(zhuǎn)步驟1523。
圖16為集中器重復包檢測的流程圖。集中器重復包檢測的過程具體包括:
步驟1601、集中器macrxbuffer接收到一個數(shù)據(jù)包。
步驟1603、判斷已處理包隊列是否有數(shù)據(jù)包,是的話,轉(zhuǎn)步驟1605,不是的話,轉(zhuǎn)步驟1621。
步驟1605、取已處理包隊列一個數(shù)據(jù)包,和接收數(shù)據(jù)包進行比較。
步驟1607、判斷包長度length是否相等,是的話,轉(zhuǎn)步驟1609,不是的話,轉(zhuǎn)步驟1619。
步驟1609、判斷updown是否相等,是的話,轉(zhuǎn)步驟1611,不是的話,轉(zhuǎn)步驟1619。
步驟1611、判斷ver是否相等,是的話,轉(zhuǎn)步驟1613,不是的話,轉(zhuǎn)步驟1619。
步驟1613、判斷dstaddr是否相等,是的話,轉(zhuǎn)步驟1615,不是的話,轉(zhuǎn)步驟1619。
步驟1615、判斷tid是否相等,是的話,轉(zhuǎn)步驟1617,不是的話,轉(zhuǎn)步驟1619。
步驟1617、接收數(shù)據(jù)包為重復包,結(jié)束。
步驟1619、判斷已處理包隊列是否比較完,是的話,轉(zhuǎn)步驟1621,不是的話,轉(zhuǎn)步驟1605。
步驟1621、接收數(shù)據(jù)包非重復包,結(jié)束。
在本發(fā)明中,rssi指接收信號強度。節(jié)點接收到一個數(shù)據(jù)包rssi超過上限,是指節(jié)點接收到數(shù)據(jù)包信號很強,一定是離該節(jié)點很近的另一個節(jié)點發(fā)出來的數(shù)據(jù)包,比如同一個表箱的另一個節(jié)點發(fā)出來的數(shù)據(jù)包。
在本發(fā)明中,節(jié)點首次上電初始化時節(jié)點儲存domain為全0。節(jié)點收到數(shù)據(jù)包判定域地址是否匹配的判據(jù)為:若“收到數(shù)據(jù)包domain和節(jié)點儲存domain相等”或者“節(jié)點儲存domain==全0”,則域地址匹配;否則,域地址不匹配。節(jié)點掉電前把節(jié)點儲存domain保存到非易失存儲器中。
在本發(fā)明中,接收命令包tid是否大于節(jié)點儲存floodmaxtid的判據(jù)為:若“接收命令包tid>節(jié)點儲存floodmaxtid”或者“接收命令包tid+63-節(jié)點儲存floodmaxtid<16”,則接收命令包tid大于節(jié)點儲存floodmaxtid;否則,接收命令包tid不大于節(jié)點儲存floodmaxtid。這是因為tid是從1-63循環(huán)的,當超過63時,tid又從1開始。
值得一提的是,tid來源是集中器構(gòu)建的pdu包,是從1-63循環(huán)的,當從63循環(huán)變到1時,1應該是大于63的,而不是小于。取16這個數(shù)就是保證網(wǎng)絡中還存續(xù)的包(網(wǎng)絡中的包有存續(xù)期也可以叫生存期)不會因為1-63的循環(huán)而出現(xiàn)大小比較錯亂的情況。
在本發(fā)明中,接收應答包tid是否大于等于節(jié)點儲存floodmaxtid的判據(jù)為:若“接收應答包tid≥節(jié)點儲存floodmaxtid”或者“接收應答包tid+63-節(jié)點儲存floodmaxtid<16”,則接收應答包tid大于等于節(jié)點儲存floodmaxtid;否則,接收應答包tid小于節(jié)點儲存floodmaxtid。這是因為tid是從1-63循環(huán)的,當超過63時,tid又從1開始。
在本發(fā)明中,節(jié)點數(shù)據(jù)包從轉(zhuǎn)發(fā)緩沖區(qū)或者apptxbuffer移入mactxbuffer時,需判斷mactxbuffer是否空閑。若空閑,則移入mactxbuffer,同時,把數(shù)據(jù)包也移入已處理包隊列,置已處理包隊列中該數(shù)據(jù)包的mactxbuffer積壓標志macblockflag,清已處理包隊列中其他數(shù)據(jù)包的macblockflag;若忙,則繼續(xù)停留在轉(zhuǎn)發(fā)緩沖區(qū)或者apptxbuffer中等待。
在本發(fā)明中,集中器數(shù)據(jù)包從apptxbuffer移入mactxbuffer時,需判斷mactxbuffer是否空閑。若空閑,則移入mactxbuffer;若忙,則繼續(xù)停留在apptxbuffer中等待。
在本發(fā)明中,物理層采用csma(載波偵聽多路訪問)技術(shù)競爭信道發(fā)送,進入mactxbuffer的數(shù)據(jù)包隨機分配時間片,當分配到的時間片到達時,物理層發(fā)送數(shù)據(jù)包。信道競爭采用優(yōu)先級別,源發(fā)送包在優(yōu)先時隙中分配隨機時間片發(fā)送;轉(zhuǎn)發(fā)包需在優(yōu)先時隙后,再分配隨機時間片發(fā)送。
本發(fā)明的有益效果包括,但不限于:實現(xiàn)了網(wǎng)絡載荷的高效控制,沖突的最大避免,從而使得洪泛式組網(wǎng)得以快速收斂。
應當理解的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制,對本領域技術(shù)人員來說,可以對上述實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改和替換,都應屬于本發(fā)明所附權(quán)利要求的保護范圍。