InterPSS is a development project aimed to develop an Internet technology based software system for design, analysis, and simulation of power systems. The project is based on the latest Internet technology, including Java, Xml, the Eclipse platform and other open-source software systems. Its open and loosely coupled system architecture will allow components developed by others to be easily plugged into InterPSS system to augment its functionality, and equally important, allow its components to be integrated into other systems to provide certain power system simulation functionality or services. InterPSS currently has already implemented AC load flow, DC load flow, short circuit, and transient stability, and will include relay coordination, harmonics, dynamic (small singnal) stability, reliability, and many other power system design, analysis, and simulation modules. InterPSS grid computing solution provides a foundation for creating computational grids to perform computationally-intensive power system simulation using conventional, inexpensive computers in a local area network (LAN) with minimum administration overhead. The project is currently developed and maintained by a team of developers living in the United States, Canada and China. IntroductionPower system simulation software systems have been widely used for analysis, design, and operation of modern power systems. The large-scale blackouts in the United States, United Kingdom and Italy in 2004 accelerated the adoption of advanced computer and network technologies in power systems. Commercial power system simulation software systems currently available in the market were largely developed using procedure programming languages, such as Fortran and C. . Software systems developed using such approaches are known to be hard to maintain, extend and integrate into other systems. We believe these obsolete technologies and systems will eventually be replaced with new systems based on modern, network friendly and object-oriented programming languages, such as Java or .Net/C#, using a component-based development approach. InterPSS is such an attempt to create a totally new software system using the Java programming language. InterPSS could be running on multiple platforms, including Windows, Linux and Unix, as long as there is a Java Runtime Environment (JRE) available on the platform.
InterPSS System ArchitectureInterPSS system architecture is shown in the following Figure.
At the center of the architecture is the power system simulation
framework, which is based on an object-oriented power system simulation
model proposed in Ref(1) . UML is used to model power systems for
simulation purpose and Eclipse EMF
to generate source code for the simulation framework. The goal of
InterPSS design is to be flexible and extensible software system. Since
it is an open-source system, worked largely by volunteers, easy to
maintain is also an important part of the design gaol. InterPSS
simulation algorithms, user GUI, I/O modules, and integration interface
implementations are plugins, which can be easily customized and
replaced. InterPSS components are configured and/or integrated based on
the Spring Framework. InterPSS development team uses Eclipse IDE and NetBeans IDE to do the development.
InterPSS Power System Simulation FrameworkInterPSS foundation is a power system simulation framework, which consists of a power system simulation object model and a set of interfaces with which the outside world can interact with InterPSS core simulation engine. The framework is designed in a loosely coupled way that the core simulation engine could be easily extended or integrated into other systems as a standalone component. Traditionally, a power system simulation program has a fixed
format for creating data files as the input. InterPSS core simulation
engine publishes its Java API. InterPSS does not a fixed format for the
input. Instead, InterPSS provides a set of plugins, we call them input
File Adapters, for inputting data in particular format into InterPSS.
It is also quite easy to develop your own custom file adapter to load
your data in your own format into InterPSS.
InterPSS Object ModelInterPSS simulation framework consists of a set of simulation
objects, and interfaces with which the outside world could interact
with these objects. The following is a discussion of key InterPSS
simulation objects and the SimuContext interface.
Modern power system simulation algorithms are mostly built on the power network nodal admittance Y-matrix. From the simulation perspective, power system network topology could be described as a Network object containing a set of connected Bus objects and Branch objects. InterPSS use the following network topology object model to describe power system networks for the simulation purpose.
A Bus object is a "node" to which a set of Branch objects could
be connected. A Branch object is an "edge" with two terminals (from
side and to side) which can be connected between two Bus objects
(fromBus and toBus). A Network object is a container where Bus objects
can be defined, and Branch objects can be connected between these Bus
objects to form a network topology for simulation purpose. For more
details, please see Ref(1).
InterPSS breaks the power simulation problem into many relative simple concept layers, such as Network, AclfNetwork ..., as shown in the following diagram. InterPSS uses object-oriented programming techniques, inheritance and composition, to reuse functionality defined in other concept layers. Currently the following concept layers are de=ifined. More concept layers for such concepts as hamonics, OPF-optimal power flow, will added into InterPSS object model in the future.
InterPSS uses Bus object concept to describe logical power system buses for the simulation purpose. The Bus inheritance and composition relationship is shown in the following figure:
InterPSS uses Branch object concept to describe logical power system branches for the simulation purpose. A Branch object can connect to a From-Bus object and a To-Bus object. The Branch inheritance and composition relationship is shown in the following figure:
In power system control centers, power network structure change information are gathered in terms of actual switch/break control actions. InterPSS currently supports two way to model the switch/breaker control actions. Dummy Bus on Branch
Multiple dummy buses could be defined to model branch sections. For example, section I->k might be used to model a switch, so that one can issue the following statement to open the branch: OPEN LINE FROM BUS I TO BUS k CIRCUIT 1 Bus Section
Multiple bus sections could be defined to separate a bus into multiple sections. In this way open switch at section-2 and section-3 will break the bus into 3 independent buses.
InterPSS simulation framework consists of many simulation classes. At runtime, instance of these classes are created, contained by other objects and cross referenced. Keeping track of all instances and their relationship at runtime becomes rather complex. If one only wants to use the framework as a black-box component. InterPSS provides a SimuContext class to simplify the simulation object management. SimuContext is a Facade Pattern, which is used to wrap all simulation objects into a relative simple enclosing interface. The following diagram provides a concept view of the SimuContext interface.
Object AdapterInterPSS uses the Object Adapter Pattern extensively. The Adapter Design Pattern 'adapts' one interface for a class into one that that might be easy to use in other situations. An adapter allows classes to work together that normally could not because of incompatible interfaces by wrapping its own interface around that of an already existing class. For example, the AclfBus class has all raw information in PU for load flow analysis. Object adapters, as shown in the following diagram, are defined so that one can deal load flow concepts, such as Swing bus, PV Generator bus, at higher abstract level. The following are some sample code to outline the benefit of using Object Adatper.
|
|
| // create a AclfBus object |
Analysis and Simulation Algorithm
InterPSS separates or decouples analysis and simulation algorithms, which could be applied to relevant Network classes to perform, for example, Loadflow analysis, from the Network class, as shown in the following diagram. The Network class holds data objects and certain reference relationship among these objects, which is the InterPSS architecture foundation and not allowed to be customized in the current InterPSS architecture design. However the analysis and simulation algorithms are designed to be replaceable. This is possible because of the decoupling of the Network class and the algorithm class.
InterPSS Programming Style
InterPSS uses Java as its programming language. The development is based on pure object-oriented programming approach. The following are some sample code to show how to build a simplest Loadflow "program".
Create AclfNetwork
The following are sample code to create an AclfNetwork object to represent a simple 2-Bus, as shown in the figure.
|
| public static void set2BusNetworkData(AclfNetwork net, IPSSMsgHub msg) {
|
Run Loadflow Analysis
InterPSS provides a default load flow algorithm implementation. The following are sample code to run load flow.
|
| public static void simpleLoadflow(IPSSMsgHub msg) {
|
Testing
InterPSS is an open-source development project, developed by volunteers around the world. InterPSS uses an agile development approach with heavy emphasis on testing. InterPSS testing is divided into two major phases: Unit testing and User Acceptance testing. A FitNesse based WiKi style InterPSS User Acceptance Testing site has been designed for InterPSS user acceptance testing purpose. User can run the InterPSS Acceptance Test Suite to perform the official InterPSS acceptance testing at any time. Also, user can go to the User Test Area to create his/her own test cases. User can upload his/her components (Java jar files) and/or test data files to test them against the existing InterPSS components. The test cases could be run repeatedly to verify new versions of InterPSS release.
This following is a simple case for Loadflow user acceptance testing.
|
| Build Testing Case |
Bus and Branch loadflow acceptance testing are show as follows. Green color indicates that the testing results are the same as expected.
Table-1 Bus Loadflow Results Checking
Table-2 Branch Loadflow Results Checking
If for some reason, for sample, some loadflow calculation code was touched, the results are different than the expected, red color flags will be shown, as follows:
Table-3 Branch Loadflow Results Checking With Error
If this happens, a full investigation is needed.
References
[1] "Object-oriented Programming, C++ and Power System Simulation", IEEE Trans. on Power Systems, Vol.11, No.1, Feb. 1996 pp206-216.