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

zigbee 协调器无法给终端发送数据,但终端可以给协调器发送数据

各位TI的大侠zigbee高手,我在使用z-stack home1.2.2a.44539开发自己的应用时遇到如下莫名其妙的问题 

硬件:1个协调器+ 1个终端设备+应用软件 

工作时,首先通过串口发送建立网络命令。网络建立起来后,如果收到终端设备的报警信息,则使用串口上传到应用软件,软件处理后发送清除报警信息的命令,经过协调器发送给对应的终端设备,终端设备再将处理结果发送到协调器,协调器将其转发到应用软件。

开始的时候一切正常,但是如果我一直发送报警数据,过了一段时间后发现软件上可以显示收到了报警,但是无法清除报警。 抓包显示,协调器没有将清除报警信息的命令发送给对应的终端设备,而是一直会发送NWK link status 和 NWK Route Request。

调试程序发现,AssociatedDevList中关于终端的设备信息已经被清除了,可是抓包中还是能够发现终端发送的数据和DataRequest。除非终端rejoin或者direct入网,否则协调器就一直无法给终端发送数据。

抓包中从第7220帧之后开始出现问题。

VV:

问题应该就出在协调器把子设备从关联表里面删除了。

问下你复现问题的时候节点上报数据的频率多快,另外节点的poll rate是多少?

Ding Sun1:

回复 VV:

您好

谢谢您的回复, 有以下两个问题

1,什么情况下协调器会把设备从关联表里删除呢?

2,删除之后,终端是否会收到通知?

Ding Sun1:

回复 VV:

pollrate 1s  上报是500ms定时测试的,发现问题的时候是个按键,中断方式。快按一会就不能通信了。

Aries Lord:

回复 Ding Sun1:

上一个版本z-stack 2.6.2(home 1.2.1和mesh 1.0.0)中,协调器的AssocList删除EndDevice后,如果收到EndDevice发来的MAC Data Request命令会回复一个NWK Leave Req给EndDevice,这个NWK Leave Req不带EndDevice的IEEE地址,因此为无效操作,EndDevice在收到无效Leave Req时应该采用rejoin的方式重新连接父节点。

home 1.2.2a中,貌似是自动处理。

user4381970:

回复 Aries Lord:

你的解释是真的吗?

终端收到leave req的代码处理是会判断是否rejoin的,但是前面协调器删除asscolist后如果还能收到终端的datarequest会恢复leaverequest而不带ieee地址,我没有找到相关代码啊?能指出来在哪里吗?

我好对比一下新旧协议栈的差别啊,我现在使用2.5.1a版本协议栈发生的这个问题,无法处理掉啊。1.2.2的就不会了吗?

赞(0)
未经允许不得转载:TI中文支持网 » zigbee 协调器无法给终端发送数据,但终端可以给协调器发送数据
分享到: 更多 (0)