饶达琴,张文超
(杭州电子科技大学 电子信息学院,浙江 杭州 310018)
无线传感器网络(WSN,Wireless Sensor Network)是由分布在有效区域内具有通讯功能的大量传感器节点组成,通过无线方式自组织形成网络系统,节点采集信息并通过无线网络逐级传送到监控中心[1]。ZigBee是一种介于IEEE 802.11无线局域网与蓝牙技术之间的无线通信网络协议,是基于IEEE 802.15.4无线标准研制开发的有关组网、应用和安全方面的通信技术。ZigBee为用户提供了一个低成本、低功耗、低复杂度、适中的数据传输速率、高容量以及短距离通信等特性的技术平台[2]。依据该平台,客户通过创造性的研发工作,根据具体任务要求设计硬件系统和配备相应的软件,就可以出色地完成很多任务。
本文采用集成了ZigBee技术和增强型8051内核的SOC芯片CC2530,配合相应的软硬件,构建了一个无线测控网络。
该无线测控网络克服了目前一般无线网络的稳定性差易崩溃的缺点,支持星型、树型以及网状网的拓扑结构,除具有自组织功能外,还研发成功了自愈功能,对网络的稳定性、健壮性以及提高工作效率都有重大的意义。
下面首先简述ZigBee协议和Z_Stack协议栈,重点论述自组网的设计实现、网络自愈功能的研发与实现和该网络的一个实际应用例子:对无人值守通信基站的交流电压、电流和温湿度环境等参数的远程实时监控。
ZigBee协议体系由称为层的各模块组成。每一层为其上层提供特定的服务:
即由数据服务实体提供数据传输服务;管理实体提供所有的其他服务。每个服务实体通过相应的服务接入点(SAP)为其上层提供一个接口,每个服务接入点通过服务原语来完成所对应的功能。ZigBee协议体系如图1所示。
主要由应用层(APL)、网络层(NWK)、媒介访问控制层(MAC)和物理层(PHY)组成,其中媒介访问控制层和物理层是由IEEE 802.15.4标准定义的,ZigBee联盟则定义了网络层和应用层架构[3]。物理层定义了物理无线信道和MAC子层之间的接口,提供物理层数据服务和物理层管理服务。媒介访问控制层负责所有的物理无线信道的访问,并产生网络信号、同步信号;支持PAN连接和分离,提供2个对等(peer to peer)MAC之间可靠的链路。网络层主要实现节点加入或离开网络、接收或抛弃其他节点、路由查找及传送数据等功能。应用层框架包括应用支持子层 (APS)、ZigBee设备对象(ZDO)和制造商所定义的应用对象。
图1 ZigBee协议体系结构Fig.1 Architecture of ZigBee protocol
基于ZigBee协议应用开发中,用户只需实现应用层框架即可,应更多的关注应用层框架 (创造性发挥也在这一层)。APS主要用于维持绑定表、在绑定设备之间传送消息。ZDO主要定义设备在网络中的角色 (ZigBee协调器还是路由或者终端),发起和响应绑定请求,在网络设备之间建立安全机制等。
IEEE 802.15.4标准中定义了两种设备类型,全功能设备(FFD)与精简功能设备(RFD)。ZigBee协议也定义了这两类设备,ZigBee协调器相当于IEEE 802.15.4标准中的PAN协调器,ZigBee路由器拥有IEEE 802.15.4标准中协调器的功能,ZigBee终端是网络中最便宜的设备,拥有最少的功能。全功能设备(FFD)在ZigBee网络中能完成拓扑结构中任何功能,而精简功能设备(RFD)在ZigBee网络中只能作为终端,且只能与全功能设备(FFD)通信。全功能设备(FFD)与精简功能设备(RFD)硬件配置是可以完全相同,但在软件的配置上不同。
网络拓扑结构由ZigBee协议的网络层决定,且必须是IEEE 802.15.4标准中定义的两种类型之一:星型网络和对等型网络[4]。在星型网络拓扑结构中,协调器建网与路由数据的功能,终端节点通过协调器进行通信。在对等网络中,所有的节点在网络范围内都可以进行通信,所有的节点都参与数据传递。因此网络能够自组织以及通过多跳方式来进行通信(这也为实现自愈功能提供了必要的基础)。
CC2530是TI公司推出的一款兼容IEEE 802.15.4的SOC,集成了增强型8051内核,结合上TI的Z_Stack协议栈软件,可组建网络,同时加快开发周期,减小开发成本。
Z_Stack协议栈采用操作系统的思想来构建,采用基于优先级的事件轮循机制,当各层初始化完成后进入低功耗模式,事件发生时,唤醒系统进入中断处理事件函数,结束后继续进入低功耗模式[5]。操作系统抽象层(OSAL)实现了一个易用的操作系统平台,通过时间片轮转函数实现任务调度,提供多任务处理机制。系统中tasksEvents数组中存放着每个任务标志位,轮循判断各任务标志位来执行对应的任务。Z_Stack协议栈工作流程如图2所示。
图2 Z_Stack协议栈工作流程Fig.2 Workflow of Z_Stack
Z_Stack协议栈提供多种任务事件触发机制,可以直接通过API函数osal_set_event()设置要触发的任务标志位;也可以通过设置一个软件定时器 osal_start_timeEx()函数等待溢出来触发;最后,也可以通过调用系统消息传递机制来触发任务事件。在进行应用开发时,需要在tasksEvents数组中添加相应的任务,确定任务的ID号。同时在初始化系统任务函数osalInitTasks()中添加任务的初始化函数,在事件处理函数数组tasksArr[]中添加任务处理函数。每个任务的ID号是唯一的,系统按每次检测到的任务ID号执行相对应的事件处理函数。
通过对ZigBee协议体系的研究,利用Z_Stack协议栈在CC2530平台上,实现ZigBee自愈功能的自组网,传感器节点对无人值守通信基站的交流电压、电流和温湿度环境等参数进行信号调理和采集后经路由器节点、协调器,再通过GPRS通信方式传递到监控中心,实现对无人值守通信基站的交流电压、电流和温湿度环境等参数的实时监控结构如图3所示。
图3 无人值守通信基站参数实时监控示意图Fig.3 Schemes of the unattended communication stations parameter real-time monitoring
ZigBee无线网络中,只有一个节点作为协调器,其他节点都是路由器或终端。网络中每个节点都有两个地址:64位IEEE扩展地址和16位网络地址。64位IEEE扩展地址类似于MAC地址,它唯一的标识着每一个设备。16位的网络地址在节点加入网络时由其父节点(协调器或路由器)动态分配,该地址仅在路由或者数据传输时使用[6]。
ZigBee无线网络有两种地址模式,静态地址分配和树状地址分配。协调器确定整个网络节点数目,每个节点都拥有一个网络深度,用以指示在其父子链路上数据传输到协调器所需的最小跳数。协调器的深度为0,而它的孩子节点深度为1。可知,多跳网络中深度大于1,网络深度是由协调器来决定的。ZigBee网络中,假设一个父节点有最大孩子节点数为Cm,网络最大深度为Lm,一个父节点的最大路由数为Rm,可以计算网络中每个节点的功能函数Cskip(d):
式中d是节点到协调器的深度。如果Cskip(d)的值为0,则表明此节点为叶子节点,而Cskip(d)的值大于0,则表明该节点可作为一个父节点,这个父节点可以接收子节点并根据它们是否具有路由能力来分配地址。具体过程是:首先一个子节点的地址被分配,子节点地址比父节点的地址多1,然后其余节点根据下式求出:
式中 1≤n≤(Cm-Rm),Aparent代表父节点的地址。
ZigBee协调器在上电后,首先要建立一个无线网络。在Z_Stack协议栈中,通过函数ZDApp_NetworkInit()进行网络初始化,系统检测到ZDP任务的ZDO_NETWORK_INIT事件,调用处理函数ZDO_StartDevice()启动网络的组建。通过变量logicalType判断设备类型,如为协调器,则调用ZStatus_t NLME_NetworkFormationRequest()来完成网络的组建,同时该函数产生一个回调函数ZDO_Network Formation ConfirmCB(),通过该函数,根据系统消息判断网络组建是否成功。
当网络建立完成并允许新设备加入时,子设备(即子节点)才可以请求加入网络。在Z_Stack协议栈中,子节点上电后调用ZDApp_Network Init()进行网络初始化,之后调用 NLME_NetworkDiscovery Request()来寻找射频范围内存在的ZigBee网络,该函数会产生回调函数ZDO_Network Discovery ConfirmCB(),系统就是通过该函数来得到发现的网络信息。在发现有已经建好的ZigBee网络后,调用NLME_JoinRequest()加入网络,同时产生回调函数ZDO_JoinConfirmCB(),通过该函数判断加入网络是否成功。路由器在网络中负责信息的转发,发现邻居等,同时路由器必须在另一个路由的射频范围内,并且持续监听网络内传递的新信息。终端节点负责各种数据的采集与上传以及接收下传命令并执行,同时监听网络。
如果在网络的正常运行情况下,有路由器因故障离网,导致原有的路由线路破坏。ZigBee提供了实现网络自愈功能的基础,在用户研发的软硬件配合下,可以实现强大的网络自愈功能,使得整个网络不因个别节点的变动而能持续工作。终端节点在这种情况下,又会再次启动发现网络加入网络的过程。但,前提是在终端节点的射频范围内存在着可用的路由器。在 Z_Stack协议栈中,通过调用zb_ReadConfiguration()可以访问非易失性存储器NV中的信息,其中包括节点的设备类型logicalType,节点的IEEE地址,节点的启动模式startOptions等重要信息,同时也可以通过调用zb_WriteConfiguration()来写入这些设备信息,能够在协议栈中灵活的配置网络节点,实现整个网络的自启动、自组网以及自愈等功能,提高了网络的稳定性、健壮性也同时提高了网络的工作效率。
在像无人值守通信基站(或局站)等重要场合,需对基站的交流电压、电流和温湿度环境等参数实时监控。采用本网络对基站的各种参数进行采集,软件设计主要在Z_Stack协议栈的应用层上实现。各种参数信号经过外部调理电路处理后连接到CC2530的模拟IO口,CC2530的 ADC转换模块采集各个参数并在内部进行定标和各种运算处理。处理后的数据部分供给采集子节点本地使用;部分需上传的数据经过CC2530的系统触发数据传送事件,调用afStatus_t AF_DataRequest()将数据无线发送给协调器。
协调器接收到各种测量参数对应的无线数据后直接发送至登记注册过的端点。应用程序将通过AF_INCOMING_MSG_CMD OSAL消息事件处理接收到的数据包(包内主要有:数据组号group ID、发送节点的网络地址、端点号、数据类型以及各种测量参数对应的数据)。协调器通过对数据包的分析,准确的提取出所需要的节点号以及各种测量参数数据,最后通过GPRS通信方式将采集的数据上传到监控中心,实现对无人值守通信基站的交流电压、电流和温湿度环境等参数的实时监控。
文中分析了ZigBee协议体系结构各层主要功能,以及ZigBee网络中两种网络拓扑结构;研究分析了TI的Z_Stack协议栈的开发与工作流程,以及自组网、自愈组网的协议开发过程。基于CC2530无线单片机硬件平台设计了一个具有自组网、自愈功能的ZigBee无线传感器网络,很好地实现了网络的自组网和自愈功能,同时完成了对无人值守通信基站的交流电压、电流和温湿度环境等参数的实时监控。该系统应用广泛,还可以用在其他工业远程测控、路灯遥测遥控以及环境监测等无人值守领域,有非常好的应用前景和显著的社会经济效益。
[1]杜向党,李淼,张继红.基于ZigBee与GPRS的无线远程监控试验系统设计[J].实验技术与管理,2010,27(5):77-79.DU Xiang-dang,LIMiao,ZHANG Ji-hong.Design of wireless and remote monitoring experimental system based on ZigBee and GPRS[J].Experimental Technology and Management,2010,27(5):77-79.
[2]Shahin Farahani.ZigBeewirelessnetworksand transceivers[M].America Newnes,2008.
[3]孙静,于洋.ZigBee无线传感器网络树状路由协议研究[J].通化师范学院学报,2011,32(6):25-26.SUN Jing,YU Yang.Study on tree routing protocol for ZigBee wireless sensor network[J].Journal of Tonghua Normal University,2011,32(6):25-26.
[4]俞仁来,谭明皓.基于ZigBee的无线传感器网络路由分析[J].通信技术,2011,1(44):129-130.YU Ren-lai,TAN Ming-hao.Analysis on ZigBee-based wirelesssensornetwork routing[J].CommunicationsTechnology,2011,1(44):129-130.
[5]石家骏,钟俊,易平.基于ZigBee的无线抄表系统网关的设计与实现[J].计算机工程与设计,2011(3):875-876.SHI Jia-jun,ZHONG Jun,YI Ping. Design and implementation of wireless meter reading system gateway based on ZigBee[J].Computer Engineering and Design,2011(3):875-876.
[6]金纯,罗祖秋,罗风.ZigBee技术基础及案例分析[M].北京:国防工业出版社,2008.