姜腊林,金小明,龙鹏飞,周保荣,孙春顺,廖年冬
(1.长沙理工大学 计算机与通信工程学院,湖南 长沙 410004;2.中国南方电网科学研究院有限责任公司,广东 广州 510623;3.长沙理工大学 电气与信息工程学院,湖南 长沙 410004)
电力系统规划(电力规划)对电力系统安全性、经济性、可靠性有着至关重要的作用,如何提高电力规划的科学性是电力工作人员长期关注的问题.
为了提高电力规划工作效率,目前,已有一些比较成熟的商业软件被用来辅助进行电力规划.经典的电力系统仿真计算分析软件有邦纳维尔电力局(Bonneville Power Administration,BPA)开发的BPA程序[1]、曼尼托巴高压直流输电研究中心开发的 PSCAD/EMTDC[2](Power System Computer Aided Design/Electromagnetic Transients Program including Direct Current)、中国电力科学研究院开发的电力系统分系综合程序[3](Power System A-nalysis Software Package,PSASP)等.还有一些电网公司和高校开发的电力规划应用软件,在提高部分电力规划设计水平,减轻规划人员劳动强度方面发挥了很大作用.但是,随着区域电力系统逐步互联,电源、变电站、输电线路和电源结构越来越复杂,已有的这些软件还无法满足电力规划业务全部需求,存在问题主要表现为①缺乏统一的电力规划基础数据系统和规范的信息收集、校核平台;②数据统计口径不一致、数据信息不完整,不能满足全部规划业务的需要;③各个系统设计、实施建设、运行模式独立,缺少总体设计和统一规范;④系统间通信接口复杂,数据共享困难.这些问题已经影响到电力规划水平和工作效率的进一步提高,因此,建立统一、规范的电力规划数据平台是十分必要的.
针对电力规划数据平台存在的问题及南方电网公司缺乏统一电力规划数据平台的现状,在充分分析电力规划业务及其数据需求的基础上,设计一个业务功能全面、接口方便、处理灵活、扩充性强、统一数据标准的电力规划数据平台,为电力发展规划和电网分析研究提供准确、完整、系统的统计和分析信息.电力规划数据平台设计主要包括:①系统需求分析与数据建模,即使用面向对象分析方法[4]分析电力规划业务数据及其功能,采用统一建模语言(U-nified Modeling Language,UML)建立电力规划数据模型;②数据库设计,即根据电力规划数据模型,按照关系数据库设计理论建立电力规划数据库;③系统功能与体系结构设计,即设计电力规划数据平台功能、体系结构,与其他数据库系统、电力应用软件的接口方案.笔者在此主要探讨电力规划数据平台的数据设计,包括数据建模和数据库设计,而平台功能、体系结构以及接口方案等内容另撰文论述.
数据建模有多种方法,如:实体-联系建模﹑面向对象建模及对象角色建模.其中,面向对象建模方法结合UML,使系统分析设计人员能够准确理解问题域和系统责任,模型简单、直观,便于理解,得到了广泛地应用.笔者使用面向对象分析方法对电力规划数据进行分类,使用UML来描述电力规划数据模型.
通过分析电力规划数据的特性,对电力规划数据分类依据4条原则进行:①数据所属领域概念或实体;②数据的区域范围;③数据的类别范围;④数据的时间范围.笔者将具有一些共性的类组合在一起,用UML包表示,整个电力规划数据按“系统”构造型组织为包,即电力系统规划数据包.电力系统规划数据包划分为基础包、国民经济指标包、电力负荷信息包、电网包、流域包和经济分析与评价包等子包,包之间的依赖关系如图1所示,各子包所包含的类如表1所示.
在UML中,类之间的关系分为4类:关联、聚合/组合、泛化(继承)和依赖.
笔者以机组包为例说明类关系模型的建立,机组包如图2所示,分为火电、燃气、水电、核电及风电机组,这些不同类型的机组既具有其自身特性,又具有共性.因此,可以定义一个描述其共性的类,即机组类,然后对不同的机组类型定义不同的类,用于描述各自的特性,这些类和机组类之间构成继承关系.一个机组可以有多种机组投资现金流,因此,机组类与描述机组投资现金流的机组投资现金流类之间存在一对多的关联关系.发电机、励磁系统、原动机、调速器和稳定器是机组的组成部分,因此,描述这些对象的类与机组类之间定义为组合/聚合关系.1台机组只有1台发电机、1个励磁系统、1个调速器和1个稳定器,因此,机组类与这些类之间还构成一对一关联关系.机组是电站的组成部分,且一个电站可以包含多个机组,因此,描述电站的电站类与机组类之间存在一对多的关联关系和组合关系.
图1 电力系统规划数据包Figure 1 Power system planning package
表1 包中所含的类Table 1 Classes contained inpackage
图2 机组包类关系Figure 2 Relationships between classes in unit package
进行数据库设计时,要遵循数据库规范化原则、数据完整性原则及其他规定,数据库设计一般要求满足第三范式的条件[5].使用UML类图设计数据库表,一般能够自然地符合第三范式.从类到表定义一种转换:类的简单属性(单值:如整型、文本型)映射为表字段,这样的字段具有不可再分性,非主键字段完全依赖主键,不会依赖其他非主键字段,满足第三范式;类的引用成员(引用另一个类的对象)映射为外键,引用成员属性不会作为当前类的属性,也就不存在非主键字段依赖另一个非主键字段的情况,满足第三范式.
类设计到表设计的转换主要体现在2个方面,一是类属性设计到表字段设计的转换,二是类与类之间的关系设计到表与表之间的关系设计的转换.类之间的关系转换到表之间的关系时,关联、组合/聚合作为一般的关联处理,不需要区分;依赖关系体现在方法上,不需要在表设计中建模.因此,类设计转换到表设计,在类关系上需要考虑关联关系和继承关系.对一些特殊的类要用特殊的方法处理,如自关联类.自关联类描述了同类对象之间的层次关系,将自关联类转换到表后这种层次关系应该保留,并要有利于查询设计和查询结果处理.
类的简单值类型属性可以直接转换为适当的数据库表字段类型,若类属性是构造类型,即属性是类实例引用,一般情况是引用其他类的实例,用外键替换即可.如图3所示,励磁系统参数类属性“参数英文名称”、“参数中文名称”、“参数顺序号”等是简单值类型,它们直接作为目的表的字段;励磁系统模型参数类包含励磁系统模型类实例引用,在目的表中要添加外键“模型ID”.
对于类之间的关联到表关系的转换有3种情况.
1)多对多关联.如果类与类之间存在多对多关联,则将该关联映射到一个单独的表(关联表)中,关联表的属性由2个主表的主关键字、关联属性和其他属性构成.这种表可以使用与2个主表关联的外键作为主键(2个字段组成的主键)并省略额外的主键字段.如图4中的网区类与行政区类是多对多关联,表设计中要增加关联表.
2)一对多关联.对于关联导向箭头指向“一端”的一对多关联,不需建立关联表,只需在“多端”转换表中添加“一端”转换表的主键字段作为外键.对于关联无导向箭头的一对多关联,则为2个类对应的转换表建立关联表,方法见多对多关联表建立方法.对于关联导向箭头指向“多端”的一对多关联,理论上一般要建立关联表,但“多端”的对象数量比较少时,根据经验,可遵循业务习惯,在“一端”直接枚举“多端”.
3)一对一关联.可以看做一对多关联的特例,建立关联前一定要确定谁是主表谁是子表,转换方法见一对多关联.
图3 通用励磁系统模型类Figure 3 Universal excitation system data model
图4 网区类、行政区类及其关系Figure 4 Grid classes,administrative area classes and their relationships
类通过继承,形成类之间的层次关系.在数据库中没有用于类继承关系转换的标准方法,必须用到另一种映射.对于任何继承结构,一般都有3种选择:①为层次中的所有类建立一个共同的表,即单表继承.单表继承中,表集成了所有类的属性并添加了一个类型区分字段.②为每个具体类(抽象类除外)各建一个表,即具体表继承.③为每个层次的所有类各建一个表,即类表继承.类表继承是类和表之间最简单的关系,但是它需要多个连接操作来获得一个对象数据,通常损失了性能.具体表继承避免了连接操作,允许从一个表取得一个对象数据,但对超类的改变不得不改变所有的表.单表继承最大的弊端是浪费了空间.
励磁系统模型、原动机模型、稳定器模型和调速器模型等,种类繁多,参数多而异.大多电力分析软件采用一个模型定义一个类的方法,这种方法存在问题:①数据库表数量随着模型数量增加而增加,不利于数据库管理,同时也影响数据库效率;②所有模型不能统一交互界面,即不利于输入、输出、查询等实现.为了避免这些问题,笔者为各种模型系统建立相应的通用模型类.
以通用励磁系统模型类为例.首先定义励磁系统模型类、励磁系统模型参数类和励磁系统数据类,分别描述励磁系统模型、励磁系统模型参数和发动机励磁系统数据.其次定义相关类关系,励磁系统模型类与励磁系统模型参数类是一对多的关联,励磁系统模型类与励磁系统数据类也是一对多关联,机组类与励磁系统数据类是一对一关联.通用励磁系统类如图3所示(省略了机组类属性).
励磁系统模型类属性“模型英文名称(ID)”是模型的标识,具有唯一性;“模型中文名称”是模型的简短说明;“模型框图”是该励磁系统模型原理的图形表示,为自定义对象类型;“模型说明”是模型的详细说明.励磁系统模型参数类属性“参数英文名称(ID)”是参数标识,具有唯一性;“参数中文名称”是参数的简短说明;“参数顺序号”是对应励磁数据类属性P1,P2,…,P50的编号,取值范围为1~50;“参数类型”是参数所具有的类型,取值范围为0~3(0-整型、1-实型、2-逻辑型、3-文本);“参数单位”指定参数具有的单位;“参数最小值”指定参数取值下界;“参数最大值”指定参数取值上界;“参数说明”是参数的详细说明.励磁系统数据类属性“P1”,“P2”,…,“P50”是发动机励磁系统参数值.
根据类设计到表设计转换规则,为图3设计数据库表时,不需要建立关联表,只需为对应类建立相应数据库表,即励磁系统模型、励磁系统模型参数、励磁系统数据和机组表,将类属性直接转换成对应表字段.为了表示类之间的关联关系,在励磁系统模型参数表中引入励磁系统模型表中的主键“模型ID”作为外键,在励磁系统数据表中引入励磁系统模型表中的主键“模型ID”和机组表中的主键“机组ID”作为外键.
以1968年IEEE-D型和1981年IEEE-E型励磁系统模型部分数据为例说明励磁系统通用模型使用方法.励磁系统模型表实例数据如表2所示,表2中省略了“模型框图”和“模型说明”字段.励磁系统模型参数表实例数据如表3所示,表3中省略了“参数类型”、“参数单位”、“参数最大值”、“参数最小值”和“参数说明”字段.励磁系统数据表实例数据如表4所示,表4中省略了“P7”到“P50”字段,表中“(KA)”表示参数KA的值,其他类推.
表2 励磁系统模型表实例数据Table 2 Excitation system model
表3 励磁系统模型参数表实例数据Table 3 Excitation system model parameter
表4 励磁系统数据表实例数据Table 4 The excitation system data
已知机组ID为5310,求机组励磁系统模型对应参数值.方法步骤:①通过机组ID从表4中查询到指定的励磁系统记录;②从该记录中得到模型ID=“1968IEEE-D”;③通过模型ID从表3中查询到对应模型的所有参数记录;④取一参数记录,即得到参数的所有描述属性,通过参数记录的参数ID和参数顺序号,可得参数名和参数在励磁系统记录中的字段名(即”P”+参数顺序号),进而得到参数值;⑤遍历所有参数记录,得到所有参数描述属性和参数值.
从上述操作方法可知,这种通用励磁系统模型能够友好地提供任何励磁系统模型的定义,方便应用程序设计励磁系统数据输入、输出和查询界面.
电力规划数据一般属于某个行政区或网区.定义行政区类描述各级行政区,定义网区类描述各级电网管理机构.一个行政区可以管理多个下级行政区,它们之间构成“树形”的层次结构.因此,行政区类中的这些行政区对象之间具有关联关系,这种类中对象之间具有关联关系的类称为自关联类.同样,网区类也是自关联类.网区类、行政区类及其关系如图4所示.行政区类和网区类的实例间可以具有上下级关系,一个行政区可以拥有多个(重数为“*”)下级,可以属于一个上级或不属于任何上级(重数为“0.1”).在现实中,行政区和网区之间具有复杂的关系.一个网区可以管理多个行政区,也可以不管理任何行政区,而一个行政区可以被一个或多个网区管理,也可以不被任何网区管理.在UML中,网区类与行政区类之间可以用多对多的关联关系来表征.
虽然在某些数据库管理系统中支持表中记录间“树形”的层次关系,但是,其查询语句的设计和查询结果的处理比较复杂.根据实际开发经验,需要将这种“树型”关系转化为“线型”关系,笔者称这种转换为表线型转换模型.“树型”关系用“线型”关系表示后,大大简化了查询设计和查询结果处理,提高了查询效率,但要增加额外的字段来描述这种“树型”关系,并提供特殊的记录插入、删除功能以实现域完整性.不过这种类型的表所要包含的记录并不多,而与之关联的子表包含的记录可以很多,因此,插入和删除操作不影响整体性能.
表线型转换模型方法:在“树型”表中增加一个额外特殊字段,叫内部编码,统一用innerCode表示,值类型为数字字符串,编码中包含实例(记录)间的层次信息.简化的网区表数据结构如表5所示,网区表部分实例数据如表6所示.
表5 网区Table 5 Grid table
表6 网区组织与innerCode编码Table 6 Grids and their corresponding codes
从表6可以看出,innerCode具有特点:①字段非空、非空串;②子级编码比父级编码多3位,且除多出的3位外其它位与父级编码相同;③同级编码后3位至少有1位不等,而前各位均相等;④需要时,innerCode可作为排序字段,可维护同级编码后3位是连续的自然数;⑤innerCode字段定义长度为3的倍数,必要时,可设计每级编码长度大于3.
笔者首先使用面向对象方法对电力规划数据进行分类,将整个电力规划数据按“系统”构造型组织为包,用UML包图表示整个电力规划数据包之间的依赖关系,使用UML类图描述类及其类之间的关系;接着探讨了类设计到表设计的转换方法;最后分析了通用励磁系统模型类这种类结构与种类不确定性问题的建模,同一类中对象存在关联的自关联类建模以及用于自关联类到数据库表的转换方法——表线型转换模型方法.电力规划数据模型为电力规划数据平台的建设奠定了基础,对电力系统或其它行业数据建模有较高参考价值,该模型方案已经在中国南方电网公司得到了很好的应用[6].电力规划数据平台的建设对提高电力规划的科学性,提高规划工作水平和效率,加强领导分析决策的科学性有重要的意义.
[1]BULL M.Bonneville's least cost planning[J].IEEE Transactions on Power Systems,1989,4(1):300-304.
[2]Anaya-lara O,Acha E.Modeling and analysis of custom power systems by PSCAD/EMTDC[J].IEEE Transactions on Power Delivery,2002,17(1):266-272.
[3]王武双,王晓茹,黄飞,等.电力系统仿真软件PSASP接口研究与应用[J].电网技术,2011,35(7):113-117.WANG Wu-shuang,WANG Xiao-ru,HUANG Fei,et al.Development and application of interface for power system analysis software package[J].Power System Technology,2011,35(7):113-117.
[4]胡炎,邰能灵,王晶.地下变电站自动开票系统数据模型[J].电力科学与技术学报,2010,25(2):26-31.HUYan,TAI Neng-ling,WANG Jing.Data model research of operating command expert system for underground substations[J].Journal of Electric Power Science and Technology,2010,25(2):26-31.
[5]Kzoenke D.数据库原理.姜玲玲译.第3版[M].北京:清华大学出版社,2008.
[6]姜腊林,龙鹏飞,孙春顺,等.南方电网规划数据平台建设方案研究[D].长沙:长沙理工大学,2011.