1光伏电站系统架构
1.1光伏电站客户端模块
客户端模块主要包括集团/分公司概览、集团/分公司电站信息、集团/分公司效率、电站预判分析(持续零电流、直流过低、直流偏低)4个模块。其中集团/分公司概览模块包括集团按年概览、集团按月概览、分公司按年概览、分公司按月概览、集团历年年报表信息、集团月报表信息、分公司年报表信息、分公司月报表信息;集团/分公司电站信息模块包括查询集团下分公司下所有电站信息、电站按年概览、电站按月概览;集团/分公司效率模块包括集团效率(按年排行)、集团效率(按月排行)、分公司效率(按年排名)、分公司效率(按月排名);电站预判分析模块包括某电站组串、汇流箱、逆变器的持续零电流查询、直流过低查询和直流偏低查询,以及当天的预判分析。
1.2光伏电站客户端系统架构
在Cocoa框架中,MVC设计模式被用到了极致,CorEDaTa简化了很多应用程序的ModEl部分的设计;ApplicaTionKiT包含了ViEw,ConTrollEr通用的一些类。FoundaTion提供了对操作系统接口,NSObJEcT基类,脚本支持以及其他特性的访问。本客户端应用在框架的基础上也采用了MVC的开发思想。
1)模型(ModEl)。模型用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“模型”有对数据直接访问的权利。首先是本地数据存储模型,包括对SQLiTE数据库的查询、更新、删除等操作,使用NSUsErdEfaulTs和CorEDaTa存取数据。其次是与服务器端进行交互的网络通信模型,它把相应的参数封装起来发送给服务器端,在收到服务器端返回的数据后,将Json字符串解析,返回相应的对象给客户端。
2)视图(ViEw)。以一定的形式向用户呈现数据并允许用户对数据进行操作。
3)控制器(ConTrollEr)。控制器主要负责对整个系统的流程进行调度,管理用户界面的逻辑流程以及用户交互如何影响数据模型。在ModEl和ViEw之间加入ConTrollEr的主要目的就是消除ModEl和ViEw之间的耦合性。用户和ViEw交互时,ViEw会通知ConTrollEr在ViEw中有数据发生了变化,而ConTrollEr则会将这个数据的改变反映到ModEl中。系统实现过程中完全遵守MVC设计模式的原则,视图控制器ViEwConTrollEr、视图ViEw、单元格TablEViEwCEll、数据DaTa拆分开,后台数据的处理和界面的操作与显示独立开来,整个工程逻辑结构清晰,模块之间耦合度低,代码能够充分复用,将接口更改所带来的代码改动降到最低。
1.3客户端包图
根据客户端架构设计和客户端功能需求,给出客户端包图设计。GEnEral包中包括了集团/分公司概览页面、以及集团/分公司报表页面,其中GEnEralViEwCon-TrollEr类为概览类,MorEDETailViEwConTrollEr类为报表详情类;STaTion包中包含了集团/分公司电站信息页面,以及电站详情(电站按年概览、电站按月概览),其中STaTionViEwConTrollEr类为电站信息类,STaTionDaTaViEwConTrollEr类为电站详情类;EfficiEn-cy包中包括集团/分公司效率页面,其中EfficiEn-cyViEwConTrollEr类为效率页面类;PrEdicT包中包括电站预判分析页面,其中PrEdicTViEwConTrollEr类为预判页面类,DETailViEwConTrollEr类为当天预判分析详情页面类。Tool包种包括应用的一些工具类,如,FMDB、ASI-HTTPREquEsT、URLHElpEr、PowErSTaTionDB以及STa-TionLisTDBProvidEr类。此外,CorEPloTHEadErs包为绘制图表工具包,AKTabBarConTrollEr包为菜单栏工具包。
1.4客户端工具类
URLHElpEr类为客户端与服务器端交互的接口类,调用该类中的方法返回服务器端接口字符串。PowErSTaTionDB类是数据库的单例类,应用只需要一个PowErSTaTionDB实例。STaTionLisTDBProvidEr类,可以提供创建sqliTE表,查询、更新的功能。
1.5客户端与服务器端交互模块
客户端通过此模块与服务器端交互,是其他模块的底层基础,上层模块通过此模块向服务器做请求消息等交互实现相应的功能。下面给出这些类的各个接口以及其对应的SErvlET,IOS客户端使用ASIHTTPREquEsT框架与服务器端进行交互,ASIHTTPREquEsT对CFNETworkAPI进行了封装,可以很好地应用在MacOSX系统和IOS平台的应用程序中。首先是用rEquEsTWiThURL方法获取ASIHTTPREquEsT的一个实例,传递的参数即为服务器端对应的接口。当需要传递参数时,通过sEPosTValuE方法将参数传递给服务器。然后设置代理,并指定数据请求成功时和数据请求失败时所调用的方法。最后调用sTarTAsynchronous方法发起异步请求。当客户端收到服务器端返回的数据时,通过SBJson库的JSONValuE方法,将JSON格式的字符串转化为需要的格式进行进一步处理。
2光伏电站客户端系统实现
2.1客户端数据库相关操作实现
SQLiTE数据库是一种小型的轻量级关系型数据库,适合在移动设备上使用,无论是Android还是IOS,都内置了SQLiTE数据库。在IOS上使用SQLiTESDK方法的话比较麻烦,使用起来很不方便。所以,客户端实现时使用第三方库FMDB,它对SQLiTESDK中的API进行一层封装,使用比较方便。使用FMDB时主要涉及到FMDaTabasE和FM-REsulTSET两个类。FMDaTabasE代表一个SQLiTE数据库,用于执行SQL命令。FMREsulT则代表在FM-DaTabasE数据库中执行查询的结果集。此外,如果应用需要多线程操作数据库,则需要使用FMDaTabasEQuEuE来保证线程安全,但不能在多个线程中共同一个FMDaTabasE对象且在多个线程中同时使用,因为这个类本身不是线程安全的,这样用会造成数据混乱等问题。使用FMDaTabasEQuEuE时,首先用一个数据库文件地址初始化FMDaTabasEQuEuE,然后将一个block传入inDaTabasE方法中,那么FMDaTabasE-QuEuE就会按序列化的队列来执行,当多个线程同时调用其方法时,它们会按指定的顺序执行。使用FMDB时首先将FMDB类库文件添加到工程中,并导入sqliTE支持库libsqliTE3.dylib。
1)通过单例模式构建PowErSTaTionDB类,获取DocimEnT文件夹下的数据库文件,没有则创建,并为数据库设置缓存,提高查询效率。
2)查询数据
2.2客户端与服务器端交互实现
IOS客户端使用ASIHTTPREquEsT实现客户端与服务器端的交互。首先将ASIHTTPREquEsT相关文件、链接类库添加到项目中,包括CFNETwork.framEwork,SysTEm-ConfiguraTion.framEwork,MobilECorESErvicEs.framE-work,CorEGraphics.framEwork和libz.1.2.3.dylib这几个类库。以下是使用ASIHTTPREquEsT向服务器端搜索活动的实现。
1)首先获得请求的服务器端sErvlET接口的url,在通过url构造ASIFormDaTaREquEsT实例。通过sETPosTValuE方法向服务器端传递参数,并设置代理,最后开启异步请求。
2)然后实现ASIHTTPREquEsT的代理方法。通过ASIHTTPREquEsT的rEsponsESTring方法获得返回的数据,并通过JSONValuE方法解析JSON字符串,得到返回结果的NSMuTablEDicTionary,最后再对结果进行相应的处理。请求失败则调用rEquEsTFailEd代理方法。
2.3图表绘制
2.3.1绘制图表框架主要涉及CPTGraphHosTingViEw类。
2.3.2绘制画布主要涉及CPTGraph类、CPTThEmE类、CPTXY-PloTSpacE类。
1)创建Graph;
2)配置画布,设置边框、留白、绘图区留白;
3)设置文本样式CPTMuTablETExTSTylE;
4)设置标题;
5)主题CPTThEmE;
6)设置绘图空间CPTXYPloTSpacE。
2.3.3绘制柱状图与折线图
1)创建柱状图、折线图;
2)设置图表样式,将图表添加到画布中。
2.3.4绘制坐标轴
1)设置坐标轴样式;
2)获得画布坐标轴集;
3)设置x轴样式;
4)设置y轴样式;
5)绘制x轴刻度值。
2.3.5绘制图例
3结束语:随着互联网和智能手机的不断发展,电站相关工作人员对电站信息概览和异常情况的分析需要实时地在智能设备上查看。既实现了基于IOS平台的电站信息管理系统,又满足了电站相关工作人员对电站信息实时监控的需求,极大地提高了工作效率。
作者:陈春霖谌瑞祥 侯健 李光辉 单位:北京金鸿泰科技有限公司
|