TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

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

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

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

log:

以下几个问题:

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

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

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

xiaohui bu:

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

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

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

MarS:

回复 xiaohui bu:

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

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

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

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

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

xiaohui bu:

回复 MarS:

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 ); }}

赞(0)
未经允许不得转载:TI中文支持网 » 关于 coordinator realignment 入网方式的 疑问!
分享到: 更多 (0)