《用于读写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。