SIIP Tutorial

Add time series to System

Originally Contributed by: Clayton Barrows

Introduction

An example of how to parse add time series data to a System using PowerSystems.jl

For example, a System created by parsing a MATPOWER file doesn't contain any time series data. So a user may want to add time series to the System

Dependencies

Let's use the 5-bus dataset we parsed in the MATPOWER example

using PowerSystems
using TimeSeries
using JSON3

base_dir = PowerSystems.download(PowerSystems.TestData; branch = "master");

sys = System(joinpath(base_dir, "matpower", "case5_re.m"))
sys
┌ Error: Generator voltage set-points for bus 3 are inconsistent. This can lead to unexpected results
└ @ PowerSystems ~/.julia/packages/PowerSystems/zVsmd/src/parsers/pm_io/matpower.jl:245
┌ Error: Generator voltage set-points for bus 10 are inconsistent. This can lead to unexpected results
└ @ PowerSystems ~/.julia/packages/PowerSystems/zVsmd/src/parsers/pm_io/matpower.jl:245
System
Property Value
System Units Base SYSTEM_BASE
Base Power 100.0
Base Frequency 60.0
Num Components 30
Static Components
Type Count Has Static Time Series Has Forecasts
Arc 6 false false
Area 1 false false
Bus 5 false false
Line 5 false false
LoadZone 1 false false
PhaseShiftingTransformer 2 false false
PowerLoad 3 false false
RenewableDispatch 2 false false
ThermalStandard 5 false false

Define pointers to time series files

For example, if we want to add a bunch of time series files, say one for each load and one for each renewable generator, we need to define pointers to each .csv file containing the time series in the following format (PowerSystems.jl also supports a CSV format for this file)

base_dir = PowerSystems.download(PowerSystems.TestData; branch = "master");
FORECASTS_DIR = joinpath(base_dir, "forecasts", "5bus_ts")
fname = joinpath(FORECASTS_DIR, "timeseries_pointers_da.json")
open(fname, "r") do f
    JSON3.@pretty JSON3.read(f)
end
[
  {
                           "simulation": "DAY_AHEAD",
                           "resolution": 3600,
                             "category": "Generator",
                       "component_name": "SolarBusC",
                               "module": "PowerSystems",
                                 "type": "SingleTimeSeries",
                                 "name": "max_active_power",
            "scaling_factor_multiplier": "get_max_active_power",
     "scaling_factor_multiplier_module": "PowerSystems",
                 "normalization_factor": 1,
                            "data_file": "./gen/Renewable/PV/da_solar5.csv"
  },
  {
                           "simulation": "DAY_AHEAD",
                           "resolution": 3600,
                             "category": "Generator",
                       "component_name": "WindBusA",
                               "module": "PowerSystems",
                                 "type": "SingleTimeSeries",
                                 "name": "max_active_power",
            "scaling_factor_multiplier": "get_max_active_power",
     "scaling_factor_multiplier_module": "PowerSystems",
                 "normalization_factor": 1,
                            "data_file": "./gen/Renewable/WIND/da_wind5.csv"
  },
  {
                           "simulation": "DAY_AHEAD",
                           "resolution": 3600,
                             "category": "ElectricLoad",
                       "component_name": "bus2",
                               "module": "PowerSystems",
                                 "type": "SingleTimeSeries",
                                 "name": "max_active_power",
            "scaling_factor_multiplier": "get_max_active_power",
     "scaling_factor_multiplier_module": "PowerSystems",
                 "normalization_factor": 1,
                            "data_file": "./load/da_load5.csv"
  },
  {
                           "simulation": "DAY_AHEAD",
                           "resolution": 3600,
                             "category": "ElectricLoad",
                       "component_name": "bus3",
                               "module": "PowerSystems",
                                 "type": "SingleTimeSeries",
                                 "name": "max_active_power",
            "scaling_factor_multiplier": "get_max_active_power",
     "scaling_factor_multiplier_module": "PowerSystems",
                 "normalization_factor": 1,
                            "data_file": "./load/da_load5.csv"
  },
  {
                           "simulation": "DAY_AHEAD",
                           "resolution": 3600,
                             "category": "ElectricLoad",
                       "component_name": "bus4",
                               "module": "PowerSystems",
                                 "type": "SingleTimeSeries",
                                 "name": "max_active_power",
            "scaling_factor_multiplier": "get_max_active_power",
     "scaling_factor_multiplier_module": "PowerSystems",
                 "normalization_factor": 1,
                            "data_file": "./load/da_load5.csv"
  }
]

Read and assign time series to System using these parameters.

add_time_series!(sys, fname)
sys
System
Property Value
System Units Base SYSTEM_BASE
Base Power 100.0
Base Frequency 60.0
Num Components 30
Static Components
Type Count Has Static Time Series Has Forecasts
Arc 6 false false
Area 1 false false
Bus 5 false false
Line 5 false false
LoadZone 1 false false
PhaseShiftingTransformer 2 false false
PowerLoad 3 true false
RenewableDispatch 2 true false
ThermalStandard 5 false false
Time Series Summary
Property Value
Components with time series data 5
Total StaticTimeSeries 5
Total Forecasts 0
Resolution 60 minutes
CC BY-SA 4.0 "Dheepak Krishnamurthy". Last modified: August 26, 2022. Website built with Franklin.jl and the Julia programming language.