CN104391692B - 用于读写psd‑bpa数据文件的面向对象编程方法 - Google Patents
用于读写psd‑bpa数据文件的面向对象编程方法 Download PDFInfo
- Publication number
- CN104391692B CN104391692B CN201410629360.8A CN201410629360A CN104391692B CN 104391692 B CN104391692 B CN 104391692B CN 201410629360 A CN201410629360 A CN 201410629360A CN 104391692 B CN104391692 B CN 104391692B
- Authority
- CN
- China
- Prior art keywords
- bpa
- class
- files
- data
- swi
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种用于读写PSD‑BPA数据文件的面向对象编程方法,具体包括以下步骤:(1)分析BPA数据文件中所有卡片的类型及其数据格式,并进行数据抽象;(2)根据数据抽象的结果来定义服务原语,并设计类结构框架;(3)以自顶向下的方式,依次完善类结构框架中派生类的定义:(4)采用面向对象的编程语言来实现该类结构框架:(5)根据应用需求确定好类结构框架的具体使用方式后,进行接口程序的实现与部署:(6)在不同的计算环境下,对部署好的接口程序进行正确性校验。与现有技术相比,本发明实现了BPA数据接口的设计与BPA程序用户手册具有一致的层次关系,从而保证了数据接口程序的可扩展性、可移植性和可维护性,降低了开发和维护BPA双向数据转换接口的难度。
Description
技术领域
本发明涉及电力系统仿真及分析领域,尤其是涉及一种用于读写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.datwindst.dat′);″,将src.dat文件拷贝为新的windst.dat文件;
<2>在Matlab中,输入语句″system(′BPAIOPACK.exe-copysrc.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.datwindst.dat′);″,将src.dat文件拷贝为新的windst.dat文件;
<2>在Matlab中,输入语句″system(′BPAIOPACK.exe-copy src.swiwindst.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仿真分析过程的自动化实现系统。
中,且均取得了良好的实际应用效果。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域的技术开发人员应该明白,在本发明的技术方案的基础上,本领域及相关领域的技术开发人员不需要付出创造性劳动即可做出的各种修改或变形,仍在本发明的保护范围以内。
Claims (7)
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.根据权利要求1所述的一种用于读写PSD-BPA数据文件的面向对象编程方法,其特征在于,所述的步骤(5)具体为:
根据不同电力仿真分析和计算应用的需求,开发了具有独立应用程序SAP和应用程序接口API两种使用方式的软件包BPAIOPACK,所述的SAP专用于满足非面向对象编程语言开发的程序对BPA数据文件的需求,所述的API专用于满足面向对象编程语言开发的程序对BPA数据文件的需求。
7.根据权利要求6所述的一种用于读写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,并比对计算结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410629360.8A CN104391692B (zh) | 2014-11-10 | 2014-11-10 | 用于读写psd‑bpa数据文件的面向对象编程方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410629360.8A CN104391692B (zh) | 2014-11-10 | 2014-11-10 | 用于读写psd‑bpa数据文件的面向对象编程方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104391692A CN104391692A (zh) | 2015-03-04 |
CN104391692B true CN104391692B (zh) | 2017-12-01 |
Family
ID=52609600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410629360.8A Expired - Fee Related CN104391692B (zh) | 2014-11-10 | 2014-11-10 | 用于读写psd‑bpa数据文件的面向对象编程方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104391692B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104933513B (zh) * | 2015-05-22 | 2019-01-08 | 广西电网有限责任公司电力科学研究院 | 一种基于面向对象的psd潮流数据与稳定数据编辑和校正方法 |
CN106325968B (zh) * | 2016-08-19 | 2019-03-08 | 江苏电力信息技术有限公司 | 一种分析sap开发对象类型之间关联关系的方法 |
CN106570277A (zh) * | 2016-11-08 | 2017-04-19 | 广西电网有限责任公司电力科学研究院 | 一种励磁系统仿真校核计算的方法 |
CN108228778B (zh) * | 2017-12-28 | 2022-03-22 | 贵州电网有限责任公司 | 基于matlab平台的bpa潮流数据分离等效转换方法 |
CN108681877A (zh) * | 2018-05-14 | 2018-10-19 | 链家网(北京)科技有限公司 | 一种项目各阶段审批执行情况分析方法及装置 |
CN111258910B (zh) * | 2020-02-12 | 2021-11-05 | 腾讯科技(深圳)有限公司 | 静态链接库功能验证方法、装置、电子设备及存储介质 |
CN112100985B (zh) * | 2020-09-10 | 2024-05-10 | 贵州电网有限责任公司 | 一种横向纵向交互电网多源数据集成匹配转换合成方法 |
CN112788054B (zh) * | 2021-01-27 | 2022-08-02 | 杭州萤石软件有限公司 | 一种物联网数据处理方法、系统及设备 |
CN117932980A (zh) * | 2024-03-22 | 2024-04-26 | 芯瑞微(上海)电子科技有限公司 | 基于指令集架构搭建的多进程工业设计软件仿真方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN202306548U (zh) * | 2011-10-28 | 2012-07-04 | 武汉大学 | Psasp与bpa数据库双向转换装置 |
CN102708212A (zh) * | 2012-06-01 | 2012-10-03 | 广西大学 | 一种bpa双向数据接口方法 |
CN103455591A (zh) * | 2013-08-30 | 2013-12-18 | 国家电网公司 | 一种并行协同系统的标准数据交换接口方法 |
-
2014
- 2014-11-10 CN CN201410629360.8A patent/CN104391692B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN202306548U (zh) * | 2011-10-28 | 2012-07-04 | 武汉大学 | Psasp与bpa数据库双向转换装置 |
CN102708212A (zh) * | 2012-06-01 | 2012-10-03 | 广西大学 | 一种bpa双向数据接口方法 |
CN103455591A (zh) * | 2013-08-30 | 2013-12-18 | 国家电网公司 | 一种并行协同系统的标准数据交换接口方法 |
Non-Patent Citations (1)
Title |
---|
BPA数据管理及应用软件开发与应用;韦兰杰等;《电网与清洁能源》;20140331;第30卷(第3期);第12-16,22页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104391692A (zh) | 2015-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104391692B (zh) | 用于读写psd‑bpa数据文件的面向对象编程方法 | |
CN103226488B (zh) | 一种形式化代码生成中的效率控制方法及装置 | |
Cardoni | Nuclear reactor multi-physics simulations with coupled MCNP5 and STAR-CCM+ | |
CN103700036A (zh) | 一种适于电力系统多时间尺度的暂态稳定性投影积分方法 | |
CN103927385A (zh) | 数据模型的统一方法及装置 | |
CN108733919A (zh) | 基于VBA和OpenDSS的配电网仿真分析方法及系统 | |
CN107741847A (zh) | 实现领域驱动模型的方法及装置 | |
CN106940743A (zh) | 一种通风管道力学分析方法及系统 | |
CN103970591A (zh) | 一种Matlab-ATP集成自动化调用方法 | |
CN106776326A (zh) | 一种数据分析模型的建模方法及系统 | |
US11354463B1 (en) | Systems and methods for generating code for computer-based physical models | |
CN105373008A (zh) | 一种电力系统用全物理模型仿真方法 | |
CN106951593A (zh) | 一种生成保护测控装置的配置文件的方法和装置 | |
Kim et al. | Tool support for quality-driven development of software architectures | |
Khalid et al. | Python based power system automation in PSS/E | |
CN107506262A (zh) | 一种高性能集群用户系统备份与恢复的方法及装置 | |
CN106897220A (zh) | 一种基于xml的系统对象模型的校验方法 | |
Duan et al. | An improved fast decoupled power flow model considering static power–frequency characteristic of power systems with large‐scale wind power | |
Razik | High-performance computing methods in large-scale power system simulation | |
Leppänen | Methodology for spatial homogenization in Serpent 2 | |
CN112558498A (zh) | 一种基于数据池的mbse飞行器系统间联合设计与验证方法 | |
Oliveira et al. | PSP‐UFU: An open‐source, graphical, and multiplatform software for power system studies | |
Gonzalez-Longatt et al. | Probabilistic Load-flow using analysis using DPL scripting language | |
Soufiane et al. | An SDL to Discrete-Time PROMELA Transformation of Home Area Network model | |
Gückel et al. | Synthesizing simulators for model checking microcontroller binary code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171201 Termination date: 20211110 |
|
CF01 | Termination of patent right due to non-payment of annual fee |