Skip to content

Commit 18a7d86

Browse files
committed
added generator functionality, added tests and modified pv system
1 parent c5654d3 commit 18a7d86

File tree

13 files changed

+86
-18
lines changed

13 files changed

+86
-18
lines changed
476 Bytes
Binary file not shown.
321 Bytes
Binary file not shown.
506 Bytes
Binary file not shown.
208 Bytes
Binary file not shown.
1.33 KB
Binary file not shown.

pygridsim/core.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
from altdss import altdss
33
from altdss import AltDSS, Transformer, Vsource, Load, LoadModel, LoadShape
44
from dss.enums import LineUnits, SolveModes
5-
from pygridsim.parameters import make_load_node, make_source_node, make_pv
5+
from pygridsim.parameters import *
66
from pygridsim.results import query_solution, export_results
77
from pygridsim.lines import make_line
88
from pygridsim.transformers import make_transformer
9-
from pygridsim.enums import LineType, SourceType, LoadType
9+
from pygridsim.enums import LineType, SourceType, LoadType, GeneratorType
1010

1111
"""Main module."""
1212

@@ -19,6 +19,7 @@ def __init__(self):
1919
self.num_lines = 0
2020
self.num_transformers = 0
2121
self.num_pv = 0
22+
self.num_generators = 0
2223
altdss.ClearAll()
2324
altdss('new circuit.MyCircuit')
2425

@@ -34,7 +35,7 @@ def add_load_nodes(self, params = {}, load_type: LoadType = LoadType.HOUSE, num
3435
List of load_nodes
3536
"""
3637
load_nodes = []
37-
for i in range(num):
38+
for _ in range(num):
3839
make_load_node(params, load_type, self.num_loads)
3940
self.num_loads += 1
4041
return load_nodes
@@ -54,7 +55,7 @@ def update_source(self, params = {}, source_type: SourceType = SourceType.TURBIN
5455
"""
5556
return make_source_node(params, source_type)
5657

57-
def add_PVSystem(self, load_nodes = [], params = {}, num_panels = 1):
58+
def add_PVSystem(self, load_nodes, params = {}, num_panels = 1):
5859
"""
5960
Specify a list of load nodes to add a PVsystem ("solar panel") to.
6061
@@ -65,22 +66,30 @@ def add_PVSystem(self, load_nodes = [], params = {}, num_panels = 1):
6566
Return:
6667
list of PVSystem objects
6768
"""
69+
if not load_nodes:
70+
raise ValueError("Need to enter load nodes to add PVSystem to")
6871
PV_nodes = []
6972
for load in load_nodes:
7073
PV_nodes.append(make_pv(load, params, num_panels, self.num_pv))
7174
self.num_pv += 1
7275
return PV_nodes
7376

74-
def add_generator(self, params = {}):
77+
def add_generator(self, num, params = {}, gen_type: GeneratorType = GeneratorType.SMALL):
7578
"""
7679
Specify parameters for a generator to add to the circuit
7780
7881
Args:
79-
params: specify anything else about the PVsystem. otherwise defaults to typical solar panel
80-
num: representing how many solar panels (to represent scale)
82+
num: number of generators
83+
gen_type: specify the generator type (small, large, industrial)
84+
params: specify anything else about the generator.
8185
Return:
82-
list of PVSystem objects
86+
list of generator objects
8387
"""
88+
generators = []
89+
for _ in range(num):
90+
generators.append(make_generator(params, gen_type, count=self.num_generators))
91+
self.num_generators += 1
92+
return generators
8493

8594

8695
def add_lines(self, connections, line_type: LineType = LineType.LV_LINE, params = {}, transformer = True):

pygridsim/defaults.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@
5353
SOLAR_PANEL_BASE_KV = [0.2, 0.4] # per solar panel
5454
IMPEDANCE = 0.0001
5555

56+
"""
57+
Generator default values (small, large, industrial)
58+
"""
59+
SMALL_GEN_KV = [0.2, 0.6]
60+
LARGE_GEN_KV = [1, 35]
61+
INDUSTRIAL_GEN_KV = [35, 100]
62+
SMALL_GEN_KW = [2,5]
63+
LARGE_GEN_KW = [5,10]
64+
INDUSTRIAL_GEN_KW = [10,20]
5665

5766
"""
5867
Units: KM
@@ -75,4 +84,6 @@
7584
"""
7685
VALID_LOAD_PARAMS = ["kV", "kW", "kvar", "phases"]
7786
VALID_SOURCE_PARAMS = ["kV", "phases", "frequency", "R0", "R1", "X0", "X1"]
78-
VALID_LINE_TRANSFORMER_PARAMS = ["length", "XHL", "Conns"]
87+
VALID_LINE_TRANSFORMER_PARAMS = ["length", "XHL", "Conns"]
88+
VALID_PV_PARAMS = ["kV", "phases"]
89+
VALID_GENERATOR_PARAMS = ["kV", "kW", "phases"]

pygridsim/enums.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,9 @@ class LineType(Enum):
1414
class LoadType(Enum):
1515
HOUSE = {"kV": defaults.HOUSE_KV, "kW": defaults.HOUSE_KW, "kvar": defaults.HOUSE_KVAR}
1616
COMMERCIAL = {"kV": defaults.COMMERCIAL_KV, "kW": defaults.COMMERCIAL_KW, "kvar": defaults.COMMERCIAL_KVAR}
17-
INDUSTRIAL = {"kV": defaults.INDUSTRIAL_KV, "kW": defaults.INDUSTRIAL_KW, "kvar": defaults.INDUSTRIAL_KVAR}
17+
INDUSTRIAL = {"kV": defaults.INDUSTRIAL_KV, "kW": defaults.INDUSTRIAL_KW, "kvar": defaults.INDUSTRIAL_KVAR}
18+
19+
class GeneratorType(Enum):
20+
SMALL = {"kV": defaults.SMALL_GEN_KV, "kW": defaults.SMALL_GEN_KW}
21+
LARGE = {"kV": defaults.LARGE_GEN_KV, "kW": defaults.LARGE_GEN_KW}
22+
INDUSTRIAL = {"kV": defaults.INDUSTRIAL_GEN_KV, "kW": defaults.INDUSTRIAL_GEN_KW}

pygridsim/lines.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,9 @@ def make_line(src, dst, line_type, count, params = {}, transformer = True):
3636
transformer.XHL = get_param(params, "XHL", defaults.XHL)
3737
transformer.Buses = [src, dst]
3838
transformer.Conns = get_param(params, "Conns", [defaults.PRIMARY_CONN, defaults.SECONDARY_CONN])
39-
transformer.kVs = [altdss.Vsource[src].BasekV, altdss.Load[dst].kV]
39+
# TOOD: edit this for clarity
40+
if src == "source":
41+
transformer.kVs = [altdss.Vsource[src].BasekV, altdss.Load[dst].kV]
42+
else:
43+
transformer.kVs = [altdss.Generator[src].kV, altdss.Load[dst].kV]
4044
transformer.end_edit()

pygridsim/parameters.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Helper functions to parse the parameters used for loads and sources
33
"""
44
from altdss import altdss
5-
from altdss import AltDSS, Transformer, Vsource, Load, LoadModel, LoadShape, PVSystem
5+
from altdss import AltDSS, Transformer, Vsource, Load, PVSystem, Generator
66
import pygridsim.defaults as defaults
77
import random
88

@@ -100,8 +100,30 @@ def make_pv(load_node, params, num_panels, count):
100100
num_panels: representation of how many solar panels this PVsystem includes
101101
count: how many pv already made, to not run into duplicates
102102
"""
103+
check_valid_params(params, defaults.VALID_PV_PARAMS)
103104
pv : PVSystem = altdss.PVSystem.new('pv' + str(count))
104105
pv.Bus1 = load_node
105106
pv.Phases = get_param(params, "phases", defaults.PHASES)
106107
pv.kV = get_param(params, "kV", random_param(defaults.SOLAR_PANEL_BASE_KV) * num_panels)
107-
# todo: inverter capacity?
108+
# todo: inverter capacity?
109+
if (pv.kV) < 0:
110+
raise ValueError("Cannot have negative voltage for PVsystem")
111+
112+
def make_generator(params, gen_type, count):
113+
"""
114+
Make a PV at the load node given, scaling kV by the number of solar panels
115+
116+
Args:
117+
params: any customized parameters
118+
gen_type: type of generator (small, large, industrial)
119+
count: how many generators already made, to not run into duplicates
120+
"""
121+
check_valid_params(params, defaults.VALID_GENERATOR_PARAMS)
122+
generator : Generator = altdss.Generator.new('generator' + str(count))
123+
generator.Bus1 = 'generator' + str(count)
124+
generator.Phases = get_param(params, "phases", defaults.PHASES)
125+
for attr in ["kV", "kW"]:
126+
setattr(generator, attr, get_param(params, attr, random_param(gen_type.value[attr])))
127+
128+
if (generator.kV) < 0:
129+
raise ValueError("Cannot have negative voltage in generatorsource")

0 commit comments

Comments
 (0)