如题,
1.协调器在预编译的时候,定义CONCENTRATOR_ENABLE 为 true,我理解为开启manyToOne,对吗?还有manyToOne具体是个什么样的功能,应用在什么场合(为什么要有MTO,什么情况下要开启MTO,开启MTo有什么好处和弊端)?
2.然后我又开启了CONCENTRATOR_ROUTE_CACHE 为 true ,这个我理解为协调器能够记录每个router的路径地址,然后有帖子上面说如果对于内存有限的设备来说,开始这个会消耗过多的RAM ,那么源路由上面存的不存路径,如果源路由存了,协调器上岂不是不用存了?
3.承接第二个问题,当开启这个CONCENTRATOR_ROUTE_CACHE 的时候,END设备的中继出现问题,当end设备切换父节点(比如从一个router切到另一个router)的时候,抓包显示update的annce消息都给到协调器了,但是协调器就是控制不到这个END,下发控制命令的时候直接发给了之前的父节点,如下图,
图中可以看到:
C1AA是一个end,他从71F3切到了676B作为父节点,同时676B也发出了UpdateDevice指令还有Announce指令 抓包显示协调器收到了并分发了出去 但是我在给C1AA发指令的时候,协调器却把指令发给了C1AA原来的父节点71F3,
请问会是什么原因导致的?
4.承接第3个问题,当我 CONCENTRATOR_ROUTE_CACHE还原成false了以后,end切换父节点的问题又没了,我的粗浅的理解是:开启CONCENTRATOR_ROUTE_CACHE导致协调器内存不够,虽然接受到updateDevice和deviceAnnce指令了,但是协调器无法去更新自己的某某表吧,想知道这么理解对不对?
5.承接第4个问题,当把CONCENTRATOR_ROUTE_CACHE还原成false了以后,那么我开启CONCENTRATOR_ENABLE 还有什么意义呢?,原本就是想在大网络的情况下让指令能快速的发送给目的设备,现在协调器不保存了,想控制某某设备的时候还是要重新获取目的设备的路由地址,这个跟源路由有没有关系,其实自始至终都没弄明白 源路由到底是个什么(我自己理解的源路由:源路由负责保存他的子节点的信息,而协调器只需要保存每一个一级路由并且知道哪个设备挂在哪个源路由就行了,打个比方,教育局(协调器)知道了某个学校(一级路由)某个同学(n级子节点)的先进事迹,想要找到这个同学,他会去找那个同学的校长(代表一级路由),然后叫校长把消息传下去,校长就会找到年级组长(二级路由),年级组长通知各班主任(三级路由?),班主任再去找小组长,小组长然后找到这个同学?在这个网络里,对于教育局(协调器)来说,他仅知道这个同学在这个学校就可以了,其他的交给该校长(对应的源路由?),然后后面他不管了,等待校长反馈说通知到了学生就可以了,如果教育局连这孩子在哪个学校都不知道呢?好,就发RouterRequset,通知个校长,有个某某学生,在不在你们学校,这就是我理解的源路由个集中器的关系,请问理解正确吗?)?如果要协调器记录所有router的Path的话,那源路由又起什么作用呢?
6,概念问题,协调器上有很多表:路由表,关联表,邻居表,地址管理表,路由发现表,路径维护表,这些都是怎么个意思?看了开发文档上的解释,不知所云,有没有白话一点的解释或者打个比方(我个人比较偏爱打比方,这样是最好的方法),当用到什么功能的时候,会开始什么表去查找什么信息,这些在代表中都看不到,也是醉了,只能去猜.
暂时就发这些问题吧,知道的大神可否告知一二,或者可以交流交流嘛,有交流才会有思想的碰撞现在是互联网时代,要充分发挥优势,闭门造车是行不通的,
VV:
感谢非常详细的提问,我想还是需要先理解下关于MTO路由协议的特点。你可以参考
下面文档中的,这个文档是Z-Stack Developer's Guide.pdf在C:\Texas Instruments\Z-Stack Home 1.2.2a.44539\Documents目录下
5.4.4 Many-to-One Route Maintenance
另外在百度谷歌上也有介绍MTO的,如果理解了MTO可能有些问题已经有答案。
wei shi5:
回复 VV:
VV你好 能不能帮我看下那个抓包图上的信息,在终端切换父节点的时候,协调器已经知道这个设备切换了富节点,但是仍让加消息发送给了原来的父节点 这是什么原因啊,开启了MTO 也换了2538了 但是问题依旧,都过去半个月了 没有一点进展 ,领导催的不行,有时候我都怀疑是不是Z-Stack有这方面的Bug,但是一想又不对, 这么多人都在用,应该不会有问题 还请帮忙解答一下,
VV:
回复 wei shi5:
好的,请你把抓包的文件另存为cubx文件上传下,不方便的话可以私信发给我。
另外设备切换父设备的时候,是通过什么方式让协调器知道的? Device Announce还是单独的应用层数据?