5.1 CTP协议的实现
CTP协议是基于树的多跳协议。把网络中的节点抽象为树,每棵树有一个根节点, 负责收集这棵树所有节点的信息。网络中节点通过路由梯度值(ETX)逐跳地选择路由, 直至到达根节点。根节点的ETX为0, 每个子节点的ETX值等于父节点的ETX值加上该节点到它父节点的路径ETX值。因此, ETX值是沿着往根节点的方向递减的, CTP选择路径ETX值最小的路径作为路由。
CTP的实现是基于下层链路估计结果的。链路估计会维护一个邻节点表, 表中存储了每个邻节点的路径ETX 值。CTP协议中的CtpRoutingEngine 组件实现了路由的选择, 它根据邻节点的ETX值为数据传输选择下一个路由。另一个关键的组件函数CtpForwardingEngine, 该组件主要是维护一个消息发送队列, 往下层发送本地产生的或者转发过来的数据包; 该组件还能够检测重复发送的数据包, 以抑制重复发包。
实现的四个关键函数是: 数据包接收(SubReceive.receive())、数据包转发(forward())、包传输(sendTask())和发送完成事件(SubSend.sendDone())。
函数SubReceive.receive ()决定是否要转发包。通过维护一个最近收到的包缓存来检查是否有重复包。如果判定一个包不是重复包, 则调用forward()函数。
forward()函数封装好要发送的包。这个函数同时检查是否有回环。发送时将包放到发送队列中去, 若队列满了, 就丢弃该包, 并把C位置1。如果队列为空, 则立即post 发送任务。
sendTask()检查发送队列头部的数据包, 封装好后提交给AM层。发送完成后, sendDone()函数检查发送的结果。如果该数据包已经被确认过了, 则将该包从队列中取出。如果是本地的包, 发送事件通知给上层的客户。如果是转发来的包, 则将它放到转发消息池中。如果队列中还有包的话, 就启动一个随机时钟, 重新post发送任务。
5.2 LEEP协议的实现
LEEP 是一种链路估计交换协议, 主要是用来计算某节点与邻节点之间的双向链路质量。节点A→B的链路质量是指B成功接收到A发送的数据包的概率。节点(A, B)间的双向链路质量是A→B的链路质量(in-bound 链路质量)与B→A的链路质量(out-bound 链路质量) 的乘积。
6 结束语
基于无线传感器网络的桥梁结构健康监测系统,我们对传感器节点的设计和支持系统运行的嵌入式操作系统TinyOS的移植问题进行了研究。还有两个问题需要进一步深入研究,一个是传感器网络的休眠节能技术需要解决网络各节点的同步问题;第二个问题是建立桥梁结构健康*估专家系统,能够根据传感器网络汇总的大量桥梁结构信息作出准确的分析判断,从而实现事故预报警,预防突发性灾难,确保桥梁安全。 |