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

AF_DataRequest函数发送失败后NWK层不停有广播的问题!

AF_DataRequest函数发送失败后NWK层不停有广播的问题

如题,我使用zstack2.4.0版本,ZIGBEEPRO版本,开启NV_RESTORE,协调器与路由器使用AF_DataRequest函数通讯,函数添加了AF_DISCV_ROUTE参数经路由转发,使用Packet Sniffer抓包分析,正常情况路由器发送命令协调器应答,

正常应答.jpg 

上图可以看出在NWK Frame control field中DR项(Discover router)为1,表示AF_DISCV_ROUTE参数是有效的,发送的数据会自动经过路由器转发的。

       但如果此时,协调器离网,掉电了,路由器经过8次重发后,就会出现NWK层的一个CMD命令,发送目的地址是0xFFFD,发送给所有在网络内没有休眠的设备,应该是一个广播来的,而此后所有发送的数据,看NWK Frame control field中DR项(Discover router)都变为0了,而我的程序没变,AF_DataRequest函数还是有AF_DISCV_ROUTE参数的,但仍可以通过路由转发命令,但命令的反应开始变慢,延时变长,而且长时间网络会不稳定。

丢失协调器.jpg 

广播不停.jpg 

      如何停止这个NWK层的广播的发送呢?各位有遇到这种情况吗?

NWKguangbo.jpg

ken chan:

回复 Yue TANG:

例子是由SerialApp修改的,我在Coordinator与Router的通讯中,加入了类似心跳的机制,Router入网后5秒发一个心跳到Coordinator,Coordinator则回复,由此双方都知道对方是否在网内。

Coordinator的编译配置:

ZIGBEE_FRAGMENTATION

HAL_UART=TRUE

SERIAL_APP_PORT=0

NV_RESTORE

HAL_IRGEN=TRUE

HAL_IRGEN_CARRIER

NWK_MANAGER

 

Router的编译配置:

HAL_UART=FALSE

SERIAL_APP_PORT=0

NV_RESTORE

ZIGBEE_FRAGMENTATION

ken chan:

回复 Yue TANG:

例子是由SerialApp修改的,我在Coordinator与Router的通讯中,加入了类似心跳的机制,Router入网后5秒发一个心跳到Coordinator,Coordinator则回复,由此双方都知道对方是否在网内。

Coordinator的编译配置:

ZIGBEE_FRAGMENTATION

HAL_UART=TRUE

SERIAL_APP_PORT=0

NV_RESTORE

HAL_IRGEN=TRUE

HAL_IRGEN_CARRIER

NWK_MANAGER

Router的编译配置:

HAL_UART=FALSE

SERIAL_APP_PORT=0

NV_RESTORE

ZIGBEE_FRAGMENTATION

CZ:

回复 ken chan:

这个广播是一条路由请求指令,如果目标节点不存在了,你所发的每一条消息都会引起路由请求,你可以关闭路由请求参数AF_DISCV_ROUTE

ken chan:

回复 CZ:

AF_DISCV_ROUTE在zstack2.4-1.4.0里面已经是写死在代码里,去掉会造成数据无法通过路由发送到指定的节点。我是奇怪这个路由请求为何一直存在,不会停止,感觉是一个bug,或者是我配置不对,造成的死循环一样!

CZ:

回复 ken chan:

你的Router入网后不是每隔5秒会发一个信息跟Coordinator吗,如果coordinator找不到,每次都会触发路由请求指令。

ken chan:

回复 CZ:

是的,我每隔5秒发送一次信息,如果coordinator找不到,路由请求发送是正常,但coordinator上电,回到网内,这个路由请求还一直在发送,这点我就不解了。

CZ:

回复 ken chan:

首先,请更新你的协议栈到最新的版本Zstack2.5.1,我用这个版本测过是没有这个问题的

仔细看了一下你的Sniffer封包,每次的路由请求指令都连续发了两个,中间只隔了3ms,这可能是问题出现的原因,

正常情况下是只发一个路由请求指令封包,你看看代码里是否有连续做了两次AF_DataRequest,

附件是我的抓包数据,用2.5.1版本测的。

ken chan:

回复 CZ:

感谢CZ的帮助,我看到你的抓包数据,确实在节点丢失后重新回到网络NWK Route Request发送几次后就停止了,,我会尝试一下改到zstack2.5.1,另外这个例子也是基于2.5.1的SerialApp例程修改的吗?是否有修改默认的f8wconfig.cfg或者nwk_globals.h里面的默认参数呢?如果方便可以上传一下这个测试程序吗?谢谢

赞(0)
未经允许不得转载:TI中文支持网 » AF_DataRequest函数发送失败后NWK层不停有广播的问题!
分享到: 更多 (0)