城市照明监控系统中需要对CC2530及LPC2368模块进行软件编程控制。软件在整个监控系统中至关重要,它决定着系统的可靠性、稳定性、实时性。本系统在程序设计过程中,为了使各个模块有效地完成任务,将整个系统划分为几个既相互独立又相互联系的模块,使得对外的数据交换相对简单,而这些模块的程序编写和调试相对容易得多,出错时查错也就变得简单,增强了可维护性。
1)CC2530模块的程序设计
(1)CC2530模块的软件开发环境
CC2530模块的软件开发环境采用IAR Embedded Workbench。它是一套完整的集成开发工具集合,包括从代码编辑器、工程建立到C/C++编译器、连接器和调试器的各类开发工具,其编程界面如图8-42所示。
图8-42 IAR Embedded Workbench软件编程界面
IAR Embedded Workbench for 8051是IAR Systems公司为8051系列微处理器开发的一个集成开发环境。CC2530的内核是增强型的8051,所以适用。IAR Systems的C/C++编译器可以生成可靠高效的可执行代码,且应用程序规模越大,效果越明显。
(2)Z-Stack协议栈
由于ZigBee协议栈较为复杂,设计人员自己来编写不现实,因此TI提供了免费的Zig-Bee协议栈。一般软件开发采用TI的Z-Stack 07/PRO协议栈,并对其应用层按照所要实现的功能进行添加与修改。本系统中CC2530的嵌入式软件编程就是在TI提供的ZigBee协议栈和一些应用示例的基础上编写应用层代码。
Z-Stack标准协议栈主要分为以下几层:应用层目录(APP)、硬件层目录(HAL)、MAC层目录(MAC)、网络层目录(NWK)、协议栈操作系统(OSAL)、AF层目录(Profile)、安全层目录(Security)、地址处理函数目录(Services)及ZigBee设备对象目录(ZDO),具体分层如图8-43所示。
Z-Stack协议栈采用OSAL操作系统,类似于μC/OS-II操作系统,其任务处理采用轮询机制,系统中各层初始化以后将进入低功耗模式。当有任务事件发生时,进入中断,比较任务的优先级,优先级高的任务先处理,优先级低的任务后处理,任务事件处理完毕后系统仍进入低功耗模式。Z-Stack系统工作流程如图8-44所示。
图8-43 Z-Stack标准协议栈分层结构
图8-44 Z-Stack系统工作流程
(3)CC2530程序设计
ZigBee网络中协调器负责与LPC2368进行串口通信。路由结点和终端结点则需要对单灯进行控制和状态采集,其中路由结点还起到转发命令帧的作用。
协调器程序设计方案主要包括建立网络、处理串口数据、处理RF缓冲区数据等,其工作流程如图8-45所示。
图8-45 CC2530协调器程序工作流程
路由结点的程序设计主要包括动态连接网络、数据采集和单灯控制。动态连接网络负责查询网络设备,建立通信链路。数据采集包括单灯状态的采集、处理及保存。控制程序负责执行控制命令等功能。此外,路由结点还可以起到一个中转的作用,可以转发数据以拓展网络。路由结点主程序工作流程如图8-46所示。
图8-46 CC2530路由结点主程序工作流程
终端结点的程序设计同样包括动态连接网络、数据采集和单灯用控制。终端结点与路由结点相比只是少了一个可转发相邻结点数据帧的功能,终端结点只能与自己的父路由结点通信。其主程序工作流程如图8-47所示。
(4)网络监控协议设计
为了网络数据帧更容易控制和方便编码解码,将数据帧定义为定长,这样数据帧就不需要一个域来表示帧的长度了。同时程序和协议的设计都会变得很简单,但功能又可以完全实现。规定一个数据帧的长度为12个字节。数据帧包括两种类型的帧,即命令帧和状态帧。
命令帧主要是将命令域定义在帧中,传输到相对应的网络结点,然后相关的网络结点执行相关的命令即可。命令包括全网段的命令和单点命令。全网段命令表示该PAN-ID网络内的所有或多个结点都要执行该命令。单点命令表示命令只是针对单个网络结点的。其中有一种特殊的单点命令帧,即单灯取状态命令帧,该命令帧要求获得单个网络结点的状态,所以该结点收到该命令帧后会返回单灯状态帧。
图8-47 CC2530终端结点主程序工作流程
①单灯命令帧格式
单灯命令帧使用固定帧长格式的报文,不支持可变长度格式的报文。报文格式如表8-6所示。
表8-6 单灯命令帧格式
a.帧长:长度为1个字节。固定值为12。
b.源地址:长度为2个字节,是器件的16位逻辑地址(网络结点地址)。
c.目的地址:长度为2个字节,表明最终该报文将发往哪个结点。网络中的设备收到该报文时,将检查该报文的目的地址是否与自己的逻辑地址相同,若相同,则对该报文进行分析;否则,就将报文转发给其父结点或者子结点。
d.方向:长度为1个字节,路由器将根据该字节判定报文的转发方向。若方向字节为0,则向其子结点转发;若为1,则向其父结点转发。
e.命令:长度为1个字节,本协议中含有多条命令,用于实现单灯控制。
f.PAN-ID:长度为2个字节,它是网络的ID,不同协调器建立的网络PAN-ID不相同,每个网络的PAN-ID是唯一的。
g.预留字节:长度为2个字节,根据协议中命令的不同,预留字节有不同内容,主要用于扩展功能。
h.校验字节:采用循环冗余校核算法CRC来进行校验。
表8-7为单灯控制命令的具体说明。
表8-7 单灯控制命令说明
②单灯状态帧格式
单灯状态帧由网络中的某个单灯结点开始发送,最终传输至该网络的协调器,然后再通过GPRS上传给监控中心服务器。表8-8为单灯状态帧的格式。
表8-8 单灯状态帧格式
(www.xing528.com)
③结点启动命令帧格式
结点启动命令帧主要用来控制网络中路由结点或终端结点的无线发送功能模式,从而在不需无线通信时关闭发送功能以减小CC2530功耗,其格式如表8-9所示。
表8-9 结点启动命令帧格式
a.源地址:是固定字节0xFFF0,这是协调器的16位器件地址。
b.目的地址:0xFFFF,说明这是一条广播报文,所有结点都应该对此报文进行分析。如果是路由器结点收到该报文,首先将该报文转发给子结点,然后再对命令字节进行解析;如果是终端结点接收到该报文,则不需要转发报文,只需要对该报文的命令字节进行解析。
c.数据字节模式的定义如下:
·0x01:启动命令。子结点收到该命令后,启动发送功能,进入正常工作模式;
·0x02:停止命令。子结点收到该命令后,停止发送功能,进入备用模式;
·0x03:复位命令。子结点收到该命令后,软件复位该器件,进入备用模式。
(5)网络控制机制
为了实现城市照明的智能监控,协议针对具体路段进行整体控制或单点控制,将路段结点按序编号,从1到N。根据网络的结构,将单灯的结点号和单灯的网络结点地址联系起来。为了准确而快速地对网络中的各个结点状态进行控制和采集,系统主要使用命令转发机制和状态返回机制来进行网络的控制。
①命令转发机制
网络中各个结点只对收到的命令帧进行转发,对帧的内容不做修改。每个结点通过一个位示图结构来记录哪些帧已经被转发。结点接收到帧数据后根据帧号将该缓冲区的相应位置位,同时转发。如果结点接收到帧后判断该帧已经被该结点转发,即相应位已经被置1则丢弃该帧,从而保证以最快的速度控制一条线路。
对于向某个指定结点发送命令,结点接收到命令帧后,将自己的结点号与接收到的帧中的结点号对比,如果大于则丢弃该帧,否则转发。这样可使网络中的数据帧传输有序化,有效避免网络堵塞。
②状态返回机制
目前只针对单个结点的状态返回机制,发送指定命令帧后,指定结点接收到该命令后立即返回状态。只有结点号比目标结点号小时才转发状态,直到协调器接收到状态。状态返回机制和命令转发机制的执行过程相反。
2)LPC2368模块的程序设计
LPC2368模块的软件开发环境采用的是ARM公司推出的最新集成开发环境Keil μVision4,它支持51单片机、ARM7、ARM9和最新的Cortex-M3核处理器,可自动配置启动代码,并且集成了Flash烧写模块,集编辑、编译、仿真等于一体,界面友好,便于学习和应用。
(1)LPC2368模块主控程序设计
LPC2368主要实现接收ZigBee无线传感网络协调器传输的数据,然后通过GPRS模块发送到后台服务器中。同时对于后台服务器发送的一些控制命令进行解析处理,并通过串口传输到无线传感网络协调器中。此外,还包括对LCD、按键、I2C等模块的操作。
LPC2368主要有如下三个任务:
①检测是否收到GPRS模块的数据(该数据由监控中心发送),如果收到,对数据进行解析处理,然后通过串口UART0发送到CC2530单灯无线传感网络协调器模块。
②检测UART0是否收到数据,如果收到数据,对数据进行解析,然后封装成协议所规定的数据帧格式,通过GPRS模块发送到监控中心的服务器上。
③对TCP虚连接进行处理,防止虚连接的发生。虚连接是指监控中心的服务器认为和GPRS模块建立了连接,实际上GPRS模块已经和后台服务器断开了连接,这是由于移动通信服务商提供的服务的限制问题造成的。为了防止这种情况的发生,程序设计了心跳包机制和应答机制。当通信装置空闲达到一定时间后就发送心跳包到监控中心的服务器中,同时服务器给予应答。如果没有应答,失败一定次数后GPRS模块会重新和后台服务器建立连接。
LPC2368主控程序工作流程如图8-48所示。
图8-48 LPC2368主控程序工作流程
(2)中断处理函数设计
LPC2368模块程序中的中断流程主要包括IRQ中断和UART中断。IRQ中断可用来同步UART所接收的数据。当IRQ中断来时,LPC2368将清除接收计数标志并使能UART中断。UART中断每成功接收一个字符时,相关的接收计数标志要加上1。当接收字节数满足要求时,进行异或校验,若校验正确将置对应的标志位。
IRQ通信同步中断流程如图8-49所示,UART接收中断流程如图8-50所示。
图8-49 IRQ通信同步中断流程
图8-50 UART接收中断流程
(3)GPRS通信协议设计
①数据包格式
GPRS通信数据包包括起始标志、包类型、包长度、起始标志、数据及结束标志。包长度为除去头部后数据包的长度,即“数据”长度+“结束标志”长度。数据包采用16进制传输方式,高字节在前,低字节在后。GPRS通信数据包的具体格式如表8-10所示。
表8-10 GPRS通信数据包格式
其中,将“起始标志(68H)+包类型+包长度+起始标志(68H)”称为通信数据包的包头。数据包括单灯命令帧、单灯上传状态帧、结点启动命令帧等。
②服务器发送给LPC2368命令的格式
PC->MCU:协议头+单灯命令帧/结点启动命令帧+协议尾。其中,单灯命令帧格式如表8-6所示,结点启动命令帧格式如表8-9所示。
③LPC2368发送给服务器命令的格式
a.单灯状态上传格式:
MCU->PC:协议头+单灯状态帧+协议尾。其中,单灯状态帧格式如表8-8所示。
b.批量查询数据上传的状态帧格式:
当扫描一轮结束后,要将此轮扫描到的数据内容打包发送给服务器。具体格式为:协议头+网段PAN-ID+结点起始地址+结点数量+电流AD(2个字节)+…+电流AD(2个字节)+协议尾。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。