- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
WSN中基于TinyDB路由模块的分析与改进
选择父节点可由chooseParent()函数来实现。当节点周期性广播路由状态信息时,每个节点都会相应的更新邻居节点到汇聚节点的跳数,并根据计算出来的代价函数来选择父节点。节点可按照路数小的优先当父节点,在跳数相同的条件下,可选择链路质量比较好的作为父节点。其实现流程如图3所示。
最后是数据包发送,可由SendRouteTask()函数把节点更新的消息(比如到根节点的跳数,以及链路代价等信息)封装到一个路由分组并广播所有邻居节点。
2.2 接收阶段分析
当节点收到一个数据包时,首先会检查自己的路由表中是否已经存在这个表项。如果存在,则退出。如果不存在,则需要在路由表中加入这个新的表项。这通常可由updateNbrCounters()函数实现。
路由表的大小一般由ROUTE_TABLE_SIZE决定,其值等于16。当路由表表项未满时,则可直接加入该表项。当路由表已满时,则应替换路由表中的某一个表项。替换发送估计值最小的节点,因为发送估计值越小,表明到该节点的通信质量越差。先由findEntryToBeReplaced()函数找到被替代那一表项的id号,并把这一项用newEntry()函数来清空,然后再把新的表项加入到路由表中。
3 网络拓扑模块的改进
采用上面的协议具有明显的缺点。首先,由于采用跳数小是作为选择父节点的首要条件,既使到根节点的链路质量不好,但由于跳数小,节点仍然会选择该节点作为父节点;另外,节点对链路质量的*估和最近一段时间的信道质量以及通信量都有关系,所以,信道质量会产生抖动现象。这样,子节点经常会在几个链路质量比较接近的父节点之间摇摆,从而造成拓扑的不稳定。本文即对此进行了改进。
首先是在chooseParent()中进行改进,即在选择父节点时,按照到根节点的总的成本来计算,即以到根节点的总代价最小为原则。并在算出代价后和原来的父节点代价作比较。如果低于某个数值时,才换父节点,这就避免了在几个相近的父节点间来回摇摆。其实现程序如图4所示。
4 实验结果分析
把TinyDB的程序可在TinyOS的仿真工具Tossim中运行,然后分别将改进的路由协议与原来的路由协议在TOSSIM中进行仿真,图5所示是其仿真结果。
该仿真设定的模拟条件和假设前提为:时间间隔设定为5秒,即每隔5秒触发一次查询;设定模拟时间为300秒,分别记录10、20、30、40个节点的情况,每次都做20次,根据查询结果,其中有一项parent-id,故可知道该节点的父节点。其统计的父节点变化次数如表1所列。
由表1的实验数据分析可知,所改进的路由模块由于减少了父节点的变换次数而增加了网络的稳定性能。但在超过了16个节点之后,父节点的变化次数要明显增多,原因是在路由表中最多可心存16个条目。