用于读写PSDBPA数据文件的面向对象编程方法.pdf

上传人:000****221 文档编号:4704990 上传时间:2018-10-28 格式:PDF 页数:17 大小:2.52MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410629360.8

申请日:

2014.11.10

公开号:

CN104391692A

公开日:

2015.03.04

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/44申请日:20141110|||公开

IPC分类号:

G06F9/44

主分类号:

G06F9/44

申请人:

上海交通大学; 华东电网有限公司

发明人:

赵文恺; 严正; 张逸飞; 曹路; 李建华; 周挺辉; 范翔

地址:

200240上海市闵行区东川路800号

优先权:

专利代理机构:

上海科盛知识产权代理有限公司31225

代理人:

赵志远

PDF下载: PDF下载
内容摘要

本发明涉及一种用于读写PSD-BPA数据文件的面向对象编程方法,具体包括以下步骤:(1)分析BPA数据文件中所有卡片的类型及其数据格式,并进行数据抽象;(2)根据数据抽象的结果来定义服务原语,并设计类结构框架;(3)以自顶向下的方式,依次完善类结构框架中派生类的定义:(4)采用面向对象的编程语言来实现该类结构框架:(5)根据应用需求确定好类结构框架的具体使用方式后,进行接口程序的实现与部署:(6)在不同的计算环境下,对部署好的接口程序进行正确性校验。与现有技术相比,本发明实现了BPA数据接口的设计与BPA程序用户手册具有一致的层次关系,从而保证了数据接口程序的可扩展性、可移植性和可维护性,降低了开发和维护BPA双向数据转换接口的难度。

权利要求书

权利要求书
1.  一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,具体包括以下步骤:
(1)分析BPA数据文件中所有卡片的类型及其数据格式,并进行数据抽象;
(2)根据数据抽象的结果来定义服务原语,并设计类结构框架;
(3)以自顶向下的方式,依次完善类结构框架中派生类的定义;
(4)采用面向对象的编程语言来实现该类结构框架;
(5)根据应用需求确定好类结构框架的具体使用方式后,进行接口程序的实现与部署;
(6)在不同的计算环境下,对部署好的接口程序进行正确性校验。

2.  根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(1)中BPA数据文件中所有卡片的数据抽象具体包括:
<1>分析DAT文件的层次结构,将其分为控制参数域、元件参数域、输出显示域和结束域;
<2>DAT文件的控制参数域具体为,BPA潮流计算的常用控制语句,其中包括潮流开始和结束、指定支路和节点数据文件、指定潮流结果输出二进制文件的控制语句;
<3>DAT文件的元件参数域具体为,电网的静态元件参数,其中包括区域控制数据卡、节点数据卡、支路数据卡以及数据修改卡;
<4>DAT文件的输出显示域具体为,用户自定义控制语句和基于潮流计算的BPA高级应用控制语句;
<5>DAT文件的结束域具体为,从控制语句(END)或(STOP)开始,到文件最后一行的所有数据;
<6>分析SWI文件的层次结构,将其分为控制参数域、动态元件参数域、静态元件补充参数域和输出显示域;
<7>SWI文件的控制参数域具体为,计算控制卡CASE和所有的故障操作卡;
<8>SWI文件的动态元件参数域具体为,所有的动态元件卡,包括发电机及其 控制系统、电动机、风电机组及其控制系统、直流控制系统和FACTS设备;
<9>SWI文件的静态元件补充参数域具体为,所有的静态元件补充卡,包括静态元件的序分量参数、发电机转负荷模型和静态负荷模型;
<10>SWI文件的输出显示域具体为,从计算控制卡FF开始,到文件最后一行的所有数据。

3.  根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(2)中类结构框架包括5个基类,分别是BPA文件类、BPA数据行类、BPA数据行集合类、BPA卡片类和BPA卡片集合类,其各自的职责和功能为:
<1>BPA文件类,为虚基类,其职责是定义BPA文件操作的服务原语,功能是派生出具体的子类;
<2>BPA数据行类,为基类,其职责是定义BPA文件中某一行数据操作的服务原语,功能是对该行数据的字符串执行某些特定的操作;
<3>BPA数据行集合类,为基类,其职责是定义BPA文件中多行数据操作的服务原语,功能是对若干行数据执行集合方面的操作;
<4>BPA卡片类,为虚基类,其职责是定义BPA卡片操作的服务原语,功能是派生出具体的子类;
<5>BPA卡片集合类,为虚基类,其职责是定义BPA卡片集合操作的服务原语,功能是派生出具体的子类。

4.  根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(3)中根据BPA的潮流程序用户手册和稳定程序用户手册,自顶向下逐层定义5大基类的派生类;
1)派生类按照以下方法进行逐层定义:
<1>BPA文件类派生出DAT文件类和SWI文件类;
<2>BPA数据行类和BPA数据行集合类不派生任何子类:
<3>BPA卡片类派生出节点类、支路类、机组类和故障操作类,所述的节点类派生出交流节点类、直流节点类和延续节点类,所述的支路类派生出对称线路类、高抗线路类、不对称线路类、双端直流线路类和变压器类,所述的机组类派生出发电机模型类、发电机次暂态模型类、励磁系统模型类、PSS模型类、调速器和原动机模型类;
<4>BPA卡片集合类派生出与BPA卡片类同等数量和层次的子类;
2)派生类按照以下方法进行相互关联:
<5>DAT文件类和SWI文件类分别包含若干个BPA数据行集合类对象,以及若干个BPA卡片集合类对象;
<6>BPA数据行集合类包含若干个BPA数据行类对象;
<7>BPA卡片集合类包含若干个BPA卡片类;
<8>BPA卡片类的对象与BPA数据行类的对象,一一对应。

5.  根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(4)中面向对象的编程语言为JAVA、C++、.NET或PHP。

6.  根据权利要求5所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(4)中面向对象的编程语言为C++。

7.  根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(5)具体为:
根据不同电力仿真分析和计算应用的需求,开发了具有独立应用程序SAP和应用程序接口API两种使用方式的软件包BPAIOPACK,所述的SAP专用于满足非面向对象编程语言开发的程序对BPA数据文件的需求,所述的API专用于满足面向对象编程语言开发的程序对BPA数据文件的需求。

8.  根据权利要求7所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(6)具体为:
为了验证在不同的计算环境下,BPAIOPACK均具有一致的正确性,分别选用Windows操作系统结合Matlab开发环境、Linux操作系统结合Eclipse开发环境作出说明,具体步骤为:
<1>在Matlab中,输入语句″system(′BPAIOPACK.exe-copy src.dat windst.dat′);″,将src.dat文件拷贝为新的windst.dat文件;
<2>在Matlab中,输入语句″system(′BPAIOPACK.exe-copy src.swi windst.swi′);″,将src.swi文件拷贝为新的windst.swi文件;
<3>在Eclipse的main.cpp中,首先定义好DAT文件类的对象fileDAT,然后调用fileDAT.copy(src.dat,lindst.dat),最后编译连接执行,将src.dat文件拷贝为新的lindst.dat文件;
<4>在Eclipse的main.cpp中,首先定义好SWI文件类的对象fileSWI,然后调用fileSWI.copy(src.swi,lindst.swi),最后编译连接执行,将src.swi文件拷贝为新的lindst.swi文件;
<5>用BPA的潮流计算程序分别计算src.dat、windst.dat和lindst.dat,并比对计算结果;
<6>用BPA的时域仿真计算程序分别计算src.swi、windst.swi和lindst.swi,并比对计算结果。

说明书

说明书用于读写PSD-BPA数据文件的面向对象编程方法
技术领域
本发明涉及电力系统仿真及分析领域,尤其是涉及一种用于读写PSD-BPA数据文件的面向对象编程方法。
背景技术
电力系统仿真分析与计算是电网安全稳定运行的重要前提和基础保障。PSD-BPA是由中国电科院于上个世纪八十年代在美国电科院的BPA基础上,逐渐开发完善的一套用于大规模电力系统仿真分析与计算的商业软件包,现已成为国内电力行业仿真与计算软件的标杆之一。PSD-BPA由静态分析和动态分析两个部分组成。静态分析包括以潮流计算为基础的各类应用,动态分析包括以时域仿真计算为基础的各类应用。除非另有提及,下文中的“BPA”一律指代“PSD-BPA”。
任何电力系统仿真计算的第一步就是读取电网数据。由于国内绝大部分电网企业偏向于采用BPA的文件格式来存储实际电网的静态和动态元件数据,因此,为了将数据正确导入到其他的电力系统仿真分析软件中,业内人士已开发了诸多面向BPA文件格式的双向数据转换接口,包括BPA到PSASP、BPA到PSS/E、BPA到MATPOWER、BPA到PSAT、BPA到PSCAD、BPA到DSA TOOLS、BPA到DIGSILENT、BPA到EUROSTAG、BPA到SIMPOW等。
现阶段,BPA数据转换接口所面临的主要问题有以下几点:第一,为了能正确使用电网企业提供的BPA数据,除了中国电科院以外的软件开发商或者研究机构,必须首先解析BPA的数据格式,然后针对自己的软件或者程序,采用不同的语言或环境来开发相应的数据转换接口,这其中充斥着大量的重复性工作,并且数据转换接口不具备任何通用性;第二,BPA几乎每隔一段时间就会更新一次,而每次更新或为给出新的卡片格式,或对已有卡片的某些数据段进行少量修改和调整,这给数据转换接口程序的维护工作带来了很大的负担;第三,数据转换接口对编程语言、开发环境、操作系统等因素的依赖程度较高,接口程序的可移植性和可扩展 性不强。
考虑到诸多电力系统仿真计算软件对BPA数据文件的需求,以及计算环境(串行计算、分布式内存并行计算、共享式内存并行计算、网格计算和云计算)的日益变化等因素,研究一种独立于实现细节的、且能够用于正确读写BPA数据文件的编程方法,至关重要。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种用于读写PSD-BPA数据文件的面向对象编程方法,设计一套满足BPA数据文件卡片定义的类结构框架,采用某种支持面向对象的编程语言对该类结构框架进行具体实现和部署之后,能够得到具有多种使用方式的BPA数据转换接口,最终实现根据应用需求定制的、不依赖于计算环境的、方便维护和扩展的一套用于正确读写BPA数据文件的软件包;从而实现了BPA数据接口的设计与BPA程序用户手册具有一致的层次关系,从而保证了数据接口程序的可扩展性、可移植性和可维护性,降低了开发和维护BPA双向数据转换接口的难度。
本发明的目的可以通过以下技术方案来实现:
一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,具体包括以下步骤:
(1)分析BPA数据文件中所有卡片的类型及其数据格式,并进行数据抽象;
(2)根据数据抽象的结果来定义服务原语,并设计类结构框架;
(3)以自顶向下的方式,依次完善类结构框架中派生类的定义;
(4)采用面向对象的编程语言来实现该类结构框架;
(5)根据应用需求确定好类结构框架的具体使用方式后,进行接口程序的实现与部署;
(6)在不同的计算环境下,对部署好的接口程序进行正确性校验。
所述的步骤(1)中BPA数据文件中所有卡片的数据抽象具体包括:
<1>分析DAT文件的层次结构,将其分为控制参数域、元件参数域、输出显示域和结束域;
<2>DAT文件的控制参数域具体为,BPA潮流计算的常用控制语句,其中包括潮流开始和结束、指定支路和节点数据文件、指定潮流结果输出二进制文件的控制 语句;
<3>DAT文件的元件参数域具体为,电网的静态元件参数,其中包括区域控制数据卡、节点数据卡、支路数据卡以及数据修改卡;
<4>DAT文件的输出显示域具体为,用户自定义控制语句和基于潮流计算的BPA高级应用控制语句;
<5>DAT文件的结束域具体为,从控制语句(END)或(STOP)开始,到文件最后一行的所有数据;
<6>分析SWI文件的层次结构,将其分为控制参数域、动态元件参数域、静态元件补充参数域和输出显示域;
<7>SWI文件的控制参数域具体为,计算控制卡CASE和所有的故障操作卡;
<8>SWI文件的动态元件参数域具体为,所有的动态元件卡,包括发电机及其控制系统、电动机、风电机组及其控制系统、直流控制系统和FACTS设备;
<9>SWI文件的静态元件补充参数域具体为,所有的静态元件补充卡,包括静态元件的序分量参数、发电机转负荷模型和静态负荷模型;
<10>SWI文件的输出显示域具体为,从计算控制卡FF开始,到文件最后一行的所有数据。
所述的步骤(2)中类结构框架包括5个基类,分别是BPA文件类、BPA数据行类、BPA数据行集合类、BPA卡片类和BPA卡片集合类,其各自的职责和功能为:
<1>BPA文件类,为虚基类,其职责是定义BPA文件操作的服务原语,功能是派生出具体的子类;
<2>BPA数据行类,为基类,其职责是定义BPA文件中某一行数据操作的服务原语,功能是对该行数据的字符串执行某些特定的操作;
<3>BPA数据行集合类,为基类,其职责是定义BPA文件中多行数据操作的服务原语,功能是对若干行数据执行集合方面的操作;
<4>BPA卡片类,为虚基类,其职责是定义BPA卡片操作的服务原语,功能是派生出具体的子类;
<5>BPA卡片集合类,为虚基类,其职责是定义BPA卡片集合操作的服务原语,功能是派生出具体的子类。
所述的步骤(3)中根据BPA的潮流程序用户手册和稳定程序用户手册,自顶 向下逐层定义5大基类的派生类;
1)派生类按照以下方法进行逐层定义:
<1>BPA文件类派生出DAT文件类和SWI文件类;
<2>BPA数据行类和BPA数据行集合类不派生任何子类;
<3>BPA卡片类派生出节点类、支路类、机组类、故障操作类等,节点类派生出交流节点类(B卡)、直流节点类(BD卡、BM卡)、延续节点类(+A卡)等,支路类派生出对称线路类(L卡)、高抗线路类(L+卡)、不对称线路类(E卡)、双端直流线路类(LD卡)、变压器类(T卡)等,机组类派生出发电机模型类(MC卡、MF卡、MG卡)、发电机次暂态模型类(M卡)、励磁系统模型类(EA~EK卡、FA~FL卡结合FZ卡、FM~FV卡结合F+卡等)、PSS模型类(SS卡等)、调速器和原动机模型类(GH卡、TB卡等);
<4>BPA卡片集合类派生出与BPA卡片类同等数量和层次的子类,此处不加以赘述。
派生类按照以下方法进行相互关联:
<5>DAT文件类和SWI文件类分别包含若干个BPA数据行集合类对象,以及若干个BPA卡片集合类(及其派生类)对象;
<6>BPA数据行集合类包含若干个BPA数据行类对象;
<7>BPA卡片集合类(及其派生类)包含若干个BPA卡片类(及其派生类);
<8>BPA卡片类的对象与BPA数据行类的对象,一一对应。所述的步骤(4)中面向对象的编程语言为JAVA、C++、.NET或PHP。
所述的步骤(4)中面向对象的编程语言为C++。
所述的步骤(5)具体为:
根据不同电力仿真分析和计算应用的需求,开发了具有独立应用程序SAP和应用程序接口API两种使用方式的软件包BPAIOPACK,所述的SAP专用于满足非面向对象编程语言开发的程序对BPA数据文件的需求,所述的APl专用于满足面向对象编程语言开发的程序对BPA数据文件的需求。
所述的步骤(6)具体为:
为了验证在不同的计算环境下,BPAIOPACK均具有一致的正确性,分别选用Windows操作系统结合Matlab开发环境、Linux操作系统结合Eclipse开发环境作出说明,具体步骤为:
<1>在Matlab中,输入语句"system(′BPAIOPACK.exe-copy src.dat windst.dat′);″,将src.dat文件拷贝为新的windst.dat文件;
<2>在Matlab中,输入语句″system(′BPAIOPACK.exe-copy src.swiwindst.swi′);″,将src.swi文件拷贝为新的windst.swi文件;
<3>在Eclipse的main.cpp中,首先定义好DAT文件类的对象fileDAT,然后调用fileDAT.copy(src.dat,lindst.dat),最后编译连接执行,将src.dat文件拷贝为新的lindst.dat文件;
<4>在Eclipse的main.cpp中,首先定义好SWI文件类的对象fileSWI,然后调用fileSWI.copy(src.swi,lindst.swi),最后编译连接执行,将src.swi文件拷贝为新的lindst.swi文件;
<5>用BPA的潮流计算程序分别计算src.dat、windst.dat和lindst.dat,并比对计算结果;
<6>用BPA的时域仿真计算程序分别计算src.swi、windst.swi和lindst.swi,并比对计算结果。
与现有技术相比,本发明具有以下优点:
1)在概念模型上,将BPA的动态/静态数据文件分为了几个域。由于BPA的程序对数据文件中卡片的顺序有着较为严格的要求,因此,域划分实现了对BPA数据文件的模块划分,保证了域与域之间、域内的卡片之间会严格按照顺序执行IO操作,在很大程度上降低了解析BPA数据文件,以及开发BPA双向数据转换接口的难度;
2)以自顶向下方式设计的类结构框架,具有更为明确的物理含义。BPA文件派生类对象本质上就是BPA的两类数据文件DAT和SWI。BPA数据行集合类对象本质上就是BPA数据文件中的各个域。BPA卡片类及其派生类的层次关系,本质上就是BPA潮流程序用户手册和BPA稳定程序用户手册中,各级书签的层次关系;
3)设计的类结构框架完全满足面向对象编程的要求,即抽象、继承、封装和多态。这一特性将BPA的数据文件格式和接口的程序实现细节完全剥离开来,使得软件开发商或者研究机构能够将更多的精力放在BPA与其他电力系统仿真分析软件的模型匹配上。另外,面向对象的编程方法使得BPA双向数据转换接口具备了可扩展性、可移植性和可维护性等优点。
附图说明
图1为本发明提供的技术方案实施图;
图2为本发明提供的DAT文件的域划分示意图;
图3为本发明提供的SWI文件的域划分示意图;
图4为本发明提供的类结构框架的派生关系示意图;
图5为本发明提供的类结构框架的关联关系示意图;
图6为本发明提供的类结构框架的行为时序示意图;
图7为本发明提供的BPAIOPACK的应用部署示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
如图1所示,本发明的总体技术路线包括:BPA文件的数据抽象、类结构框架的设计、软件包BPAIOPACK的编程实现、独立应用程序形式BPAIOPACK的生成、应用程序接口形式BPAIOPACK的生成、不同计算环境下BPAIOPACK的正确性校验。
1.BPA文件的数据抽象
通过不断重排DAT文件和SWI文件中数据行的相互位置,同时采用BPA的潮流计算程序和时域仿真计算程序来不断计算,从而确定了DAT文件和SWI文件均由4个顺序的数据块组成。因此,在概念模型上,可以将DAT文件划分为控制参数域、元件参数域、输出显示域和结束域,将SWI文件划分为控制参数域、动态元件参数域、静态元件补充参数域和输出显示域。图2和图3分别给出了DAT文件和SWI文件的域划分示意图。
2.类结构框架的设计
考虑到BPA数据接口对可扩展性和可维护性的要求,类结构框架主要由5个基类构成:File_BPA-BPA文件类、FileRow-BPA数据行类、FileRowCollection-BPA数据行集合类、Card_BPA-BPA卡片类和CardCollection_BPA-BPA卡片集合类。现将各类的一些关键属性(key property)和关键方法(key method)罗列如下:
<1>File_BPA:属性strFileName,用来记录包含路径的BPA数据文件名。方 法Load调用抽象方法LoadEx,实现将BPA文件的数据行填入到相应的域中;方法Save调用抽象方法SaveEx,实现将所有的域填入到BPA文件中;抽象方法FillAllCards,实现将域的参数填入到所有的卡片中;抽象方法UpdateAllCards,实现用所有卡片的参数来更新相应的域;
<2>FileRow:属性strValue,用来记录和操作BPA文件的某一行。方法Comment在strValue的第1列之前添加字符’.’,实现注释掉某一行的功能;方法SubString,具有2个输入参数nStart和nLenth,实现提取strValue中,由nStart开始、长度为nLenth的子字符串功能;
<3>FileRowCollection:派生于集合类,具有各种集合操作的方法,例如add、insert、delete、first、next、end等;
<4>Card_BPA:属性pFileRow,用来指向FileRow的对象;属性CardState,用来记录卡片当前的状态,例如:原始的、修改的、新增的、注释的、删除的等。方法Update调用抽象方法UpdateEx,实现将该卡片的所有参数以字符串拼接的形式,按列顺序填入到pFileRow所指向的FileRow对象中;方法Fill调用抽象方法FillEx,实现利用pFileRow所指向的FileRow对象,来装填该卡片的所有参数;静态方法String2Double,具有3个输入参数strValue、nDecPos和dDefValue,dDefValue记录默认值,实现将BPA中Fw.d形的字符串,转化为双精度类型的变量;静态方法Double2String,具有3个输入参数dValue、nDecPos、nLenth,实现将dValue转化为小数点在nDecPos处、长度为nLenth的字符串,该方法必须具备四舍五入的功能;
<5>CardCollection_BPA:派生于集合类,具有各种集合操作的方法,例如add、insert、delete、first、next、end等;方法Update,实现集合中所有Card_BPA类对象的Update操作。
3.软件包BPAIOPACK的编程实现
由于C++语言与C语言、Fortran语言以及各类操作系统具有天生的兼容性,例如,C++、C和Fortran的默认调用约定都是cdecl,C++更容易使用任何操作系统下的SDK,因此,本发明采用的是C++语言来开发BPA数据转换接口软件包BPAIOPACK。需要补充说明的是,由于C++采用了Name mangling技术来实现重载和多态,因此,当使用其他面向对象的编程语言来调用BPAIOPACK时,最好以静态库的方式来加载BPAIOPACK。
4.独立应用程序形式和应用程序接口形式BPAIOPACK的生成
为了满足非面向对象和面向对象编程语言对BPA数据文件的需求,BPAIOPACK既提供了独立应用程序形式的使用方式,又提供了应用程序接口形式的使用方式。举例来说,对于Windows操作系统下的Matlab程序,只需要调用封装了shell命令行的Matlab指令system或者dos,将指定参数传递给BPAIOPACK.exe,即可得到具有所需格式的目标数据文件。现阶段,BPAIOPACK已支持BPA到MATPOWER和PSAT的数据转换功能。对于Linux操作系统下的C++程序,只需要在shell下输入"gcc-o main main.cpp-1BPAIOPACK",即可加载静态链接库libBPAIOPACK.a。
5.不同计算环境下BPAIOPACK的正确性校验
本发明选用Windows操作系统结合Matlab、Linux操作系统结合C++,对BPAIOPACK的正确性进行验证,具体步骤为:
<1>在Matlab中,输入语句"system(′BPAIOPACK.exe-copy src.dat windst.dat′);″,将src.dat文件拷贝为新的windst.dat文件;
<2>在Matlab中,输入语句″system(′BPAIOPACK.exe-copy src.swi windst.swi′);″,将src.swi文件拷贝为新的windst.swi文件;
<3>在C++中,首先定义好DAT文件类的对象fileDAT,然后调用fileDAT.copy(src.dat,lindst.dat),最后编译连接执行,将src.dat文件拷贝为新的lindst.dat文件;
<4>在C++中,首先定义好SWI文件类的对象fileSWI,然后调用fileSWI.copy(src.swi,lindst.swi),最后编译连接执行,将src.swi文件拷贝为新的lindst.swi文件;
<5>用BPA的潮流计算程序分别计算src.dat、windst.dat和lindst.dat,并比对计算结果;
<6>用BPA的时域仿真计算程序分别计算src.swi、windst.swi和lindst.swi,并比对计算结果。
如图4所示,类结构框架中各类的泛化关系,与实际电力系统中各个元件的抽象模型是完全吻合的。例如:任何类型的线路或者变压器都属于支路,任何类型的发电机、励磁系统、原动机、调速器、PSS等都属于机组,因此,这对于接口程序的扩展和维护都是非常有利的。
在可扩展性方面,以添加“固定转速风力发电机组模型”为例,具体步骤包括:
<l>确定需要加入的动态元件卡片为MW卡(风电机组模型)和TG卡(风功率模型);
<2>由Unit_BPA分别派生出MW_BPA、TG_BPA两个子类,由UnitCollection_BPA分别派生出MWCollection_BPA、TGCollection_BPA两个子类;
<3>查看BPA的稳定程序用户手册,核对MW卡和TG卡是否具有机组卡片的公有属性,即,数据行的前16列依次为:卡片名、机组所联母线名、机组所联母线基准电压和机组编号;
<4>若是,则完成扩展,若否,则进入下一步;
<5>由Card_BPA分别派生出MW_BPA、TG_BPA两个子类,由CardCollection_BPA分别派生出MWCollection_BPA、TGCollection_BPA两个子类。
在可维护性方面,假设BPA将L卡、L+卡和E卡合并成了新的L卡,并且新的L卡和旧的E卡具有完全一致的数据格式,于是,对原有类结构框架的修改步骤为:
<1>删除Line_BPA、Linep_BPA、LineCollection_BPA、LinepCollection_BPA;
<2>将ELine_BPA和ELineCollection_BPA分别更名为Line_BPA和LineCollecfion_BPA。
如图5所示,类结构框架中的类具有以下的互联关系:
<1>DAT_BPA类与FileRowCollection类构成1∶4的组合关系,即是说,一个DAT_BPA类对象包含4个FileRowCollection类对象,它们分别是:控制参数域ControlField、元件参数域ElementField、输出显示域OutputField和结束域EndField;
<2>DAT_BPA类与CardCollection_BPA类的各个派生类构成1∶1的组合关系。举例来说,一个DAT_BPA类对象包含一个ACBusCollection_BPA类对象、一个LineCollection_BPA类对象、一个TransCollection_BPA类对象和其他属于DAT文件的CardCollection_BPA类对象;
<3>SWI_BPA类与FileRowCollection类构成1∶4的组合关系,即是说,一个SWI_BPA类对象包含4个FileRowCollection类对象,它们分别是:控制参数域ControlField、动态元件参数域DynElementField、静态元件补充参数域StaElementField和输出显示域OutputField;
<4>SWI_BPA类与CardCollection_BPA类的各个派生类构成1∶1的组合关系。 举例来说,一个SWI_BPA类对象包含一个MCFGCollection_BPA类对象、一个LS123Collection_BPA类对象、一个LABCollection_BPA类对象和其他属于SWI文件的CardCollection_BPA类对象。
虽然没有给出图例,但需要指出的是,Card_BPA类与FileRow类构成1∶1的依赖关系,该关系是通过Card_BPA类的抽象方法FillEx和抽象方法UpdateEx来实现的。以Card_BPA的派生类Trans_BPA为例,采用自顶向下的方式来定义抽象方法FillEx的具体步骤包括:
<1>由类结构框架可知,Card_BPA派生出Branch_BPA派生出Trans_BPA;
<2>定义Branch_BPA的方法FillEx,实现将FileRow类对象属性strValue的前32列,读入到Branch_BPA的各个属性中;
<3>定义Trans_BPA的方法FillEx,实现将FileRow类对象属性strValue的剩下所有列,读入到Trans_BPA的各个属性中。
抽象方法UpdateEx的定义方式与FillEx完全一致,此处不加以赘述。
Card_BPA类的Fill方法和Update方法,用来实现一些与类对象状态相关的操作。例如,在BPAIOPACK的实际使用过程中,若仅对ACBus_BPA类的某一个对象进行了修改,那么只需要将该对象的CardState属性改为Modified,而其他Card_BPA类对象的CardState属性均为Unchanged。于是,在DAT_BPA类对象执行UpdateAllCards方法时,Update方法会保证只有当Card_BPA类对象的CardState属性不为Unchanged时,才执行抽象方法UpdateEx。因此,Card_BPA类的这一行为,与宏观上“谁被修改了就更新谁”的说法,是完全统一的。Fill方法与Update方法的作用完全一致,此处不加以赘述。
如图6所示,类结构框架的行为时序包括:
<1>调用File_BPA类的方法Load(),实现将硬盘中存储的BPA数据文件,以域划分的形式,装载到FileRowCollection类的各个对象中;
<2>调用File_BPA类的抽象方法FillAllCards(),实现将FileRowCollection类的各个对象,以参数的形式,填入到CardCollection_BPA类的各个对象中;
<3>完成BPA数据文件的输入操作;
<4>根据外部应用程序的需求,实现对BPA数据的后续处理,例如:读取、修改、添加、删除某张或某些卡片等;
<5>调用File_BPA类的抽象方法UpdateAllCards(),将修改过的 CardCollection_BPA类对象,以字符串的形式,填入到相应的FileRowCollection类对象中;
<6>调用File_BPA类的方法Save(),将修改过的FileRowCollection类对象,重新写回到BPA数据文件中;
<7>完成BPA数据文件的输出操作。
需要补充说明的是,上述步骤<4>中对BPA数据的后续处理,不单指BPA的卡片数据,更可以对其他的数据进行后续处理。例如:DAT文件中的计算控制语句以及用户自定义控制语句,它们分别位于控制参数域和输出显示域中,于是,只需要根据具体的需求,在DAT_BPA类中添加相应的方法,即可实现所要求的功能。另一方面,类结构框架本身和关系型数据库是完全对应的,具体体现在:类对应表、属性对应列、对象对应记录、类之间的关联对应实体之间的关联,因此,类结构框架可以轻松实现BPA数据文件与关系型数据库的相互转换。
如图7所示,基于类结构框架开发的软件包BPAIOPACK现已部署于:
<1>自适应LM方法的电力系统病态潮流计算程序;
<2>电力系统N-2仿真分析过程的自动化实现系统。
中,且均取得了良好的实际应用效果。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域的技术开发人员应该明白,在本发明的技术方案的基础上,本领域及相关领域的技术开发人员不需要付出创造性劳动即可做出的各种修改或变形,仍在本发明的保护范围以内。

用于读写PSDBPA数据文件的面向对象编程方法.pdf_第1页
第1页 / 共17页
用于读写PSDBPA数据文件的面向对象编程方法.pdf_第2页
第2页 / 共17页
用于读写PSDBPA数据文件的面向对象编程方法.pdf_第3页
第3页 / 共17页
点击查看更多>>
资源描述

《用于读写PSDBPA数据文件的面向对象编程方法.pdf》由会员分享,可在线阅读,更多相关《用于读写PSDBPA数据文件的面向对象编程方法.pdf(17页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 (43)申请公布日 (21)申请号 201410629360.8 (22)申请日 2014.11.10 G06F 9/44(2006.01) (71)申请人 上海交通大学 地址 200240 上海市闵行区东川路 800 号 申请人 华东电网有限公司 (72)发明人 赵文恺 严正 张逸飞 曹路 李建华 周挺辉 范翔 (74)专利代理机构 上海科盛知识产权代理有限 公司 31225 代理人 赵志远 (54) 发明名称 用于读写 PSD-BPA 数据文件的面向对象编程 方法 (57) 摘要 本发明涉及一种用于读写 PSD-BPA 数据文件 的面向对象编程方法, 具体包括以下步骤 。

2、: (1) 分 析 BPA 数据文件中所有卡片的类型及其数据格 式, 并进行数据抽象 ; (2) 根据数据抽象的结果来 定义服务原语, 并设计类结构框架 ; (3) 以自顶向 下的方式, 依次完善类结构框架中派生类的定义 : (4) 采用面向对象的编程语言来实现该类结构框 架 : (5) 根据应用需求确定好类结构框架的具体 使用方式后, 进行接口程序的实现与部署 : (6) 在 不同的计算环境下, 对部署好的接口程序进行正 确性校验。 与现有技术相比, 本发明实现了BPA数 据接口的设计与 BPA 程序用户手册具有一致的层 次关系, 从而保证了数据接口程序的可扩展性、 可 移植性和可维护性, 。

3、降低了开发和维护 BPA 双向 数据转换接口的难度。 (51)Int.Cl. (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书3页 说明书8页 附图5页 (10)申请公布号 CN 104391692 A (43)申请公布日 2015.03.04 CN 104391692 A 1/3 页 2 1. 一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特征在于, 具体包括以下 步骤 : (1) 分析 BPA 数据文件中所有卡片的类型及其数据格式, 并进行数据抽象 ; (2) 根据数据抽象的结果来定义服务原语, 并设计类结构框架 ; (3) 以自顶向下的方式, 依次完。

4、善类结构框架中派生类的定义 ; (4) 采用面向对象的编程语言来实现该类结构框架 ; (5) 根据应用需求确定好类结构框架的具体使用方式后, 进行接口程序的实现与部 署 ; (6) 在不同的计算环境下, 对部署好的接口程序进行正确性校验。 2. 根据权利要求 1 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤 (1) 中 BPA 数据文件中所有卡片的数据抽象具体包括 : 分析 DAT 文件的层次结构, 将其分为控制参数域、 元件参数域、 输出显示域和结束 域 ; DAT 文件的控制参数域具体为, BPA 潮流计算的常用控制语句, 其中包括潮流开始 。

5、和结束、 指定支路和节点数据文件、 指定潮流结果输出二进制文件的控制语句 ; DAT 文件的元件参数域具体为, 电网的静态元件参数, 其中包括区域控制数据卡、 节 点数据卡、 支路数据卡以及数据修改卡 ; DAT 文件的输出显示域具体为, 用户自定义控制语句和基于潮流计算的 BPA 高级应 用控制语句 ; DAT 文件的结束域具体为, 从控制语句 (END) 或 (STOP) 开始, 到文件最后一行的所 有数据 ; 分析 SWI 文件的层次结构, 将其分为控制参数域、 动态元件参数域、 静态元件补充 参数域和输出显示域 ; SWI 文件的控制参数域具体为, 计算控制卡 CASE 和所有的故障操。

6、作卡 ; SWI 文件的动态元件参数域具体为, 所有的动态元件卡, 包括发电机及其控制系统、 电动机、 风电机组及其控制系统、 直流控制系统和 FACTS 设备 ; SWI 文件的静态元件补充参数域具体为, 所有的静态元件补充卡, 包括静态元件的 序分量参数、 发电机转负荷模型和静态负荷模型 ; SWI 文件的输出显示域具体为, 从计算控制卡 FF 开始, 到文件最后一行的所有数 据。 3. 根据权利要求 1 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤(2)中类结构框架包括5个基类, 分别是BPA文件类、 BPA数据行类、 BPA 数据行集合类。

7、、 BPA 卡片类和 BPA 卡片集合类, 其各自的职责和功能为 : BPA 文件类, 为虚基类, 其职责是定义 BPA 文件操作的服务原语, 功能是派生出具体 的子类 ; BPA 数据行类, 为基类, 其职责是定义 BPA 文件中某一行数据操作的服务原语, 功能 是对该行数据的字符串执行某些特定的操作 ; BPA 数据行集合类, 为基类, 其职责是定义 BPA 文件中多行数据操作的服务原语, 功 能是对若干行数据执行集合方面的操作 ; 权 利 要 求 书 CN 104391692 A 2 2/3 页 3 BPA 卡片类, 为虚基类, 其职责是定义 BPA 卡片操作的服务原语, 功能是派生出具。

8、体 的子类 ; BPA 卡片集合类, 为虚基类, 其职责是定义 BPA 卡片集合操作的服务原语, 功能是派 生出具体的子类。 4. 根据权利要求 1 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤(3)中根据BPA的潮流程序用户手册和稳定程序用户手册, 自顶向下逐 层定义 5 大基类的派生类 ; 1) 派生类按照以下方法进行逐层定义 : BPA 文件类派生出 DAT 文件类和 SWI 文件类 ; BPA 数据行类和 BPA 数据行集合类不派生任何子类 : BPA 卡片类派生出节点类、 支路类、 机组类和故障操作类, 所述的节点类派生出交流 节点类、。

9、 直流节点类和延续节点类, 所述的支路类派生出对称线路类、 高抗线路类、 不对称 线路类、 双端直流线路类和变压器类, 所述的机组类派生出发电机模型类、 发电机次暂态模 型类、 励磁系统模型类、 PSS 模型类、 调速器和原动机模型类 ; BPA 卡片集合类派生出与 BPA 卡片类同等数量和层次的子类 ; 2) 派生类按照以下方法进行相互关联 : DAT 文件类和 SWI 文件类分别包含若干个 BPA 数据行集合类对象, 以及若干个 BPA 卡片集合类对象 ; BPA 数据行集合类包含若干个 BPA 数据行类对象 ; BPA 卡片集合类包含若干个 BPA 卡片类 ; BPA 卡片类的对象与 B。

10、PA 数据行类的对象, 一一对应。 5. 根据权利要求 1 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤 (4) 中面向对象的编程语言为 JAVA、 C+、 .NET 或 PHP。 6. 根据权利要求 5 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤 (4) 中面向对象的编程语言为 C+。 7. 根据权利要求 1 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤 (5) 具体为 : 根据不同电力仿真分析和计算应用的需求, 开发了具有独立应用程序 SAP 和。

11、应用程序 接口API两种使用方式的软件包BPAIOPACK, 所述的SAP专用于满足非面向对象编程语言开 发的程序对 BPA 数据文件的需求, 所述的 API 专用于满足面向对象编程语言开发的程序对 BPA 数据文件的需求。 8. 根据权利要求 7 所述的一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特 征在于, 所述的步骤 (6) 具体为 : 为了验证在不同的计算环境下, BPAIOPACK 均具有一致的正确性, 分别选用 Windows 操 作系统结合 Matlab 开发环境、 Linux 操作系统结合 Eclipse 开发环境作出说明, 具体步骤 为 : 在 Matlab。

12、 中, 输 入 语 句 system( BPAIOPACK.exe-copy src.dat windst. dat ) ; , 将 src.dat 文件拷贝为新的 windst.dat 文件 ; 在 Matlab 中, 输 入 语 句 system( BPAIOPACK.exe-copy src.swi windst. 权 利 要 求 书 CN 104391692 A 3 3/3 页 4 swi ) ; , 将 src.swi 文件拷贝为新的 windst.swi 文件 ; 在 Eclipse 的 main.cpp 中, 首先定义好 DAT 文件类的对象 fi leDAT, 然后调用 fi 。

13、leDAT.copy(src.dat, lindst.dat), 最后编译连接执行, 将 src.dat 文件拷贝为新的 lindst.dat 文件 ; 在 Eclipse 的 main.cpp 中, 首先定义好 SWI 文件类的对象 fi leSWI, 然后调用 fi leSWI.copy(src.swi, lindst.swi), 最后编译连接执行, 将 src.swi 文件拷贝为新的 lindst.swi 文件 ; 用 BPA 的潮流计算程序分别计算 src.dat、 windst.dat 和 lindst.dat, 并比对计算 结果 ; 用 BPA 的时域仿真计算程序分别计算 src.。

14、swi、 windst.swi 和 lindst.swi, 并比对 计算结果。 权 利 要 求 书 CN 104391692 A 4 1/8 页 5 用于读写 PSD-BPA 数据文件的面向对象编程方法 技术领域 0001 本发明涉及电力系统仿真及分析领域, 尤其是涉及一种用于读写 PSD-BPA 数据文 件的面向对象编程方法。 背景技术 0002 电力系统仿真分析与计算是电网安全稳定运行的重要前提和基础保障。PSD-BPA 是由中国电科院于上个世纪八十年代在美国电科院的 BPA 基础上, 逐渐开发完善的一套用 于大规模电力系统仿真分析与计算的商业软件包, 现已成为国内电力行业仿真与计算软件 。

15、的标杆之一。PSD-BPA 由静态分析和动态分析两个部分组成。静态分析包括以潮流计算为 基础的各类应用, 动态分析包括以时域仿真计算为基础的各类应用。 除非另有提及, 下文中 的 “BPA” 一律指代 “PSD-BPA” 。 0003 任何电力系统仿真计算的第一步就是读取电网数据。 由于国内绝大部分电网企业 偏向于采用 BPA 的文件格式来存储实际电网的静态和动态元件数据, 因此, 为了将数据正 确导入到其他的电力系统仿真分析软件中, 业内人士已开发了诸多面向 BPA 文件格式的双 向数据转换接口, 包括 BPA 到 PSASP、 BPA 到 PSS/E、 BPA 到 MATPOWER、 BP。

16、A 到 PSAT、 BPA 到 PSCAD、 BPA 到 DSA TOOLS、 BPA 到 DIGSILENT、 BPA 到 EUROSTAG、 BPA 到 SIMPOW 等。 0004 现阶段, BPA 数据转换接口所面临的主要问题有以下几点 : 第一, 为了能正确使用 电网企业提供的 BPA 数据, 除了中国电科院以外的软件开发商或者研究机构, 必须首先解 析 BPA 的数据格式, 然后针对自己的软件或者程序, 采用不同的语言或环境来开发相应的 数据转换接口, 这其中充斥着大量的重复性工作, 并且数据转换接口不具备任何通用性 ; 第 二, BPA 几乎每隔一段时间就会更新一次, 而每次更新。

17、或为给出新的卡片格式, 或对已有卡 片的某些数据段进行少量修改和调整, 这给数据转换接口程序的维护工作带来了很大的负 担 ; 第三, 数据转换接口对编程语言、 开发环境、 操作系统等因素的依赖程度较高, 接口程序 的可移植性和可扩展性不强。 0005 考虑到诸多电力系统仿真计算软件对 BPA 数据文件的需求, 以及计算环境 ( 串行 计算、 分布式内存并行计算、 共享式内存并行计算、 网格计算和云计算 ) 的日益变化等因 素, 研究一种独立于实现细节的、 且能够用于正确读写 BPA 数据文件的编程方法, 至关重 要。 发明内容 0006 本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种。

18、用于读写 PSD-BPA 数据文件的面向对象编程方法, 设计一套满足 BPA 数据文件卡片定义的类结构框 架, 采用某种支持面向对象的编程语言对该类结构框架进行具体实现和部署之后, 能够得 到具有多种使用方式的 BPA 数据转换接口, 最终实现根据应用需求定制的、 不依赖于计算 环境的、 方便维护和扩展的一套用于正确读写BPA数据文件的软件包 ; 从而实现了BPA数据 接口的设计与 BPA 程序用户手册具有一致的层次关系, 从而保证了数据接口程序的可扩展 说 明 书 CN 104391692 A 5 2/8 页 6 性、 可移植性和可维护性, 降低了开发和维护 BPA 双向数据转换接口的难度。。

19、 0007 本发明的目的可以通过以下技术方案来实现 : 0008 一种用于读写 PSD-BPA 数据文件的面向对象编程方法, 其特征在于, 具体包括以 下步骤 : 0009 (1) 分析 BPA 数据文件中所有卡片的类型及其数据格式, 并进行数据抽象 ; 0010 (2) 根据数据抽象的结果来定义服务原语, 并设计类结构框架 ; 0011 (3) 以自顶向下的方式, 依次完善类结构框架中派生类的定义 ; 0012 (4) 采用面向对象的编程语言来实现该类结构框架 ; 0013 (5) 根据应用需求确定好类结构框架的具体使用方式后, 进行接口程序的实现与 部署 ; 0014 (6) 在不同的计算。

20、环境下, 对部署好的接口程序进行正确性校验。 0015 所述的步骤 (1) 中 BPA 数据文件中所有卡片的数据抽象具体包括 : 0016 分析 DAT 文件的层次结构, 将其分为控制参数域、 元件参数域、 输出显示域和 结束域 ; 0017 DAT 文件的控制参数域具体为, BPA 潮流计算的常用控制语句, 其中包括潮流 开始和结束、 指定支路和节点数据文件、 指定潮流结果输出二进制文件的控制语句 ; 0018 DAT 文件的元件参数域具体为, 电网的静态元件参数, 其中包括区域控制数据 卡、 节点数据卡、 支路数据卡以及数据修改卡 ; 0019 DAT 文件的输出显示域具体为, 用户自定义。

21、控制语句和基于潮流计算的 BPA 高 级应用控制语句 ; 0020 DAT 文件的结束域具体为, 从控制语句 (END) 或 (STOP) 开始, 到文件最后一行 的所有数据 ; 0021 分析 SWI 文件的层次结构, 将其分为控制参数域、 动态元件参数域、 静态元件 补充参数域和输出显示域 ; 0022 SWI 文件的控制参数域具体为, 计算控制卡 CASE 和所有的故障操作卡 ; 0023 SWI 文件的动态元件参数域具体为, 所有的动态元件卡, 包括发电机及其控制 系统、 电动机、 风电机组及其控制系统、 直流控制系统和 FACTS 设备 ; 0024 SWI 文件的静态元件补充参数域。

22、具体为, 所有的静态元件补充卡, 包括静态元 件的序分量参数、 发电机转负荷模型和静态负荷模型 ; 0025 SWI 文件的输出显示域具体为, 从计算控制卡 FF 开始, 到文件最后一行的所 有数据。 0026 所述的步骤 (2) 中类结构框架包括 5 个基类, 分别是 BPA 文件类、 BPA 数据行类、 BPA 数据行集合类、 BPA 卡片类和 BPA 卡片集合类, 其各自的职责和功能为 : 0027 BPA 文件类, 为虚基类, 其职责是定义 BPA 文件操作的服务原语, 功能是派生出 具体的子类 ; 0028 BPA 数据行类, 为基类, 其职责是定义 BPA 文件中某一行数据操作的服。

23、务原语, 功能是对该行数据的字符串执行某些特定的操作 ; 0029 BPA 数据行集合类, 为基类, 其职责是定义 BPA 文件中多行数据操作的服务原 语, 功能是对若干行数据执行集合方面的操作 ; 说 明 书 CN 104391692 A 6 3/8 页 7 0030 BPA 卡片类, 为虚基类, 其职责是定义 BPA 卡片操作的服务原语, 功能是派生出 具体的子类 ; 0031 BPA 卡片集合类, 为虚基类, 其职责是定义 BPA 卡片集合操作的服务原语, 功能 是派生出具体的子类。 0032 所述的步骤 (3) 中根据 BPA 的潮流程序用户手册和稳定程序用户手册, 自顶向下 逐层定义。

24、 5 大基类的派生类 ; 0033 1) 派生类按照以下方法进行逐层定义 : 0034 BPA 文件类派生出 DAT 文件类和 SWI 文件类 ; 0035 BPA 数据行类和 BPA 数据行集合类不派生任何子类 ; 0036 BPA 卡片类派生出节点类、 支路类、 机组类、 故障操作类等, 节点类派生出交流 节点类 (B 卡 )、 直流节点类 (BD 卡、 BM 卡 )、 延续节点类 (+A 卡 ) 等, 支路类派生出对称线 路类 (L 卡 )、 高抗线路类 (L+ 卡 )、 不对称线路类 (E 卡 )、 双端直流线路类 (LD 卡 )、 变压器 类 (T 卡 ) 等, 机组类派生出发电机模。

25、型类 (MC 卡、 MF 卡、 MG 卡 )、 发电机次暂态模型类 (M 卡 )、 励磁系统模型类 (EA EK 卡、 FA FL 卡结合 FZ 卡、 FM FV 卡结合 F+ 卡等 )、 PSS 模型类 (SS 卡等 )、 调速器和原动机模型类 (GH 卡、 TB 卡等 ) ; 0037 BPA 卡片集合类派生出与 BPA 卡片类同等数量和层次的子类, 此处不加以赘 述。 0038 派生类按照以下方法进行相互关联 : 0039 DAT 文件类和 SWI 文件类分别包含若干个 BPA 数据行集合类对象, 以及若干个 BPA 卡片集合类 ( 及其派生类 ) 对象 ; 0040 BPA 数据行集合。

26、类包含若干个 BPA 数据行类对象 ; 0041 BPA 卡片集合类 ( 及其派生类 ) 包含若干个 BPA 卡片类 ( 及其派生类 ) ; 0042 BPA 卡片类的对象与 BPA 数据行类的对象, 一一对应。所述的步骤 (4) 中面向 对象的编程语言为 JAVA、 C+、 .NET 或 PHP。 0043 所述的步骤 (4) 中面向对象的编程语言为 C+。 0044 所述的步骤 (5) 具体为 : 0045 根据不同电力仿真分析和计算应用的需求, 开发了具有独立应用程序 SAP 和应用 程序接口API两种使用方式的软件包BPAIOPACK, 所述的SAP专用于满足非面向对象编程语 言开发的。

27、程序对 BPA 数据文件的需求, 所述的 APl 专用于满足面向对象编程语言开发的程 序对 BPA 数据文件的需求。 0046 所述的步骤 (6) 具体为 : 0047 为了验证在不同的计算环境下, BPAIOPACK 均具有一致的正确性, 分别选用 Windows 操作系统结合 Matlab 开发环境、 Linux 操作系统结合 Eclipse 开发环境作出说明, 具体步骤为 : 0048 在 Matlab 中, 输入语句 “system( BPAIOPACK.exe-copy src.dat windst. dat ) ; , 将 src.dat 文件拷贝为新的 windst.dat 文件。

28、 ; 0049 在 Matlab 中, 输入语句 system( BPAIOPACK.exe-copy src.swiwindst. swi ) ; , 将 src.swi 文件拷贝为新的 windst.swi 文件 ; 0050 在 Eclipse 的 main.cpp 中, 首先定义好 DAT 文件类的对象 fi leDAT, 然后调 说 明 书 CN 104391692 A 7 4/8 页 8 用 fi leDAT.copy(src.dat, lindst.dat), 最后编译连接执行, 将 src.dat 文件拷贝为新的 lindst.dat 文件 ; 0051 在 Eclipse 的。

29、 main.cpp 中, 首先定义好 SWI 文件类的对象 fi leSWI, 然后调 用 fi leSWI.copy(src.swi, lindst.swi), 最后编译连接执行, 将 src.swi 文件拷贝为新的 lindst.swi 文件 ; 0052 用 BPA 的潮流计算程序分别计算 src.dat、 windst.dat 和 lindst.dat, 并比对 计算结果 ; 0053 用 BPA 的时域仿真计算程序分别计算 src.swi、 windst.swi 和 lindst.swi, 并 比对计算结果。 0054 与现有技术相比, 本发明具有以下优点 : 0055 1) 在概念。

30、模型上, 将 BPA 的动态 / 静态数据文件分为了几个域。由于 BPA 的程序 对数据文件中卡片的顺序有着较为严格的要求, 因此, 域划分实现了对 BPA 数据文件的模 块划分, 保证了域与域之间、 域内的卡片之间会严格按照顺序执行 IO 操作, 在很大程度上 降低了解析 BPA 数据文件, 以及开发 BPA 双向数据转换接口的难度 ; 0056 2) 以自顶向下方式设计的类结构框架, 具有更为明确的物理含义。BPA 文件派生 类对象本质上就是 BPA 的两类数据文件 DAT 和 SWI。BPA 数据行集合类对象本质上就是 BPA 数据文件中的各个域。 BPA卡片类及其派生类的层次关系, 本。

31、质上就是BPA潮流程序用户手 册和 BPA 稳定程序用户手册中, 各级书签的层次关系 ; 0057 3) 设计的类结构框架完全满足面向对象编程的要求, 即抽象、 继承、 封装和多态。 这一特性将 BPA 的数据文件格式和接口的程序实现细节完全剥离开来, 使得软件开发商或 者研究机构能够将更多的精力放在 BPA 与其他电力系统仿真分析软件的模型匹配上。另 外, 面向对象的编程方法使得 BPA 双向数据转换接口具备了可扩展性、 可移植性和可维护 性等优点。 附图说明 0058 图 1 为本发明提供的技术方案实施图 ; 0059 图 2 为本发明提供的 DAT 文件的域划分示意图 ; 0060 图 。

32、3 为本发明提供的 SWI 文件的域划分示意图 ; 0061 图 4 为本发明提供的类结构框架的派生关系示意图 ; 0062 图 5 为本发明提供的类结构框架的关联关系示意图 ; 0063 图 6 为本发明提供的类结构框架的行为时序示意图 ; 0064 图 7 为本发明提供的 BPAIOPACK 的应用部署示意图。 具体实施方式 0065 下面结合附图和具体实施例对本发明进行详细说明。 0066 实施例 0067 如图 1 所示, 本发明的总体技术路线包括 : BPA 文件的数据抽象、 类结构框架的设 计、 软件包 BPAIOPACK 的编程实现、 独立应用程序形式 BPAIOPACK 的生成。

33、、 应用程序接口形 式 BPAIOPACK 的生成、 不同计算环境下 BPAIOPACK 的正确性校验。 说 明 书 CN 104391692 A 8 5/8 页 9 0068 1.BPA 文件的数据抽象 0069 通过不断重排 DAT 文件和 SWI 文件中数据行的相互位置, 同时采用 BPA 的潮流计 算程序和时域仿真计算程序来不断计算, 从而确定了 DAT 文件和 SWI 文件均由 4 个顺序的 数据块组成。因此, 在概念模型上, 可以将 DAT 文件划分为控制参数域、 元件参数域、 输出显 示域和结束域, 将 SWI 文件划分为控制参数域、 动态元件参数域、 静态元件补充参数域和输 出。

34、显示域。图 2 和图 3 分别给出了 DAT 文件和 SWI 文件的域划分示意图。 0070 2. 类结构框架的设计 0071 考虑到 BPA 数据接口对可扩展性和可维护性的要求, 类结构框架主要由 5 个基类 构成 : File_BPA-BPA 文件类、 FileRow-BPA 数据行类、 FileRowCollection-BPA 数据行集合 类、 Card_BPA-BPA 卡片类和 CardCollection_BPA-BPA 卡片集合类。现将各类的一些关键 属性 (key property) 和关键方法 (key method) 罗列如下 : 0072 File_BPA : 属性str。

35、FileName, 用来记录包含路径的BPA数据文件名。 方法Load 调用抽象方法 LoadEx, 实现将 BPA 文件的数据行填入到相应的域中 ; 方法 Save 调用抽象方 法SaveEx, 实现将所有的域填入到BPA文件中 ; 抽象方法FillAllCards, 实现将域的参数填 入到所有的卡片中 ; 抽象方法 UpdateAllCards, 实现用所有卡片的参数来更新相应的域 ; 0073 FileRow : 属性 strValue, 用来记录和操作 BPA 文件的某一行。方法 Comment 在 strValue 的第 1 列之前添加字符 . , 实现注释掉某一行的功能 ; 方法 。

36、SubString, 具有 2 个输入参数 nStart 和 nLenth, 实现提取 strValue 中, 由 nStart 开始、 长度为 nLenth 的 子字符串功能 ; 0074 FileRowCollection : 派生于集合类, 具有各种集合操作的方法, 例如 add、 insert、 delete、 fi rst、 next、 end 等 ; 0075 Card_BPA : 属性 pFileRow, 用来指向 FileRow 的对象 ; 属性 CardState, 用来 记录卡片当前的状态, 例如 : 原始的、 修改的、 新增的、 注释的、 删除的等。方法 Update 调。

37、 用抽象方法 UpdateEx, 实现将该卡片的所有参数以字符串拼接的形式, 按列顺序填入到 pFileRow 所指向的 FileRow 对象中 ; 方法 Fill 调用抽象方法 FillEx, 实现利用 pFileRow 所指向的 FileRow 对象, 来装填该卡片的所有参数 ; 静态方法 String2Double, 具有 3 个输 入参数 strValue、 nDecPos 和 dDefValue, dDefValue 记录默认值, 实现将 BPA 中 Fw.d 形的 字符串, 转化为双精度类型的变量 ; 静态方法 Double2String, 具有 3 个输入参数 dValue、 n。

38、DecPos、 nLenth, 实现将 dValue 转化为小数点在 nDecPos 处、 长度为 nLenth 的字符串, 该 方法必须具备四舍五入的功能 ; 0076 CardCollection_BPA : 派生于集合类, 具有各种集合操作的方法, 例如 add、 insert、 delete、 fi rst、 next、 end 等 ; 方法 Update, 实现集合中所有 Card_BPA 类对象的 Update 操作。 0077 3. 软件包 BPAIOPACK 的编程实现 0078 由于C+语言与C语言、 Fortran语言以及各类操作系统具有天生的兼容性, 例如, C+、 C 。

39、和 Fortran 的默认调用约定都是 cdecl, C+ 更容易使用任何操作系统下的 SDK, 因 此, 本发明采用的是C+语言来开发BPA数据转换接口软件包BPAIOPACK。 需要补充说明的 是, 由于 C+ 采用了 Name mangling 技术来实现重载和多态, 因此, 当使用其他面向对象的 编程语言来调用 BPAIOPACK 时, 最好以静态库的方式来加载 BPAIOPACK。 说 明 书 CN 104391692 A 9 6/8 页 10 0079 4. 独立应用程序形式和应用程序接口形式 BPAIOPACK 的生成 0080 为了满足非面向对象和面向对象编程语言对 BPA 数。

40、据文件的需求, BPAIOPACK 既 提供了独立应用程序形式的使用方式, 又提供了应用程序接口形式的使用方式。 举例来说, 对于 Windows 操作系统下的 Matlab 程序, 只需要调用封装了 shell 命令行的 Matlab 指令 system 或者 dos, 将指定参数传递给 BPAIOPACK.exe, 即可得到具有所需格式的目标数据文 件。现阶段, BPAIOPACK 已支持 BPA 到 MATPOWER 和 PSAT 的数据转换功能。对于 Linux 操 作系统下的C+程序, 只需要在shell下输入“gcc-o main main.cpp-1BPAIOPACK“, 即可加。

41、 载静态链接库 libBPAIOPACK.a。 0081 5. 不同计算环境下 BPAIOPACK 的正确性校验 0082 本 发 明 选 用 Windows 操 作 系 统 结 合 Matlab、 Linux 操 作 系 统 结 合 C+, 对 BPAIOPACK 的正确性进行验证, 具体步骤为 : 0083 在 Matlab 中, 输入语句 “system( BPAIOPACK.exe-copy src.dat windst. dat ) ; , 将 src.dat 文件拷贝为新的 windst.dat 文件 ; 0084 在 Matlab 中, 输入语句 system( BPAIOPAC。

42、K.exe-copy src.swi windst. swi ) ; , 将 src.swi 文件拷贝为新的 windst.swi 文件 ; 0085 在C+中, 首先定义好DAT文件类的对象fi leDAT, 然后调用fi leDAT.copy(src. dat, lindst.dat), 最后编译连接执行, 将 src.dat 文件拷贝为新的 lindst.dat 文件 ; 0086 在C+中, 首先定义好SWI文件类的对象fi leSWI, 然后调用fi leSWI.copy(src. swi, lindst.swi), 最后编译连接执行, 将 src.swi 文件拷贝为新的 linds。

43、t.swi 文件 ; 0087 用 BPA 的潮流计算程序分别计算 src.dat、 windst.dat 和 lindst.dat, 并比对 计算结果 ; 0088 用 BPA 的时域仿真计算程序分别计算 src.swi、 windst.swi 和 lindst.swi, 并 比对计算结果。 0089 如图 4 所示, 类结构框架中各类的泛化关系, 与实际电力系统中各个元件的抽象 模型是完全吻合的。例如 : 任何类型的线路或者变压器都属于支路, 任何类型的发电机、 励 磁系统、 原动机、 调速器、 PSS 等都属于机组, 因此, 这对于接口程序的扩展和维护都是非常 有利的。 0090 在可扩。

44、展性方面, 以添加 “固定转速风力发电机组模型” 为例, 具体步骤包括 : 0091 确定需要加入的动态元件卡片为 MW 卡 ( 风电机组模型 ) 和 TG 卡 ( 风功率模 型 ) ; 0092 由Unit_BPA分别派生出MW_BPA、 TG_BPA两个子类, 由UnitCollection_BPA分 别派生出 MWCollection_BPA、 TGCollection_BPA 两个子类 ; 0093 查看BPA的稳定程序用户手册, 核对MW卡和TG卡是否具有机组卡片的公有属 性, 即, 数据行的前 16 列依次为 : 卡片名、 机组所联母线名、 机组所联母线基准电压和机组 编号 ; 0。

45、094 若是, 则完成扩展, 若否, 则进入下一步 ; 0095 由Card_BPA分别派生出MW_BPA、 TG_BPA两个子类, 由CardCollection_BPA分 别派生出 MWCollection_BPA、 TGCollection_BPA 两个子类。 0096 在可维护性方面, 假设 BPA 将 L 卡、 L+ 卡和 E 卡合并成了新的 L 卡, 并且新的 L 卡 说 明 书 CN 104391692 A 10 7/8 页 11 和旧的 E 卡具有完全一致的数据格式, 于是, 对原有类结构框架的修改步骤为 : 0097 删除 Line_BPA、 Linep_BPA、 LineC。

46、ollection_BPA、 LinepCollection_BPA ; 0098 将 ELine_BPA 和 ELineCollection_BPA 分别更名为 Line_BPA 和 LineCollecfi on_BPA。 0099 如图 5 所示, 类结构框架中的类具有以下的互联关系 : 0100 DAT_BPA类与FileRowCollection类构成14的组合关系, 即是说, 一个DAT_ BPA 类对象包含 4 个 FileRowCollection 类对象, 它们分别是 : 控制参数域 ControlField、 元件参数域 ElementField、 输出显示域 Output。

47、Field 和结束域 EndField ; 0101 DAT_BPA 类 与 CardCollection_BPA 类 的 各 个 派 生 类 构 成 1 1 的 组 合 关系。举例来说, 一个 DAT_BPA 类对象包含一个 ACBusCollection_BPA 类对象、 一个 LineCollection_BPA 类对象、 一个 TransCollection_BPA 类对象和其他属于 DAT 文件的 CardCollection_BPA 类对象 ; 0102 SWI_BPA类与FileRowCollection类构成14的组合关系, 即是说, 一个SWI_ BPA 类对象包含 4 个 。

48、FileRowCollection 类对象, 它们分别是 : 控制参数域 ControlField、 动态元件参数域 DynElementField、 静态元件补充参数域 StaElementField 和输出显示域 OutputField ; 0103 SWI_BPA 类 与 CardCollection_BPA 类 的 各 个 派 生 类 构 成 1 1 的 组 合 关系。举例来说, 一个 SWI_BPA 类对象包含一个 MCFGCollection_BPA 类对象、 一个 LS123Collection_BPA 类对象、 一个 LABCollection_BPA 类对象和其他属于 SWI。

49、 文件的 CardCollection_BPA 类对象。 0104 虽然没有给出图例, 但需要指出的是, Card_BPA 类与 FileRow 类构成 1 1 的依 赖关系, 该关系是通过 Card_BPA 类的抽象方法 FillEx 和抽象方法 UpdateEx 来实现的。以 Card_BPA的派生类Trans_BPA为例, 采用自顶向下的方式来定义抽象方法FillEx的具体步 骤包括 : 0105 由类结构框架可知, Card_BPA 派生出 Branch_BPA 派生出 Trans_BPA ; 0106 定义 Branch_BPA 的方法 FillEx, 实现将 FileRow 类对象属性 strValue 的前 32 列, 读入到 B。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1