刘志斌,雷景生,杜海舟
(上海电力学院 a.电子与信息工程学院,b.计算机科学与技术学院,上海 200090)
电能是日常生活和企业生产必不可少的能源,面对日益凸显的资源环境问题和更高的用户服务质量要求,建设智能电网已成为全球电力行业应对挑战、实现可持续发展的共同选择.
智能用电作为智能电网的重要组成部分,如何科学使用越来越受到重视,智能用电软硬件设备开始得到应用.但目前的智能用电设备大多使用C语言甚至汇编开发,开发难度大,开发周期长,而且往往只提供单一的保护、监测或控制功能,各设备独立工作,无法实现多个设备的联动运作,很难实现信息化和远程控制.
本文结合当前热门的无线传感器网络(Wireless Sensor Networks,WSN)技术,设计了基于TinyOS系统的个人用户侧用电监测无线传感器节点,并通过实验平台进行了节点组网测试.节点设计成插座形式,可以监测到该路电压、电流及负载功率、功率因数等,并通过无线模块将获得的数据发送至连接在个人计算机(Personal Computer,PC)上的汇聚(基站)节点,还可通过继电器控制负载电源通断.
无线传感器网络是由部署在监测区域内大量的廉价微型传感器节点组成的,由无线通信方式形成的一个多跳的自组织网络系统,[1]其目的是对网络覆盖区域中感知对象的信息进行协作感知、采集和处理,并发送给观察者.[2]一般监测的无线传感器网络结构如图1所示,由以通讯为中心的、大量的、小型和微型数据采集设备构成,具有动态性、适应性和分布处理能力,适用于智能用电监测及控制系统.[3-4]
图1 无线传感器网络结构
本设计使用的TinyOS是一个开源的嵌入式操作系统,在目前的无线传感器网络研究领域使用最为广泛.[5]它是一个基于事件驱动的系统,采用组件化的架构方式和模块化设计,具有轻线程、主动消息等特点,能够快速实现各种应用,达到代码量小、耗能少、并发性高、鲁棒性好的设计目标.[6]
TinyOS系统、库以及应用程序都采用 nesC语言编写.nesC语言是一种新的用于结构化的基于组件的应用程序语言,具有类似 C语言的语法,并且支持TinyOS的并发模型.[7]nesC设计中数据结构大小的固定、存储空间的预分配等技术的采用,都有利于硬件化软件组件的实现;各个构件在编译时通过接口进行组件组装,有利于提高程序的运行效率,并在一定程度上简化了构件化的软件设计.
就整体而言,节点硬件应包含数据采集、数据处理、无线通信、继电器控制和电源供应5个模块.
本文节点设计采用ADE7763+MSP430+CC2420芯片组合构成硬件解决方案:采集电压电流转换为小信号,经美国模拟器件公司专用的电能计量芯片ADE7763计算出各电能参数;使用美国德州仪器公司的一款超低功耗处理器MSP430作为核心,读取计量芯片数据,处理后通过Chipcon As公司符合 2.4 GHz IEEE802.15.4 标准的射频收发器CC2420将芯片数据发送出去.传感器节点结构如图2所示.
图2 无线传感器节点结构
串口模块使用FT232BM芯片,用于节点程序烧录以及与PC的通信和调试.采用剩磁型自锁式继电器控制负载电源开关,节电效果明显.电源模块将220 V交流电转换为5 V和3.3 V直流电供给各功能模块.
本设计的处理单元和通信单元是在Telos节点平台基础上进行修改和扩展的,它是一种用于无线传感器网络的低功耗产品,在设计和使用时采用了工业化的标准,符合通用串行总线(Universal Serial Bus,USB)和 IEEE 802.15.4协议.[8-9]
采用Moteiv公司的升级版TelosB节点硬件平台,将MSP430F1611单片机作为微处理器,具有良好的超低功耗特性.
电能数据采集单元是节点的重要部分.这里采用专用的电能计量芯片ADE7763来测量有功电能、视在电能、瞬时电压、瞬时电流,以及电压和电流均方根值等电量参数,具有精度高、误差低、体积小、安全稳定性好,以及外围电路简单等特点.
ADE7763有2个模拟电压输入通道,分别为引脚V1P/V1N和V2P/V2N,如图3所示.通道1用于处理电流信号i(t),通道2用于处理电压信号u(t).
输入的电压和电流强电信号首先通过分压电阻、锰铜片转换为弱电信号,在进入ADE7763之前还需通过低通滤波器滤波,以消除谐波的影响.
滤波器采用巴特沃斯型开关电容滤波器MAX291,应用时外接一截止频率为100 Hz的电容即可.
输入的电压和电流信号通过ADE7763内部的模数转换器变成数字信号后,进行相乘,计算出瞬时功率p(t),再通过低通滤波器LPF2后,得到有功功率P,利用功率偏差校准寄存器 APOS的值对有功功率进行校准,放入采样波形数据寄存器中,然后对采样波形数据寄存器的值进行累加,再存入电能寄存器中.
图3 电能计量芯片ADE7763引脚
微控制对ADE7763的所有操作都是通过SPI串行口操作ADE7763的各个寄存器实现的,其工作状态则通过中断模块反馈给微控制器,DIN(输入)、DOUT(输出)、SCLK(时钟信号)、CS(片选)4个引脚为ADE7763的4线串行外部设备接口(Serial Peripheral Interface,SPI).
软件的整体设计思路如下:各节点周期性地采集电量参数,并通过无线模块将数据包发送出去,数据包在无线传感器网络中经过多跳(或直接)汇聚到基站节点发送至PC.PC端通过基站节点将控制命令分发到各节点,节点收到命令后进行判断,如果节点响应则控制继电器通断.
表1列出了节点正常运行程序包含的5个文件.
表1 节点软件设计程序文件介绍
在头文件Power.h中,对主程序模块用到的常量进行了枚举说明,定义的无线传输的数据包格式如下:
数据包的内容包括:当前节点号;数据包计数;父节点号;经过的跳数;数据标志位;电能数据.数据包中变量类型的nx前缀表示外部数据类型,所有平台下的形式相同,由编译器负责重新添加相应平台的数据类型,用来指示大端模式和小端模式.
处理器MSP430通过SPI与计量芯片通信,获取采集数据.该配置文件包含时钟分频因子、时钟源、相位极性、字符长度和主从模式等信息.
节点加电启动后,运行PowerM模块中设定的程序,首先初始化并启动相关接口,然后采集数据并发送广播包,最后收到广播包并发送数据包.
3.3.1 接口程序
主程序中使用的接口类型主要包括用于无线信号的数据收发接口、用于计时的定时器接口和一些控制类接口.
无线通信的两个基本功能为分发和收集.分发协议的目的是将数据可靠地传输到网络中的每一个节点,并需要具有一定的鲁棒性来保证在链路临时断开以及丢包率较高等情况下的可靠性,它由DisseminationC组件提供相关接口.收集是分发的相对应操作,目的是将其他节点的数据汇聚到基站节点.通常的做法是建立一个或多个收集树,树的根为基站节点,当一个节点需要递交数据时,就将该数据沿着树的路径进行传输.收集过程的接口由 tos/lib/net/ctp/Collection.nc提供,发送接口由抽象的CollectionSenderC组件提供.使用CtpInfo和CtpCongestion接口获取有关树的内部信息和节点阻塞情况.
3.3.2 程序运行过程
程序运行流程如图4所示.首先是加电后各接口的开启和初始化配置,然后是主程序执行.
图4 程序运行流程
(1)初始化和启动过程 节点加电启动后初始化接口,开启无线电模块和路由控制,将ADE7763参数配置写入,然后主程序运行.分发协议接口也在初始化时开启,收到基站节点分发命令后触发响应事件,控制负载电源的开关.
(2)数据采集和广播包的发送 主程序运行首先启动一个定时器Timer_begin,响应后启动两个循环定时器Timer_DataAq和Timer_AM.前者响应事件中规定了如何调用数据采集接口进行电能数据的采集和存储;后者规定了如何进行广播包的发送,节点经过一个随机延迟Timer_rand后进行广播包的发送,这里将广播包的发送定义为一个不带返回值Broadcast()的任务执行.
(3)数据包的封装和发送 节点收到广播包后将采集到的数据和获取的收集树信息按照头文件里定义的数据格式进行封装,最后提交一个无返回值的Sendmessage()任务将数据发送至基站节点.
配置模块PowerAppC用来导通PowerM模块与应用程序所需的其他组件,将配置模块和程序模块予以严格的区分,可以快速地重新装配应用程序,使得应用程序的设计和更新更加简便.
Makefile文件说明如何编译各个源文件并连接生成可执行的文件,还要求定义源文件之间的依赖关系.make命令通过Makefile文件自动完成编译工作,最后生成可执行文件main.exe.例如:
COMPONENT=PowerAppC
include../Makerules
第一行代码表示TinyOS的make系统需要执行的应用程序组件名是PowerAppC,第二行代码表示将Makerules里的编译规则装载到TinyOS的编译系统中.
根据上述设计方案制作了少量节点,实验模拟一个家居环境进行了小规模组网测试.组网中设置了9个节点,负载范围为220 V,10(40)A,分别用来检测饮水机、空调、台式计算机、笔记本电脑.各节点将电压、电流采样电路采集的数据处理后得到电压、电流、功率等数据,通过射频模块发送到无线传感器网络中,最终传送至基站节点;基站节点将数据经USB发送至PC,并通过设计软件读取原始数据后再解析展现给用户.
图5为制作的传感器节点实物,配有外置天线以增加无线信号强度.
图6为监测系统软件界面,以列表的形式显示了各节点实时的电压、功率、功率因数等数据,软件还显示了节点状态和一段时间内电压和功率变化的曲线图.由图6可以看出,监测数据与负载电器的工作状态一致,验证了节点工作的可靠性和稳定性.
图5 节点实物
图6 监测系统界面
本文在TinyOS操作系统下设计了一种个人用户侧用电数据采集、发送、监控的无线传感器节点,并进行了组网测试.使用nesC语言开发,提高了程序运行效率,简化了构件化的软件设计;利用无线传感器网络大规模组网协同运行的特点,对各节点的大量信息进行集中显示、综合处理,实现了以往单个设备无法实现的智能化运作.通过系统的运行及对输出数据的观测,验证了节点设计的有效性,为智能化控制网络节点上的电器开关,实现科学用电、节电提供了一种解决方案.下一步工作将对现有的无线路由协议进行优化,使其更适合室内无线通信,以进一步降低无线传感器网络的功耗.
[1]任丰原,黄海宁,林闯.无线传感器网络[J].软件学报,2003,14(7):1 282-1 291.
[2]孙利民,李建中,陈渝,等.无线传感器网络[M].北京:清华大学出版社有限公司,2005:3-10.
[3]刘振亚.智能电网技术[M].北京:中国电力出版社,2010:18-24.
[4]张强,孙雨耕,杨挺,等.无线传感器网络在智能电网中的应用[J].中国电力,2010(6):31-36.
[5]LEVIS P.TinyOS programming[EB/OL].[2013-12-10].http:∥www.tinyos.net/tinyos-2.x/doc/pdf/tinyosprogramming.pdf .
[6]林喜源.基于TinyOS的无线传感器网络体系结构[J].单片机与嵌入式系统应用,2006(9):44-47.
[7]MCINNES A I.Modeling and analysis of TinyOS sensor node firmware:a CSP approach[J]. ACM Transactions on Embedded Computing Systems(TECS),2013,12(1):5.
[8]POLASTRE J,SZEWCZYK R,CULLER D.Telos:enabling ultra-low power wireless research[C]∥ Information Processing in Sensor Networks. Fourth International Symposium on.IEEE,2005:364-369.
[9]刘克.无线传感器网络数据采集及组网算法设计与实现[D].青岛:中国海洋大学,2010.