#1楼主:zigbee网络技巧之CSkip
文章发表于:2008-03-19 09:33
ZIGBEE 网络层的功能主要包括组建网络,加入网络,离开网络,路由建立,数据传输等.在使用分布式地址分配的网络中,COORDINATOR建立网络后,设置自己的地址为0X0,其他的ROUTER或则END DEVICE 加入网络,都由自己的父节点来分配网络地址.网络地址的分配与三个参数有关:
允许的最大子节点数(MAXCHILDREN)
允许的最大路由节点数(MAXROUTER)
允许的最大网络深度(MAXDEPTH)
根据此三参数可以算出在每一级(也就是每个深度的)情况下,兄弟节点之间的地址间隔(CSKIP).
比如一个MAXCHILDREN = 4,MAXROUTER = 2,MAXDEPTH = 2的网络,CSKIP 布局为:
深度为1的设备的CSKIP 是: 5
深度为2的设备的CSKIP 是: 1
其网络结构为:
COORDINATOR 地址 0X0, 深度为0; 则深度为1的设备的ROUTER 有两个,END DEVICE 也有两个,全局地址分配为:
COORINATOR 0X0
ROUTER1 : 0X1
ROUTER11 : 0X2
ROUTER12 : 0X3
END13 : 0X4
END14 : 0X5
ROUTER2 : 0X6
ROUTER21 : 0X7
ROUTER22 : 0X8
END23 : 0X9
END24 : 0Xa
END1: 0Xb
END2: 0Xc
CSKIP 计算公式ZIGBEE规范有说明,下面是VC实现代码:
int AddrParse::GetCskip(int id)
{
int rel;
if(M_MAXROUTER<1 || M_MAXDEPTH<1||M_MAXCHILDREN<1)//if wrong para
return -1;
if(id<0||id>M_MAXDEPTH)
return -2;
if(M_MAXROUTER ==1)//if 1 the ari is esay
{
rel = 1+M_MAXCHILDREN*(M_MAXDEPTH-id-1);
}
else if(M_MAXROUTER>1)//
{
int ml_increase=M_MAXDEPTH-id-1;
int ml_temp = 1;
if(ml_increase == -1)
{
rel=(1+ M_MAXCHILDREN-M_MAXROUTER-M_MAXCHILDREN/M_MAXROUTER)/(1-M_MAXROUTER);
}
else if(ml_increase>-1)
{
for(;ml_increase>0;ml_increase--)
{
ml_temp=M_MAXROUTER*ml_temp;
}
rel = (1+ M_MAXCHILDREN-M_MAXROUTER-M_MAXCHILDREN*ml_temp)/(1-M_MAXROUTER);
}
}
if(rel>-1)
return rel;
else return 0;
}
本文谈论之ZIGBEE网络层技巧是基于ZIGBEE2004.