定义NV_RESTORE断网后重连失败
1,节点与协调器都定义NV_RESTORE,待节点连接上协调器,协调器开启NLME_PermitJoiningRequest(0)。
2,将协调器断电一段时间(几个小时)再上电,有些节点(感觉信号不太哈)就连接不上协调器了,这时候需要重启节点或者协调器开启NLME_PermitJoiningRequest(0xff)才可以重新入网。
我没有抓包文件,以上问题在一些论坛上见到过网友有相似的情况发生,他是这么描述的:
信号不好的节点发送Oprah后就一直发送beacon,可是掉线节点是rejoin,通过修改ZDO层的函数修复了此问题。
怎么解决?
我也有掉线重新连接不上的问题,显示orphan请求后来是rejoin,但依旧连接不上
如果协调器开始协调器开启NLME_PermitJoiningRequest(0xff)运行入网,掉线的设备才能重新入网,这个时候设备都已经是重新组网了,而不是回复原来的网络了。
我也有发现这样的问题,
开始是正常掉线,一直重连也连不上(不一定什么时候还有可能加回来),有更严重的就是只能重新入网了而不是恢复。
I asked in e2e before, and it may help.
http://e2e.ti.com/support/wireless_connectivity/zigbee_6lowpan_802-15-4_mac/f/158/p/208581/1340192#1340192
哪个帖子回复的就是网络初始化时候加上
+
if
( devStartMode == MODE_REJOIN )
+ {
+ _tmpRejoinState =
true
;
+ }
但是,若掉线重连或者重新上电,开始模式是resume模式呀,在尝试组网失败后会变成rejoin模式同时设置了_tmpRejoinState =
true
;
所以哪个标志位没有问题呀
若是存在父节点,最开始都是resume模式,执行到这里尝试1次后切换成rejoin模式,已经把哪个标志位置位了,之后执行初始化网络函数的。所以没有必要加那段代码吧?并没有起到作用吧?
if ( devStartMode == MODE_RESUME )
{
if ( ++retryCnt <= MAX_RESUME_RETRY )
{
if ( _NIB.nwkPanId == 0xFFFF || _NIB.nwkPanId == INVALID_PAN_ID )
devStartMode = MODE_JOIN;
else
{
devStartMode = MODE_REJOIN;
_tmpRejoinState = true;
}
}
我看网上说的修改ZDAPP.c 解决了:
void ZDApp_NetworkInit( uint16 delay )
{
if(devStartMode == MODE_REJOIN)
{
_tmpRejoinState = true;
}
if ( delay )
{
// Wait awhile before starting the device
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, delay );
}
else
{
osal_set_event( ZDAppTaskID, ZDO_NETWORK_INIT );
}
}
最近碰到一个新问题,有些节点会删除自己的网络信息,这样就没办重练了,也抓不到节点断网之后发的包
请问 你一下:
1. 你使用的是什么版本的 zstack?
2. 协调器断电一段时间 后再 上电, PANID 改变了吗?
3.节点连接不上协调器 是一直发beacon ,还是会发rejoin request?
2.5.1a
panid没有改变,协调器没有问题,因为其他设备还正常在网通信
连不上了都是发送beacon,一开始发送orphan request。抓包发现若是发出rejoin request通常就能恢复网络了,
只是有时候会发生这个问题,不是百分百发生的。我还有个问题你帮我看看呗
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/102083.aspx
其实每个版本 都或多或少 有些 网络的bug !
2.51a 的 我确实没怎么用过!
我目前用的是2.61 的 即 zstack 1.2.2 , 目前尚未发现这个问题。 能不能 不负责任的 提醒你 使用新版本呢?
那你帮我分析上面网址的另外一个问题吧