使用的协议栈版本是:ZStack-CC2530-2.5.1a
使用的无线芯片是:CC2530F256RHAT
开发环境是:IAR 8.10.3
项目描述:
20个终端,1个协调器。每一个终端都布局在协调器的20米范围内。20个终端都能与协调器通信上。20个终端会每天断电重新上电一次,协调器也可能会断电重新上电。我现在使用项目工程是从D:\Texas Instruments\ZStack-CC2530-2.5.1a\Projects\zstack\Samples\GenericApp修改过来的,并且不管是协调器还是终端,我都在Option中的C/C++Compoler的Preprocessor的Defined symbols中加入了NV_INIT、NV_RESTORE,希望系统保留原先的网络。另外,如果终端找不到原来的网络存在,在检测到设备状态为(devState == DEV_NWK_DISC)时,1分钟后将恢复这个终端的自由之身,重新寻找新的网络,重新加入,这个处理方法如下:
if(devState == DEV_NWK_DISC)
{
JoiningNWKTimer ++;
if(JoiningNWKTimer >= 6000)
{
JoiningNWKTimer = 0;
// 网络复位
zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);
SystemReset();
}
}
else
{
JoiningNWKTimer = 0;
}
以上这个代码只在终端程序上实现,协调器没有使用。
现在遇到的问题是:刚开始上电终端都能与协调器通信上,接下来给协调器断电,断电时间超过设置的1分钟,然后协调器重新上电,这样反复几次之后,发现协调器与终端通信不上了,采用SmartRF Packet Sniffer工具抓包(为了方便起见,我停掉了19个终端,只保持一个终端在线),发现终端会发出beacon resqust请求,协调器也会发出回应,但是接下来终端没有理会协调器,还是发beacon resqust请求。抓包工具展示如下:
请TI的大牛们帮忙分析一下状况,显现,在线等着你们精彩的解答!!!!
xiaohui bu:
你不是写了一段“终端节点搜索1min,让其恢复自由身”。这样是不是就断线1min后,终端节点就以新节点的方式入网呢?那你的协调器又没有打开”允许“加入。
miffy:
回复 xiaohui bu:
在论坛上看到过VV回答类似问题,别人是使用key连接,开始可以入网,等会断开就入不了,不知道你是touchlink还是link key方式入网的
user1003689:
回复 xiaohui bu:
是的,我是在协调器断电之后,时间超过1分钟,让它重新恢复网络连接状态,重新寻找新的网络,如果有的话就可以加入新的网络。另外,你说的协调器没有打开允许加入?问一下这个能说的具体一点吗?这个还没理解?
miffy:
回复 user1003689:
参考这个链接:http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/p/81476/356076.aspx#356076
xiaohui bu:
回复 user1003689:
是的。你的节点1min后,擦除了网络参数重启后就是以一个新节点的形式入网,那协调器的允许加入功能肯定要打开(调用这个接口NLME_PermitJoiningRequest)。这样节点就和之前的地址可能就不一样了。因为网络地址会重新分配的。