-
Notifications
You must be signed in to change notification settings - Fork 19
How to add or remove devices
Currently STEPS supports the following types of devices:
- BUS: AC bus
- GENERATOR: Synchronous generator
- WT_GENERATOR: Wind turbine generator
- PV_UNIT: Photovoltaic unit
- ENERGY_STORAGE: Energy storage
- LOAD: Load
- FIXED_SHUNT: Fixed shunt
- LINE: AC transmission line, also used to represent breakers, series compensator
- TRANSFORMER: 2-winding and 3-winding transformer
- HVDC: Two terminal high voltage direct current transmission system
- EQUIVALENT_DEVICE: Equivalent device (not discussed here)
- AREA: Area
- ZONE: Zone
- OWNER: Owner
You can find definition of those devices in code/steps/header/device of STEPS source.
Remarks: AREA, ZONE, and OWNER are not devices but are listed here since their operations are similar to other devices.
Buses are nodes that all devices are connected to. Buses should be prepared before other devices are prepared.
Remember: The total number of all buses should not exceeds the bus capacity, and the physical bus number should never exceeds the allowed maximum bus number.
To add a new bus to the simulator, use API add_bus
:
busnumber = 1
busname = "BUS A"
basevoltage = 110.0
simulator.add_bus(busnumber, busname, basevoltage)
busnumber = 2
busname = "BUS B"
basevoltage = 220.0
simulator.add_bus(busnumber, busname, basevoltage)
Remember, busnumber
, busname
, and basevoltage
must be presented when building a new BUS object.
Bus paremeters should be set up with API: set_bus_data
.
To remove an existing bus, use API remove_bus
:
busnumber = 1
simulator.remove_bus(busnumber)
Synchronous generators can be built with API add_generator
.
bus = 1
ickt = "#1"
generator = (bus, ickt)
simulator.add_generator(generator)
ickt = "#2"
generator = (bus, ickt)
simulator.add_generator(generator)
Multiple generators can be added to the same bus with different identifier string.
Generator paremeters should be set up with API: set_generator_data
.
To remove an existing generator, use API remove_generator
bus = 1
ickt = "#1"
generator = (bus, ickt)
simulator.remove_generator(generator)
Wind turbine generators can be built with API add_wt_generator
.
bus = 1
ickt = "#1"
wtgenerator = (bus, ickt)
simulator.add_wt_generator(wtgenerator )
ickt = "#2"
wtgenerator= (bus, ickt)
simulator.add_wt_generator(wtgenerator )
Multiple wind turbine generators can be added to the same bus with different identifier string. Both wind turbine generator and synchronous generators can coexist at the same bus, but are usually modeled at different buses.
Wind turbine generator paremeters should be set up with API: set_wt_generator_data
.
To remove an existing wind turbine generator, use API remove_wt_generator
bus = 1
ickt = "#1"
wtgen = (bus, ickt)
simulator.remove_wt_generator(wtgen)
Photovoltaic units can be built with API add_pv_unit
.
bus = 1
ickt = "#1"
pvunit = (bus, ickt)
simulator.add_pv_unit(pvunit)
ickt = "#2"
pvunit= (bus, ickt)
simulator.add_pv_unit(pvunit)
Multiple photovoltaic units can be added to the same bus with different identifier string. Wind turbine generator, photovoltaic units and synchronous generators can coexist at the same bus, but are usually modeled at different buses.
Photovoltaic unit paremeters should be set up with API: set_pv_unit_data
.
To remove an existing photovoltaic unit, use API remove_pv_unit
bus = 1
ickt = "#1"
pvu = (bus, ickt)
simulator.remove_pv_unit(pvu)
Energy storages can be built with API add_energy_storage
.
bus = 1
ickt = "#1"
es = (bus, ickt)
simulator.add_energy_storage(es)
ickt = "#2"
es = (bus, ickt)
simulator.add_energy_storage(es)
Multiple energy storages can be added to the same bus with different identifier string. Wind turbine generator, photovoltaic units, energy storages and synchronous generators can coexist at the same bus, but are usually modeled at different buses.
Energy storage paremeters should be set up with API: set_energy_storage_data
.
To remove an existing energy storage, use API remove_energy_storage
bus = 1
ickt = "#1"
es = (bus, ickt)
simulator.remove_energy_storage(es)
Loads can be built with API add_load
.
bus = 1
ickt = "#1"
load = (bus, ickt)
simulator.add_load(load)
ickt = "#2"
load = (bus, ickt)
simulator.add_load(load)
Multiple loads can be added to the same bus with different identifier string.
Load paremeters should be set up with API: set_load_data
.
To remove an existing load, use API remove_load
bus = 1
ickt = "#1"
load = (bus, ickt)
simulator.remove_load(load)
Fixed shunts can be built with API add_fixed_shunt
.
bus = 1
ickt = "#1"
shunt = (bus, ickt)
simulator.add_fixed_shunt(shunt)
ickt = "#2"
shunt = (bus, ickt)
simulator.add_fixed_shunt(shunt)
Multiple fixed shunts can be added to the same bus with different identifier string.
Fixed shunt paremeters should be set up with API: set_fixed_shunt_data
.
To remove an existing fixed shunt, use API remove_fixed_shunt
bus = 1
ickt = "#1"
shunt = (bus, ickt)
simulator.remove_fixed_shunt(shunt)
AC transmission line is two-terminal device connecting to two different buses of the same voltage level.
Lines can be built with API add_line
.
ibus = 1
jbus = 2
ickt = "#1"
line = (ibus, jbus, ickt)
simulator.add_line(line)
ickt = "#2"
line = (ibus, jbus, ickt)
simulator.add_line(line)
Multiple lines can be added to the same two buses with different identifier string.
Line paremeters should be set up with API: set_line_data
.
To remove an existing line, use API remove_line
ibus = 1
jbus = 2
ickt = "#1"
line = (ibus, jbus, ickt)
simulator.remove_line(line)
Breaker and serial compensators can also be modeled as line. To model breaker, a line with zero impedance can be created.
Transformer can be classified into two types: two-winding transformer and three-winding transformer. It is two-terminal or three-terminal device connecting to two or three different buses of the different voltage levels.
Transformers can be built with API add_transformer
.
ibus = 1
jbus = 2
ickt = "#1"
trans = (ibus, jbus, ickt) # two-winding transformer
simulator.add_transformer(trans)
kbus = 0
ickt = "#2"
trans = (ibus, jbus, kbus, ickt) # two-winding transformer when kbus is 0, identical to (ibus, jbus, ickt)
simulator.add_transformer(trans)
kbus = 3
ickt = "#1"
trans = (ibus, jbus, kbus, ickt) # three-winding transformer
simulator.add_transformer(trans)
Multiple transformers can be added to the same two or three buses with different identifier string.
Transformer paremeters should be set up with API: set_transformer_data
.
To remove an existing transformer, use API remove_transformer
ibus = 1
jbus = 2
ickt = "#1"
trans = (ibus, jbus, ickt) # two-winding transformer
simulator.remove_transformer(trans)
kbus = 0
ickt = "#2"
trans = (ibus, jbus, kbus, ickt) # two-winding transformer when kbus is 0, identical to (ibus, jbus, ickt)
simulator.remove_transformer(trans)
kbus = 3
ickt = "#1"
trans = (ibus, jbus, kbus, ickt) # three-winding transformer
simulator.remove_transformer(trans)
HVDC is two-terminal device connecting to two different buses. It is used to model LCC HVDC.
HVDC link can be built with API add_hvdc
.
ibus = 1
jbus = 2
name = "HVDC A PPOLE"
hvdc = (ibus, jbus, name)
simulator.add_hvdc(hvdc)
name = "HVDC A NPOLE"
hvdc = (ibus, jbus, name)
simulator.add_hvdc(hvdc)
Multiple HVDC links can be added to the same two buses with different name string.
HVDC paremeters should be set up with API: set_hvdc_data
.
To remove an existing HVDC linke, use API remove_hvdc
ibus = 1
jbus = 2
name = "HVDC A PPOLE"
hvdc = (ibus, jbus, name)
simulator.remove_hvdc(hvdc)
To add a new area to the simulator, use API add_area
.
areanumber = 1
areaname = "AREA A"
simulator.add_area(areanumber, areaname)
areanumber = 2
areaname = "AREA B"
simulator.add_area(areanumber, areaname)
Area paremeters should be set up with API: set_area_data
.
To remove an existing area, use API remove_area
.
areanumber = 1
simulator.remove_area(areanumber)
To add a new zone to the simulator, use API add_zone
.
zonenumber = 1
zonename = "AREA A"
simulator.add_zone(zonenumber, zonename)
zonenumber = 2
zonename = "ZONE B"
simulator.add_zone(zonenumber, zonename)
Zone paremeters should be set up with API: set_zone_data
.
To remove an existing zone, use API remove_zone
.
zonenumber = 1
simulator.remove_zone(zonenumber)
To add a new owner to the simulator, use API add_owner
.
ownernumber = 1
ownername = "OWNER A"
simulator.add_owner(ownernumber, ownername)
ownernumber = 2
ownername = "OWNER B"
simulator.add_owner(ownernumber, ownername)
Owner paremeters should be set up with API: set_owner_data
.
To remove an existing owner, use API remove_owner
.
ownernumber = 1
simulator.remove_owner(ownernumber)
Cite STEPS via: Changgang Li, Yue Wu, Hengxu Zhang, Hua Ye, Yutian Liu and Yilu Liu, "STEPS: A Portable Numerical Simulation Toolkit for Electrical Power System Dynamic Studies," in IEEE Transactions on Power Systems, doi: 10.1109/TPWRS.2020.3045102.