文献标识码:B
文章编号: 0258-7998(2012)10-0122-04
随着计算机技术和无线通信技术的快速发展,各种智能化产品不断涌现,其中无线传感器网络WSN(Wireless Sensor Networks)[1]具有无线通信、感知、协作等特点,并很快融入到生活的方方面面。在大型超市、高档小区、办公楼里常常需要适时监测区域环境内的温度、湿度及有毒气体的浓度,以保障生命财产安全。传统的环境监测系统布线烦琐,消耗人力。ZigBee技术作为一种新兴的短距离无线传感器网络通信标准,具有低功耗、低延迟、自组织等优点[2],因而广泛应用到生产、生活领域,市场前景非常广阔。
ZigBee标准基于IEEE 802.15.4低速率无线个人局域网,支持介质访问控制层和物理层标准,并在此之上包含网络层、安全层和应用层,具备很强的设备联网能力,它支持网状结构、星状结构及树状结构三种自组织无线网络拓扑类型结构[3]。本文基于ARM9控制平台实现了传感器网络信息的实时显示和ZigBee节点设备的控制。该无线传感器网络室内环境远程监控平台,以ZigBee芯片CC2530作为传感器节点控制和无线通信芯片,实现温度、湿度和气压等环境信息的感知。
1 系统方案设计
控制平台基于WSN技术和嵌入式技术,借鉴了国内外优秀环境监测研究经验,设计了基于CC2530芯片采集传感器数据的ZigBee无线网络和基于ARM9的网络控制台。
1.1 系统总体功能介绍
本系统实现图形化网络拓扑结构的动态构建和管理,以及图形化控制ZigBee节点设备;支持多跳网络;支持外界环境状态信息感知,传感器数据精确采集、无线传输和显示,当环境信息超过临界值时报警等功能。
1.2 系统框架设计
系统由ARM控制台模块、基于ZigBee的无线传感器网络通信模块及网关模块三个主体部分构成,系统框架结构如图1所示。
控制台模块采用ARM9芯片作为处理器,基于Linux操作系统,搭配自制底板作为控制台软件运行环境,采用QT-4.5.3作为应用程序开发框架进行控制台软件开发。
无线传感器网络通信模块采用基于IEEE 802.15.4标准的ZStack-CC2530协议栈开发,完成ZigBee网络建立、维护以及传感器数据采集、节点控制等功能。传感器节点由ZigBee节点融合传感器构成。
(1) ZigBee节点。包括协调器节点,路由器节点和终端节点,采用ZigBee芯片CC2530自主设计和绘制电路图以及外围硬件电路。CC2530是一款SoC芯片,集成了处理器、无线电和串口等外设。
(2) 传感器。包括温湿度传感器,振动传感器及压力传感器等,用于对环境状态信息的动态感知。
网关模块采用集成于ARM平台的串行口,通过UART方式连接ZigBee协调器与控制台,根据预定的帧进行通信。上行和下行的数据都通过网关在网络上传输,由其负责数据包的解析和转发。
1.3 系统通信协议及数据格式设计
本系统在控制台与ZigBee协调器之间,使用UART传输数据;在ZigBee网络节点之间都按照ZigBee协议实现通信。控制台、网关、ZigBee网络之间按照约定的数据帧格式进行数据包传递,帧结构由帧头、数据负载、帧尾三部分组成,如图2所示。
(1) 1 B的帧头0XFB和1 B的帧尾0XFE。
(2) 1 B的帧长度和1 B的帧负载属性。
(3) 多个字节的业务负载数据,ZigBee网络中的数据业务主要有节点设备描述符、节点设备数据、状态和控制业务。
节点设备描述符用于描述当前ZigBee节点的短地址、长地址,以及节点所挂载的传感器类型和数目;节点设备数据为传感器实时采集的环境数据;状态和控制业务为用户发出指令。
2 无线传感器网络程序设计
无线传感器网络基于ZStack-CC2530-2.2.0-1.3.0开发,实现了ZigBee网络的构建,内部使用小型操作系统OSAL[3],实现任务和消息的管理。数据采集和传输由自定义传感器数据采集任务在应用层登记串口消息后,交由OSAL管理完成。
2.1 传感器数据采集与传输程序设计
本文所述的网络是由协调器、路由器和终端节点构成的树状网络。协调器节点建立网络,其他节点则主动寻找连接协调器的最小代价路由[3]。所有节点上电之初将发送节点的设备描述符,并周期上传节点在线状态信息。终端节点采集传感器数据经路由器转发至协调器。
2.2 串口数据传输程序设计
串口作为命令和数据传输接口,协议栈默认登记在MT层[4],本系统将串口消息登记到应用层,并在应用层完成处理。初始化串口并注册好回调函数后,当串口接收缓冲非空时,就会触发系统消息事件。回调函数首先检测串口命令的起始标识,获得起始标识后,按照系统定义的串口命令格式读取缓冲区,同时填充到预先分配的结构内存区间。结束标识用于校验该串口命令是否发生误操作、误传输。若传输正确,则将串口命令按照定义的消息格式登记到应用层处理。
3 控制台软件程序设计
控制台主要由网关通信功能块、网络拓扑控制与显示功能块,设备控制与显示功能块构成,实现人机交互,实现对设备的控制和对数据的处理、显示。
3.1 控制台总体结构介绍
控制台有4个功能界面,分别为网络拓扑主界面、设备列表界面、全局控制界面及设备控制界面。各界面之间彼此联系、共享数据,总体框架如图3所示。
3.2 控制台功能设计
控制台实现两方面的功能:(1)处理来自网关模块的数据,根据节点描述符完成ZigBee网络拓扑结构动态构建和节点状态信息动态直观展示,并根据传感器数据动态显示相应信息。(2)接收用户指令,发送相应的控制数据包给网关模块,并转发至ZigBee协调器,完成对设备的精确控制,如打开、关闭设备,控制采集频率等。
图3中网络拓扑主界面用于ZigBee网络拓扑结构动态构建和节点状态信息动态展示;设备列表界面展示每个ZigBee节点上传感器硬件信息;全局控制界面针对特定ZigBee节点进行整体控制;设备控制界面区别于全局控制界面,用来控制ZigBee节点上指定标签的传感器设备。
3.3 通信网关程序设计
网络通信接口作为网关,负责ZigBee网络协调器与控制台软件之间数据包的解包与封包,并按照数据帧结构进行通信。通过串口连接实现数据接收和发送。
通信网关结构如图4所示,网关不仅负责将上位机接收到的用户下行命令封包,并递送到ZigBee协调器,并转发到相应无线节点,而且还负责ZigBee网络上行数据包的解包,并递送到控制台。
由于ZigBee网络数据包接收速率和控制台处理速率之间不匹配,本系统采用循环队列对数据进行缓冲,以匹配两端数据速率的不平衡。读、写循环队列函数采用多线程实现,线程一实现读取串口数据并写入队列;线程二实现读取循环队列数据交由控制台处理。线程之间利用互斥锁和条件对临界区进行保护,以实现同步。通过信号来唤醒。程序主体部分由一个主进程负责维护两个子线程,两个子线程分别对循环队列进行读写操作。环形缓冲区以互斥锁实现单生产,单消费模式,可有效节省空间,提高数据的处理速度。
在无线传输过程中可能发生丢包或者乱码。产生丢包则网关读取的数据不是完整的一帧;而出现乱码则虽然收到完整的一帧数据,但是其中部分字节已经出现错误。只有当收到数据为完整的数据帧并且无乱码时,才能调用解析函数进行解析。
针对传输中的丢包和乱码,网关模块使用了两种数据校验方法:一种是帧头、帧尾检测法,用于验证完帧的完整性;另一种为增加校验码法,用于检验数据包是否发生丢包。
网关程序流程如图5所示,图中由主进程产生两个子线程,主进程运行run_module,负责初始化,包括打开串口,设置循环队列,产生子线程等。由主进程产生的两个子线程分别为写线程write_rs232和读线程read_rs232。写线程读取串口的数据,并将数据存储到循环队列中,读线程从循环队列读取并解析数据。如果写线程有数据,将会使读线程阻塞并等待写线程完毕,读线程读取数据后也会发送信号到阻塞的写线程,采用互斥锁和条件变量的同步方式保护了共享数据区不被破坏,实现了数据同步。
3.4 网络拓扑控制与显示程序设计
网络拓扑控制与显示功能部分对来自ZigBee网络的数据,裁决模块将根据最近30 s收到的传感器节点信息来判定某ZigBee节点是否掉线,掉线或复活都将重构网络拓扑图,并更新全局存储区。
在网络拓扑页设置周期2 s的定时器QTimer,用于周期更新网络拓扑结构。时间到,则提取共享存储区中的全局变量,检测是否存在超出30 s还未向控制台报告存活状态信息的节点。若存在,则初始化这样的ZigBee节点为灰色,并失活此节点,如果再次检测到该节点上线,则恢复其缺省颜色并激活。采用另一个共享内存区存储网络结构,提高网络拓扑显示速度,若网络拓扑有变动,则更新此共享区。
本平台采用的设备描述符包含64 bit长地址,避免了因个别节点死掉后重新上线,而协调器将重新分配短地址避免导致网络拓扑结构中出现一个实际节点对应多个显示节点的错误。在构建拓扑图的过程中,线性扫描每个终端节点,递归建立网络拓扑。
3.5 传感器数据显示与设备控制程序设计
控制台接收用户指令,根据指令裁决器决定设备列表显示或传感器数据显示。对设备控制结果由控制回馈模块显示,成功则表明指令已经传至网关,但不能确定远程ZigBee节点是否收到该指令。
控制台读取用户给定的指令,交由裁决器判断用户指令类型,若为传感器数据显示指令,则进入传感器指令显示界面,并提取传感器数据全局变量,以1 s为周期动态显示传感器数据;若为设备控制指令,则进入设备控制界面,根据用户指定的设备地址和编号,发送控制命令至远程节点。
4 平台测试与数据指标
无线网络由 1个协调器节点、1个路由器节点及7个终端节点构成。终端节点都挂有温/湿度传感器,振动传感器及压力传感器。节点距离在10 m~20 m之间,多个终端节点和协调器之间有墙体阻挡, 通过路由器接入网络进行测试。
测试1:每个ZigBee节点加入网络,网络拓扑结构都能正确显示,且路由器断电后,其子节点寻找最近的父节点并加入网络,重构网络拓扑。
测试2:控制台正确显示远程ZigBee节点上的传感器设备。
测试3:传感器关闭、打开、周期采集等控制功能测试正常。
测试4:分别测试各个ZigBee节点不同时间的传感器数据值,结果显示准确。
测试5:在测试1的基础上,测试网络丢包和数据速率。实际测试得到ZigBee无线网络稳定数据速率为20.5 kb/s,发送速率越高,则丢包率越高。
本文设计的基于CC2530的ZigBee无线传感器网络监控平台具有较强的网络稳定性,且丢包率和失误率较小,网络拓展能力较强,可搭建不同的网络拓扑结构以适应复杂的实际环境;能实时感知环境状态信息并交互处理,控制远程传感器设备。将此技术用于环境监控是一种可行的技术方案,也是未来物联网发展的一个方向。
参考文献
[1] 李长庚,刘威鹏,胡纯意,等.基于ARM和ZigBee的WSN节点设计与实现[J].计算机工程,2010,36(17):135-137.
[2] 尹慧琳,王磊,冯占军. 无线传感器网络节点分布式信息融合算法研究[J].计算机工程与应用,2007,43(17):18-20.
[3] 谢川.ZigBee中改进的Cluster-Tree路由算法[J].计算机工程,2011,37(7):115-117.
[4] 刑伟伟,白瑞林,孟伟.ZigBee无线网关在MODBUS通信中的应用[J].计算机工程与应用,2011,47(29):81-84.