面向环境监测的无线传感器网络节点的软件设计
扫描二维码
随时随地手机看文章
环境监测是无线传感器网络的重要应用领域。为搜集某一区域内的环境数据,传感器节点需要在无人值守情况下长时间地工作在恶劣环境条件下。传感器节点的软件设计为节点正常工作提供了重要保证。
1 无线传感器网络系统结构
整个传感器网络是由若干个采集节点、1个汇聚节点、1个数据中转器以及1个便于用户查看和控制的上位机组成。系统结构如图1所示。采集节点用于对环境数据的采集、数据的预处理,承当数据的路由;汇聚节点负责整个网络的开启和维护,向采集节点发送命令,搜集节点的数据以及和数据中转器之间的串口通信;数据中转器承担数据的中转及转发上位机的命令;上位机是数据搜集的终端设备,并且可以根据用户的需要对节点的采集时间间隔、休眠时间间隔、传感器的开关进行相应设置。
2 节点的硬件电路
为方便数据的搜集,汇聚节点和采集节点硬件电路设计相同,只是软件设计有所不同。任意节点都可作为汇聚节点,与数据中转器通过串口进行通信,来搜集网络中其他节点的数据。节点的硬件结构如图2所示。
本设计选用的核心芯片是TI公司推出的ZigBee芯片CC2430。它以8051微处理器为内核,自身携带的射频收发器用来实现无线传感器网络节点的通信,提供了4路I/O口来控制传感器的打开和关闭。传感器将相应的环境数据变成电压、电流等信号送给信号调理电路,经相关调理后送到CC2430的ADC接口进行A/D采样,最后CC2430将得到的A/D值存人1个外接的64 Kb的存储器中。当节点作为网络中的汇聚节点时,CC2430的2路I/O口被设置成UART0串口Tx和Rx,用于和数据中转器进行串口通信。对于能源供应部分,为保证节点长期稳定工作,选用2300 mA的镍氢充电电池,2组镍氢电池采用双电源供电模式。软件通过控制2组镍氢电池的切换实现对节点的轮流供电,并在电池电压不足时控制太阳能电池板对其进行充电。
3 节点软件设计
3.1 Z-Stack协议栈简介
本次的软件设计基于TI公司Z-Stack 2006协议栈。Z-Stack 2006是TI公司专门为CC2430芯片设计的ZigBee协议栈。它由1个简单的单线程的操作系统管理。该操作系统基于任务调度机制,任务通过API函数osalTaskAdd()按照优先级添加到任务链表。任务的事件触发实现任务调度。每个任务最多可定义16个事件,每个事件都对应1个唯一的事件号。NextActiveTask()是任务事件查询函数,返回任务的事件状态ActiveTask,根据返回的事件值来调用相应的任务处理函数ActiveTask()进行处理。操作系统任务调度如图3所示。
主函数在完成节点相关初始化之后会进入无限循环过程,该过程会一直检测操作系统的任务链表中是否有事件要进行处理。
3.2 节点工作流程
为便于管理和调度,节点所要实现的功能都是将其定义为事件进行处理的。每个事件完成相应功能。将事件按一定关系串接,就能实现节点工作时要完成的系统功能。采集节点和汇聚节点的工作流程如图4、图5所示。
汇聚节点和采集节点在同一时刻醒来。当汇聚节点创建网络成功,并且采集节点入网成功后,全网节点处于通信状态。汇聚节点会通过串口向数据中转器发送1个表示网络准备就绪的消息,数据中转器接收到该消息之后根据上位机的要求决定要不要上传数据,以及上传哪些数据。汇聚节点接收到命令之后会触发相应的事件进行处理,先命令采集节点将相应的数据上传给它,再通过触发串口事件将数据发送至数据中转器。采集节点在入网成功以后也处于准备就绪的状态,等待接受汇聚节点的命令,做相应的事件触发处理。
在每次通信结束之前,汇聚节点会向数据中转器发送1个请求休眠的消息,数据中转器接收到该消息之后会按照上位机的要求对全网节点的休眠过程进行设置。
3.3 串口通信协议
汇聚节点与数据中转器之间的通信是通过串口进行的。串口通信协议保证数据的安全收发,便于汇聚节点和数据中转器对数据进行解析和存储管理。数据中转器和汇聚节点之间的串口通信数据帧格式如下所示:
其中,SOP为起始标志符,用1字节来表示数据包的起始,将这个字节定义为0x02;CMD表示命令ID,用1字节的数据来标识命令消息。LEN表示DATA的长度,用1字节来指示DATA位的数据的长度。DATA为具体要发送的数据。FCS是校验位,这里使用XOR(异或校验),校验CMD、LEN、DATA中的所有数据。
当汇聚节点和数据中转器通过串口接收到数据后,都是通过判别CMD对数据进行解析的。串口数据的CMD有如下几种:
①0x03,数据中转器发送上传路由表命令。作为响应,汇聚节点通过串口上传路由表数据的CMD标识为0x83。
②0x04,数据中转器发送上传邻居表命令。作为响应,汇聚节点通过串口上传邻居表数据的CMD标识为0x84。
③0x05,数据中转器发送上传采集数据命令。作为响应,汇聚节点通过串口上传采集数据时的CMD标识为0x85。
④0x89,汇聚节点发送至数据中转器,表示网络创建成功,等待命令消息。
⑤0xF9,汇聚节点发送至数据中转器,表示数据全部上传完毕,等待休眠。作为响应,数据中转器通过串口向汇聚节点发送CMD为0x09的休眠设置命令。
LEN表示数据的长度,方便数据中转器对接收到的数据进行空间分配和存储。FCS是校验位,用于表征数据的准确性。
当汇聚节点接收到串口数据时,汇聚节点会触发自身应用层的串口事件,用于解析发送过来的命令消息,然后根据该命令来触发相应的事件进行处理。
3.4 休眠设置
实验证实,节点在休眠过程中处于断网状态。因此,为节省节点频繁联网带来的功耗和保证全网节点工作状态同步,在软件上设计为节点在联网成功后只执行通信任务,而休眠过程中只执行采集任务。当节点采集时刻到来,触发采集事件,打开传感器的开关对环境数据进行采集,并控制I/O口对传感器采集得到的信号进行A/D采样,最后将采样值以SPI方式存入外部存储器。在每次通信结束之前节点都会判断是否有休眠设置命令,若接收到休眠设置命令,节点则会按照该设置进行休眠,直到下一次醒来;若没接收到命令,节点则会按照上一次的休眠设置进行休眠。
数据中转器通过串口向汇聚节点发送的休眠设置命令的数据帧格式如表1所列。
Sleeping_Time表示节点要休眠的时间;Collecting_Time表示节点在休眠过程中的采集时间间隔;Current_Time是当前的校准时间;Sensor_Flag表示传感器开关的标志。休眠过程中到达采集时刻,进行环境数据的采集、采样和存储。向采集节点发送当前的校准时间,保证节点采集时刻精确和时间的同步。同时,传感器的开关标志位可以控制打开或关闭哪几路传感器,采集用户感兴趣的环境数据。到达休眠时刻,节点醒来,连接网络。
3.5 充 电
为保证镍氢电池对节点长期供电,节点硬件电路设计了1个充电控制电路对其进行充电管理。CC2430专门提供1个I/O口对供电电压进行A/D采样。当供电的电源电压不足时(即低于设定的值),在软件上会通过切换先让另一组电源对节点进行供电,再打开太阳能的充电电路对电源充电。节点在通信和采集数据时功耗很大,因此在每一次通信和采集数据完成之后都会检测当前供电电压值和当前的充电电压值,根据2个电压值决定要不要进行电源切换、是否对电源进行供电以及充电是否完成。
3.6 异常处理
网络中节点在工作时可能出现一些异常,因此要对这些异常作纠错处理,以保证节点的正常工作。
(1)新加入节点的异步
在全网节点处于休眠状态时,若有新的节点加入网络,为保证其网络状态和其他节点同步,新加入的节点在搜索不到网络时会按照默认的休眠设置进行休眠。休眠醒来继续搜索网络。以此循环直到搜索到网络。
(2)数据出错
数据中转器通过串口获得的数据都要进行校验处理,若校验出错,则抛弃该数据包,命令汇聚节点重发数据。
(3)无应答
汇聚节点对某一采集节点发送上传数据的请求命令,若该节点在规定时间内没有作出响应,汇聚节点会默认该节点被抛弃,它将向下一个节点发送上传数据的请求。
(4)无确认
汇聚节点收到采集节点的数据后都会向该节点发送一个确认的消息,表示数据已经收到。而采集节点会根据有没有接收到确认消息决定数据要不要重发。
结 语
无线传感器网络节点的软件设计很大程度上决定了整个系统的稳定性和长久性。任务调度机制和异常处理决定系统在工作时处于稳定的状态,而节点的充电管理系统保证了节点长期工作的能源供应。系统可以按照用户需要,在野外大量、准确地采集数据。本设计可用于在无人值守情况下长期监测某一区域的环境信息,有着广阔的应用前景。