引言
目前,ZigBee技术与Web技术的飞速发展将推动现代监控领域的一场变革[1],利用RS485、CAN总线等协议的有线传输方式,由于通信线路建设成本、复杂度等问题开始被ZigBee、RTU等无线传输方式所替代。ZigBee作为一种新兴的无线通信技术,其低速率、低成本、低功耗和灵活的网络结构,非常适合监控现场中的监测点与监控调度室之间的通信。
监控调度室里的服务器将不再采取推送检测数据到客户端应用程序的方式,而是采用搭建Web服务器,以Web页面的方式将数据呈现给监控人员。监控人员可以通过通用浏览器方便快捷地获得检测数据。
本文将从监控用电功率出发,提出一种利用ZigBee技术和Web技术的远程监控方式,并将结合嵌入式技术,利用嵌入式Linux设备替换传统意义的工控机作为监控现场的Web服务器。
1 系统整体设计
1.1 系统整体方案
系统主要解决的问题包括功率采集以及
采集完成后对采集的信息进行低成本无线传输。除此之外,要求系统能够为用户提供一个方便交互的平台,以便进行控制与处理。为此,在物联网网关中,搭载了轻量级的Web服务器boa。用户通过浏览器访问到Web服务器,就能够获得所需要的数据。
系统整体框图如图1所示。
图1 系统整体框图
1.2 功率检测
功率检测的方法很多,其中常用的方法是直接选用功率测量专用芯片,如ATT7022B、ADE7757等。这些芯片的输出信号均为数字信号,MCU能够方便地与之进行数据交互。
ADE7757测量功率原理是对回路电流和负载电压采样,并通过其内部A/D转换器,使电压、电流信号变为数字量后,进行乘法、低通滤波和数频变化后,最终以与瞬时功率成正比的脉冲信号形式输出[2]。
1.3 ZigBee传输
ZigBee是由ZigBee联盟(ZigBee Alliance)开发的以IEEE 802.15.4标准为基础的通信协议[3]。主要应用在低传输速率、低能耗、需要大网络容量的项目中。本设计节点分布范围广,传输数据量小,ZigBee技术在本项目中适合使用。
随着ZigBee技术的应用的快速普及,越来越多的公司推出了ZigBee的解决方案。其中以飞思卡尔和TI公司的应用最为广泛。本系统选用TI公司的CC2430 解决方案[4],CC2430是TI公司针对2.4 GHz IEEE 802.15.4提出的真正的片上系统(SystemonChip)解决方案。CC2430结合了性能卓越的RF收发器和一个增强型的标准8051 MCU,拥有32/64/128 KB Flash和8 KB RAM,使用由TI提供的ZigBee协议栈ZStack,实现ZigBee网络传输。
1.4 嵌入式物联网网关
网关[5]的主要任务是实现两个相对独立的网络间的协议转换。在本设计中,网关主要处理ZigBee协议与TCP/IP协议的转换。ZigBee网络中的传输速率仅250 kbps,系统对协议转换速率要求不高,可以选用低成本的成熟器件完成。
三星公司基于ARM920T的嵌入式微处理器S3C2440A就能够满足本设计对CPU的要求,其内部集成Ethernet接口,能够降低网关硬件设计复杂度。系统层通过移植Linux操作系统,借助Linux强大的TCP/IP协议簇,实现ZigBee与TCP/IP的双向透明传输。
2 系统实现
2.1 节点MCU的设计
为了保证ZigBee通信的稳定性,CC2430仅完成ZigBee传输任务,而其他处理任务由另外一块MSP430单片机完成。MSP430单片机主要任务包括与功率采集芯片进行交互,获得必要的数据,进行相应处理后,通过UART接口发送给CC2430,CC2430将接收到的数据发送到ZigBee网络中。
根据上述分析,选用的单片机需要具备数据处理能力强、通信接口丰富、抗干扰能力强及功耗低的特点。TI公司的MSP430系列中MSP430G2553混合信号微处理器即具备上述特点。该单片机工作电压范围为1.8~3.6 V,当在2.2 V电压供电并且使用1 MHz时钟频率时,工作电流仅230 μA;标准节能模式时,电流仅0.5 μA,低功耗性能卓越。通信接口方面,拥有增强型自动波特率UART、异步SPI及工业标准I2C总线。定时/计数器采用的是拥有3个比较寄存器的16位定时计数器,能够高效完成计数功能、定时功能及PWM产生任务。
其程序流程图如图2所示。
图2 微控制器程序流程图
MSP430G2553混合信号微处理器有2组独立定时计数器、4种工作模式。一组定时计数器用来产生波特率,另外一组用来完成获得功率信息和定时唤醒。获取功率信息时,将定时计数器工作设置在连续计数模式,选择时钟源作为外部脉冲;当要完成定时唤醒任务时,将定时计数器工作设置在加计数模式,时钟源为内部脉冲。另一组定时计数器工作于UART模式,初始化代码如下:
void TimerA_UART_init(void){//设置TXD为空闲
TACCTL0 = OUT;//将时钟设置为异步捕捉上升沿模式
TACCTL1 = SCS+CM1+CAP+CCIE;//设置时钟源为SMCLK,并工作于连续计数模式
TACTL = TASSEL_2 + MC_2;
}
2.2 功率采集硬件设计
功率采集硬件设计采用的是较成熟的方案。ADE7757是在功率测量领域中广泛使用的集成电路ADE7755的升级型号。其内部集成晶体振荡器,相对于以前版本减少了外部引脚数量,能够有效地减少外围电路的成本及复杂性,并在一定程度上减小PCB板面积。
ADE7757工作时,仅需要单个5 V电压供电,并且由于其采用了CMOS工艺,在低功耗方面也有不错的表现。正常工作时,仅20 mW的功率。
ADE7757典型应用电路如图3所示。
图3 ADE7757典型电路
图3中,U2是一个高速光电耦合器,其作用是为了将具有交流220 V的测量电路与其他电路隔离开,由此来提高整个电路的稳定性。
MSP430G2553从光耦的输出端获得脉冲信号后,需要经过相应的数学运算处理,以获得当前的实时功率信息。ADE7757的数据手册中提供了平均功率的计算公式[6]:
为了保证功率的精度,可以采取将计数时间延长到10~20 s,以保证有足够数量的脉冲个数。参考文献[ 6 ]中指出,延长计数时间能够有效降低由于ADE7757和单片机定时器不同步引起的±1误差。
2.3 ZigBee网络的组建
在ZigBee协议[4]中,网络由三种不同的角色组成:协调器(Coordinator)、路由器(Router)、终端设备(End Device)。这三种设备有两种类型:一种称为全功能设备(Full Function Devices, FFDs);另一种称为精简功能设备(Reduced Function Devices, RFDs)。全功能设备能够充当网络中的任何一个角色,但是硬件成本要求较高;精简功能设备成本相对较低,却只能与全功能设备通信。因此,在网络组建时,一般将精简功能设备用作终端设备,而路由器和协调器通常采用全功能设备。
TI公司提供的ZStack协议栈中,包含这两种不同的设备类型的样例程序。在不修改任何代码的情况下,就能够实现UARTZigBee透传模块。
自组网是ZigBee协议的最重要优点之一。当终端设备与协调器因为距离太远或有障碍物遮挡而不能建立连接时,可以通过路由器作为中继,信息途经路由器,最后传送到协调器。因此,合理布置路由器地点,就能够将ZigBee终端设备覆盖到尽量大的区域中,提高ZigBee网络的覆盖面积,从而提高系统监控效果。ZigBee网络的典型树形拓扑结构如图4所示。
图4 ZigBee网络典型拓扑结构
在系统设计过程中,可以使用TI公司提供的ZigBee组网辅助工具,直观查看ZigBee组网的状态。如图5所示,从上到下依次为协调器、路由器及终端设备。
图5 ZigBee组网实例
每一个采集功率的模块(由单片机、功率采集芯片等组成)就相当于ZigBee网络中的终端节点,路由器将为每一个节点分配唯一的64位网络地址。当一个远离协调器的节点需将数据发送到协调器时,可以借助路由器作为中继,最终将数据发送到协调器。反之,协调器需要发送到远端节点的指令时,同样可以经过路由器,最终根据网络地址,决定哪个节点作为指令的执行节点。
2.4 网关的实现
网关是一块基于S3C2440A的开发板,使用RS232串口与ZigBee模块相连,由DM9000提供的网线接口为外界访问物联网提供便利。
网关首先需要解决从ZigBee网络中获得数据的任务。网络中,任何一个终端设备,都直接或间接与协调器建立了联系。因此,只需要将网关与协调器连接,并通过协调器向终端设备发送指令。
为了保证ZigBee网络中网络不长期处于高负荷运行,在本设计中,终端设备不会主动向协调器上传各终端的功率数据,而需要接收到协调器发送的相关指令后,才将功率数据上传。
在网关中,需要编写基于Linux的应用程序,用来解决查询功率数据的问题。Linux操作系统提供了定时器机制,合理使用定时器,即可分时查询各终端设备信息。将定时器信号与处理函数绑定可以调用signal()函数:signal(SIGALRM,sig_arm)。
将定时器信号与sig_arm()函数绑定,若定时器到时,则触发SLGALRM信号,sig_arm()函数将被执行。sig_arm()函数需要创建新进程执行查询程序,父进程等待子进程结束。alarm()函数原型为:
unsigned int alarm(unsigned int seconds);
参数为定时时间长度。由此能够写出sig_arm()函数体。
static void sig_arm(int signo){
if(vfork() == 0){//使用execl()运行子进程运行查询程序
}
else{//父进程等待子进程结束
wait(NULL);//重新设置定时器
alarm(2);
}
}
客户端软件作为获取网关数据是一种常用的方式,但是客户端软件方式有其缺点。例如,客户端软件需要安装,发现当前客户端软件的问题时,需要更新客户端软件,以修复软件存在的问题。现阶段,HTML及JavaScript发展迅速,基于浏览器Web应用开始崭露头角。因此,本系统在物联网网关中搭载HTML/JavaScript页面,用以替代客户端软件获取物联网的信息。Web应用没有安装过程,应用更新仅需要在服务器端替换应用即可,不需要客户安装升级补丁。
HTML仅仅只能将数据展现在浏览器中,获取数据的工作必须由其他程序完成。针对这个问题,在Web服务器中,需要使用CGI(Common Gateway Interface,通用网关接口)程序完成部分功能。CGI[7]脚本可以实现轻量级的Web后台应用程序,现在在PC上应用已经非常少了(基本上被JSP等替代),但在嵌入式系统中还能发挥其简洁、易用的特性。
CGI程序可以读取数据库中的数据,呈现在浏览器中,而数据库中数据是从ZigBee网络传输到网关,并写入数据库的节点功率信息。因此,只需定期对网页界面进行更新就可以获得实时功率信息。在HTML中,有meta标签就可以完成定时刷新功能:
<meta http-equiv="refresh" content="5">
浏览器截图如图6所示。
图6 系统交互界面截图
结语
本设计针对目前功率监控系统普遍采用有线连接的现状,提出了一种借助自主组网功能的ZigBee网络解决方案。并将传统使用的客户端程序交互模式,转变成为B/S模式,省去应用程序安装与软件使用过程中的升级更新。
为了验证方案的可行性,设计了4个终端设备的小型系统进行模拟。功率采集精度高,系统响应迅速,能够很好地完成采集任务,并具备在无线传感网的其他应用中推广的条件。