ZigBee协议网络层的设计与实现
时间:07-08
来源:互联网
点击:
1 引言
Zigbee是一种新兴的短距离、低速率无线网络技术,主要用于近距离的无线通信,由于具有低功耗、低成本、可扩展以及良好的互操作能力等特性,在工业自动化、建筑自动化以及工业无线领域占有重要地位[1][2][3]。
ZigBee联盟[4]成立于2001年8月,2002年下半年,英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司等四大公司加盟ZigBee联盟,这一事件成为ZigBee技术的里程碑。到目前为止,加盟ZigBee联盟已经涵盖IT领域以及其它行业的200多家企业,其中还包括来自我国的华为技术有限公司和中国科学院沈阳自动化研究所。
2 协议栈架构
Zigbee协议栈软件采用C语言编写,开发环境采用AVR Studio4.12,硬件平台采用的单片机为Atmega128,射频模块采用CC2420。采用的标准是ZigBee 1.0规范[5], 整个协议栈软件采用单线程,考虑到Atmega128内部RAM只有4K的空间,因此,各模块之间采用共享缓冲区进行通信。Zigbee协议栈软件的架构如图1所示。
每个模块具有一个执行函数,用于接收来自底层模块的数据。在数据接收阶段,底层模块将接收到的数据帧在本层解析后,将需要向上层模块发送的数据存放在共享的接收缓冲区,同时通过全局变量的形式向上层模块提供指示原语;在上层模块的执行函数中,首先通过判断来自底层模块的指示原语确定是否存在来自其它节点的数据,如果存在则解析并处理,同时将需要传递给更高模块的数据放入接收缓冲区,同样通过指示原语通知更高层模块。
图1 Zigbee协议栈软件架构
3 网络层的设计与实现
网络层通过两个服务实体分别提供两类服务,它们分别是网络层数据服务和网络层管理服务。1)数据服务实体:提供数据服务,主要负责数据的发送和接收;2)管理服务实体:提供管理服务,主要负责网络层的管理和维护,包括网络的发现和创建,设备的加入和离开以及路由的创建与维护。
3.1 数据发送和接收
网络层的数据服务实体负责数据的接收和发送,接收处理模块负责接收数据,发送处理模块负责发送数据。
数据接收和发送处理模块的功能和工作流程如下:
1)数据接收处理模块
接收处理模块负责从下层接收数据,解析报文的网络层头部,分情况做相应的处理:如果是重复报文,则丢弃;如果是发给本节点的数据报文或者广播报文,则交给上层处理;如果是需要本节点转发的报文,则将报文交给发送处理模块处理。
2)数据发送处理模块
发送处理模块负责从上层或者接收处理模块中接收数据,根据不同的情况做相应的处理:如果报文的剩余跳数不大于0,则视为“死报文”,丢弃之; 否则需要进行报文发送。首先查找路由表,如果找到了到目的节点的有效路由表项,则根据路由信息将报文发送出去;如果没有,则根据报文的路由发现选项决定是否进行路由发现,以及是通过树型路由发送报文还是等待路由回复消息到达后再发送报文,具体的我们将在3.3节的路由发现和维护中进行详细说明。
3.2 网络设备管理
ZigBee的网络中包括协调器设备、路由设备和终端节点设备,其中,协调器设备负责创建网络,路由设备可以参与网络路由和数据转发但是终端节点设备只能作为叶子节点而不能参与路由。设备管理主要包括网络的发现和创建以及节点的加入和离开。
节点进行网络通信的第一步是由协调器设备负责创建网络。协调器节点首先进行信道扫描来进行网络发现,根据扫描结果,选择一个最佳的空闲信道并在该信道上创建网络。在协调器节点创建网络后,非协调器节点就可以加入网络了。具体的步骤如下:1)进行网络发现。如果指定了PANID(Personal Area Network ID,个域网ID),则发现相应ID的个域网才进行加入,否则,加入到最先扫描到的网络。2)选择合适的父节点,发送加入网络请求。从邻居节点中选择合适的节点作为自己的父节点,并向其发出加入网络的请求。3)加入网络。通过父节点加入网络,并获得一个16位的网络层地址。
协调器节点创建网络或者非协调器节点加入网络,其实现的难点和关键在于进行网络发现。我们通过设计有限状态机的方法来进行网络发现,其状态转换如图2所示。
图2 网络发现状态转换图
Zigbee是一种新兴的短距离、低速率无线网络技术,主要用于近距离的无线通信,由于具有低功耗、低成本、可扩展以及良好的互操作能力等特性,在工业自动化、建筑自动化以及工业无线领域占有重要地位[1][2][3]。
ZigBee联盟[4]成立于2001年8月,2002年下半年,英国Invensys公司、日本三菱电气公司、美国摩托罗拉公司以及荷兰飞利浦半导体公司等四大公司加盟ZigBee联盟,这一事件成为ZigBee技术的里程碑。到目前为止,加盟ZigBee联盟已经涵盖IT领域以及其它行业的200多家企业,其中还包括来自我国的华为技术有限公司和中国科学院沈阳自动化研究所。
2 协议栈架构
Zigbee协议栈软件采用C语言编写,开发环境采用AVR Studio4.12,硬件平台采用的单片机为Atmega128,射频模块采用CC2420。采用的标准是ZigBee 1.0规范[5], 整个协议栈软件采用单线程,考虑到Atmega128内部RAM只有4K的空间,因此,各模块之间采用共享缓冲区进行通信。Zigbee协议栈软件的架构如图1所示。
每个模块具有一个执行函数,用于接收来自底层模块的数据。在数据接收阶段,底层模块将接收到的数据帧在本层解析后,将需要向上层模块发送的数据存放在共享的接收缓冲区,同时通过全局变量的形式向上层模块提供指示原语;在上层模块的执行函数中,首先通过判断来自底层模块的指示原语确定是否存在来自其它节点的数据,如果存在则解析并处理,同时将需要传递给更高模块的数据放入接收缓冲区,同样通过指示原语通知更高层模块。
图1 Zigbee协议栈软件架构
3 网络层的设计与实现
网络层通过两个服务实体分别提供两类服务,它们分别是网络层数据服务和网络层管理服务。1)数据服务实体:提供数据服务,主要负责数据的发送和接收;2)管理服务实体:提供管理服务,主要负责网络层的管理和维护,包括网络的发现和创建,设备的加入和离开以及路由的创建与维护。
3.1 数据发送和接收
网络层的数据服务实体负责数据的接收和发送,接收处理模块负责接收数据,发送处理模块负责发送数据。
数据接收和发送处理模块的功能和工作流程如下:
1)数据接收处理模块
接收处理模块负责从下层接收数据,解析报文的网络层头部,分情况做相应的处理:如果是重复报文,则丢弃;如果是发给本节点的数据报文或者广播报文,则交给上层处理;如果是需要本节点转发的报文,则将报文交给发送处理模块处理。
2)数据发送处理模块
发送处理模块负责从上层或者接收处理模块中接收数据,根据不同的情况做相应的处理:如果报文的剩余跳数不大于0,则视为“死报文”,丢弃之; 否则需要进行报文发送。首先查找路由表,如果找到了到目的节点的有效路由表项,则根据路由信息将报文发送出去;如果没有,则根据报文的路由发现选项决定是否进行路由发现,以及是通过树型路由发送报文还是等待路由回复消息到达后再发送报文,具体的我们将在3.3节的路由发现和维护中进行详细说明。
3.2 网络设备管理
ZigBee的网络中包括协调器设备、路由设备和终端节点设备,其中,协调器设备负责创建网络,路由设备可以参与网络路由和数据转发但是终端节点设备只能作为叶子节点而不能参与路由。设备管理主要包括网络的发现和创建以及节点的加入和离开。
节点进行网络通信的第一步是由协调器设备负责创建网络。协调器节点首先进行信道扫描来进行网络发现,根据扫描结果,选择一个最佳的空闲信道并在该信道上创建网络。在协调器节点创建网络后,非协调器节点就可以加入网络了。具体的步骤如下:1)进行网络发现。如果指定了PANID(Personal Area Network ID,个域网ID),则发现相应ID的个域网才进行加入,否则,加入到最先扫描到的网络。2)选择合适的父节点,发送加入网络请求。从邻居节点中选择合适的节点作为自己的父节点,并向其发出加入网络的请求。3)加入网络。通过父节点加入网络,并获得一个16位的网络层地址。
协调器节点创建网络或者非协调器节点加入网络,其实现的难点和关键在于进行网络发现。我们通过设计有限状态机的方法来进行网络发现,其状态转换如图2所示。
图2 网络发现状态转换图
转换图中共有5个状态,各个状态定义如表1所示:
表1网络发现状态定义
节点可以通过发送LEAVE_REQUEST请求原语离开网络,也可以通过发送LEAVE_REQUEST请求原语让别的节点离开网络。当节点收到LEAVE_REQUEST请求(来自本节点的应用层或者来自其他节点)时,执行离开网络操作:首先,节点发送离开指示报文LEAVE_INDICATION给所有的邻居节点;然后,邻居节点收到LEAVE_INDICATION后,将该节点从邻居表和路由表等信息中移除;最后,清空本节点网络层信息,离开网络。
- ZigBee、GPRS在充电桩中的应用(04-18)
- ZigBee语音传输分析(11-25)
- 基于ZigBee无线传感网的电源监控系统设计(04-21)
- CC2538单芯片支持物联网及ZigBee等多种标准(04-15)
- 无线传输的电能质量监测系统电路(06-10)
- 无线节水滴灌自动控制系统的设计方案(02-08)