实施方案
[0026] 以下结合附图对本发明作进一步说明
[0027] 如图1所示,本发明采用粗粒的信道分配方法,即给每棵子树分配不同的信道,通过引入协调节点,来减少节点信道切换次数和工作在不同信道上节点间的通信频率,从而使各子树的网络负载达到平衡,提高整个网络的吞吐量。
[0028] (1)本发明以路径期望传输次数PETX来表征路径的链路质量。它是路径上各链路的链路期望传输次数ETX值之和,其中ETX是指节点在一条链路上成功传递数据所需的期望传输次数。子树内的普通节点到网关节点的路径链路质量可由式1表示,[0029] PETXj=PETXi+ETXi,j (1)其中j是当前节点,i是节点j的父节点,PETXj表示节点j到网关节点的路径期望传输次数,ETXi,j表示节点i到节点j的链路期望传输次数。
[0030] 每个网关节点工作在不同的信道上,以周期t0广播Beacon包,普通节点依次扫描各个信道,并在各个信道停留t时间,其中t略大于t0,记录接收到的Beacon包信息。普通节点一接收到Beacon包,首先判断接收Beacon包时的RSSI值是否大于-75dbm,若成立,则计算当前节点到网关节点的PETX值。否则丢弃该包,继续侦听,接收其他Beacon包。若在t时间内,普通节点还收到它的其他潜在父节点发的Beacon包,只有新路径的PETX值小于当前选取路径的PETX值时,普通节点才更新选取路径。那么普通节点在一个信道上侦听t时间后,若它的选取路径存在,该路径也是最优的路径。
[0031] 当普通节点扫描完全部的信道后,根据接收到的信息,选择出最佳的信道。若最佳信道存在,那么普通节点切换到那个信道,发送Tree_Join包,申请加入它的潜在父节点所在路径,并等待父节点的回复。否则这个普通节点继续依次扫描信道,以寻找加入最优的信道。若父节点的孩子数小于它所允许的最大孩子数,则给申请加入的那个孩子节点回复一个确认包,否则父节点丢弃该申请包,不对它作出回复。若孩子节点在1s之内没有收到它的潜在父节点的回复包,那么它认为当前所处的链路不稳定,进行新一轮的信道扫描,争取加入最优的子树。当节点收到父节点的回复,它再开始周期性地广播Beacon包,以及定时将自己的孩子数报告给它的父节点,以便网关节点能了解当前子树内的节点数。
[0032] (2)由于网络中的节点自主地加入各子树,因此子树建立完成时,它们的规模可能会不平衡。当节点离开网络或者网络的链路质量发生变化,各棵子树的规模也会变得不平衡。本发明方法以各子树内的节点数来衡量子树的规模,并根据它来平衡网络中各子树的网络流量。它周期性地检测各子树内的节点数,当满足一定条件时,对那棵拥有最大节点数的子树进行信道平衡。一旦确定进行信道平衡,协调节点给相应的网关节点则发送Balance包,网关节点将它转发给子树内的每个节点,子树内的节点根据Balance包来选择是否跳转到其他信道。本发明方法采用两种机制来避免网络过于动荡:一,将需要进行信道平衡的过程限定在孩子数最多的那棵子树;二,它容许各子树间存在一定的不平衡。
[0033] 协调节点只有在满足以下条件下才开始进行信道平衡,即
[0034]
[0035]
[0036] 其中T为网关节点集。δ是阈值,它控制着各子树间的不平衡程度。
[0037] Balance包包括节点跳出当前信道的概率以及跳转到其他信道上的概率。假如子树tmax是拥有节点数最多的子树,那子树里的节点以 的概率跳出当前信道,其中 是子树t的节点数,Δavr是各子树内的平均节点数。若节点确定要跳出当前信道,那它跳到其他信道,加入其他的子树Ti≠t的概率设定如下:
[0038] Pi=0,Δi≥Δavr (5)
[0039]
[0040] 本发明方法根据以上规则让过载子树里的节点根据各子树的负载情况,跳转到负载轻的子树。一棵子树的负载越轻,那么跳转到该子树的概率越大。
[0041] 协调节点周期性地扫描各个信道。每个网关节点每T时间,给协调节点发送一个数据包,报告自己所在子树的节点数。由于协调节点在每个信道上侦听T0时间,其中T0略大于T,那么经过一次信道扫描,协调节点就知道各棵子树内的节点数。为了提高网络的稳定性,以免网络中的节点一直处在信道切换中,影响网络的性能,只有前后两个信道扫描周期的检测结果一致时,即需要平衡的信道号一致,协调节点才跳转到需要进行信道平衡的信道,给相应的网关节点发送Balance包。具体调度流程如图2所示。在协调节点中,该信道号pch的初始值设为255,表示没有信道需要平衡。若前后两次的检测结果不一致,则将pch设为最近一次的检测结果。当协调节点完成一次信道平衡后,重新将pch值设为初始值。由于子树在信道平衡期间,网络变得很不稳定,网关节点向协调节点报告的节点数变得很不可靠,故延迟M时间,等各个子网稳定了,再重新开始信道扫描。M需满足式7,[0042] M>L*Treport+L*Tswitch (7)其中L为需要调整的子树内的节点数,Treport为节点向父节点报告孩子数的周期,Tswitch为节点扫描各信道并加入相应子树的时间,这里假设节点只需扫描各信道一次,即可成功加入子树,且忽略数据包的传输时间。
[0043] (3)普通节点收到调整包重新选择信道流程如图3所示。当子树内的普通节点,收到一个Balance包。然后根据包里的Pout值,决定是否跳出当前信道。若决定跳出当前信道,再根据包里的Pi值来确定跳转到哪一个信道,并在新信道侦听,尝试加入相应的子树。否则节点继续留在原来的信道上,重新寻找它的父节点。若节点在各自的信道上侦听,没有潜在父节点,经过3次尝试,还是找不到潜在父节点,那么节点再次进行信道扫描,以便加入合适的子树。当节点加入子树后,节点重新定时向下广播Beacon包和向父节点报告自己的孩子数。