zigbee 协调器无法给终端发送数据,但终端可以给协调器发送数据
各位TI的大侠zigbee高手,我在使用z-stack home1.2.2a.44539开发自己的应用时遇到如下莫名其妙的问题
硬件:1个协调器+ 1个终端设备+应用软件
工作时,首先通过串口发送建立网络命令。网络建立起来后,如果收到终端设备的报警信息,则使用串口上传到应用软件,软件处理后发送清除报警信息的命令,经过协调器发送给对应的终端设备,终端设备再将处理结果发送到协调器,协调器将其转发到应用软件。
开始的时候一切正常,但是如果我一直发送报警数据,过了一段时间后发现软件上可以显示收到了报警,但是无法清除报警。 抓包显示,协调器没有将清除报警信息的命令发送给对应的终端设备,而是一直会发送NWK link status 和 NWK Route Request。
调试程序发现,AssociatedDevList中关于终端的设备信息已经被清除了,可是抓包中还是能够发现终端发送的数据和DataRequest。除非终端rejoin或者direct入网,否则协调器就一直无法给终端发送数据。
抓包中从第7220帧之后开始出现问题。
问题应该就出在协调器把子设备从关联表里面删除了。
问下你复现问题的时候节点上报数据的频率多快,另外节点的poll rate是多少?
您好
谢谢您的回复, 有以下两个问题
1,什么情况下协调器会把设备从关联表里删除呢?
2,删除之后,终端是否会收到通知?
pollrate 1s 上报是500ms定时测试的,发现问题的时候是个按键,中断方式。快按一会就不能通信了。
上一个版本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中,貌似是自动处理。
你的解释是真的吗?
终端收到leave req的代码处理是会判断是否rejoin的,但是前面协调器删除asscolist后如果还能收到终端的datarequest会恢复leaverequest而不带ieee地址,我没有找到相关代码啊?能指出来在哪里吗?
我好对比一下新旧协议栈的差别啊,我现在使用2.5.1a版本协议栈发生的这个问题,无法处理掉啊。1.2.2的就不会了吗?