基于线形长距离的无线传感器网络的通信协议方法
技术领域
本发明设计了一种基于线形长距离的无线传感器网络的通信协议方法,这一方法主要用来实现拓扑分布为线形长距离的无线传感器网络的通信,可以提供在干扰环境中切换信道的保障通信。
技术背景
随着物联网“智慧地球”的不断推广和应用,无线传感器网络在现今的工业生活中具有非常重要的作用。现有的无线传感器网络主要以星状网络和网状网络为主,在实际应用中,需要根据不同的应用场景来选择不同网络拓扑结构的无线传感器网络:星型网络构造简单、易于实施的特点令其在传输距离近、传输功率小的范围内容易收到良好的应用效果;网状网络结构由于其各个节点皆可通信,路由建立、维护及修复相对简单的特点,在传感器节点分布密度较小的情况下应用较广。
现有的网络拓扑结构会因其各自特点在一些特殊环境的使用中受到相应的限制,比如桥梁、公路和石油天然气管道等无人值守的线形环境。这些环境既需要远距离传输:基站与传感器节点距离较远,会达到几十甚至上百公里;又需要较低的传感器节点密度和相对简单的网络拓扑结构:传感器节点线形排列,密度较小,普通节点能耗较低,数据融合节点能耗较大,由其无人值守的特点需要减小网络能耗,降低网络复杂度,缩减网络路由和数据处理的开销。此时,现有的网络结构无法完全满足这些特殊环境的应用需求,基于此我们提出了线形 长距离无线传感器网络的通信协议方法。
发明内容
本发明提出了一种基于线形长距离的无线传感器网络的通信协议方法,基于线形长距离网络的特征给出了通信协议方法的具体设计方案、调频算法以及结点能耗的分析。
本发明设计的基于线形长距离的无线传感器网络的通信协议方法,包含以下步骤:
1)网络结点的地理布局为线形(直线或曲线,没有交叉或重叠),结点的数量可以根据网络的地理长度进行拓展,满足长距离的需求。网络由N个结点组成(N为自然数,根据网络所处环境及网络本身特点选择),由起始结点到末尾结点的物理地址(ADDR)编号依次为1,2,3…N,其中1号结点为Sink结点(数据接入点,以下简称为Sink结点),其他结点为ED结点(终端结点,以下简称为ED结点)。
2)网络中各个结点使用自行设计的满足线形无线传感器网络特点的“端口号映射法”协议方式,以实现结点之间多跳接力式的通信。“端口号映射法”协议架构从底层到上层依次为:物理射频层,媒体接入(MAC:Media Access Control)层(以下简称为MAC层),网络层和应用层。网络层通过封装物理射频层和MAC层的功能,形 成供应用层调用的API(Application Programme Interface)功能函数(以下简称为API函数),应用层通过端口号(PORT)映射功能选择调用网络层的函数,实现对结点之间多跳接力通信的逻辑和时序的控制。
3)本发明给出的是一种基于线形长距离的无线传感器网络的通信协议方法,其网络覆盖的距离较长,信道环境复杂,干扰影响大。基于这样的特性设计了适用于线形长距离的无线传感器网络的跳频算法:
a)主动跳频:网络中共有M(0<M<∞,M∈N,这里N为自然数集)个信道,在Sink结点处判断网络丢包率是否大于临界值P(0<P<1)。当网络丢包率大于临界值P时,Sink结点通过特定端口号(PORT)发起跳频请求,通过当前所处的i(1≤i≤M)信道以多跳接力的方式给所有结点发送跳频信息,在收到所有结点的跳频请求确认(ACKnowledge Character,以下简称为ACK)信息后,整个网络完成跳频。
b)被动跳频:当线形网络中任意ED结点与Sink结点失去联系后,ED结点通过M个信道分别请求Sink结点的频率信息,若在第j(1≤j≤M)个信道收到Sink结点的信道返回信息,则加入第j 个信道回到网络中。
4)本发明中结点的能量消耗呈现离散不对称性,使用频率较大的节点能耗较大,使用频率较小的节点能耗较小。假设相邻结点发送一次数据的耗能为E
0,线形网络中共有N-1(设N为网络中结点的个数)个ED结点,每个ED结点被访问的概率为
(被访问的结点为2,3,4…N,结点编号越大则离Sink结点距离越远,参见图1),则网络中编号为x(2≤x≤N)的ED结点的统计平均能耗为:
可看出网络中结点的统计平均能量消耗随网络编号的增加而减小,因此适用于线形长距离的无人值守的无线传感器网络。
附图说明
图1是本发明线形长距离的无线传感器网络的拓扑结构;
图2是本发明基于线形长距离的无线传感器网络的协议方法的层次结构;
图3是本发明基于线形长距离的无线传感器网络的结点工作流程图。
具体实施方式
本发明的网络拓扑结构为线形(参见图1),结点数量可随网络物 理长度的需要延伸,地址编号为1,2,3,…,N。相邻结点之间的距离为几十米到一千米,整个网络的覆盖长度可达到几十千米。网络将地址编号为1的结点作为Sink结点,它是网络各种命令发起的起始节点,同时也是网络数据汇总的结点,线形长距离的无线传感器网络通过Sink结点实现与其他网络(如以太网,GSM网等)的连接。网络将地址编号为2,3,4…,N的结点作为ED结点,ED结点既作为网络的中继结点又作为网络的数据采集结点,它以地址编号2,3,4,…,N的顺序按照线形拓扑结构依次部署,每个ED节点在接收和发送自己数据包的同时,也负责转发其他结点传来的数据包。本发明通过使用芯片为低功耗的MCU(Micro Control Unit单片机,以下简称为MCU)与无线收发模块集成的芯片组完成结点实现,其中单片机用于下载和运行协议栈程序,控制结点收发数据的逻辑和时序;无线收发模块完成信号的收发,其使用频段为ISM(Industrial,Scientific and Medical,工业、科学和医疗)开放的公共频段433MHz或2.4GHz。
本发明中协议方式针对线形长距离的无线传感器网络结点数目多、线形分布的特性,设计了“端口号映射法”的四层协议架构(参见图2),实现编程语言为C语言。在“端口号映射法”的四层协议架构中,物理射频层通过代码与MCU芯片的寄存器通信,封装硬件操作 的软件接口,为MAC层提供直接控制物理射频层得代码接口;与此同时物理射频层将每个结点在线形网络中唯一的物理地址(ADDR)固化在结点的MCU芯片寄存器中。协议栈中的MAC层通过物理射频层的代码接口将底层的数据封装成帧结构,并将CSMA-CA(Carrier Sense Multiple Access with Collision Avoidance:载波监听冲突避免)算法植入协议栈中,避免结点多路信号同时响应的问题。协议栈中的网络层用MAC层封装的接口函数来编写供应用层调用的功能函数,功能函数的形参包含结点的物理地址(ADDR)、网络端口号(PORT)、物理地址控制功能函数的执行对象和网络端口号(PORT)控制功能函数执行的具体动作,其中每个端口号(PORT)用来映射一种功能。协议栈中的应用层是协议栈的最高层,网络中的具体功能实现都是通过在应用层调用网络层封装好的API功能函数来实现:当结点收到数据包后,若数据包的目的地址是本节点,就分析端口号(PORT),通过识别不同端口号(PORT)映射的功能调用其对应的API功能函数;若数据包的目的地址不是本节点,则转发。
本发明设计的线形长距离的无线传感器网络协议栈是通过Keil C或IAR embedded workbench集成开发环境来实现的,它采用RS232串口将协议栈下载至所选择的MCU芯片中。
本发明所描述的无线传感器网络覆盖长度范围较大,几千米到几十公里均可实现,其信道环境复杂且各种干扰信号较多。采用跳频的方式使其在干扰条件下进行保障通信,具体实现方案是:
1)定义P为本网络中丢包率的门限值(O<P<1)。当Sink结点收到网络中其他ED结点的丢包率达到P时,Sink结点发起主动跳频,使用发送函数WSN_SEND()向全网发送跳频请求并将跳变的目标信道j(j为网络中任意信道的编号)置入请求中。在应用层将端口号(PORT)设为0x23,同时将发送结点的目的地址设为0xff,0xff地址表示网络中的广播地址,所有结点都要接受此数据包。当网络中结点接收到这个数据包后,判断端口号PORT是否为0x23,是则将结点本身的信道设置为编号为j的信道。
2)网络中任意ED结点,在原来信道连续三次连接网络失败后,判定结点本身加入网络失败。此时该结点将在网络中所有信道向Sink结点请求当前网络,将所有信道遍历后,在收到Sink结点反馈信息中的信道加入网络,恢复通信。
本发明设计的线形长距离的无线传感器网络结点分为Sink结点和ED结点两种。Sink结点完成发起网络命令及汇总网络数据的功能,ED结点完成网络中继及网络数据采集的功能,其各自的工作流程如下(参见图3):
1)Sink结点:在网络开始工作时,Sink结点需要向所有ED结点发送数据请求广播包。数据请求广播包主要用来携带数据请求信息、命令信息,其帧结构包括目的地址列表(即要收集数据的ED节点的ID列表)、发送数据源ID、采集数据时间段、对目的节点的请求数据等。数据请求广播包发送完毕后,Sink结点进入等待接收数据包状态,只有有数据包到达Sink结点时,Sink结点才会从等待接收数据包状态跳转出来,开始处理到达数据包,并向数据包源ED结点发送ACK信息,完成以上工作后,再次进入等待数据包状态。
2)ED结点:ED结点在网络开始工作时即进入等待接收数据包状态,只有数据包到达才会令ED结点从该状态跳转出来。当数据包到达时,ED结点会查看其目的地址是否指向自己。若指向自己,则判断该数据包是否为数据请求广播包:若是,则读取本地数据并向Sink结点发送数据包;若不是,则可判断该数据包为ACK信息,结点将不做处理直接转向等待接收数据包状态。若目的地址不是指向自己,该ED结点将缓存此数据包并向ID减少方向转发,然后继续转入等待接收数据包状态。