APP下载

基于多Agent的智能微电网EMS设计与实现

2014-08-10方跃胜姚宏亮

关键词:微网客户端调度

方跃胜, 姚宏亮

(1.安徽水利水电职业技术学院, 安徽 合肥 231603; 2.合肥工业大学 计算机与信息学院, 安徽 合肥 230009)

基于多Agent的智能微电网EMS设计与实现

方跃胜1, 姚宏亮2

(1.安徽水利水电职业技术学院, 安徽 合肥 231603; 2.合肥工业大学 计算机与信息学院, 安徽 合肥 230009)

随着智能时代的逐步到来,智能微电网技术已经成为电力系统发展的前沿技术.智能微电网作为未来电网发展的主流方向,能量管理系统是整个系统的核心.本文提出了一套较为完善的智能微电网EMS体系结构和功能模块,并对各模块涵盖的内容进行了简单介绍.设计开发的基于多Agent的智能微电网EMS可充分地利用各地丰富的清洁可再生能源,实施多Agent对能量变化的实时监控和预警,通过Agent Client/Server间的协作调度与控制维持电平的平稳,实现能源的充分、可靠地利用.

多Agent; 智能微电网; EMS; 调度与控制; 可再生能源

0 引言

自20世纪70年代以来,可持续发展思想逐步成为国际社会共识,大力发展清洁可再生能源(包括水能、生物质能、风能、太阳能、地热能和海洋能等)已成为一场全球性的革命[1].世界发达国家和中国都在积极进行智能电力的研究.欧美各国对智能电网的研究开展较早,日本也在智能微电网示范工程的建设方面处于世界领先地位.中国虽然起步略晚,但却已经兴建了若干试点工程.随着智能时代的逐步到来,智能微电网技术已经成为电力系统发展的前沿技术.作为智能电网的一个有机组成部分,微电网为分布式发电的综合利用提供了一种有效的技术手段[2].智能微电网是一种由负荷和微型电源共同组成的系统,可最大限度地利用可再生能源形成分布式供电,并提高供电的可靠性、降低成本以及实现智能化,并有效推动主动式配电网的发展[3].智能微电网具有局部能量平衡、灵活的并网或孤网运行方式、可调度性能强等优点,并且能充分满足用户对电能质量、供电可靠性和安全性的要求,在灵活性、多样性、可控性、可塑性和独立性等很多方面都显现出独到的优势[4].作为可再生能源利用最主要的课题之一,智能微电网随之迎来了加速发展的新阶段,并将对分布式电源与可再生能源的大规模接入产生重要的影响,尤其是分布式高渗透随机能源,其接入后会影响到电网的平稳性[5].智能微电网系统分为电源系统、储能系统、多种可再生能源组网系统、能量管理系统(EMS,Energy Management System)、继电保护系统、通讯系统六大部分,而EMS是整个微电网的核心部分,智能微电网安全经济的运行方式与高质量的供电服务,离不开完善的EMS[6].

1 微网系统设计

1.1 总体设计

1) 系统架构设计

本文设计开发的基于多Agent的智能微网EMS的系统架构分为拓扑结构与逻辑结构,如图1、图2所示.

2) 系统功能设计

图1 基于多Agent的智能微网EMS系统架构的拓扑结构

图2 基于多Agent的智能微网EMS系统架构的逻辑结构

基于多Agent的智能微网EMS的总体功能设计如图3所示.

图3 基于多Agent的智能微网EMS的总体功能设计

3) 系统流程设计

基于多Agent的智能微网EMS实际运行或仿真运行时的流程如图4所示.

1.2 概要设计

1.2.1 微网监控模块设计

为了对微网实时运行(或者仿真运行)中的各个设备的信息和状态实时监控,以便对整个系统的运行监测和统计,我们设计开发了实时监控模块.在微网的运行中,对实时拓扑网络中的DER和负载设备的实时信息给予显示,包括设备类型、设备名及设备采集的实时数据等,从而分析这些数据的变化得到系统当前频率和捕获异常状况并作出处理,这其中也包括开关元件的闭开等,而且要对设备间的调度结果给予反馈.

图4 基于多Agent的智能微网EMS的系统流程图

微网监控模块设计包括设备管理、开关操作、实时信息显示、调度信息查询、系统频率显示功能等.其中设备管理包括设备图标旋转、设备注册信息显示、设备登录状态显示、设备实时功率信息显示功能.

1.2.2 微网调度控制策略设计

由微网的结构分析可知,微网的灵活运行和高质量供电方式,离不开稳定高效的调度控制策略.调度控制一直是微网能量管理的一个难点,其中一个关键问题在于微网中的设备数目太多,很难很迅速地对系统故障和异常作出相应处理,往往一旦某一个控制元件发生故障,就可能导致整个系统瘫痪.因此,微网管理系统应该做到对电网中的突发事件做出自主反应,例如发电机故障,电压跌落等,微网能够协调调度各个设备间的用电,以使微网稳定运行.

目前,有两种经典的调度控制策略[7]:

1) 基于集中控制的平衡调度控制思想

集中式控制与常规电力系统分层控制的思想一致,较易实现,因而目前多根据该思想进行研究.集中式控制要求由微网中央控制器进行优化管理,协调整个层次控制系统,包括经济调度,平衡调度等功能,目标是通过优化各DER单元的发电量及与主网间的功率交换使微网得到最大化利用.

2) 基于对等控制的调度控制思想

对等控制是根据微电网控制要求,灵活选择与传统发电机相类似的下垂特性曲线进行控制,将系统的不平衡功率动态分配给各机组承担,目标是想要最大限度地实现微网内DER单元和负荷的自治,但实现较为复杂.各就地控制器在搜集本地信息并与别的控制器、上层控制器交互信息的基础上,各自进行就地决策.但该控制方式没有考虑系统电压与频率的恢复问题,也就是类似传统发电机中的二次调整问题,因此,在微电网遭受严重扰动时,系统的频率质量可能无法保证.此外,该方法仅针对基于电力电子技术的微电源间的控制.只有在极端的情况下,才使用对等控制方式,就是各Agent可以相互通信协作调度做出自主控制,例如发电机B1和B2可以通过负载A的发电请求,同时向A供电以达到A的用电需求量.

本文采用的基于集中控制的平衡调度控制思想就是通过微网中央控制器进行优化管理,例如在用电协调调度方面上,先统计系统各DER总的发电量和各个负载的用电功率,根据比例平均分配负荷的用电量.

2 主控平台管理模块设计

2.1 微网结构的建立和状态的显示

2.1.1 微网拓扑结构的定义

在本系统中,微网的拓扑结构是通过一张一张的位图拼接而成,在C++Builder中使用封装过后的TImage类来进行拓扑结构的建立.除此之外在新建一个TImage对象的同时,也要保存该对象的位置信息.本系统位置信息是用StructPosition来表示的,然后放到数据库,让下次载入和打开新建的微网准确获取每个TImage对象的准确位置,这里的每个TImage对象即对应相应的一种设备.

TImage *pImage;//定义一个图片对象,用来显示一个设备

vectormyvectorImage;//将显示的设备保存到这个vector动态数组里面

struct StructPosition{ //保存拓扑元素位置

AnsiString sName; //设备名称

//通过设备的名称的前四个字母就可以判断一种设备是哪一种设备,如PVge045表示的是//光伏电池,但是开关除外,开关是通过前两个字母Sw来确定该设备是不是开关,

//所以以后在设计设备的时候,如果不是开关的话,前面的图片ID前面两个字母就不能sw;

int sLeft;

int sTop; //(sLeft,sTop)在界面左上角的坐标位置

int sWidth;

int sHeight; //设备宽度和高度,再通过左上角的坐标就可以确定设备的具体大小了

AnsiString sDeviceID; //设备ID

};

StructPosition myPosition1;//用来保存一个设备显示上的为位置信息的结构体

vector myvectorPosition;

//将一组设备的信息放在动态数组里面,保存后写进库中的myTopology表中,载入的时候,

//读这张表的数据到myvectorPosition中,再将其写到相应的myvectorImage中,进行显示.

新建拓扑的具体步骤是:先清空当前画图位置.登录过后,在微网编辑菜单选项中,点新建微网,清空画图位置,在该系统是调用的ClearWorldFiled();然后是在拖拽FormMain 中toolbar中的设备图标中拖拽事件中来显示的.保存拓扑的具体步骤是:在主菜单上单击相应的“保存”和“另存为”菜单项,将相应的位置信息,以及划分的设备的Agent信息,开关关联信息,分别保存到myTopology表、Agent设备表、相应的设备Running表与开关关联信息表中.具体实现由CreateNewDevice(X,Y,24,50,strDeviceName)完成,在每新建一个设备的时候,将其的位置信息保存到上面的两个动态数组中,最后在点击菜单保存项,就会将新建的拓扑结构和设备的一些基本信息保存到数据库中,同理载入和打开拓扑是新建的一个逆过程.

2.1.2 微网结点拓扑结构的显示

1) 设备信息的基本显示

在自定义的信息响应函数上myImageMouseMove(参数省略)中用CreatePanel(参数省略)来动态创建一个面板来显示相应的位置信息.

2) 实时数据的显示

在随机数据实时产生的时候,根据实时数据库,根据设备的名称和设备的位置信息,就会自动的显示各种设备的功率信息,这是通过调用CreateLabel()函数来实现的,动态的显示标签.

图5 微网编辑

2.2 微网编辑

微网编辑包括新建微网,打开一个已经建立好的微网,再修改微网中相应的设备信息.在微网编辑状态下,可以根据微网实际运行的结果进行适当的编辑.在前人工作的基础上,我们还添加了图标旋转的功能,可以对开关、总线等元件进行旋转,旋转之后各元件的状态就会发生相应的变化,而且有可能使与其关联的设备及元件状态发生改变,如图5所示.

一开始新建或者打开微网后,要编辑设备的信息是通过FormCarveAgent(Agent划分)窗体来实现的.在添加设备的时候,在弹出的对话框中,给设备划分相应的Agent,以及设备所属的Agent类型,设备自身的型号类型和设备所受控制的开关(如果没有开关也可以,此时设备默认是没有开关的,即只要该设备所在的Agent登录,它默认就是可以调度的),修改设备也是类似.这些设备信息在整个微网未保存前均保存在myvectorAgentDeviceInfo这个动态数组中,其定义如下:

struct AgentTable //首先将未保存的设备信息保存在vector中,保存过后再插入Agent设备表中

{ AnsiString DeviceID;

AnsiString DeviceName;

AnsiString AgentName;

AnsiString DeviceType;

AnsiString switchID;//所属开关的ID

}myAgentDeviceInfo;

vector myvectorAgentDeviceInfo;

然后在微网保存时一起写入数据库“Agent设备表”、具体类型(通过设备ID,也即是FormMain中pImage->Name中前四个字母来区分,LOAD就是表示负载设备,PVge就是表示光伏电池,WTge表示风力发电机,BBgg表示蓄电池,FCge表示燃料电池,SwtN表示断开的开关,BusH和BusV表示的是总线信息)的“设备Running”表中,还有保存到开关关联设备表中.

具体的是实现如下(单击相应开关设备图片就可以用来断开开关和闭合开关,在这里用的是PopMenu控件).

闭合开关的操作:

if (Application->MessageBox("确认闭合开关吗?","确认闭合",MB-OKCANCEL)==1)

{

ChangeSwitch(1);

//改变开关的状态,1表示闭合,0表示断开,开关的断开和闭合在数据库的区分是通过开关ID(SwtN和SwtY),其中Y表示闭合,SwtN表示闭合,所以,开关一断开设备ID就要改为相应的Y或者N(也可以在开关Running表中,添加一个标志位,在该平台上就没有这么做了,而是通过ChangeSwitchTable()函数来改变myTopology、开关关联设备表、Agent设备表、开关Running这几个表的开关相应的ID).

QueryDiaoduAgent(agentDiaoduList);

}

具体的判断哪些设备不能够参与调度,即设备跟哪些开关相关,是QueryDiaoduAgent(agentDiaoduList)来实现的,判断的时候涉及到设备ID和编号,在此定义:

struct SwitchTableInfo

{

AnsiString deviceID;//具体设备的ID

AnsiString devicenumber;

//即开关关联设备表中编号中“S”中前面的字符串

}mySwitchTable,myDeviceTable;

vectormyvectorSwitchTable;

//保存开关的“编号”信息,即S前的字符串

//下面带“”的编号都是这个信息

vectormyvectorDeviceTable;

//保存其他设备除开关外的“编号”信息

在QueryDiaoduAgent()中,开始从开关设备关联表中,读取所有开关的“编号”信息,保存到myvectorSwitchTable中,然后遍历所有已经登录过后的Agent的列表,即agentList,读取每个agentList的设备ID,然后从开关关联设备表读取此ID的“编号”,只要这个“编号”包含(不需要相等)有在myvectorSwitchTable中的“编号(devicenumber)”,那么就说明这个设备受这个开关控制.只要有一个包含了某一个开关的devicenumber且此开关是断开的就是不能参与调度的,将可以参与调度的Agent信息保存到agentDiaoduList这个数组中.

2.3 微网实时监控模块

2.3.1 设备注册信息显示功能

使用主菜单中的“微网运行”菜单就可以加载实际运行(或仿真运行)的微网,界面就会显示整个拓扑网络的结构.在微网运行时,当鼠标移动到某个图标上,系统会在右下角创建一个显示面板,显示对应设备的“设备ID”、“设备名”、“设备类型”、“所属AgentID”,如图6所示.实现过程是这样的:和微网编辑时类似,所加载的微网的拓扑信息也是先被读取到一个Vector变量中,然后获取鼠标坐标对应的设备名,因为此功能只对部分设备元件有限,所以还要根据设备名判断设备类型.当符合显示面板的情况,从Agent设备表中根据设备名查询到“设备ID”、“设备类型”、“所属AgentID”的信息,然后创建一个透明风格的RichEdit在鼠标当前位置的右下角分别按行显示设备ID、设备类型等信息.其中关键的地方就是调用Refresh()和Repaint()函数重画,否则就不能成功显示.实现代码对应在TFormMain::myImageMouseMove和TFormMain::CreatePanel函数.

图6 注册信息显示

2.3.2 设备登录状态和功率信息显示功能

当有Agent客户端连接上时,连接上的元件图标会变为红色,当点击“SimStart”按钮,系统就向各个Agent发送采集指令.由于无法真正连接到设备,系统会产生一定范围的随机数来仿真,这时已连接设备的功率就会实时显示功率的变化.

信息采集模块就涉及到通信协议了,在UnitProtocal.cpp中定义了8种协议,每种协议定义客户端Socket发送内容的结构,以便解析这些内容,用于不同的功能,对于Agent登录,是根据协议1来通信的.

当某个Agent客户端连接到系统时,系统首先判断协议的类型,如果是Agent登录,根据协议1,系统解析客户端发送来的数据,获取设备名称,并且将登录事件写入日志.同时,根据设备名称在Agent设备表中查询到设备对应的设备ID,把它的各种信息封装为一个结构体保存到一个Vector变量Agentlist中,然后就可以从myvectorPosition中获取图标信息,然后改变其图标格式,加载对应的红色图标;如果Agent客户端断开了连接,则也添加日志记录,将其从Agentlist中删除,而且图标换为灰色.

当用户要采集数据,程序先将实时数据库中的PVDeviceRunning、WTDeviceRunning、FCDeviceRunning、BBDeviceRunning、MTDeviceRunning、LoadDeviceRunning的记录全部清空,然后根据Agentlist中的设备名获取设备类型,从而在实时数据库中定义相应的类的对象,对象名称就是设备名;接着由随机数产生模块生成相应的功率数据等(如果在实际中,可以由协议3接收采集到的数据);最后在图标下方创建Label控件显示这些数据.其中涉及的主要函数有TFormMain::agent-login(),TFormMain::TimerRefreshTimer(), TFormMain::btnSimStaClick()等.具体效果如图7所示.

2.3.3 开关操作和实时信息显示

对于开关元件,在实时运行中可以闭合和断开,同时对所有设备可以查看它的实时信息和历史信息.对于不同设备,实时数据也不相同,例如风力发电机,实时信息包括风速、输出功率、输出电流、输出电压等.当下一批设备采集数据传来或用户停止采集,则把FastDB实时数据库中所有的数据逐条加入历史数据库中的设备Running表中,所以不仅可以查询实时信息,还可以查询历史信息.

开关操作主要基于右键弹出菜单,所以在FormMain中新建一个Menu为mainPopupMenu,TrackButton为tbRightButton,在对象树形查看器中设计菜单选项,并为每个选项定义一个指针,从而方便实现在不同设备图标右击弹出菜单选项的不同,如图8所示.对于开关元件弹出菜单中“闭合开关”和“断开开关”的显示就是通过判断设备类型,根据开关的闭合断开情况设置相应菜单选项的指针是否可用来实现的.对于开关的某个操作,都要查询SQL Server数据库中的“开关关联设备表”获取开关控制的设备,已作相应变化.例如,当开关断开时,其控制的设备中,如果有已登录设备,则显示为断开状态.

对于实时信息显示则是根据设备名查询到实时数据库中的记录,从而获取设备的温度、太阳辐射、电压、输出功率等信息,最后给予显示.当用户停止采集数据时,根据FastDB实时数据库中各个类的对象名,判断设备类型,保存到相应的设备Running表中.

图7 连接Agent和采集数据的实时变化 图8 开关的操作和实时信息显示

2.3.4 调度信息显示

当点击主界面的第二个选项卡“Agent调度信息”时,系统会显示近期的第100条调度结果记录.实现方法是:在FormMain中新建一个RichEdit变量RichEdit1,当选择TabSet的第二个选项卡时,调用控件的Visible函数设置RichEdit1可见,然后从SQL Server数据库中的Agent调度表中查询前100条记录,然后逐行显示这些信息:智能体+设备名+“在”+时间+发电/用电量+优先级别+调度结果,例如:

智能体Agent1在2013-6-29 15:08:03 发电:6948.64892578125KW/时 优先级:普通 调度结果:调度成功!

智能体Agent2在2013-6-30 21:49:50 发电:0KW/时 优先级:普通 调度结果:调度不能执行,Agent2发电总能力不足!

2.4 Agent管理模块

2.4.1 属性和结构模块

1) Agent属性

Agent属性是对Agent的特征要素进行描述.属性的构成要素:标识(名称),角色(从执能上划分),所管理的发电单元种类和基本特性,负荷的种类和基本特性,通信数据的类型和格式,位置信息(IP地址,所处理网段等),状态(正常,异常),决策规则.

2) Agent的结构模块

Agent的结构分为4层:物理层,数据管理层,信息处理层,应用层[8].物理层:Agent是一种抽象实体,在物理上是由与Agent直接相连的发电单元、负载和一个开关(电闸),Agent的作用就是对它们进行管理.数据管理层:主要任务是数据的采集,数据的存储,数据的维护(知识的维护,历史数据的维护),数据的通信.信息处理层:主要任务是对采集的数据进行初步的加工,如数据格式的转换.应用层:主要任务是显示运行的状态,提供可控和可编程的接口.

3) Agent客户端结构

每一个Agent客户端都是一个独立的程序,只负责一个AgentID所管理的设备.

①登陆Agent客户端,填写服务器地址和端口号,连接服务器.输入AgentID号和密码,正确后,给予登陆.如果有一项不正确,Agent客户端提示不正确.登陆成功后,读取Server保存在数据库里的此AgentID的所管理的设备列表,然后再更新Agent客户端所在数据库中的设备列表.某个Agent登陆后,可以与主控平台进行通信,与其它Agent一起参与调度.

②Agent查询是在主菜单Agent管理中,在FormAgentQuery窗体中实现的.在这个窗口中使用了一个TTreeView控件和用于显示的RichEdit控件,前者用来显示登录的Agent和没有登录的Agent,后者显示的是查询到的信息.目前Agent有下面几种状态,如表1所示.

表1 Agent状态表

注: Agent只有在状态1的情况下才可以与其他Agent进行协作调度.

2.4.2 Agent的注册和删除

Agent的注册是通过菜单项上的Agent添加来实现的,Agent的删除也是类似.在此的主要操作就是数据库的读写,在该平台上数据库的读写主要是通过C++Builder本身的控件TDataBase,配置ODBC来连接数据库.在此数据库中主要使用动态创建pQuery来进行读写数据库,也用到了TTable、TDataSource.其实现基本语句如下:

TQuery*pQuery=new TQuery(NULL);

pQuery->DatabaseName="myDB";

AnsiString mysql;

mysql=”SQL语句”

pQuery->SQL->Add(mysql);//Agent的注册

pQuery->ExecSQL();

pQuery->Close();

delete pQuery;//Agent的删除

2.5 通信管理模块

2.5.1 通信方式和通信结构

在平台上实现客户端和服务端通信,由于在C++Builder上我们主要使用TServerSocket和TClientSocket控件进行通信,即在服务端上使用一个TServerSocket和客户端上使用一个TClientSocket.同时由于客户端与客户端之间也要通信,为了连接和通信的可靠性,同样在客户端上再放置一个TServerSocket和TClientSocket2来满足客户端和客户端之间的通信.

目前在客户端和服务端的通信类型中,主要有使用TProtocol类封装了Agent通讯中需要的协议,现阶段里面用结构体的方法规定了“Agent登录,仿真开始,仿真电流、电压数据传递,日调度计划,AGC调度计划,故障信息,变更信息”这些信息的格式.在服务端和客户端的通信中采用TCP三次握手协议的可靠传输.

2.5.2 通信策略和数据格式

1) 通信策略

通信策略包括通信优先级的生成策略和通信方式选择的策略.

2) 通信格式

通信内容的设置:通信内容的设置如数据、请求、指令和任务;通信内容包括:控制命令,广播命令,采集命令,测量命令.

通信格式的设置:通信格式分为发送帧,应答帧,数据帧.发送帧组成:命令字,地址数,地址.命令字为期望的动作行为,如采集命令,测量命令;地址数为期望同时操作的目标数目;地址为操作的目标的地址.应答帧组成:(a)测量应答帧.组成为命令字,地址数,地址状态;(b)采集应答帧.组成为命令字,地址数,数据;(c)其它命令应答帧.组成为命令字,地址数.数据帧组成:具体的数据.算法函数如下:

ResolveDiaoduMessage(AnsiString recv,TCustomWinSocket *Socket1);

//对服务器接受到的信息进行处理.对登录、预警、反馈信息的处理

ResolveMessage(AnsiString recv,TCustomWinSocket *Socket1);

//服务器收到的信息进行处理

两个函数是在TServerSocket封装好的事件ServerSocketClientRead(TObject *Sender,TCustomWinSocket *Socket),S是接受到的字符串.

2.5.3 协作控制模块

1) 通信协议的设置

通信协议建立在TCP/IP协议之上,采用应答式.对于任意命令设置定时器,超时认为是通信故障.服务端通信协议的格式如表2所示.

表2 服务端通信协议的格式

客户端通信协议的制定如表3所示.

表3 服务端通信协议的格式

2) 协作调度与控制

微电网协作调度与控制分为实时安全稳定控制、故障自愈控制与能量优化调度3大功能模块.实时安全稳定控制与故障自愈控制目标是维持微电网的安全稳定运行,为秒级实时分析决策模块,通过实时数据库快速从SCADA获取全网实时运行数据,并通过SCADA模块下发决策控制指令;能量优化调度模块目标是维持微电网经济运行,除了通过实时数据库获取全网当前运行数据外,还需要对通过历史数据库获取的微电网历史运行数据、用户互动信息和气象等数据进行预测、分析,完成多时间尺度的最优发电计划的制定,并通过数据库、网络通信或SCADA系统下发调度计划.部分实现算法函数如下:

vector agentList;//用来保存已经登录的Agent信息

vector agentDiaoduList;//用来保存可参与调度的Agent信息

void-fastcall QueryDiaoduAgent(vector&);//函数用来查询哪些Agent可以参与调度

void-fastcall QueryAgentInfo(AnsiString agentID,float &agentacquired,AnsiString &agenttype);//用来查询某个agent的发电类型和发电量或者需要的电量

void-fastcall TFormMain::QueryMytopInfo(float &resumepower,float &generatepower);//查询当前微网的产生和消耗的电量

void-fastcall TFormMain::OneNewDiaodu()//OneNewDiaodu()封装的算法

{//查询可参与调度的Agent有哪些,保存在agentDiaoduList这个动态数组里面

QueryDiaoduAgent(agentDiaoduList);

QueryMytopInfo(f-totalpower,f-totalacquired);//查询每个Agent的发点信息和用电信息

ClientToClient("Agent1","Agent2",150);//Agent1提供给Agent2 150W的电量

}

MyWarningThread *pWarningThread;//定义一个预警线程

pWarningThread=new MyWarningThread(true);

pWarningThread->Resume();//预警线程的使用,一般先传入一个预警Agent的ID,将其放入AgentIDWarningThread中,线程的处理在UnitWarningThread.cpp文件中.

2.6 数据库管理模块

基于多Agent的智能微网EMS数据库的结构设计如下图9所示.

图9 基于多Agent的智能微网EMS数据库的结构设计

3 FastDB模块和远程访问模块

3.1 FastDB模块

FastDB是高效的内存数据库系统,具备实时能力及便利的C++接口.FastDB没有数据库缓冲管理开销,不需要在数据库文件和缓冲池之间传输数据.这就是FastDB运行速度明显快于把数据放在缓冲池中的传统数据库的原因.此外,FastDB支持事务、在线备份以及系统崩溃后的自动恢复.本项目FastDB中的数据存储在表中,表结构用C++中的类来定义,表记录相当于类的实例.下面是一个用C++定义的表结构. 光伏电池Running如表4所示.

class GFDC-Running{

public:

int4 id;

char const* gfid; //光伏ID

char const* gfname;//光伏名称

char const* sblx; //设备类型

char const* wwAgent-id;//AgentID

char const* wlwz; //物理位置

float wd; //温度

float tyfs; //太阳辐射

float dy; //电压

float scgl; //输出功率

dbDateTime time;//时间

TYPE-DESCRIPTOR((//类型描述

KEY(id,INDEXED|AUTOINCREMENT),//

定义主键 FIELD(gfid),//定义字段

FIELD(gfname),

FIELD(sblx),

FIELD(wwAgent-id),

FIELD(wlwz),

FIELD(wd),

FIELD(tyfs),

FIELD(dy),

FIELD(scgl),

FIELD(time)

));};

REGISTER(GFDC-Running);//注册表结构

FastDB中记录的插入、删除和查询操作如下:

GFDC-Running gfdc;

gfdc.gfname="光伏电池";

insert(gfdc);//插入

char* cstr="gfname='光伏电池'";

dbCursor curson;

if(cursor.select(cstr)>0){

do {

cout≪ cursor->gfname≪NL;

}while(cursor.next());

}//查询

cursor->gfname="光伏电池2";

curson.remove();//删除

表4 光伏电池Running

3.2 远程访问模块

该模块使用Apache作为Web服务器;服务器端利用PHP访问Sql Server数据库并将结果封装成为XML格式的字符串,然后将其传输给客户端;Flash把客户端获取的数据进行XML解析,并根据解析后的数据生成相应的电路图.该模块实现一共分为6个文件,分别是:

index.php:首页,主要作用是嵌入flash播放器以显示电路图.

dianlutu.swf: flash文件,将服务器端传来的数据加以解析,并生成和显示电路图.

config.php: 配置文件,填写需要访问的数据库服务器名称、用户名、密码和数据库名.

dbClass.php: 数据库操作类,封装了一些常用的数据库操作方法,如连接、执行Sql语句、返回记录数、断开连接等操作.

button.php: 获取所用微网的名称,并封装成XML字符串传给客户端.

data.php: 对于用户选取的微网,获取该微网中各组件的坐标信息,并封装成XML字符串传给客服端.

info.php: 在鼠标移至特定组件时,获取该组件的详细信息,并封装成XML字符串传给客服端.

4 结束语

本文简要介绍了基于多Agent智能微电网EMS的系统架构与功能模块设计、主控管理平台的几大主要模块(微网运行实时监控、微网编辑、Agent管理、通信管理、数据管理、FastDB模块和远程访问模块)的设计与实现方法.设计开发的基于多Agent的智能微电网EMS可充分地利用各地丰富的清洁可再生能源,实施多Agent对能量变化的实时监控和预警,通过Agent C/S间的协作调度与控制维持电平的平稳,实现能源的充分、可靠地利用.

[1] 刘庆华.可再生能源资源与开发利用[J].攀枝花科技与信息,2009(1):43-49.

[2] 刘生春,张杰,李春来.智能电网发展趋势分析[J].科技信息,2011(16):352-359.

[3] Chatzivasiliadis S J, Hatziargyriou N D, Dimeas A L. Development of an agent based intelligent control system for micro-grids[R]. In Proceedings of the IEEE Power and Energy Society 2008 General Meeting,2008.

[4] 王成山,李鹏.分布式发电、微网与智能配电网的发展与挑战[J].电力系统自动化,2010,34(2):10-14.

[5] 尹项根,张哲.高渗透率分布式电源接入下电网面临的问题及保护技术[J].华中科技大学学报,2010(8):1-10.

[6] Dimeas A L, Hatziargyriou N D. Agent based control for micro-grids[R]. In Proceedings of the IEEE Power Energy Society General Meeting,2007.

[7] 黄秀琼.用于主网削峰填谷调度的风/光/储微电网控制策略[J],中国电力,2013(2):87-89.

[8] 徐潼.多Agent系统的体系结构和协作研究[D].南京:南京理工大学,2003.

[责任编辑:蒋海龙]

Design and Implementation of Energy Management System Based on Multi-Agent Smart Micro-grid

FANG Yue-sheng1, YAO Hong-liang2

(1.Anhui Water Conservancy Technical College, Hefei Anhui 231603, China) (2.School of Computer and Information, Hefei University of Technology, Hefei Anhui 230009, China)

With the gradual arrival of the era of intelligent, smart micro-grid power system technology has became the development of cutting-edge technology. Smart Micro-Grid will be a mainstream direction of the development of the grid in future, EMS (energy management system) is coral of the whole system. An improved architecture system and some functional modules of the smart micro-grid EMS is proposed in this paper, function and interaction of the component modules are introduced simply. Energy management system based on multi-agent smart micro-grid can take advantage of the rich over the clean and renewable energy, using multi-agent system for real-time monitoring of energy change and early warning, by Client/Server collaboration scheduling and control maintenance levels steady, full of energy to achieve reliable use.

multi-agent; smart micro-grid; EMS (energy management system); scheduling and control; renewable energy

2013-12-22

国家自然科学基金资助项目(60705015); 安徽省自然科学基金资助项目(KJ2013B095)

方跃胜(1975-), 男, 安徽舒城人, 安徽水利水电职业技术学院讲师, 合肥工业大学硕士研究生, 研究方向为人工智能和图形学. E-mail: ahhffys@163.com

TP311

A

1671-6876(2014)02-0139-12

猜你喜欢

微网客户端调度
《调度集中系统(CTC)/列车调度指挥系统(TDCS)维护手册》正式出版
基于强化学习的时间触发通信调度方法
一种基于负载均衡的Kubernetes调度改进算法
如何看待传统媒体新闻客户端的“断舍离”?
虚拟机实时迁移调度算法
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于OMAP-L138的微网控制器设计
基于改进下垂法的微网并网控制策略研究
用于微网逆变器并联的控制策略