协调器无法收到终端反馈的信息
HA的系统,协调器,路由器,终端都打开了NV_RESTORE,组网完成之后通讯都正常,如果把协调器断电,通过sniffer可以看到终端都加入到路由器的网络,协调器重新上电之后各个终端无法与协调器通讯,因为各个终端还是在路由器的网络里面,请问如果让终端重新加入协调器的网络?或者让终端无法加进路由器的网络也可以?总之如何解决协调器重启之后无法和终端通讯的问题?谢谢!
补充一下,协调器发送的指令都是用的AF_DataRequest使用afAddr64Bit地址模式。咨询一下如果采用16bit地址的模式,这个问题是否可以解决?
加入可以的话如果通过已经知道的64bit的获得16bit?
更换了16地址发送信息也不行,到底是什么原因呢?
当终端设备加到路由器以后,协调器上电的时候认为之前的终端设备还是自己的子设备,所以发数据的时候直接发出去了,这个数据时buffer在协调器的底层,等待自己的子设备通过data request来获取。原因是这个,可是如何解决呢?有哪位大侠指点一下迷津吧。
这个问题我之前也问过,V大神也回答了,和你说的差不多,但是没有提出怎么解决,这个问题很常见了,
我认为除非把不是自己的子节点的关联表方面删除了应该就可以了,没有论证,参考下!
当协调器给end device发数据不成功的时候,可以判断该节点是否是子设备byte AssocIsRFChild( uint16 shortAddr ),
然后把这个子设备删除掉byte AssocRemove( byte *extAddr )
已经按照这个方案试过了,发现和原来不同的地方是协调器重启之后,终端把信息发给路由器,路由器把信息再发给协调器,但是协调器还是没有把消息发给终端,此时可以看到终端有向路由器请求数据的log.请帮忙再看一下,谢谢!
现在终于可以看到路由器实际功能的log,还是很感谢的!
你把协调器关联表中该节点的信息删除掉以后,给这个节点发数据还不行吗?
是的,还是不行!请帮忙在看看。
nwkNeighborFind( uint16 nwkAddr, uint16 panID );
nwkNeighborRemove( uint16 NeighborAddress, uint16 PanId );
如果这个节点在邻居表里面的话,也把他清楚掉
试了上面两个函数,还是不行,请再帮忙看看。谢谢!
那你把这个节点的所有信息都删除呢,
Association List
Neighbor Table
Routing Table
我试验了,用AssocRemove(),可以把无效的关联节点删除掉,协调器就可以发数据了。
请问楼上是如何实现的?需要配合其他函数吗?我们的检测AF_DataRequest()函数的反回值,如果不是0,就调用AssocRemove()函数,发现现象依旧,协调器还是无法发出。不知道啥原因。
你好,请问下你是如何解决这个问题的,有QQ吗。麻烦指点一下啊,谢谢
我的QQ是87906234,麻烦看见后加我下。多谢