RXDS3C6410TXDTXD(P03)CC2530RXD(P02) 图15 S3C6410和CC2530连接电路图 4 系统软件设计
硬件电路是整个无线传感器网络网关系统的支柱,而软件是整个网关系统的思想,控制着整个网关系统的运行。该系统软件开发分为三部分,分别为Zigbee无线通信网络软件设计,网关软件设计,以及远程监控中心软件设计。系统软件结构图如图16所示:
网络化智能照明节能系统Zigbee无线通信网络网关远程控制中心ZigBee控制节点ZigBee传感节点ZigBee协调器外设控制无线数据传输传感器采集无线数据传输组建无线网络串口数据传输无线数据传输QT图形界面显示串口数据传输网络数据传输远程控制LED远程查询光强网络拓扑图显示 图16 系统软件结构图 在具体介绍软件实现方法前,特别需要对数据通信帧格式进行一些说明。对于主要依赖数据通信的软件结构,要实现数据的监控,必须定义统一的数据通信格式,该系统的设计就定义了自己的通信协议,该协议应用于Zigbee节点与Zigbee协调器,协调器与网关,网关与远程监控中心的数据传递。本系统协议帧的具体组成如表1所示: 表1 协议帧结构图 帧内容 字节数 & 1 命令 3 IEEE地址 8 网络地址 2 用户数据 16 校验位 * 1 1 一个命令帧包含32个字节,每个命令帧以?&?作为帧头,以?*?作为帧尾,表示一帧的起始和结束。紧跟帧头后面的3个字节为命令字,命令字包含了在该系统中使用的所命令,其具体命令如下: 12
“JON”:加入命令,当有新的节点加入到网络中,将会主动的向协调器发送该命令,报告其设备信息,这些信息包含了网络地址,物理地址,父节点网络地址,父节点物理地址,设备类型和传感器类型。
“RNS”:用于读取Zigbee网络的链路状态。在本系统中将读取节点与协调之间的无线信号强度,通过该信号强度值,可以检测是否有节点已经离开网络。
“ERL”:用于读取光照传感节点的光照强度数据。光照传感节点接收到该命令后,通过读取光照传感器的光照强度值来获取环境光强,并发送同样的命令给协调器,该反馈命令将会在用户数据区保存了采集到的光照信息。从而完成光照的读取功能。
“ERH”:用于读取湿度传感节点的湿度数据。同光照节点类似,收到该命令的节点,会通过读取湿度传感器来获取环境湿度。然后将湿度数据写到数据帧的用户数据区,并将其反馈给协调器。
“ERC”:用于读取二氧化碳浓度信号。同样,收到该命令的二氧化碳传感节点,通过读取二氧化碳浓度传感器来获取环境中二氧化碳的浓度值。让后将二氧化碳浓度数据反馈至协调器。
“ECL”:用于控制LED台灯亮度。对于控制命令并不会有对应的反馈命令,而是直接执行命令对应的动作,该命令对应的动作就是设置PWM波占空比,而PWM的占空比则控制了LED台灯的亮度值。
“ECP”:用来控制水泵的开关。在此使用继电器替代了水泵的动作,控制水泵喷水是继电器闭合,控制水泵关闭时继电器断开。
“ECC”:用来控制卷帘的开合。同水泵,使用继电器替代了卷帘的动作。 “ESL”:设置光强阈值。该阈值由光传感节点保存,用来控制与其绑定的LED台灯节点的亮度。该值为期待的环境光强值,当光照节点测试到光强高于该值将设置LED台灯变亮,反之设置LED台灯变暗。
“ESH”:设置湿度阈值。该阈值由湿度传感节点保存,用来控制与其绑定的水泵节点的工作状态。当湿度节点测试到湿度值高于该值时将关闭水泵,反之将水泵打开。
“ESC”:设置二氧化碳阈值。该阈值由二氧化碳传感节点保存,用来控制与其绑定的卷帘节点的工作状态。当二氧化碳节点测试到二氧化碳浓度值高于该值时将代开卷帘,反之将卷帘关闭。
从命令帧中第四个字节开始为目标Zigbee节点的IEEE地址和网络地址,用
13
于向节点发送无线数据提供目的地址。
用户数据区包含16个字节,该数据区由用户自己定义,可以包含传感器采集的传感信息,或设置对控制设备的控制量。
倒数第二位为校验位。为确保数据传输的可靠性,本系统采用了和校验的方式,从命令字开始到用户数据区结束,对其进行求和操作,将和值保存到校验位当中。接收到该命令帧的节点,以此同样的算法得到校验位的值,对比接收到的校验位,如果不等则视为错误帧,予以舍弃。
4.1 ZigBee无线通信网络软件设计
本系统无线通信网络的设计采用了Zigbee技术,通过对Zigbee协议栈进行二次开发实现无线通信网络的组建工作。针对Zigbee的协议栈有很多,本系统采用的是TI提供的Z-Stack 2007协议栈。通过对协议栈的应用层进行设计,可以实现对光照信息的采用,和LED台灯亮度的控制。Z-Stack的开发环境采用的是IAR Embedded Workbench for MCS-51 7.50A,用于Z-Stack的编译、调试和程序的下载。
4.1.1 协调器模块软件设计
ZigBee协调程序设计主要包括组建一个无线传感网络,转发网关和ZigBee节点间的数据,其工作流程图如图17所示。
(1) 组建无线网络
协调的功能是选择一个信道和一个网络ID(也称之为PAN ID,即Personal Area Network ID),随后启动整个网络。信道和网络ID的定义在z-stack工程目录下的Tools目录中的f8wConfig.cfg文件里,可以通过烧写程序固化到CC2530当中。 其定义代码如下:
-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B -DZDAPP_CONFIG_PAN_ID=0xFFFF
为了考虑到系统的可扩展性,本系统通过网关设置协调器启动的信道和PANID,从而可以实现不同网络的组建工作而不是通过修改程序。
协调器主要涉及网络的配置和启动,作为Z-Stack中定义的一种设备类型,在启动过程需要遵循协议栈的一般启动过程。首先对硬件进行初始化,然后初始化操作系统(OSAL),进而对协议栈各层任务进行初始化,最后进入事件循环。而涉及协调器自身功能的启动过程则伴随在各种初始化以及事件循环当中。
14
开始硬件初始化Zigbee协议栈初始化建立网络节点申请加入?Y建立连接N加入成功?Y监听无线信号N监听串口信息N有无数据Y发送到网关有无数据Y发送到节点N 图17 协调器软件设计流程图 协调器组建网络的过程如下:首先通过osalInitTasks函数初始化协议栈各层任务,在ZDO层的任务初始化函数ZDApp_Init中,定义了自动启动相关代码,通过取消HOLD_AUTO_START宏定义,来使能自动启动,然后调用ZDO初始化设备函数ZDOInitDevice来启动一个初始化过程,为组建网络做好前期准备。在ZDOInitDevice函数中,首先对设备类型进行确认,最后调用ZDApp_NetworkInit函数来对网络进行初始化,通过事件循环方式,在ZDO层设置了ZDO网络初始化事件(ZDO_NETWORK_INIT),该事件的处理方式即调用ZDO_StartDevice函数来启动设备。实际上,ZDO_StartDevice函数首先对不同的设备类型进行了判断,从而根据相应的设备类型调用不同的API函数进行处理。其中协调器的处理方式是调用NLME_NetworkFormationRequest函数来发送网络形成请求,该函数是网络层的API函数,因为Z-Stack是半开源的协议栈,对网络层函数只提供函数库,而没有公布源代码。但是作为请求原语有其对应的确认原语,在协议栈中有这样一个函数ZDO_NetworkFormationConfirmCB()来处理网络形成确认,该函数中在ZDO层设置了一个网络启动事件,在事件循环中进而设置了一个ZDO状态改变事件,该事件的处理结果会发送消息通知API
15