海 涛 ,纪昌青 ,李晓念 ,李朝伟 ,王 路
(1.广西大学 电气工程学院,南宁 530004;2.广西交通职业技术学院,南宁 530004)
发展可再生能源已经成为全球能源发展的重要方向,太阳能是可再生能源中的重要组成部分,光伏、光热、光化学是太阳能利用的3种主要形式。当前,光伏产业蒸蒸日上,已被广泛应用于人们的生活中。我国将会持续大力发展光伏产业,因此未来越来越多的光伏电站将会被建立起来。由于太阳能的特点,大型光伏电站一般都建立在偏远地区,小型电站多建立在城市楼宇等建筑物的上方,这样就给电站的运行维护造成一定的困难,因此设计基于B/S结构Web形式的光伏电站监控系统十分有必要。
本文设计了一种基于.NET平台的光伏电站监控系统,利用GPRS公共无线网络进行数据的传输;采用三层架构软件设计方法,方便日后的维护和扩展;使用Ajax技术实现网页局部刷新,优化用户体验;运用BP神经网络对光伏组件进行故障诊断,方便维护人员及时检修,预防因故障引起不良后果。
目前使用最广泛的监控结构是C/S(Client/Server)结构。但是C/S结构对客户端的操作系统有限制,不同的操作系统需要不同的客户端软件,这样就加大了开发的工作量;C/S结构难以适应上百台电脑以局域网的方式同时使用,代价高、效率低;C/S结构的维护成本非常高并且需要复杂的技术支持。
随机互联网的发展,人们越来越多地使用B/S(Browser/Server)结构[1-2]。 B/S结构相比 C/S结构不需要给每一种操作系统专门制作客户端软件,不同操作系统的用户只需要通过浏览器就可以访问服务器内容;B/S结构完全可以适应大批量用户同时访问服务器;B/S结构相比C/S结构最大的优点就是维护成本低,工作人员只需要扩展或升级服务器即可,大大降低了工作量,因此本文采用B/S结构进行设计。
本文所采用的B/S结构如图1所示,各自的光伏电站有各自的数据采集模块,使用RS485总线将光伏电站传感器的数据传送至现场控制器。现场控制器将接收到的数据通过GPRS移动通信技术[3]以Socket连接方式发送至远程服务器端。
图1 系统总体结构Fig.1 System general structure
在服务器端编写WinForm窗体程序,开启Socket侦听,每接入一个站点都要创建一个新的线程去接收数据,然后解析接收到的数据,将其存入SQL Server数据库中。在服务器端用.NET平台设计WebForm光伏电站监控界面,监控人员通过浏览器即可观察电站的实时运行情况。
当需要检测故障时,用户在Web页面发出故障检测命令,修改数据库对应表中的标志位为“1”,WinForm服务器软件通过检索数据库中的标志位,如果为“1”则向光伏电站控制器发送命令,控制器接收命令后采集故障诊断所需要的数据。
Web监控服务器端采用经典的三层架构模型,即表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL),三层架构模型如图2所示。
图2 三层架构模型Fig.2 Three tier architecture model
表现层用来提供与用户交互的界面,本系统的表现层将以Web方式呈现。
业务逻辑层对数据进行逻辑处理,实现不同的业务需求;降低表现层和数据访问层之间的联系,避免在表现层出现冗余逻辑代码。
数据访问层实现与数据库的交互,拼写sql语句,利用ADO.NET直接操作数据库,对数据做增删改查等操作。
通用类库通用的辅助工具类,包含SQLHelper、MD5 加密等。
业务实体这个类同数据库中的表一一对应,类名对应表名,类成员对应表中的字段,方便处理数据。
不同类库之间的引用关系如下:
①DAL 引用:Common、Model
②BLL 引用:Common、DAL、Model
③UI引用:Common、BLL、Model
采用三层架构是为了实现面向对象的高内聚低耦合原则。在表现层和数据访问层中间加一层业务逻辑层,能够有效隔离表现层和数据访问层的联系,可以使开发人员只关注其中某一层的设计,结构更加清晰,有利于代码复用,如果需要更改Web页面的UI层,不会影响BLL层和DAL层,添加或删除功能模块不影响已有模块的代码,可以极大地降低维护成本和维护时间。
使用.NET平台设计Web程序,做好三层架构的框架后,就需要根据不同的业务需求填充三层架构。经过分析,设计的监控系统的功能模块如图3所示。
图3 系统功能模块Fig.3 System function module diagram
管理员权限高于普通用户,普通用户只能查看光伏电站运行参数状况,获取各设备运行信息,但管理员可以增加或删除设备,而且可以设置普通用户的权限。
实时数据模块实时显示采集到的数据,采集的信息有设备信息、光伏电池阵列输出电压和电流、逆变器输出电压和电流及其相位、逆变器输出功率、温度、日照强度、各开关器件的状态等。
系统可生成日、月综合报表,用户根据报表可对电站的运行状况进行分析。
Ajax(Asynchronous JavaScript and XML),即异步JavaScript和XML[4]。如果不使用Ajax,用户获取不同页面信息需要刷新整个Web页面,使得浏览器与服务器之间需要交互较多的数据,同时也会降低用户使用舒适度,尤其当用户数量增多时会增加服务器访问压力,Web页面将出现卡顿现象。使用Ajax实现Web页面局部刷新,减少了Web页面与后台交互的数据量。考虑实际情况,普通用户访问界面使用较多的Ajax请求,管理员用户则没有使用Ajax请求,因为管理员比较少,与服务器交互数据量小,且主要是对网站进行维护工作,对访问的舒适感要求较低。
C#的WebForm中有专门的Aajx控件,但这种控件仍然需要与服务器交互大量的数据,所以本系统并没有使用,而是使用jQuery写Ajax,让它请求一般处理程序,效果很好。
由于光伏电站安装地点多位于楼顶或偏远地带,很难经常性的在电站现场对其进行检查和维护,因此十分有必要对光伏阵列进行智能故障诊断。本系统采用高效且易用的BP神经网络算法对光伏阵列进行故障诊断。
已有研究表明[5-6],光伏阵列开路电压Voc、短路电流Isc、最大功率点电压Vmp、最大功率点电流Imp会因为不同的故障而发生改变,不同的故障现象对应不同的故障类型。表1列出了故障现象及其对应的类型。
表1 故障现象及对应类型Tab.1 Fault phenomena and corresponding types
BP 算法(error back propagation algorithm),即误差反向传播算法,是一种在分类、函数拟合、系统仿真、图像处理等方面都有广泛应用的神经网络算法。
BP神经网络包括输入层、隐藏层和输出层,其拓扑结构如图4所示。
图4 BP神经网络拓扑结构Fig.4 BP neural network topology
本系统中,BP网络输入层节点数为4,输出层节点数也为4。输入输出的相关描述如表2所示。
表2 输入输出相关描述Tab.2 Input and output correlation
隐藏层的节点数可根据经验公式来确定:
式中:M为隐藏层节点数;n为输入层节点数;m为输出层节点数;a为0~10之间的常数。因此,本文BP网络隐藏层的结点数应在2~13之间。
由于4个输入变量的单位不一样,量级也不一样,直接输入到BP网络中会影响收敛效果,因此需要对输入数据作归一化处理:
式中:xn为原数据;xmin为原输入数据中的最小值;xmax为原输入数据中的最大值;Xn为归一化后的数据。
BP神经网络的学习算法有很多,从最初的梯度下降法到动量BP算法、学习率可变的BP算法、弹性BP算法、变梯度BP算法、牛顿法、LM算法[7]等等。本系统采用的LM(levenberg-marquardt)算法是对牛顿法的改进,不需要计算二阶导数,收敛速度非常快,权值和偏置由下式更新:
式中:w(n)为第n次迭代各层之间的连接权值向量或偏置向量;J为包含网络误差函数对权值和偏置一阶导数的雅可比矩阵;I为单位矩阵;e为网络的误差向量;μ为很小的系数。
在编写Matlab程序的时候,网络训练函数设为trainlm,其训练终止条件为到达设定的最大迭代次数;超出设定的迭代时间;进行仿真的误差性能连续增加的次数超过设定值;梯度值小于设定最小梯度值;μ值超过设定最大值。
在实验中所用的光伏模块型号为SFM-50的小型光伏板, 其标称参数是 Voc:21.6 V、Isc:3.2 A、Vmp:17.28 V、Imp:2.9 A,采集不同温度(15 ℃~39 ℃)、日照强度(300 W/m2~800 W/m2)条件下的不同故障,共采集了300组数据,正常、短路、开路、老化、热斑5种状态各60组,每个状态取40组共200组数据作为训练样本,另外每个状态20组共100组数据作为测试样本。
使用Matlab神经网络工具函数net=feedforwardnet(8,‘trainlm’)得到 BP 网络 net,其中设置的隐藏层节点数为8,训练函数为trainlm,设置最大迭代次数2000,学习率0.01,目标误差,使用test_out=sim(net,testInput)语句进行网络仿真测试,得到 BP网络误差性能如图5所示。
图5 BP网络误差性能Fig.5 Error performance of BP network
如图5,经过18次迭代,训练误差已经小于目标误差,学习过程停止。经过多次修改网络训练目标误差,再也不能减小网络的测试误差,说明在该样本下网络训练已经达到最优。图6所示为100组测试数据的诊断结果,其中2个老化故障和1个热斑故障诊断错误,其余均正确,诊断正确率为97%,证明使用的BP神经网络算法高效可行。
图6 BP网络测试结果Fig.6 BP network test results
用C#语言调用Matlab自定义函数实现混合编程,要先将Matlab自定义函数编译生成动态链接库dll文件,然后在C#项目中添加该动态链接库。操作步骤为
①保存训练好的 BP 网络:save('D:LM.mat','net'),前一个参数是路径,后一个参数是BP网络的名称,注意:其他需要用到的中间向量也应当保存;
②新建一个.m文件,加载上一步中的网络及所需数据,将测试过程编写成函数接口,输入为4个节点的真实值组成的向量,输出为输出节点组成的向量,保存.m文件;
③在Matlab命令窗口中输入deploytool调出编译选择窗口,并选择Library Compiler;
④配置窗口中TYPE选择.NET Assembly,选择待编译的.m文件,写上类库名myLM,并添加类名及方法名,设置好后点击Package按钮,等待编译完成;
⑤在C#服务器项目中添加两个dll文件的引用,MWArray.dll文件(在Matlab根目录下的toolboxdotnetbuilderinwin64v2.0中)和上一步中生成的myLM.dll文件;
⑥在C#项目中将生成目标平台修改为x64(因为使用的Matlab为x64版本);
⑦添加命名空间
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using myLM。
完成以上步骤之后,即可在C#项目中调用Matlab使用的BP神经网络函数,实现混合编程。
为了更美观地展示实时数据,使用了一个名为highcharts的图库,该图库使用纯JavaScript语言编写,支持绝大多数浏览器,支持曲线图、柱状图、饼状图等各种图表的绘制。使用post方式发送ajax请求,从SQLServer数据库读取刚由Winform程序插入的数据,显示在图表中。
如图7所示,实时显示2016年4月15日位于综合楼1区的光伏电站的概况,3个图表都设为同时显示30条数据,每隔10 s图表右边无刷新添加一条数据,同时图表最左边的一条数据被移除。经长时间测试,Web页面运行良好。
图7 实时数据Web运行页面Fig.7 Real-time data Web run page
图8为故障监测页面,如果发生故障,则在Web页面展示所有故障的详细信息,用户对故障进行处理后,经故障诊断程序判断,若数据恢复正常,则记为已处理,否则记为未处理。
图8 监控系统故障监测页面Fig.8 Monitor and control system fault monitoring page
本文采用.NET平台设计B/S结构,使用C#作为编程语言、SQL Server 2008作为数据库,在VS2013开发工具上开发出一套Web监控系统,该系统故障诊断部分采用BP神经网络算法,使用Matlab和C#混合编程,取得很好的诊断效果,极大地降低了光伏电站的安全性隐患。由于使用了面向对象设计方法和三层架构软件模型,使得该Web监控系统具有良好的拓展性能,大大降低了系统的维护成本,提高了光伏电站的维护效率。
[1]王娜.基于.NET平台的光伏电站视频监控系统的设计与实现[D].北京:北京交通大学,2015.
[2]赵宏伟,秦昌明.基于B/S 3层体系结构的软件设计方法研究[J].实验室研究与探索,2011,30(7):64-66.
[3] 陈天华,唐海涛.基于ARM和GPRS的远程土壤墒情监测预报系统[J].农业工程学报,2012,28(3):162-166.
[4]谭力,杨宗源,谢瑾奎.Ajax技术的数据响应优化[J].计算机工程,2010,36(7):52-54.
[5]王元章,李智华,吴春华,等.基于BP神经网络的光伏组件在线故障诊断[J].电网技术,2013(8):2094-2100.
[6]王元章,李智华,吴春华.一种四参数的光伏组件在线故障诊断方法[J].中国电机工程学报,2014,34(13):2078-2087.
[7]钱华明,姜波,夏全喜.基于LM算法的组合导航系统的故障诊断[J].中国造船,2009,50(4):102-108.