Voltage Conditioning Dialog
The Voltage Conditioning Tool and Dialog were added in Version 23. This tool is available under on the Tools Ribbon Tab, on the Power Flow Tools Ribbon Group.
The Voltage Conditioning tool can be used to change the generator voltage set points in your case to approximately match various Substation or Bus voltage targets that you configure, and also move switched shunts in your case to meet these same targets. The Voltage Conditioning tool dialog is shown in the image below. The dialog is divided in the following sections.
Case Voltage Target Tab
The fundamental object for Voltage Conditioning Tool is the CaseVoltageTarget which is used to define the target range for voltages at the buses in the case. There can be 8 different targets specified marked as A, B, C, D, E, F, G and H. These objecsts are edited on the Case Voltage Target is described in detail below.
Case Voltage Target Tool Options (at top of the dialog)
There are a options related to how the tool is run which are defined in the CaseVoltageTargetTool object. These options are described in the sections below, but they can also be set at the top of the dialog under options for Impedance Threshold, Transmission Nom kV, and so on.
Target Regions Tab
Buses and Substations in the case can be assigned to a CaseVoltageTargetRegion object. These objects are described below, but their purpose is only to specify which target (A, B, C, D, E, F, G, or G) should be used from the CaseVoltageTarget object.
Substation, Bus, Shunt, and Transformer Tap Tabs
These tabs provide case information displays with default columns associated with the Voltage Conditioning tool. These specified fields are described below as well.
Perform Voltage Conditioning Button
Clicking the Perform Voltage Conditioning button will perform the process of voltage conditioning. This is described in great detail at the end of this help topic. Also clicking this button is the same as running the Auxiliary File script command VoltageConditioning;
.
Save to AUX
Click this button to open options to save all options related to voltage conditioning to an Auxiliary File.
CaseVoltageTarget
The CaseVoltageTarget object is used to specify the target voltages for the power system. A CaseVoltageTarget can be specified either at a specific bus or at a Nominal kV level of a specific substation. Thus the primary keys for the object are unusual as both Bus and Substation are key fields, but only one of them will be entered, while the other will be blank.
Bus: A string that specifies the bus at which the target is given. The string may be entered either as the bus Number (primary key), Name_NomkV (secondary key), or one of the labels of the bus. Thus the string could be either "12345", "My Bus Name_230.00" or "My Bus label".
Substation: If a Bus is not specified then the CaseVoltageTarget applies to all buses in the specified substation at the Nominal kV entered in the NomkV field.
NomkV: If a bus is specified, NomkV will show the Nominal kV of the bus. If the Substation is specified, Nom kV is a key field and used to determine which buses inside the substation to apply the voltage target to.
Voltage Targets and Deadbands: There are 8 voltage targets and also a deadbands for both up and down directions. These targets and deadbands can be specified in either PU (per unit) or in kV.
More detailed descriptions of the fields are in the following table.
Field |
Type |
Type |
Bus |
String (KEY Field) |
A bus to which this desired voltage target applies. The identifiers used are determined by the BusIdentifier field of the CaseVoltageTargetTool object. If this is specified, then the Substation is ignored. |
Substation |
String (KEY Field) |
Substation to which this desired voltage target applies (used only if Bus is empty). The identifiers used are determined by the SubIdentifier field of the CaseVoltageTargetTool object |
NomkV |
Single Float (KEY Field) |
Nominal kV of the buses inside a substation that should be considered. If the Bus field is specified however, this will return the nominal kV of the Bus and the value will not be enterable. |
Description |
String |
An extra string for the user to describe this entry. |
BandUpkV BandUpPU |
Single Float |
Voltage deviation in kV or per unit above the voltage target that is considered acceptable (must be a positive value). Internally a value is stored in per unit, so editing using the kV values will set the per unit value equal to the entered value divided by the NomkV field. |
BandDownkV BandDownPU |
Single Float |
Voltage deviation in kV or per unit below the voltage target that is considered acceptable (must be a negative value). Internally a value is stored in per unit, so editing using the kV values will set the per unit value equal to the entered value divided by the NomkV field. |
ErrorkV ErrorPU |
Single Float (Calculated) |
This fields looks at all buses that are using this CaseVoltageTarget, so for Subsation/NomkV type of Target it may be multiple buses. Over all these buses, this returns the largest magnitude deviation from the voltage band. Buses with voltages inside the band are treated as having an error of 0.0000. |
TargetkVA ... TargetkVH TargetPUA ... TargetPUH |
Single Float |
Specify a voltage target in either kV or per unit to use depending on the TargetActive being “A”, “B”, … , “H” Internally the values are stored in per unit, so editing using the kV values will set the per unit value equal to the entered value divided by the NomkV field. An example use could be as follows TargetA = High load times during the Summer TargetB = Medium load times during the Summer TargetC = Low load times during the Summer TargetD = High load time during Winter TargetE = Medium load times during Winter TargetF =Low load times during Winter TargetG and TargetH are not used |
CaseVoltageTargetTool
The CaseVoltageTargetTool represents all the options associated with the Case Voltage Target tool. These options can be edited at the top of the Voltage Conditioning dialog box.
Field |
Type |
Type |
TargetActive |
String |
User enters A, B, C, D, E, F, G, or H |
BusIdentifier |
String |
Specify which identifier to use when showing the bus in the CaseVoltageTarget objects either Number, Name_NomkV, or Label |
SubIdentifier |
String |
Specify which identifier to use when showing the substation in the CaseVoltageTarget objects either Number, Name_NomkV, or Label |
ShuntTransformerWeight |
String |
A weight to bias shunts to move before transformers |
MinSensitivityShunt |
String |
Minimum dV/dB sensitivity to consider for moving a shunt |
MinSensitivityTap |
String |
Minimum dVbus/dTap sensitivity to consider for moving a tap ratio |
TransmissionNomkV |
String |
When searching from a generator terminal to find the closest transmisson level bus, this is the threshold nominal kV of a bus that is considered transmission level |
StopSearchImpedanceThresh |
String |
When searching from a generator terminal to find the closest transmisson level bus, this is the threshold impedance that will indicate we have found a significant system device |
MaxIterations |
String |
How many device moves to do before giving up (oscillation check) |
IncludeShunts |
String |
YES or NO. Set to YES to allow processing of switched shunts as well. |
IncludeTaps |
String |
YES or NO. This is not presently used. |
These options can also be set using the object CaseVoltageTargetTool_Value instead in an AUX file that looks like the following.
CaseVoltageTargetTool_Value (Option,Value)
{
"TargetActive" "A"
"BusIdentifier" "Number"
"SubIdentifier" "Name"
"ShuntTransformerWeight" "1"
"MinSensitivityShunt" "1"
"MinSensitivityTap" "0.3"
"TransmissionNomkV" "40"
"StopSearchImpedanceThresh" "0.001"
"MaxIterations" "100"
"IncludeShunts" "NO"
"IncludeTaps" "NO"
}
CaseVoltageTargetRegion (Determining the TargetActive as A, B, ... H)
Every bus and substation in the power system case can be assigned to a CaseVoltageTargetRegion. This will be used to specify which buses and substations belong to regions representing different time-zones.
Field |
Type |
Type |
Name |
String (KEY Field) |
Name of the CaseVoltageTargetRegion |
TargetActive |
String |
TargetActive: A, B, C, D, E, F, G, or H This is which of the targets to use for a CaseVoltageTarget |
Each bus and substation in the power system model can be assigned to a CaseVoltageTargetRegion using a new field CaseVoltageTargetRegion
. A bus will determine the TargetActive field to use based on the following order of precedence.
1. Use CaseVoltageTargetRegion
with the Bus
2. If not assigned with Bus, Use CaseVoltageTargetRegion
with the Substation to which Bus belongs
3. If still not assigned, follow the TargetActive
field of the CaseVoltageTargetTool object.
Bus and Substation: CaseVoltageTargetRegion and CaseVoltageTargetRegionUsed
Every bus and substation in the power system has an string field named CaseVoltageTargetRegion
. This string refers to the name of the CaseVoltageTargetRegion to which the bus or substation is assigned. This field can be set to blank to indicate that no region is assigned. The bus also have a field named CaseVoltageTargetRegionUsed
which will return its own CaseVoltageTargetRegion
, or if this is not specified it will return the respective field of the substation to which the bus is assigned, or if the subtation is also unassigned it will return a blank.
Gen, Branch, and Shunt: ConditioningAvailable
The objects Gen, Branch, and Shunt have a field called ConditioningAvailable
which is available under a folder Voltage Conditioning Tool in the typical list of fields. This field is a YES/NO field and will indicate if the object is available for modification during the Voltage Conditioning Tool process. Generators may change their voltage setpoints and Shunt objects may change their Mvar values in order to help achieve the case voltage targets.
Gen: ConditioningRegBus
It is expected that for many users the CaseVoltageTargets will be centered around specifying desired voltages for the transmission level buses in the system. This means case voltage targets will be created for transmission level voltages such as 69, 115, 138, 161, 230, 345, and 500 kV systems. The generators in power system models are sometimes configured to regulate the voltage at their terminal bus (typically 0.300 kV – 40.0 kV). This presents a problem for how to map the desired transmission voltage schedules into the voltage setpoints in the generator power system cases.
To overcome this, PowerWorld Corporation has added a new search to find the closest high voltage transmission bus to the terminal of the generator in hopes of finding the transmission bus that may have the voltage schedule that the generator can be used to enforce. The results of this search can be seen by adding the new field ConditioningRegBus
to a generator case information display (see Configuring the Case Information Displays). The ConditioningRegBus
field search is done using a breadth-first search beginning at the terminal of the generator and looking outward for a bus that has a nominal voltage greater than or equal to CaseVoltageTargetTool.TransmissionNomkV
. Once such a bus is found, the algorithm continues searching across buses that have an impedance less than or equal to CaseVoltageTargetTool.StopSearchImpedanceThresh
. This second part of the search is done to look beyond various near zero-impedance branches for the main part of the substation.
As an example, consider the following figure showing a large group of generators at a complicated substation and how they are connected to the 500 kV subnet through various switching devices. The 2 generators in the upper left corner are configured to regulate bus 26209 which is past a breaker and disconnect in series with each generator. The tool will continue searching until it reaches bus 26102 which has a nominal voltage of 500 kV. (Another note, we ignore any buses that we determine are internal “star” buses of three-winding transformers such as bus 26213 in the example below. This is done regardless of the Nominal Voltage assigned to the star bus.) Once the search reaches bus 26102 it then continues to search outward until it finds a branch with an impedance larger than CaseVoltageTargetTool.StopSearchImpedanceThresh
. In this example the search will terminate when it reaches bus 26131 which connects to an transmission line with a larger series X value. The ConditioningRegBus
is then set to the primary bus in this 500 kV SuperBus which in this example is bus 26104
Gen: ConditioningVoltSetkV
and ConditioningVoltSetkVTol
Finally there are 4 new fields of the Gen object named ConditioningVoltSetkV, ConditioningVoltSet, ConditioningVoltSetTolkV and ConditioningVoltSetTol.
These fields show the following. The ConditioningRegBus
is determined. A search looking for a CaseVoltageTarget object that has been assigned to this particular Bus. If that is not found, then we instead look for a CaseVoltageTarget object that is assigned to the same substation and nominal kV as the ConditioningRegBus
. If we do not find a CaseVoltageTarget object that meets either of these, then these 4 fields will be shown as a blank string. If a CaseVoltageTarget object is found, then these 4 fields are populated based on the calculation described shortly.
The TargetActive is determined based either on the CaseVoltageTargetRegion to which the ConditioningRegBus
has been assigned or based on the global option stored in the CaseVoltageTargetTool.TargetActive
. This will determine which Target to use (A, B, … H). With this information, these 4 fields will then be populated with the following calculations.
-
ConditioningVoltSetkV = (BandUpkV + BandDownkV)/2 + TargetkVA
-
ConditioningVoltSetTolkV = (BandUpkV – BandDownkV)/2
-
ConditioningVoltSet = (BandUpPU + BandDownPU)/2 + TargetPUA
-
ConditioningVoltSetTol = (BandUpPU – BandDownPU)/2
These calculations will give what PowerWorld would expect a generator’s VoltSet
and VoltSetTol
value should be changed to when being used in the Case Voltage Conditioning Tool. The additional arithmetic is necessary because PowerWorld’s Voltage Tolerance (VoltSetTol
) is a single value that applies to both the upward and downward tolerance.
Use the Case Voltage Target Tool
To perform voltage conditioning either click the button Perform Voltage Conditioning on this dialog, or run the script command named VoltageConditioning;
The following process with the objective of conditioning voltages in the case is done when performing voltage conditioning.
-
Ensure that the existing case has an initial solved power flow solution
-
Iterate through all generators in the case to build a list of generators that meet the following criteria
-
ConditioningAvailable = YES.
-
ConditioningRegBus is populated (this will be true for all buses with Online = NO)
-
Using ConditioningRegBus, look up a ConditioningVoltSet from the table of CaseVoltageTarget objects. Only include generators that return a value for ConditioningVoltSet. Remember this will look for a CaseVoltageTarget assigned to the bus first and if one is not found it will look for a CaseVoltageTarget assigned to the ConditioningRegBus substation and nominal kV.
-
-
A list of generators meeting these requirements is built and then the following information is Cached before the process is begun
-
CACHE_RegBus = RegBus
-
CACHE_AVR = AVR (the YES/NO field)
-
CACHE_VoltSetTol = VoltSetTol
-
-
With this cached, Simulator then runs through all the generators in the list created in the previous step and applies the following assignments to those generators.
-
RegBus = ConditioningRegBus
-
AVR = YES
-
VoltSet = ConditioningVoltSet
-
VoltSetTol = ConditioningVoltSetTol
-
-
A new power flow solution is solved which will use the voltage schedules and tolerances specified.
-
Look through all the Switched Shunt objects that are marked as ConditioningAvailable = YES which are regulating a bus which is outside of its CaseVoltageTarget range (based on the target and deadbands). Also make sure moving the shunt up or down will not cause the shunt to move all the way across the target range and result it begin outside of the target range on the other side. Among these shunts choose the one with the largest dV/dB (which is at least CaseVoltageTargetTool
.MinSensitivityShunt
) and move this shunt by one step up or down.-
While iterating through these changed for repeated power flow solution, also keep track of subsequent changes in the direction of a shunt move. If a shunt changes directions multiple time it may be locked in this process and stop participating
-
For example, a shunt may start at 20 Mvar and on subsequent iterations through this step it may move up to 40 MVar, up to 60 MVar. This would not cause the oscillation counter to increase. However, if the shunt then moved back down to 40 Mvar, the oscillation counter would be incremented by 1. After the oscillation counter for an individual shunt reaches 3 then it will be locked for the duration of that VoltageConditioning process.
-
-
Go to Step 5 and repeat until no more shunt moves are found. Keep repeating until no more shunt moves are done.
-
Using the final solved solution with the setpoints and tolerance, reset back to the original regulation settings (but with a new setpoint). Do this by setting the following
-
AVR = CACHE_AVR
-
RegBus = CACHE_RegBus
-
VoltSetTol = CACHE_VoltSetTol
-
Set VoltSet to match the new operating point. If a the CACHE_VoltSetTol is 0.0, then this just means VoltSet = RegBus.Vpu
Otherwise use the following logic
If Mvar >= MvarMax Then VoltSet = RegBus.Vpu-VoltSetTol
else if Mvar <= MvarMin Then VoltSet = RegBus.Vpu+VoltSetTol
else VoltSet = RegBus.Vpu+VoltSetTol–2*VoltSetTol/(MvarMax-MvarMin)*(Mvar–MvarMin)
-