Database Interface

This tutorial illustrates the Database interface class of powfacpy, which provides methods to export and import larger chunks of data from the PowerFactory database. Unlike exporting to formats such as CGMES, the Database class preserves a structure that stays close to the native PowerFactory database layout.

Typical use cases include:

The tutorial is structured as follows. The first part covers exporting, importing, and comparing attributes of PowerFactory objects using Python dictionaries, JSON, and pickle format. The second part demonstrates how to export result variables to pandas DataFrames or CSV files. The final section focuses on exporting and importing controller parameters of dynamic composite models.

# If you use IPython/Jupyter:
import sys
import json

import numpy as np

from powfacpy.base.active_project import ActiveProject

with open(r"..\..\settings_local.json") as settings_file:
    SETTINGS = json.load(settings_file)

sys.path.append(
    SETTINGS["local path to PowerFactory application"] # e.g. r"C:\Program Files\DIgSILENT\PowerFactory 2025 SP5\Python\3.13"
)
# Get the PF app
import powerfactory
app = powerfactory.GetApplication()
app.Show()
app.ActivateProject(rf"{SETTINGS["path to powfacpy folder in PowerFactory database"]}\39_bus_new_england_copy_where_tests_run")

act_prj = ActiveProject(app)
act_prj.activate_study_case(r"Study Cases\1. Power Flow")
act_prj.execute_load_flow()
0

1 Introduction to the Database Interface

The Database class of powfacpy provides an interface to the PowerFactory database and simplifies the export and import of data.

1.1 Export to Dictionary

Suppose we want to extract selected parameters from terminals, loads, and transformers (or possibly any other object from the database). We define a dictionary with class names as keys and lists of parameter names as values.

from powfacpy.applications.database import Database

pfdb = Database(app)

class_params = {
    "ElmTerm": ["outserv"],
    "ElmLod": ["plini", "qlini", "typ_id.aP"],
    "ElmTr*": ["typ_id"],
}

Note that class names support wildcards (e.g. "ElmTr*"), and parameter names can reference attributes of a linked object using dot notation (e.g. "typ_id.aP").

Next, we retrieve the objects of interest and use get_object_attributes to extract a dictionary. The keys are PowerFactory objects and the values are dictionaries mapping attribute names to their values.

try:
    app.Hide()
    # Get objects of interest
    terminals = act_prj.get_calc_relevant_obj("*.ElmTerm")
    loads = act_prj.get_calc_relevant_obj("*.ElmLod", includeOutOfService=0)
    transformers = act_prj.get_calc_relevant_obj("*.ElmTr*", includeOutOfService=0)
    # Get object attributes
    obj_attr = pfdb.get_object_attributes(terminals + loads + transformers, class_params)
finally:
    app.Show()    
obj_attr
{<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 01.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 02.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 03.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 04.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 05.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 06.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 07.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 08.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 09.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 10.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 11.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 12.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 13.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 14.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 15.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 16.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 17.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 18.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 19.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 20.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 21.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 22.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 23.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 24.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 25.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 26.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 27.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 28.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 29.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 30.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 31.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 32.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 33.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 34.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 35.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 36.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 37.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 38.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Bus 39.ElmTerm</l1>>: {'outserv': 0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 03.ElmLod</l1>>: {'plini': 322.0,
  'qlini': 2.4000000953674316,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 04.ElmLod</l1>>: {'plini': 500.0,
  'qlini': 184.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 07.ElmLod</l1>>: {'plini': 233.8000030517578,
  'qlini': 84.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 08.ElmLod</l1>>: {'plini': 522.0,
  'qlini': 176.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 12.ElmLod</l1>>: {'plini': 7.5,
  'qlini': 88.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 15.ElmLod</l1>>: {'plini': 320.0,
  'qlini': 153.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 16.ElmLod</l1>>: {'plini': 329.0,
  'qlini': 32.29999923706055,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 18.ElmLod</l1>>: {'plini': 158.0,
  'qlini': 30.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 20.ElmLod</l1>>: {'plini': 628.0,
  'qlini': 103.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 21.ElmLod</l1>>: {'plini': 274.0,
  'qlini': 115.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 23.ElmLod</l1>>: {'plini': 247.5,
  'qlini': 84.5999984741211,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 24.ElmLod</l1>>: {'plini': 308.6000061035156,
  'qlini': -92.19999694824219,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 25.ElmLod</l1>>: {'plini': 224.0,
  'qlini': 47.20000076293945,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 26.ElmLod</l1>>: {'plini': 139.0,
  'qlini': 17.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 27.ElmLod</l1>>: {'plini': 281.0,
  'qlini': 75.5,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 28.ElmLod</l1>>: {'plini': 206.0,
  'qlini': 27.600000381469727,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 29.ElmLod</l1>>: {'plini': 283.5,
  'qlini': 26.899999618530273,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 31.ElmLod</l1>>: {'plini': 0.0,
  'qlini': 4.599999904632568,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Load 39.ElmLod</l1>>: {'plini': 1104.0,
  'qlini': 250.0,
  'typ_id.aP': 0.0},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 02 - 30.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 02 - 30 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 06 - 31.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 06 - 31 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 10 - 32.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 10 - 32 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 11 - 12.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 11 - 12 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 13 - 12.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 13 - 12 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 19 - 20.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 19 - 20 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 19 - 33.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 19 - 33 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 20 - 34.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 20 - 34 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 22 - 35.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 22 - 35 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 23 - 36.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 23 - 36 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 25 - 37.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 25 - 37 YNy0.TypTr2</l1>>},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Trf 29 - 38.ElmTr2</l1>>: {'typ_id': <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Library.IntPrjfolder\Equipment Type Library.IntPrjfolder\Transformer Types.IntPrjfolder\Trf Type 29 - 38 YNy0.TypTr2</l1>>}}

The output can be hard to read due to the lengthy object paths in PowerFactory. There are formatting options to control whether keys and values are represented as PowerFactory objects or as their string paths.

try:
    app.Hide()
    obj_attr = pfdb.get_object_attributes(
        terminals + loads + transformers, 
        class_params, 
        keys_are_pf_obj=False, 
        values_are_pf_obj=False, 
        )
finally:
    app.Show()    
print(json.dumps(obj_attr, indent=2))
{
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 01.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 02.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 03.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 04.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 05.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 06.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 07.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 08.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 09.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 10.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 11.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 12.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 13.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 14.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 15.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 16.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 17.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 18.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 19.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 20.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 21.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 22.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 23.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 24.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 25.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 26.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 27.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 28.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 29.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 30.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 31.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 32.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 33.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 34.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 35.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 36.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 37.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 38.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 39.ElmTerm": {
    "outserv": 0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 03.ElmLod": {
    "plini": 322.0,
    "qlini": 2.4000000953674316,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 04.ElmLod": {
    "plini": 500.0,
    "qlini": 184.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 07.ElmLod": {
    "plini": 233.8000030517578,
    "qlini": 84.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 08.ElmLod": {
    "plini": 522.0,
    "qlini": 176.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 12.ElmLod": {
    "plini": 7.5,
    "qlini": 88.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 15.ElmLod": {
    "plini": 320.0,
    "qlini": 153.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 16.ElmLod": {
    "plini": 329.0,
    "qlini": 32.29999923706055,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 18.ElmLod": {
    "plini": 158.0,
    "qlini": 30.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 20.ElmLod": {
    "plini": 628.0,
    "qlini": 103.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 21.ElmLod": {
    "plini": 274.0,
    "qlini": 115.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 23.ElmLod": {
    "plini": 247.5,
    "qlini": 84.5999984741211,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 24.ElmLod": {
    "plini": 308.6000061035156,
    "qlini": -92.19999694824219,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 25.ElmLod": {
    "plini": 224.0,
    "qlini": 47.20000076293945,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 26.ElmLod": {
    "plini": 139.0,
    "qlini": 17.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 27.ElmLod": {
    "plini": 281.0,
    "qlini": 75.5,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 28.ElmLod": {
    "plini": 206.0,
    "qlini": 27.600000381469727,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 29.ElmLod": {
    "plini": 283.5,
    "qlini": 26.899999618530273,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 31.ElmLod": {
    "plini": 0.0,
    "qlini": 4.599999904632568,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 39.ElmLod": {
    "plini": 1104.0,
    "qlini": 250.0,
    "typ_id.aP": 0.0
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 02 - 30.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 02 - 30 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 06 - 31.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 06 - 31 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 10 - 32.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 10 - 32 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 11 - 12.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 11 - 12 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 13 - 12.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 13 - 12 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 19 - 20.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 19 - 20 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 19 - 33.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 19 - 33 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 20 - 34.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 20 - 34 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 22 - 35.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 22 - 35 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 23 - 36.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 23 - 36 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 25 - 37.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 25 - 37 YNy0.TypTr2"
  },
  "Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Trf 29 - 38.ElmTr2": {
    "typ_id": "Library.IntPrjfolder\\Equipment Type Library.IntPrjfolder\\Transformer Types.IntPrjfolder\\Trf Type 29 - 38 YNy0.TypTr2"
  }
}

1.2 Export from or Import to File

Using string paths instead of objects (as shown above) is required when saving data to a pickle file. This is useful for sharing data with colleagues who can load the dictionary and apply the settings in their own project (as demonstrated below).

import pickle

# save dict to pickle file
with open(r'.\output\model_data_export\database_dict.pickle', 'wb') as handle:
    pickle.dump(obj_attr, handle)

# load dict from pickle file
with open(r'.\output\model_data_export\database_dict.pickle', 'rb') as handle:
    obj_attr_loaded:dict  = pickle.load(handle)

1.3 Compare Dictionaries

A common use case for these database dictionaries is comparing two projects to detect differences. The deepdiff package makes this straightforward.

We apply some modifications to the loaded dictionary obj_attr_loaded and compare it against the original obj_attr.

from deepdiff import DeepDiff

obj_attr_loaded.pop("Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 07.ElmTerm") 

obj_attr_loaded["Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Load 31.ElmLod"]["plini"] = 0.0

diff = DeepDiff(obj_attr, obj_attr_loaded, ignore_order=True)
diff
{'dictionary_item_removed': ["root['Network Model.IntPrjfolder\\Network Data.IntPrjfolder\\Grid.ElmNet\\Bus 07.ElmTerm']"]}

1.4 Set Values from Dictionary in PowerFactory

To apply a dataset received from a colleague, use the set_pf_obj_attribute_values method. It accepts a dictionary formatted according to the output of get_object_attributes and writes the attribute values back into PowerFactory.

Here we apply the modified loaded dictionary. You can verify that the load active power (plini) has been updated accordingly.

try:
    app.Hide()
    pfdb.set_pf_obj_attribute_values(obj_attr_loaded)
finally:
    app.Show()

2 Result Variable and Parameter Export

The Database interface also provides a method to extract result variables from simulation-relevant objects. Note that the term result variable in PowerFactory also covers settings and parameters — the methods can read any variable that can be selected as a monitored variable in an IntMon object.

The following example reads all result variables relevant for balanced RMS simulations of the calculation-relevant synchronous machines. We specify the class name ("ElmSym"), a wildcard pattern to retrieve all variables ("*"), and the simulation type ("RMS_Bal"). The result is a pandas DataFrame with one row per machine and one column per variable, covering load flow results, type parameters, and more. The DataFrame can easily be exported to CSV if needed.

from powfacpy.applications.database import Database

pfdb = Database(app)

try:
    app.Hide()
    act_prj.execute_load_flow()
    df = pfdb.get_result_variables("ElmSym", "*", simulation_type="RMS_Bal")
finally:
    app.Show()    
df    
m:u1r:bus1 m:u1i:bus1 m:u1:bus1 m:U1:bus1 m:U1l:bus1 m:phiu1:bus1 m:inet:bus1 m:I:bus1 m:phii:bus1 m:i1r:bus1 ... t:satseq t:ifdq t:smoothFac t:dpu t:dkd t:dpe t:x2sy t:r2sy t:i_speedD r:c_pmdm
p.u., Positive-Sequence-Voltage, Real Part p.u., Positive-Sequence-Voltage, Imaginary Part p.u., Positive-Sequence-Voltage, Magnitude kV, Line-Ground Positive-Sequence-Voltage, Magnitude kV, Line-Line Positive-Sequence-Voltage, Magnitude deg, Positive-Sequence-Voltage, Angle p.u., Current, Magnitude, referred to network kA, Current, Magnitude deg, Current, Angle p.u., Positive-Sequence Current, Real Part ... p.u., SG(u) %, ie %, Smoothing factor Turbine shaft friction torque coefficient Damping torque coefficient Damping torque coefficient based on power p.u., Reactance x2 p.u., Resistance r2 Speed deviation based on Mdm
G 01 1.014186 -0.179795 1.0300 205.161412 355.349990 -10.052961 974.649776 1.631056 -15.098035 0.094101 ... None None 10.0 None None None 0.2 None None None
G 02 0.982000 NaN 0.9820 9.354806 16.203000 NaN 558.737198 19.550732 -21.181592 0.744270 ... None None 10.0 None None None 0.2 None None None
G 03 0.982112 0.044064 0.9831 9.365285 16.221150 2.568960 693.321278 24.259953 -14.947086 0.837328 ... None None 10.0 None None None 0.2 None None None
G 04 0.994529 0.072941 0.9972 9.499606 16.453800 4.194689 643.286443 22.509188 -5.670496 0.800173 ... None None 10.0 None None None 0.2 None None None
G 05 1.010746 0.056067 1.0123 9.643453 16.702950 3.174992 527.868129 18.470594 -14.896844 0.850211 ... None None 10.0 None None None 0.2 None None None
G 06 1.044238 0.102941 1.0493 9.995925 17.313449 5.630054 651.697897 22.803513 -12.466687 0.795415 ... None None 10.0 None None None 0.2 None None None
G 07 1.052299 0.153944 1.0635 10.131199 17.547751 8.322918 535.088117 18.723228 -1.918216 0.763983 ... None None 10.0 None None None 0.2 None None None
G 08 1.026882 0.043418 1.0278 9.791110 16.958699 2.421107 525.394238 18.384031 2.374429 0.749919 ... None None 10.0 None None None 0.2 None None None
G 09 1.016984 0.139449 1.0265 9.778726 16.937250 7.807727 808.878960 28.303423 6.231343 0.804100 ... None None 10.0 None None None 0.2 None None None
G 10 1.045727 -0.060919 1.0475 9.978778 17.283750 -3.333993 276.457975 9.673520 -33.645946 0.230145 ... None None 10.0 None None None 0.2 None None None

10 rows × 293 columns

Variable patterns can be used to filter results. For example, "t:*" retrieves only type parameters. PowerFactory groups result variables by prefix: signals (s:), measurements (m:), calculated values (c:), type parameters (t:), and so on. The method also offers options for formatting the index.

try:
    app.Hide()
    df = pfdb.get_result_variables("ElmSym", "t:*", index_format="path")
finally:
    app.Show()    
df
t:i_exactConv t:i_xme2 t:i_speedVar t:i_extModel t:model_inp t:iopt_data t:iner_inp t:tag t:tags t:h ... t:satvq t:satseq t:ifdq t:smoothFac t:dpu t:dkd t:dpe t:x2sy t:r2sy t:i_speedD
Exact conversion of time constants Consider negative sequence torque Effect of speed variation Model Model Input parameters Input mode s, Acceleration time const. Tag (rated to Pgn) s, Acceleration time const. Tag (rated to Sgn) s, Inertia constant H (rated to Sgn) ... p.u., Term. voltage p.u., SG(u) %, ie %, Smoothing factor Turbine shaft friction torque coefficient Damping torque coefficient Damping torque coefficient based on power p.u., Reactance x2 p.u., Resistance r2 Speed deviation based on
Network Model\Network Data\Grid\G 01 None None 1 None det 1 DEF 11.764706 10.000 5.000 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 02 None None 1 None det 1 DEF 10.185882 8.658 4.329 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 03 None None 1 None det 1 DEF 10.529411 8.950 4.475 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 04 None None 1 None det 1 DEF 8.411764 7.150 3.575 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 05 None None 1 None det 1 DEF 10.195294 8.666 4.333 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 06 None None 1 None det 1 DEF 10.235293 8.700 4.350 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 07 None None 1 None det 1 DEF 8.872941 7.542 3.771 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 08 None None 1 None det 1 DEF 8.167059 6.942 3.471 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 09 None None 1 None det 1 DEF 8.117647 6.900 3.450 ... None None None 10.0 None None None 0.2 None None
Network Model\Network Data\Grid\G 10 None None 1 None det 1 DEF 9.882352 8.400 4.200 ... None None None 10.0 None None None 0.2 None None

10 rows × 98 columns

3 Composite Model Parameters

3.1 Export

To export the parameters of dynamic controllers (DSL models) within composite models (ElmComp), use the get_composite_model_parameters method. By default it exports parameters for all composite models in JSON-compatible format, but it also accepts a list of specific composite models as input.

try:
    app.Hide()
    comp_model_pars = pfdb.get_composite_model_parameters()   
finally:
    app.Show()
print(json.dumps(comp_model_pars, indent=2))
{
  "Power Plant 02": {
    "AVR 02": {
      "Tr": 0.0,
      "Ka": 6.476099805027729,
      "Ta": 0.05,
      "Ke": -0.633,
      "Te": 0.405,
      "Kf": 0.057,
      "Tf": 0.5,
      "E1": 3.036437,
      "Se1": 0.66,
      "E2": 4.048583,
      "Se2": 0.88,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 02": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 03": {
    "AVR 03": {
      "Tr": 0.0,
      "Ka": 5.0,
      "Ta": 0.06,
      "Ke": -0.0198,
      "Te": 0.5,
      "Kf": 0.08,
      "Tf": 1.0,
      "E1": 2.342286,
      "Se1": 0.13,
      "E2": 3.123048,
      "Se2": 0.34,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 03": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 04": {
    "AVR 04": {
      "Tr": 0.0,
      "Ka": 5.0,
      "Ta": 0.06,
      "Ke": -0.0525,
      "Te": 0.5,
      "Kf": 0.08,
      "Tf": 1.0,
      "E1": 2.868069,
      "Se1": 0.08,
      "E2": 3.824092,
      "Se2": 0.314,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 04": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 05": {
    "AVR 05": {
      "Tr": 0.0,
      "Ka": 40.0,
      "Ta": 0.02,
      "Ke": 1.0,
      "Te": 0.785,
      "Kf": 0.03,
      "Tf": 1.0,
      "E1": 3.926702,
      "Se1": 0.07,
      "E2": 5.235602,
      "Se2": 0.91,
      "Vrmin": -10.0,
      "Vrmax": 10.0
    },
    "GOV 05": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 06": {
    "AVR 06": {
      "Tr": 0.0,
      "Ka": 5.0,
      "Ta": 0.02,
      "Ke": -0.0419,
      "Te": 0.471,
      "Kf": 0.0754,
      "Tf": 1.246,
      "E1": 3.586801,
      "Se1": 0.064,
      "E2": 4.782401,
      "Se2": 0.251,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 06": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 07": {
    "AVR 07": {
      "Tr": 0.0,
      "Ka": 40.0,
      "Ta": 0.02,
      "Ke": 1.0,
      "Te": 0.73,
      "Kf": 0.03,
      "Tf": 1.0,
      "E1": 2.801724,
      "Se1": 0.53,
      "E2": 3.735632,
      "Se2": 0.74,
      "Vrmin": -6.5,
      "Vrmax": 6.5
    },
    "GOV 07": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 08": {
    "AVR 08": {
      "Tr": 0.0,
      "Ka": 5.0,
      "Ta": 0.02,
      "Ke": -0.047,
      "Te": 0.528,
      "Kf": 0.0854,
      "Tf": 1.26,
      "E1": 3.191489,
      "Se1": 0.072,
      "E2": 4.255319,
      "Se2": 0.282,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 08": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 09": {
    "AVR 09": {
      "Tr": 0.0,
      "Ka": 40.0,
      "Ta": 0.02,
      "Ke": 1.0,
      "Te": 1.4,
      "Kf": 0.03,
      "Tf": 1.0,
      "E1": 4.256757,
      "Se1": 0.62,
      "E2": 5.675676,
      "Se2": 0.85,
      "Vrmin": -10.5,
      "Vrmax": 10.5
    },
    "GOV 09": {
      "K": 5.0,
      "T1": 0.2,
      "T2": 1.0,
      "T3": 0.6,
      "K1": 0.3,
      "K2": 0.0,
      "T5": 0.5,
      "K3": 0.25,
      "K4": 0.0,
      "T6": 0.8,
      "K5": 0.3,
      "K6": 0.0,
      "T4": 0.6,
      "T7": 1.0,
      "K7": 0.15,
      "K8": 0.0,
      "PNhp": 0.0,
      "PNlp": 0.0,
      "Uc": -0.3,
      "Pmin": 0.0,
      "Uo": 0.3,
      "Pmax": 1.0
    }
  },
  "Power Plant 10": {
    "AVR 10": {
      "Tr": 0.0,
      "Ka": 5.0,
      "Ta": 0.06,
      "Ke": -0.0485,
      "Te": 0.25,
      "Kf": 0.04,
      "Tf": 1.0,
      "E1": 3.546099,
      "Se1": 0.08,
      "E2": 4.728132,
      "Se2": 0.26,
      "Vrmin": -1.0,
      "Vrmax": 1.0
    },
    "GOV 10": {
      "Tg": 0.05,
      "Tp": 0.04,
      "Sigma": 0.04,
      "Delta": 0.2,
      "Tr": 10.0,
      "a11": 0.5,
      "a13": 1.0,
      "a21": 1.5,
      "a23": 1.0,
      "Tw": 0.75,
      "PN": 0.0,
      "Uc": -0.1,
      "Pmin": 0.0,
      "Uo": 0.1,
      "Pmax": 1.0
    }
  },
  "Rest of U.S.A. / Canada": {}
}

By default, PowerFactory object names are used as keys, but other formatting options are available:

try:
    app.Hide()
    comp_model_pars = pfdb.get_composite_model_parameters(obj_format="obj")   
finally:
    app.Show()
comp_model_pars
{<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 02.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 02.ElmComp\AVR 02.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 6.476099805027729,
   'Ta': 0.05,
   'Ke': -0.633,
   'Te': 0.405,
   'Kf': 0.057,
   'Tf': 0.5,
   'E1': 3.036437,
   'Se1': 0.66,
   'E2': 4.048583,
   'Se2': 0.88,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 02.ElmComp\GOV 02.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 03.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 03.ElmComp\AVR 03.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 5.0,
   'Ta': 0.06,
   'Ke': -0.0198,
   'Te': 0.5,
   'Kf': 0.08,
   'Tf': 1.0,
   'E1': 2.342286,
   'Se1': 0.13,
   'E2': 3.123048,
   'Se2': 0.34,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 03.ElmComp\GOV 03.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 04.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 04.ElmComp\AVR 04.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 5.0,
   'Ta': 0.06,
   'Ke': -0.0525,
   'Te': 0.5,
   'Kf': 0.08,
   'Tf': 1.0,
   'E1': 2.868069,
   'Se1': 0.08,
   'E2': 3.824092,
   'Se2': 0.314,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 04.ElmComp\GOV 04.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 05.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 05.ElmComp\AVR 05.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 40.0,
   'Ta': 0.02,
   'Ke': 1.0,
   'Te': 0.785,
   'Kf': 0.03,
   'Tf': 1.0,
   'E1': 3.926702,
   'Se1': 0.07,
   'E2': 5.235602,
   'Se2': 0.91,
   'Vrmin': -10.0,
   'Vrmax': 10.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 05.ElmComp\GOV 05.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 06.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 06.ElmComp\AVR 06.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 5.0,
   'Ta': 0.02,
   'Ke': -0.0419,
   'Te': 0.471,
   'Kf': 0.0754,
   'Tf': 1.246,
   'E1': 3.586801,
   'Se1': 0.064,
   'E2': 4.782401,
   'Se2': 0.251,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 06.ElmComp\GOV 06.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 07.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 07.ElmComp\AVR 07.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 40.0,
   'Ta': 0.02,
   'Ke': 1.0,
   'Te': 0.73,
   'Kf': 0.03,
   'Tf': 1.0,
   'E1': 2.801724,
   'Se1': 0.53,
   'E2': 3.735632,
   'Se2': 0.74,
   'Vrmin': -6.5,
   'Vrmax': 6.5},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 07.ElmComp\GOV 07.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 08.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 08.ElmComp\AVR 08.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 5.0,
   'Ta': 0.02,
   'Ke': -0.047,
   'Te': 0.528,
   'Kf': 0.0854,
   'Tf': 1.26,
   'E1': 3.191489,
   'Se1': 0.072,
   'E2': 4.255319,
   'Se2': 0.282,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 08.ElmComp\GOV 08.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 09.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 09.ElmComp\AVR 09.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 40.0,
   'Ta': 0.02,
   'Ke': 1.0,
   'Te': 1.4,
   'Kf': 0.03,
   'Tf': 1.0,
   'E1': 4.256757,
   'Se1': 0.62,
   'E2': 5.675676,
   'Se2': 0.85,
   'Vrmin': -10.5,
   'Vrmax': 10.5},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 09.ElmComp\GOV 09.ElmDsl</l1>>: {'K': 5.0,
   'T1': 0.2,
   'T2': 1.0,
   'T3': 0.6,
   'K1': 0.3,
   'K2': 0.0,
   'T5': 0.5,
   'K3': 0.25,
   'K4': 0.0,
   'T6': 0.8,
   'K5': 0.3,
   'K6': 0.0,
   'T4': 0.6,
   'T7': 1.0,
   'K7': 0.15,
   'K8': 0.0,
   'PNhp': 0.0,
   'PNlp': 0.0,
   'Uc': -0.3,
   'Pmin': 0.0,
   'Uo': 0.3,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 10.ElmComp</l1>>: {<powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 10.ElmComp\AVR 10.ElmDsl</l1>>: {'Tr': 0.0,
   'Ka': 5.0,
   'Ta': 0.06,
   'Ke': -0.0485,
   'Te': 0.25,
   'Kf': 0.04,
   'Tf': 1.0,
   'E1': 3.546099,
   'Se1': 0.08,
   'E2': 4.728132,
   'Se2': 0.26,
   'Vrmin': -1.0,
   'Vrmax': 1.0},
  <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Power Plant 10.ElmComp\GOV 10.ElmDsl</l1>>: {'Tg': 0.05,
   'Tp': 0.04,
   'Sigma': 0.04,
   'Delta': 0.2,
   'Tr': 10.0,
   'a11': 0.5,
   'a13': 1.0,
   'a21': 1.5,
   'a23': 1.0,
   'Tw': 0.75,
   'PN': 0.0,
   'Uc': -0.1,
   'Pmin': 0.0,
   'Uo': 0.1,
   'Pmax': 1.0}},
 <powerfactory.DataObject <l1>\seberlein.IntUser\powfacpy\39_bus_new_england_copy_where_tests_run.IntPrj\Network Model.IntPrjfolder\Network Data.IntPrjfolder\Grid.ElmNet\Rest of U.S.A. / Canada.ElmComp</l1>>: {}}

3.2 Import

To export parameters to a pickle file, reimport them later, and apply the settings back to PowerFactory, use the following workflow:

try:
    app.Hide()
    comp_model_pars = pfdb.get_composite_model_parameters(obj_format="path") 
    
    # save dict to pickle file
    with open(r'.\output\model_data_export\database_dict.pickle', 'wb') as handle:
        pickle.dump(comp_model_pars, handle)

    # load dict from pickle file
    with open(r'.\output\model_data_export\database_dict.pickle', 'rb') as handle:
        comp_model_pars_loaded  = pickle.load(handle)

    # modify the loaded dict to validate that the set_composite_model_parameters method works as expected   
    new_Ka = np.random.uniform(6, 7) 
    print("new Ka:" + str(new_Ka))
    comp_model_pars_loaded["Network Model\\Network Data\\Grid\\Power Plant 02"]["Network Model\\Network Data\\Grid\\Power Plant 02\\AVR 02"]["Ka"] = new_Ka
    
    # Set all parameters and reload
    pfdb.set_composite_model_parameters(comp_model_pars_loaded)    
    comp_model_pars = pfdb.get_composite_model_parameters(obj_format="path") 
      
finally:
    app.Show()
comp_model_pars["Network Model\\Network Data\\Grid\\Power Plant 02"]["Network Model\\Network Data\\Grid\\Power Plant 02\\AVR 02"]["Ka"]
new Ka:6.150493803284913
6.150493803284913
Back to top