微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 关于 coordinator realignment 入网方式的 疑问!

关于 coordinator realignment 入网方式的 疑问!

时间:10-02 整理:3721RD 点击:

有个终端设备 在一个环境里面 存在多个 协调器!

终端设备 发出orphan notification , 结果这些 协调器都回复 了 coordinator realignment 给他!

于是 它 选了一个发 MAC  ACK , 但是入不了网!(因为这个协调器不是它正在的 父节点!)

后续 它 又 发出beacon request 出去, 它真正的父节点  回复了它  正确的beacon,  但是它就是无法入网!

只能重新上电, 然后碰巧它选择了对的父节点  回复MAC ACK 才可以入网! 

log:0882.1.rar

以下几个问题:

1. 为什么不是它 父节点的  协调器 也会 回复它  coordinator  realignment ~~~~?

2. 为什么 收到 coordinator realignment 之后 ,它能识别不是它父节点?

3. 既然识别出来了, 为什么后续真正的父节点 发beacon 给它, 它又入不了网呢?

1. 为什么不是它 父节点的  协调器 也会 回复它  coordinator  realignment ~~~~?---------------因为orphan notification是在当前信道里面广播的命令。在这个信道的所有协调器和路由器都会回复的(记住,不管是否是在之前的那个网络)。

2. 为什么 收到 coordinator realignment 之后 ,它能识别不是它父节点?------因为节点可以根据回复的coordinator realignment 命令识别是否是之前的父节点。根据panId、网络地址和它自己本身的关联表里面的内容进行比较就可以了(自己理解的)。

3. 既然识别出来了, 为什么后续真正的父节点 发beacon 给它, 它又入不了网呢?-------这个确实存在,要在协议栈里面增加点代码即可实现。

1. ~~~~?---------------因为orphan notification是在当前信道里面广播的命令。在这个信道的所有协调器和路由器都会回复的(记住,不管是否是在之前的那个网络)。

      这一点我不赞同! 因为我尝试过, 如果设备发leave 指令 而且leave 指令被旧协调器收到(或者说旧父节点收到)  ,那么下次它发orphan 的时候,这个旧的父节点是不会再回复coordinator  realignment的!  

      所以这里不是因为 orphan 是广播,所以导致所有协调器和路由器都会回复,   事实上是因为 父子关系依然 存在由于 父节点端, 所以父节点才回复的~~~

2. 这一点应该是 根据 extern PANID 判断~~~但目前我还是找不到在哪里

3.  请问你是如何 增加代码的?

1、第一点,如果有leave 指令是设备主动离开的话,有可能不会回复。这种情况我没有测试。误导了.....哈哈

3、zstack2.5.1A -----文件ZDApp.C

void ZDApp_NetworkInit( uint16 delay )
{
if ( devStartMode == MODE_REJOIN )//ADD
{//ADD
_tmpRejoinState = true;//ADD
}//ADD

if ( delay )
{
// Wait awhile before starting the device
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );
}
else
{
osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top