Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
pyVolt
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
ACS
Public
Power System Automation and Monitoring
pyVolt
pyVolt
Commits
83865f08
Commit
83865f08
authored
5 years ago
by
Jan Dinkelbach
Browse files
Options
Downloads
Patches
Plain Diff
renaming meas_value to meas_value_ideal and mval to meas_value
parent
9923b0e9
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
acs/state_estimation/measurement.py
+64
-64
64 additions, 64 deletions
acs/state_estimation/measurement.py
acs/state_estimation/nv_state_estimator.py
+21
-21
21 additions, 21 deletions
acs/state_estimation/nv_state_estimator.py
with
85 additions
and
85 deletions
acs/state_estimation/measurement.py
+
64
−
64
View file @
83865f08
...
...
@@ -23,14 +23,14 @@ class MeasType(Enum):
S2_imag
=
12
# Reactive Power flow at branch, measured at final node (S2.imag)
class
Measurement
()
:
def
__init__
(
self
,
element
,
element_type
,
meas_type
,
meas_value
,
unc
):
class
Measurement
:
def
__init__
(
self
,
element
,
element_type
,
meas_type
,
meas_value
_ideal
,
unc
):
"""
Creates a measurement, which is used by the estimation module. Possible types of measurements are: v, p, q, i, Vpmu and Ipmu
@element: pointer to the topology_node / topology_branch (object of class network.Node / network.Branch)
@element_type: clarifies which type of element is considered (object of enum ElemType, e.g. ElemType.Node)
@meas_type: clarifies which quantity is measured (object of enum MeasType, e.g. MeasType.V_mag)
@meas_value
: actu
al measurement value
@meas_value
_ideal: ide
al measurement value
(usually result of a powerflow calculation)
@unc: measurement uncertainty in percent
"""
...
...
@@ -43,33 +43,33 @@ class Measurement():
self
.
element
=
element
self
.
element_type
=
element_type
self
.
meas_type
=
meas_type
self
.
meas_value
=
meas_value
self
.
meas_value
_ideal
=
meas_value
_ideal
self
.
std_dev
=
unc
/
300
self
.
mval
=
0.0
# measured values (affected by uncertainty)
self
.
m
eas_
val
ue
=
0.0
# measured values (affected by uncertainty)
class
MeasurementSet
()
:
class
MeasurementSet
:
def
__init__
(
self
):
self
.
measurements
=
[]
# array with all measurements
def
create_measurement
(
self
,
element
,
element_type
,
meas_type
,
meas_value
,
unc
):
def
create_measurement
(
self
,
element
,
element_type
,
meas_type
,
meas_value
_ideal
,
unc
):
"""
to add elements to the measurements array
"""
self
.
measurements
.
append
(
Measurement
(
element
,
element_type
,
meas_type
,
meas_value
,
unc
))
self
.
measurements
.
append
(
Measurement
(
element
,
element_type
,
meas_type
,
meas_value
_ideal
,
unc
))
def
update_measurement
(
self
,
element_uuid
,
meas_type
,
meas_data
,
value_in_pu
=
True
):
"""
to update
the
meas_value of a measurment in the measurements array
to update meas_value of a
specific
measur
e
ment
object
in the measurements array
"""
for
meas
in
self
.
measurements
:
if
meas
.
element
.
uuid
==
element_uuid
and
meas
.
meas_type
==
meas_type
:
if
not
value_in_pu
:
if
meas
.
meas_type
==
MeasType
.
Vpmu_mag
:
mval
=
meas_data
/
(
meas
.
element
.
baseVoltage
*
1000
/
np
.
sqrt
(
m
eas_
val
ue
=
meas_data
/
(
meas
.
element
.
baseVoltage
*
1000
/
np
.
sqrt
(
3
))
# TODO - Fix phase-to-phase voltage problem
meas
.
mval
=
mval
meas
.
m
eas_
val
ue
=
m
eas_
val
ue
def
read_measurements_from_file
(
self
,
powerflow_results
,
file_name
):
"""
...
...
@@ -86,80 +86,80 @@ class MeasurementSet():
for
uuid
in
value
[
'
uuid
'
]:
pf_node
=
powerflow_results
.
get_node
(
uuid
=
uuid
)
element
=
pf_node
.
topology_node
meas_value
=
np
.
abs
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
V_mag
,
meas_value
,
unc
)
meas_value
_ideal
=
np
.
abs
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
V_mag
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Imag
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value
=
np
.
abs
(
pf_branch
.
current_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
I_mag
,
meas_value
,
unc
)
meas_value
_ideal
=
np
.
abs
(
pf_branch
.
current_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
I_mag
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Pinj
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_node
=
powerflow_results
.
get_node
(
uuid
=
uuid
)
element
=
pf_node
.
topology_node
meas_value
=
pf_node
.
power_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Sinj_real
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_node
.
power_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Sinj_real
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Qinj
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_node
=
powerflow_results
.
get_node
(
uuid
=
uuid
)
element
=
pf_node
.
topology_node
meas_value
=
pf_node
.
power_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Sinj_imag
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_node
.
power_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Sinj_imag
,
meas_value
_ideal
,
unc
)
elif
key
==
"
P1
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value
=
pf_branch
.
power_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S1_real
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_branch
.
power_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S1_real
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Q1
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value
=
pf_branch
.
power_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S1_imag
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_branch
.
power_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S1_imag
,
meas_value
_ideal
,
unc
)
elif
key
==
"
P2
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value
=
pf_branch
.
power2_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S2_real
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_branch
.
power2_pu
.
real
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S2_real
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Q2
"
:
unc
=
float
(
value
[
'
unc
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value
=
pf_branch
.
power2_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S2_imag
,
meas_value
,
unc
)
meas_value
_ideal
=
pf_branch
.
power2_pu
.
imag
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
S2_imag
,
meas_value
_ideal
,
unc
)
elif
key
==
"
Vpmu
"
:
unc_mag
=
float
(
value
[
'
unc_mag
'
])
unc_phase
=
float
(
value
[
'
unc_phase
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_node
=
powerflow_results
.
get_node
(
uuid
=
uuid
)
element
=
pf_node
.
topology_node
meas_value_mag
=
np
.
abs
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Vpmu_mag
,
meas_value_mag
,
unc_mag
)
meas_value_
ideal_
mag
=
np
.
abs
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Vpmu_mag
,
meas_value_
ideal_
mag
,
unc_mag
)
for
uuid
in
value
[
'
uuid
'
]:
pf_node
=
powerflow_results
.
get_node
(
uuid
=
uuid
)
element
=
pf_node
.
topology_node
meas_value_phase
=
np
.
angle
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Vpmu_phase
,
meas_value_phase
,
unc_phase
)
meas_value_
ideal_
phase
=
np
.
angle
(
pf_node
.
voltage_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Node
,
MeasType
.
Vpmu_phase
,
meas_value_
ideal_
phase
,
unc_phase
)
elif
key
==
"
Ipmu
"
:
unc_mag
=
float
(
value
[
'
unc_mag
'
])
unc_phase
=
float
(
value
[
'
unc_phase
'
])
for
uuid
in
value
[
'
uuid
'
]:
pf_branch
=
powerflow_results
.
get_branch
(
uuid
=
uuid
)
element
=
pf_branch
.
topology_branch
meas_value_mag
=
np
.
abs
(
pf_branch
.
current_pu
)
meas_value_phase
=
np
.
angle
(
pf_branch
.
current_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
Ipmu_mag
,
meas_value_mag
,
unc_mag
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
Ipmu_phase
,
meas_value_phase
,
unc_phase
)
meas_value_
ideal_
mag
=
np
.
abs
(
pf_branch
.
current_pu
)
meas_value_
ideal_
phase
=
np
.
angle
(
pf_branch
.
current_pu
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
Ipmu_mag
,
meas_value_
ideal_
mag
,
unc_mag
)
self
.
create_measurement
(
element
,
ElemType
.
Branch
,
MeasType
.
Ipmu_phase
,
meas_value_
ideal_
phase
,
unc_phase
)
def
meas_creation
(
self
,
dist
=
"
normal
"
,
seed
=
None
):
"""
...
...
@@ -176,18 +176,18 @@ class MeasurementSet():
err_pu
=
np
.
random
.
normal
(
0
,
1
,
len
(
self
.
measurements
))
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
if
measurement
.
meas_type
not
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
zdev
=
measurement
.
meas_value
*
measurement
.
std_dev
zdev
=
measurement
.
meas_value
_ideal
*
measurement
.
std_dev
elif
measurement
.
meas_type
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
zdev
=
measurement
.
std_dev
measurement
.
mval
=
measurement
.
meas_value
+
zdev
*
err_pu
[
index
]
measurement
.
m
eas_
val
ue
=
measurement
.
meas_value
_ideal
+
zdev
*
err_pu
[
index
]
elif
dist
==
"
uniform
"
:
err_pu
=
np
.
random
.
uniform
(
-
1
,
1
,
len
(
self
.
measurements
))
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
if
measurement
.
meas_type
not
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
zdev
=
(
measurement
.
meas_value
*
measurement
.
std_dev
)
zdev
=
(
measurement
.
meas_value
_ideal
*
measurement
.
std_dev
)
elif
measurement
.
meas_type
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
zdev
=
measurement
.
std_dev
measurement
.
mval
=
measurement
.
meas_value
+
np
.
multiply
(
3
*
zdev
,
err_pu
[
index
])
measurement
.
m
eas_
val
ue
=
measurement
.
meas_value
_ideal
+
np
.
multiply
(
3
*
zdev
,
err_pu
[
index
])
def
meas_creation_test
(
self
,
err_pu
):
"""
...
...
@@ -197,12 +197,12 @@ class MeasurementSet():
"""
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
if
measurement
.
meas_type
not
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
measurement
.
std_dev
=
np
.
absolute
(
measurement
.
meas_value
)
*
measurement
.
std_dev
measurement
.
std_dev
=
np
.
absolute
(
measurement
.
meas_value
_ideal
)
*
measurement
.
std_dev
elif
measurement
.
meas_type
in
[
MeasType
.
Ipmu_phase
,
MeasType
.
Vpmu_phase
]:
measurement
.
std_dev
=
measurement
.
std_dev
measurement
.
mval
=
measurement
.
meas_value
+
measurement
.
std_dev
*
err_pu
[
index
]
measurement
.
m
eas_
val
ue
=
measurement
.
meas_value
_ideal
+
measurement
.
std_dev
*
err_pu
[
index
]
# measurement.mval = measurement.meas_value + measurement.std_dev*err_pu[index]
# measurement.m
eas_
val
ue
= measurement.meas_value
_ideal
+ measurement.std_dev*err_pu[index]
def
getMeasurements
(
self
,
type
):
"""
...
...
@@ -252,24 +252,24 @@ class MeasurementSet():
return
weights
def
get
mVal
(
self
):
def
get
MeasValues
(
self
):
"""
returns an array with all measured values (affected by uncertainty)
"""
m
V
al
=
np
.
zeros
(
len
(
self
.
measurements
))
m
eas_re
al
=
np
.
zeros
(
len
(
self
.
measurements
))
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
m
V
al
[
index
]
=
measurement
.
mval
m
eas_re
al
[
index
]
=
measurement
.
m
eas_
val
ue
"""
Replace in m
V
al amplitude and phase of Vpmu by real and imaginary part
"""
"""
Replace in m
eas_re
al amplitude and phase of Vpmu by real and imaginary part
"""
# get all measurements of type MeasType.Vpmu_mag
Vpmu_mag_idx
=
self
.
getIndexOfMeasurements
(
type
=
MeasType
.
Vpmu_mag
)
# get all measurements of type MeasType.Vpmu_phase
Vpmu_phase_idx
=
self
.
getIndexOfMeasurements
(
type
=
MeasType
.
Vpmu_phase
)
for
vpmu_mag_index
,
vpmu_phase_index
in
zip
(
Vpmu_mag_idx
,
Vpmu_phase_idx
):
vamp
=
self
.
measurements
[
vpmu_mag_index
].
mval
vtheta
=
self
.
measurements
[
vpmu_phase_index
].
mval
m
V
al
[
vpmu_mag_index
]
=
vamp
*
np
.
cos
(
vtheta
)
m
V
al
[
vpmu_phase_index
]
=
vamp
*
np
.
sin
(
vtheta
)
vamp
=
self
.
measurements
[
vpmu_mag_index
].
m
eas_
val
ue
vtheta
=
self
.
measurements
[
vpmu_phase_index
].
m
eas_
val
ue
m
eas_re
al
[
vpmu_mag_index
]
=
vamp
*
np
.
cos
(
vtheta
)
m
eas_re
al
[
vpmu_phase_index
]
=
vamp
*
np
.
sin
(
vtheta
)
"""
Replace in z amplitude and phase of Ipmu by real and imaginary part
"""
# get all measurements of type MeasType.Ipmu_mag
...
...
@@ -277,12 +277,12 @@ class MeasurementSet():
# get all measurements of type MeasType.Ipmu_phase
Ipmu_phase_idx
=
self
.
getIndexOfMeasurements
(
type
=
MeasType
.
Ipmu_phase
)
for
ipmu_mag_index
,
ipmu_phase_index
in
zip
(
Ipmu_mag_idx
,
Ipmu_phase_idx
):
iamp
=
self
.
measurements
[
ipmu_mag_index
].
mval
itheta
=
self
.
measurements
[
ipmu_phase_index
].
mval
m
V
al
[
ipmu_mag_index
]
=
iamp
*
np
.
cos
(
itheta
)
m
V
al
[
ipmu_phase_index
]
=
iamp
*
np
.
sin
(
itheta
)
iamp
=
self
.
measurements
[
ipmu_mag_index
].
m
eas_
val
ue
itheta
=
self
.
measurements
[
ipmu_phase_index
].
m
eas_
val
ue
m
eas_re
al
[
ipmu_mag_index
]
=
iamp
*
np
.
cos
(
itheta
)
m
eas_re
al
[
ipmu_phase_index
]
=
iamp
*
np
.
sin
(
itheta
)
return
m
V
al
return
m
eas_re
al
def
getStd_Dev
(
self
):
"""
...
...
@@ -295,7 +295,7 @@ class MeasurementSet():
return
std_dev
def
getMeasValues
(
self
,
type
=
None
):
def
get
Ideal
MeasValues
(
self
,
type
=
None
):
"""
for test purposes
returns an array with all measured values
...
...
@@ -303,34 +303,34 @@ class MeasurementSet():
if
type
is
None
:
meas_val
=
np
.
zeros
(
len
(
self
.
measurements
))
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
meas_val
[
index
]
=
measurement
.
meas_value
meas_val
[
index
]
=
measurement
.
meas_value
_ideal
else
:
meas_val
=
np
.
zeros
(
self
.
getNumberOfMeasurements
(
type
=
type
))
idx
=
0
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
if
measurement
.
meas_type
is
type
:
meas_val
[
idx
]
=
measurement
.
meas_value
meas_val
[
idx
]
=
measurement
.
meas_value
_ideal
idx
+=
1
return
meas_val
def
get
mVal_t
est
(
self
,
type
=
None
):
def
get
MeasValuesT
est
(
self
,
type
=
None
):
"""
returns an array with all measured values (affected by uncertainty)
"""
if
type
is
None
:
m
V
al
=
np
.
zeros
(
len
(
self
.
measurements
))
m
eas_re
al
=
np
.
zeros
(
len
(
self
.
measurements
))
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
m
V
al
[
index
]
=
measurement
.
mval
m
eas_re
al
[
index
]
=
measurement
.
m
eas_
val
ue
else
:
m
V
al
=
np
.
zeros
(
self
.
getNumberOfMeasurements
(
type
=
type
))
m
eas_re
al
=
np
.
zeros
(
self
.
getNumberOfMeasurements
(
type
=
type
))
idx
=
0
for
index
,
measurement
in
enumerate
(
self
.
measurements
):
if
measurement
.
meas_type
is
type
:
m
V
al
[
idx
]
=
measurement
.
mval
m
eas_re
al
[
idx
]
=
measurement
.
m
eas_
val
ue
idx
+=
1
return
m
V
al
return
m
eas_re
al
@staticmethod
def
mergeMeasurementSets
(
meas_set_1
,
meas_set_2
):
...
...
This diff is collapsed.
Click to expand it.
acs/state_estimation/nv_state_estimator.py
+
21
−
21
View file @
83865f08
...
...
@@ -95,7 +95,7 @@ def DsseTrad(nodes_num, measurements, Gmatrix, Bmatrix, Yabs_matrix, Yphase_matr
q2br
=
measurements
.
getIndexOfMeasurements
(
type
=
MeasType
.
S2_imag
)
# get an array with all measured values (affected by uncertainty)
z
=
measurements
.
get
mVal
()
z
=
measurements
.
get
MeasValues
()
V
=
np
.
ones
(
nodes_num
)
+
1j
*
np
.
zeros
(
nodes_num
)
State
=
np
.
concatenate
((
np
.
ones
(
nodes_num
),
np
.
zeros
(
nodes_num
)),
axis
=
0
)
...
...
@@ -187,7 +187,7 @@ def DssePmu(nodes_num, measurements, Gmatrix, Bmatrix, Adj):
W
=
update_W_matrix
(
measurements
,
weights
,
W
,
"
Ipmu
"
)
# get an array with all measured values (affected by uncertainty)
z
=
measurements
.
get
mVal
()
z
=
measurements
.
get
MeasValues
()
H
=
np
.
concatenate
((
H2
,
H3
,
H4
,
H5
,
H7
,
H8
,
H9
,
H10
),
axis
=
0
)
WH
=
np
.
inner
(
W
,
H
.
transpose
())
...
...
@@ -205,7 +205,7 @@ def DssePmu(nodes_num, measurements, Gmatrix, Bmatrix, Adj):
q2br
=
measurements
.
getIndexOfMeasurements
(
type
=
MeasType
.
S2_imag
)
# get an array with all measured values (affected by uncertainty)
z
=
measurements
.
get
mVal
()
z
=
measurements
.
get
MeasValues
()
V
=
np
.
ones
(
nodes_num
)
+
1j
*
np
.
zeros
(
nodes_num
)
State
=
np
.
concatenate
((
np
.
ones
(
nodes_num
),
np
.
zeros
(
nodes_num
)),
axis
=
0
)
...
...
@@ -291,7 +291,7 @@ def DsseMixed(nodes_num, measurements, Gmatrix, Bmatrix, Yabs_matrix, Yphase_mat
q2br
=
measurements
.
getIndexOfMeasurements
(
type
=
MeasType
.
S2_imag
)
# get an array with all measured values (affected by uncertainty)
z
=
measurements
.
get
mVal
()
z
=
measurements
.
get
MeasValues
()
V
=
np
.
ones
(
nodes_num
)
+
1j
*
np
.
zeros
(
nodes_num
)
State
=
np
.
concatenate
((
np
.
ones
(
nodes_num
),
np
.
zeros
(
nodes_num
)),
axis
=
0
)
...
...
@@ -499,8 +499,8 @@ def calculateJacobiVoltagePmu(measurements, nodes_num, Gmatrix, Bmatrix):
# TODO: index of Vmag = index of Vphase???
for
index
,
measurement
in
enumerate
(
Vpmu_mag_meas
):
vamp
=
measurement
.
meas_value
vtheta
=
Vpmu_phase_meas
[
index
].
meas_value
vamp
=
measurement
.
meas_value
_ideal
vtheta
=
Vpmu_phase_meas
[
index
].
meas_value
_ideal
m
=
measurement
.
element
.
index
H7
[
index
][
m
]
=
1
m2
=
m
+
nodes_num
...
...
@@ -530,8 +530,8 @@ def calculateJacobiCurrentPmu(measurements, nodes_num, Gmatrix, Bmatrix):
H10
=
np
.
zeros
((
len
(
Ipmu_mag_meas
),
2
*
nodes_num
))
for
index
,
measurement
in
enumerate
(
Ipmu_mag_meas
):
iamp
=
measurement
.
meas_value
itheta
=
Ipmu_phase_meas
[
index
].
meas_value
iamp
=
measurement
.
meas_value
_ideal
itheta
=
Ipmu_phase_meas
[
index
].
meas_value
_ideal
m
=
measurement
.
element
.
start_node
.
index
n
=
measurement
.
element
.
end_node
.
index
H9
[
index
][
m
]
=
-
Gmatrix
[
m
][
n
]
...
...
@@ -571,8 +571,8 @@ def update_W_matrix(measurements, weights, W, type):
index_phase
=
measurements
.
getIndexOfMeasurements
(
MeasType
.
Ipmu_phase
)
for
index
,
(
idx_mag
,
idx_theta
)
in
enumerate
(
zip
(
index_mag
,
index_phase
)):
value_amp
=
measurements
.
measurements
[
idx_mag
].
mval
value_theta
=
measurements
.
measurements
[
idx_theta
].
mval
value_amp
=
measurements
.
measurements
[
idx_mag
].
m
eas_
val
ue
value_theta
=
measurements
.
measurements
[
idx_theta
].
m
eas_
val
ue
rot_mat
=
np
.
array
([[
np
.
cos
(
value_theta
),
-
value_amp
*
np
.
sin
(
value_theta
)],
[
np
.
sin
(
value_theta
),
value_amp
*
np
.
cos
(
value_theta
)]])
starting_cov
=
np
.
array
([[
weights
[
idx_mag
],
0
],
[
0
,
weights
[
idx_theta
]]])
...
...
@@ -693,16 +693,16 @@ def convertSinjMeasIntoCurrents(measurements, V, z, pidx, qidx):
@param measurements: Vector of measurements in Input (voltages, currents, powers)
@param V: vector of the estimated voltages
@param z: array with all measured values (affected by uncertainty) --> MeasurementSet.get
mVal
@param z: array with all measured values (affected by uncertainty) --> MeasurementSet.get
MeasValues
@param pidx: array which contains the index of measurements type Sinj_real in measurements.measurements
@param qidx: array which contains the index of measurements type Sinj_imag in measurements.measurements
returns: updated z array
"""
for
p_index
,
q_index
in
zip
(
pidx
,
qidx
):
# get values of the measurements p_inj and q_inj (affected by uncertainty-->mval)
p_inj
=
measurements
.
measurements
[
p_index
].
mval
q_inj
=
measurements
.
measurements
[
q_index
].
mval
# get values of the measurements p_inj and q_inj (affected by uncertainty-->m
eas_
val
ue
)
p_inj
=
measurements
.
measurements
[
p_index
].
m
eas_
val
ue
q_inj
=
measurements
.
measurements
[
q_index
].
m
eas_
val
ue
# get index of the node
node_index
=
measurements
.
measurements
[
p_index
].
element
.
index
# == measurements.measurements[q_index].element.index
...
...
@@ -720,7 +720,7 @@ def convertSbranchMeasIntoCurrents(measurements, V, z, p1br, q1br, p2br, q2br):
@param measurements: Vector of measurements in Input (voltages, currents, powers)
@param V: vector of the estimated voltages
@param z: array with all measured values (affected by uncertainty) --> MeasurementSet.get
mVal
@param z: array with all measured values (affected by uncertainty) --> MeasurementSet.get
MeasValues
@param p1br: array which contains the index of measurements type S1_real in measurements.measurements
@param q1br: array which contains the index of measurements type S1_imag in measurements.measurements
@param p2br: array which contains the index of measurements type S2_real in measurements.measurements
...
...
@@ -728,9 +728,9 @@ def convertSbranchMeasIntoCurrents(measurements, V, z, p1br, q1br, p2br, q2br):
returns: updated z array
"""
for
pbr_index
,
qbr_index
in
zip
(
p1br
,
q1br
):
# get values of the measurements pbr_inj and qbr_inj (affected by uncertainty-->mval)
p_br
=
measurements
.
measurements
[
pbr_index
].
mval
q_br
=
measurements
.
measurements
[
qbr_index
].
mval
# get values of the measurements pbr_inj and qbr_inj (affected by uncertainty-->m
eas_
val
ue
)
p_br
=
measurements
.
measurements
[
pbr_index
].
m
eas_
val
ue
q_br
=
measurements
.
measurements
[
qbr_index
].
m
eas_
val
ue
# get index of the start node
node_index
=
measurements
.
measurements
[
pbr_index
].
element
.
start_node
.
index
# == measurements.measurements[qbr_index].element.start_node.index
...
...
@@ -738,9 +738,9 @@ def convertSbranchMeasIntoCurrents(measurements, V, z, p1br, q1br, p2br, q2br):
z
[
qbr_index
]
=
(
p_br
*
V
[
node_index
].
imag
-
q_br
*
V
[
node_index
].
real
)
/
(
np
.
absolute
(
V
[
node_index
])
**
2
)
for
pbr_index
,
qbr_index
in
zip
(
p2br
,
q2br
):
# get values of the measurements pbr_inj and qbr_inj (affected by uncertainty-->mval)
p_br
=
measurements
.
measurements
[
pbr_index
].
mval
q_br
=
measurements
.
measurements
[
qbr_index
].
mval
# get values of the measurements pbr_inj and qbr_inj (affected by uncertainty-->m
eas_
val
ue
)
p_br
=
measurements
.
measurements
[
pbr_index
].
m
eas_
val
ue
q_br
=
measurements
.
measurements
[
qbr_index
].
m
eas_
val
ue
# get index of the start node
node_index
=
measurements
.
measurements
[
pbr_index
].
element
.
end_node
.
index
# == measurements.measurements[qbr_index].element.start_node.index
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment