终端设备掉线后一直发Beacon,怀疑是协议栈的BUG@VV
如图所示,抓包看报文中的Dev.Cap是1,但是在ZDApp_NwkDescListProcessing函数中
if ( !pNwkDesc->deviceCapacity )
{
continue;
}
语句中却是0,导致一直不能获取正确的父设备。
你的这个Permit Join 是False的,第一个判断就不符合了。
@VV
我做实验也遇到了这个问题,一个协调器挂了100个子节点,一段时间后,所有的子节点全部掉线,都出现了这样的帧,请问VV这个是因为什么呢,怎么解决?谢谢
VV您好!
可能是我没描述清楚。
我这个原来终端设备是已经加过网的,并且终端和协调器都设置了NV_INIT和NV_RESTORE编译选项。
这时,中端从协调器上掉了(比如重新上电),发现有时候(复杂zigbee网络下几乎必然),终端始终发Beacon,不能重新加入协调器。我仿真跟的情况是扫描时能扫到原来的协调器,但是解析到的dev.cap标志是0。
编译了NV选项之后是可以保存网络信息以便于再次自动入网的。您现在没有上电后自动入网是不是有可能是您的NV读取没有成功。
请您断电调试下, _NIB.nwkDevAddress 和_NIB.nwkState的值是多少?
如果_NIB.nwkDevAddress = 0xFFFE的话,这个函数就返回0,这个问题每次掉电以后都会出现吗?
还是说偶尔会出现的,会不会是供电的问题导致读取NV不正确。
您好,NV是正确恢复的,只是在重入网扫描得到的beacon信息后解析到的pNwkDesc->deviceCapacity 是0,导致不能重新入网,跟踪发现一个函数nwk_BeaconFromNative是不开源的,就没法继续查下去了。
ps:我们公司的网络比较复杂,可能有4、5个pan,每个里面有二三十个设备,出错的概率很大。如果环境中只有一个网络,出错的概率很小。
请问我用什么办法解决遇到的这个问题啊
你试试只挂几个节点试试,会不会是因为太多了的原因。
我是把容错次数改成了255次,来防止节点频繁找网