It is an open-source library developed in Python for estimating distribution networks (DSSE). It communicates with the free software for the simulation of electrical networks (OpenDSS) and collects the results of power flow and distribution system parameters and executes the DSSE, obtaining an estimated state according to the type and location of measurements.
It is developed within the framework of the OpenREiD project (Integral software for simulation and optimization of electrical distribution networks), of the Instituto de Energía Eléctrica (IEE), UNSJ - CONICET, San Juan - Argentina.
Index
The library uses a hybrid weighted least squares algorithm that incorporates traditional and D-PMU measurements. It supports single-phase and multiphase networks that are modeled as electromagnetically decoupled positive sequence impedances. More details can be found in docs/methodology
With pip
pip install py-open-dsse
Without pip, clone or download the repository, in the dist folder is the .whl file, copy the location of the file, and in the CMD:
pip install {path-save-files}/openpy_dsse-{version}-py3-none-any.whl’
If you have installation problems, you can contact us by email (jlara@iee.unsj.edu.ar) or through the same GitHub and according to the error that appears in the console we can give the necessary technical support.
First, in the IDE (Integrated Development Environment) of preference, we import the library:
import openpy_dsse
The object class that contains all the functions of the library is activated as follows:
dsse = openpy_dsse.init_DSSE()
The class init_DSSE()
, has default values as shown in table 1 and can be modified as appropriate.
Table 1. Description and attributes of function init_DSSE()
Parameters | Description | Default value |
---|---|---|
Sbas3ph_MVA |
Three-phase system base power | 30 |
tolerance |
Convergence tolerance of selected algorithm | 1e-3 |
max_iter |
Maximum number of iterations of the selected algorithm | 30 |
init_values |
Initial values for state estimation. With flat start with 1.0 p.u. / 0° on all buses and with dss start with OpenDSS voltage and angle results |
flat |
Once the class is initialized, we can use the functions described below.
The library supports meters and their respective error variance described in Table 2.
Table 2. Measurement type of the openpy_dsse
library.
Meter | Description |
---|---|
Node voltage magnitude. | |
Branch power flow | |
Magnitude of branch current. | |
Injection power or node consumption obtained by a smart meter | |
Passive node or zero injection power. | |
Artificial node injection power known as pseudo-measurement | |
Voltage phasor measurement | |
Current phasor measurement |
The measurement data per phase 𝜌 (1, 2, 3) and measurement error variance Rii
of a network modeled in OpenDSS. They must be entered in the MEAS_Bus_i.json
, MEAS_Elem_ft.json
, MEAS_Bus_i_PMU.json
and MEAS_Elem_ft_PMU.json
files. The .json
measurement files without data are generated with the empty_MEAS_files()
function and the parameters from table 3 must be entered.
Table 3. Parameters and description of empty_file_MEAS()
function
Parameter | Description | Default value |
---|---|---|
DSS_path |
A path of the .DSS files of the circuit modeled in OpenDSS |
None |
MEAS_path_save |
Path where the measurement .json files will be saved |
None |
The description of the identifiers that can be modified is detailed in tables 4, 5, 6, and 7. The other identifiers in the .json
files, are node characteristics or elements extracted from the circuit modeled in OpenDSS, these data should not be modified since they would affect the result of the state estimation algorithm.
Table 4. Description of identifiers of the MEAS_Bus_i.json
file.
Identifier | Description |
---|---|
STS_Vm |
Status (1: Enabled, 0: Disabled) |
Rii_Vm |
Variance of voltage magnitude measurement error. |
Vρm(pu) |
Measurement of voltage magnitude voltage in phase 𝜌. |
STS_PQd(SM) |
Status (1: Enabled, 0: Disabled) |
Rii_SM |
Measurement error variance of injection power or consumption of a smart meter. |
STS_PQd(0) |
Status (1: Enabled, 0: Disabled) |
Rii_0 |
Zero or passive injection power measurement error variance. |
STS_PQd(Psd) |
Status (1: Enabled, 0: Disabled) |
Rii_Psd |
Measurement error variance of pseudo power injection measurement |
Pρmd(pu) |
Measurement of active power injection in phase 𝜌. |
Qρmd(pu) |
Measurement of reactive power injection in phase 𝜌. |
Table 5. Description of identifiers of the MEAS_Elem_ft.json
file.
Identifier | Description |
---|---|
STS_PQft |
Status (1: Enabled, 0: Disabled) |
Rii_PQft |
Branch power flow measurement error variance. |
Pρmft(pu) |
Measurement of branch active power in phase 𝜌. |
Qρmft(pu) |
Measurement of branch reactive power in phase 𝜌. |
STS_Ift |
Status (1: Enabled, 0: Disabled) |
Rii_Ift |
Branch current magnitude error variance. |
Iρmft(pu) |
Measurement of branch current magnitude in phase 𝜌. |
Table 6. Description of identifiers of the MEAS_Elem_ft_PMU.json
file.
Identifier | Description |
---|---|
STS_Vm |
Status (1: Enabled, 0: Disabled) |
Rii_Vm |
Variance of voltage phasor measurement error |
Vρm(pu) |
Measurement of voltage magnitude in phase 𝜌 |
Angρm(deg) |
Measurement of volage angle in phase 𝜌 |
Table 7. Description of identifiers of the MEAS_Elem_ft_PMU.json
file.
Identifier | Description |
---|---|
STS_Ift |
Status (1: Enabled, 0: Disabled) |
Rii_Ift |
Variance of current phasor measurement error |
Iρmft(pu) |
Measurement of current magnitude in phase 𝜌 |
Angρm(deg) |
Measurement of current angle in phase 𝜌 |
The empty_init_files_MEAS_Unc()
function generates .json
files where all the nodes and elements that can participate as measurement in the state estimation algorithm are placed. For this purpose, the parameters of table 8 must be specified.
Table 8. Parameters and description of empty_file_MEAS()
function
Parameters | Description | Default value |
---|---|---|
DSS_path |
A path of the .DSS files of the circuit modeled in OpenDSS |
None |
MEAS_path_save |
Path where the measurement .json files will be saved |
None |
In the MEAS_path_save
path, it generates the files Init_Bus_i.json
, Init_Elem_ft.json
, Init_Bus_i_PMU.json
and Init_Elem_ft_PMU.json
. Depending on the case study, the STS
meter status (1: Enabled, 0: Disabled) and the measurement error rate in Unc(%)
can be modified.
With the .json
files generated by the empty_file_MEAS()
function and the changes indicated by the user, with the add_error_file_MEAS()
function and the Parameters described in Table 9.
Table 9. Description and attributes of function add_error_files_MEAS()
Parameters | Description | Default value |
---|---|---|
DSS_path |
A path of the .DSS files of the circuit modeled in OpenDSS |
None |
MEAS_path |
Path of initial .json files |
None |
seed_DS |
Random error generation seed | 1 |
Adds random errors from a normal distribution to the OpenDSS power flow results, for use as a measurement. The result of generating random errors is contained in the files MEAS_Bus_i.json
, MEAS_Elem_ft.json
, MEAS_Bus_i_PMU.json
and MEAS_Elem_ft_PMU.json
, stored in MEAS_path
.
To run the state estimation algorithm, function estimate()
is called, it is necessary to enter or change parameters detailed in table 10.
Table 10. Parameters and description of estimate()
function
Parameters | Description | Default value |
---|---|---|
DSS_path |
A path of the .DSS files of the circuit modeled in OpenDSS. |
None |
MEAS_path |
Path where measurement files are located. | None |
path_save |
Path where the results will be saved | None |
Typ_cir |
Circuit type, can be 1ph or Pos . |
None |
ALG |
Type of algorithm state variables. At the moment NV |
NV |
coord |
Type of coordinates to solve. For the moment polar . |
Polar |
method |
Solution method, can be nonlinear , linear_PMU and nonlinear_PMU . |
nonlinear_PMU |
name_project |
Project name | Default |
View_res |
Displays the result of the selected algorithm by console | False |
DSS_coll |
Displays next to the estimated status, the actual status according to OpenDSS | False |
summary |
Displays a summary of the simulation by console | False |
MEAS_Pos |
True if it is a Pos circuit, take the .json files in positive sequence. |
False |
In the path :{Python_library_path}/openpy_dsse/examples
, the .DSS
and .json
files of single-phase (1ph
) and positive sequence equivalent (Pos
) circuit measurements detailed in Table 11 are located.
Table 11. Sample tests
Circuit | Tpy_circ | Case |
---|---|---|
4Node | 1ph | 1 |
15NodeIEEE | 1ph | 2 |
13NodeIEEE | Pos | 1 |
37NodeIEEE | Pos | 2 |
The function test_circuit(Typ_cir, case)
, returns a dictionary with the keys 'DSS_file'
, 'MEAS_path'
, 'save_path'
, 'name_project'
and 'Typ_cir'
which correspond to the .DSS
file path, measurement file path, path where results will be saved and circuit type respectively.
import openpy_dsse
dsse = openpy_dsse.init_DSSE() #Start the class.
if __name__ == '__main__':
net = dsse.test_circuit(Typ_cir='1ph', case=1)
#dsse.empty_init_files_MEAS_Unc(DSS_path=net['DSS_file'], MEAS_path=net['MEAS_path'])
#dsse.add_error_files_MEAS(DSS_path=net['DSS_file'], MEAS_path=net['MEAS_path'])
#dsse.empty_MEAS_files(DSS_path=net['DSS_file'], MEAS_path=net['MEAS_path'])
#execute the state estimation algorithm
Results = dsse.estimate(
DSS_path=net['DSS_file'],
MEAS_path=net['MEAS_path'],
path_save=net['save_path'],
Typ_cir=net['Typ_cir'],
name_project=net['name_project'],
View_res=True,
summary=True,
DSS_coll=True,
#MEAS_Pos=True,
#method='nonlinear'
#method='linear_PMU',
)
License: CC BY-NC-SA 4.0
This work has a license Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.