基于无线传感网络的智能机房环境监控系统的设计与实现
系统软件是基于TI公司的Z-Stack 2006协议栈开发。从系统结构中可以看出本系统软件设计包括3大部分:无线传感器网络基于Z-Stack的应用程序开发;网关基于Qt的应用程序开发;主控中心Web应用程序开发,本文着重实现基于Z-Stack的应用程序开发。
4.1 ZigBee协议栈
ZigBee协议栈由一组子层构成,每一层向它的上层提供数据和管理服务,分别为物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)和应用层(ADL),应用层又分为:应用支持子层(APS)、ZigBee设备对象(ZDO)和由制造商制定的应用对象。其中PHY和MAC位于最低层,且与硬件相关;除此之外的其他层建立在PHY和MAC层之上,并且完全与硬件无关。分层的结构脉络清晰、一目了然,给设计和调试带来极大的方便。
实际开发中根据需要将协议栈的层次又做了细化,Z-Stack软件的总体架构如图5所示。Z-Stack中的硬件抽象层HAL提供各种硬件模块的驱动,基于HAL之上是操作系统抽象层OSAL,OSAL实现了一个易用的操作系统平台,以实现多任务为核心的系统资源管理机制。Z-Stack采用操作系统的思想来构建,采用事件轮循机制,当各个层初始化完成后,系统将会进入低功耗模式,当有事件发生时,系统立刻被唤醒,并转而进入中断处理事件,处理完成后再次进入低功耗模式,减少功耗。OSAL把优先级放在了最重要的地位。当在处理的任务中有两个以上事件待处理,处理完一件后,也要去查询优先级更高的任务。赋予优先级高的任务最大的权利,尽可能保证高优先级任务的每一个事件都能得到最及时的处理。操作系统任务调度流程如图6所示。
开发所用协议栈目录结构如图7所示。主要用到的文件有:ZMain/ZMian.c、Tools/f8wConfig.cfg、App/OSAL_SampleApp.c和App /SampleApp.c。其中ZigBee协议栈的main函数在ZMain.c中,总体上来说它一共做了两件事,一个是系统初始化,即由启动代码来初始化硬件系统和软件架构需要的各个模块;一个是执行操作系统实体。fSwConfig.cfg为网络配置文件。App/OSAL_SampleApp.c为操作系统任务初始化和添加文件。App/SampleApp.c为应用程序核心文件。整个Z-stack的主要工作流程大致分为:系统启动,驱动初始化,OSAL初始化和启动,进入任务轮循几个阶段。
4.2 无线传感网软件平台搭建
操作系统是通过调度各项任务来使整个系统协调的运作起来的。对不同类型设备的处理作为一个任务,把新建的任务添加到系统中,操作系统便会把新任务与协议栈融合到一起,使系统具备新的功能,即完成了无线传感器网络软件平台的搭建。
1)建立任务:任务初始化函数的建立
任务初始化函数要做两件事,首先是为任务获取系统分配的任务ID,最后是初始化运行任务所需的硬件资源及变量。
任务初始化函数的格式为:
XXX_Init(unsigned char task_id)
{
XXX_TaskID=task_id;
初始化任务运行所需的硬件资源及变量。
}
其中"XXX"表示任务的名称。"XXX_TaskID"是用户自己定义的变量,用于存储任务的ID号。
2)建立任务:任务事件处理函数的建立
对模块的各种外部变化操作系统以事件的方式来处理,不同的宏定义代表不同事件,比如:KEY_CHANGE为按键事件;ZD0_STATE_CHANGE为网络状态变化事件;AF_INCOMING_MSG CMD表示接收到其他节点发送来的数据,该事件为无线处理的重要事件。
任务事件处理函数原型为:uint16 Sample_ProcessEvent(uint8 task_id,uint16 events);形参task_id为任务ID号,events为事件代号。
3)添加任务
所有的任务添加都是在应用层App/OSAL_SampleApp.c中通过osalTaskAdd()函数添加一个OSAL任务,函数原型为:
void osalTask Add(const pTaskInitFn pfninit,
const pTaskEventHandlerFn pfnEventProcessor,
const byte taskPriority)
参数1:pfnInit(指向任务初始化函数的指针);
参数2:pfnEventProcessor(指向任务事件处理函数的指针);
参数3:taskPrioritv(任务优先级)。
4.3 ZigBee网络通讯设置与组网
4.3.1 网络通讯设置
在Tools/f8wConfig.cfg配置文件中定义了工程相关的网络通讯设置。其中比较重要的是ZigBee通信相关的信道通道的设置和PAN ID的设置。用户可以通过更改该文件中的相关宏定义,来控制ZigBee网络的通道和PAN ID,以此来解决多个ZigBee网络的冲突问题。信道是数据在物理层传输时使用的通道:PIN ID为ZigBee网络的标识符,用来区别不同的网络。
除此之外在启动网络前还需要修改模块的物理地址。在ZigBee网络中,无论是协调器还是路由器或终端节点,每个模块都有自己唯一的64位物理地址。物理地址的修改有两
- 四种短距离无线监控解决方案的性能对比(09-16)
- 基于MCF5213及Zigbee无线(09-12)
- 面向低速率应用的全球标准ZigBee (上)(09-27)
- 面向低速率应用的全球标准ZigBee (下)(09-27)
- Wibree:一个可供选择的新无线联网技术(11-07)
- 基于ZigBee技术的家居智能无线网络系统(01-11)