Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ public enum TwoWindingsTransformerField {
RATED_S,
TARGET_V,
RATIO_LOW_TAP_POSITION,
RATIO_HIGH_TAP_POSITION,
RATIO_TAP_POSITION,
RATIO_TARGET_DEADBAND,
REGULATION_VALUE,
PHASE_LOW_TAP_POSITION,
PHASE_HIGH_TAP_POSITION,
PHASE_TAP_POSITION,
PHASE_TARGET_DEADBAND,
SELECTED_OPERATIONAL_LIMITS_GROUP_ID1,
Expand Down Expand Up @@ -82,6 +84,7 @@ public static boolean isEquipmentEditable(TwoWindingsTransformer twoWindingsTran
}
yield isEditable;
}
case RATIO_HIGH_TAP_POSITION, PHASE_HIGH_TAP_POSITION -> false;
default -> true;
};

Expand All @@ -102,6 +105,8 @@ public static String getReferenceValue(TwoWindingsTransformer transformer, Strin
case TARGET_V -> ratioTapChanger != null ? String.valueOf(ratioTapChanger.getTargetV()) : null;
case RATIO_LOW_TAP_POSITION ->
ratioTapChanger != null ? String.valueOf(ratioTapChanger.getLowTapPosition()) : null;
case RATIO_HIGH_TAP_POSITION ->
ratioTapChanger != null ? String.valueOf(ratioTapChanger.getHighTapPosition()) : null;
case RATIO_TAP_POSITION ->
ratioTapChanger != null ? String.valueOf(ratioTapChanger.getTapPosition()) : null;
case RATIO_TARGET_DEADBAND ->
Expand All @@ -110,6 +115,8 @@ public static String getReferenceValue(TwoWindingsTransformer transformer, Strin
phaseTapChanger != null ? String.valueOf(phaseTapChanger.getRegulationValue()) : null;
case PHASE_LOW_TAP_POSITION ->
phaseTapChanger != null ? String.valueOf(phaseTapChanger.getLowTapPosition()) : null;
case PHASE_HIGH_TAP_POSITION ->
phaseTapChanger != null ? String.valueOf(phaseTapChanger.getHighTapPosition()) : null;
case PHASE_TAP_POSITION ->
phaseTapChanger != null ? String.valueOf(phaseTapChanger.getTapPosition()) : null;
case PHASE_TARGET_DEADBAND ->
Expand All @@ -131,6 +138,8 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin
PHASE_TARGET_DEADBAND -> setNewDoubleValue(transformer, field, newValue, errorMessage);
case SELECTED_OPERATIONAL_LIMITS_GROUP_ID1, SELECTED_OPERATIONAL_LIMITS_GROUP_ID2 ->
setNewStringValue(transformer, field, newValue, errorMessage);
case RATIO_HIGH_TAP_POSITION, PHASE_HIGH_TAP_POSITION ->
throw new IllegalArgumentException(String.format("field %s is not editable", field));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.gridsuite.modification.modifications.byfilter.assignment;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.extensions.ConnectablePosition;
import org.gridsuite.filter.utils.EquipmentType;
Expand All @@ -19,6 +20,7 @@
import org.gridsuite.modification.dto.byfilter.equipmentfield.TwoWindingsTransformerField;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
Expand Down Expand Up @@ -118,6 +120,32 @@ void testModifyTwtWithWarning() throws Exception {
assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_6).getRatioTapChanger());
}

@Test
void isEquipmentEditableShouldBeFalseForHighTapPositions() {
TwoWindingsTransformer twtRatio = getNetwork().getTwoWindingsTransformer(TWT_ID_1);
TwoWindingsTransformer twtPhase = getNetwork().getTwoWindingsTransformer(TWT_ID_4);

List<ReportNode> equipReports = new ArrayList<>();
boolean editableRatioHigh = TwoWindingsTransformerField.isEquipmentEditable(twtRatio, TwoWindingsTransformerField.RATIO_HIGH_TAP_POSITION.name(), equipReports);
boolean editablePhaseHigh = TwoWindingsTransformerField.isEquipmentEditable(twtPhase, TwoWindingsTransformerField.PHASE_HIGH_TAP_POSITION.name(), equipReports);

assertFalse(editableRatioHigh);
assertFalse(editablePhaseHigh);
}

@Test
void setNewValueShouldThrowForNonEditableHighTapPositions() {
TwoWindingsTransformer twtRatio = getNetwork().getTwoWindingsTransformer(TWT_ID_1);
TwoWindingsTransformer twtPhase = getNetwork().getTwoWindingsTransformer(TWT_ID_4);

assertThrows(IllegalArgumentException.class, () ->
TwoWindingsTransformerField.setNewValue(twtRatio, TwoWindingsTransformerField.RATIO_HIGH_TAP_POSITION.name(), "10")
);
assertThrows(IllegalArgumentException.class, () ->
TwoWindingsTransformerField.setNewValue(twtPhase, TwoWindingsTransformerField.PHASE_HIGH_TAP_POSITION.name(), "10")
);
}

@Override
protected void createEquipments() {
Substation s1 = getNetwork().getSubstation("s1");
Expand Down Expand Up @@ -317,6 +345,20 @@ protected List<AssignmentInfos<?>> getAssignmentInfos() {
.value("")
.build();

// High tap position is always equals to lowTapPosition + steps.size() - 1 and its modification is ignored
IntegerAssignmentInfos assignmentInfos20 = IntegerAssignmentInfos.builder()
.filters(List.of(filter1))
.editedField(TwoWindingsTransformerField.RATIO_HIGH_TAP_POSITION.name())
.value(10)
.build();

// High tap position is always equals to lowTapPosition + steps.size() - 1 and its modification is ignored
IntegerAssignmentInfos assignmentInfos21 = IntegerAssignmentInfos.builder()
.filters(List.of(filter3))
.editedField(TwoWindingsTransformerField.PHASE_HIGH_TAP_POSITION.name())
.value(10)
.build();

List<AssignmentInfos<?>> infosList = super.getAssignmentInfos();
infosList.addAll(List.of(assignmentInfos1,
assignmentInfos2,
Expand All @@ -336,7 +378,9 @@ protected List<AssignmentInfos<?>> getAssignmentInfos() {
assignmentInfos16,
assignmentInfos17,
assignmentInfos18,
assignmentInfos19));
assignmentInfos19,
assignmentInfos20,
assignmentInfos21));

return infosList;
}
Expand All @@ -359,6 +403,7 @@ protected void assertAfterNetworkModificationApplication() {
assertEquals(2, ratioTapChanger1.getTargetV(), 0);
assertEquals(4, ratioTapChanger1.getLowTapPosition());
assertEquals(8, ratioTapChanger1.getTapPosition());
assertEquals(9, ratioTapChanger1.getHighTapPosition());
assertEquals(5, ratioTapChanger1.getTargetDeadband(), 0);
assertEquals(20, twt1.getX(), 0);
assertEquals(2.5, twt1.getB(), 0);
Expand All @@ -378,6 +423,7 @@ protected void assertAfterNetworkModificationApplication() {
assertEquals(2, ratioTapChanger2.getTargetV(), 0);
assertEquals(3, ratioTapChanger2.getLowTapPosition());
assertEquals(4, ratioTapChanger2.getTapPosition());
assertEquals(8, ratioTapChanger2.getHighTapPosition());
assertEquals(5, ratioTapChanger2.getTargetDeadband(), 0);
assertEquals(20, twt2.getX(), 0);
assertEquals(2.5, twt2.getB(), 0);
Expand Down Expand Up @@ -409,6 +455,7 @@ protected void assertAfterNetworkModificationApplication() {
assertEquals(2, phaseTapChanger4.getRegulationValue(), 0);
assertEquals(2, phaseTapChanger4.getLowTapPosition());
assertEquals(3, phaseTapChanger4.getTapPosition());
assertEquals(7, phaseTapChanger4.getHighTapPosition());
assertEquals(10, phaseTapChanger4.getTargetDeadband(), 0);
assertEquals(2, twt4.getR(), 0);
assertEquals(20, twt4.getX(), 0);
Expand All @@ -422,9 +469,10 @@ protected void assertAfterNetworkModificationApplication() {

TwoWindingsTransformer twt5 = getNetwork().getTwoWindingsTransformer(TWT_ID_5);
PhaseTapChanger phaseTapChanger5 = twt5.getPhaseTapChanger();
assertNotNull(phaseTapChanger4);
assertNotNull(phaseTapChanger5);
assertEquals(2, phaseTapChanger5.getLowTapPosition());
assertEquals(2, phaseTapChanger5.getTapPosition());
assertEquals(7, phaseTapChanger5.getHighTapPosition());
assertEquals(2, twt5.getR(), 0);
assertEquals(2.5, twt5.getB(), 0);
assertEquals(0.5, twt5.getRatedU2(), 0);
Expand All @@ -433,7 +481,7 @@ protected void assertAfterNetworkModificationApplication() {

TwoWindingsTransformer twt6 = getNetwork().getTwoWindingsTransformer(TWT_ID_6);
PhaseTapChanger phaseTapChanger6 = twt6.getPhaseTapChanger();
assertNotNull(phaseTapChanger4);
assertNotNull(phaseTapChanger6);
assertEquals(2, phaseTapChanger6.getRegulationValue(), 0);
assertEquals(10, phaseTapChanger6.getTargetDeadband(), 0);
assertEquals(20, twt6.getX(), 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.gridsuite.modification.dto.byfilter.formula.Operator;
import org.gridsuite.modification.dto.byfilter.formula.ReferenceFieldOrValue;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;
import java.util.UUID;
Expand Down Expand Up @@ -195,7 +196,17 @@ protected Map<UUID, FilterEquipments> getTestFilters() {
new IdentifiableAttributes(TWT_ID_6, getIdentifiableType(), 7.0)
)).build();

return Map.of(FILTER_ID_1, filter1, FILTER_ID_2, filter2, FILTER_ID_3, filter3, FILTER_ID_4, filter4);
FilterEquipments filter5 = FilterEquipments.builder().filterId(FILTER_ID_5).identifiableAttributes(List.of(
new IdentifiableAttributes(TWT_ID_2, getIdentifiableType(), 2.0)
)).build();

FilterEquipments filter6 = FilterEquipments.builder().filterId(FILTER_ID_6).identifiableAttributes(List.of(
new IdentifiableAttributes(TWT_ID_6, getIdentifiableType(), 7.0)
)).build();

return Map.of(FILTER_ID_1, filter1, FILTER_ID_2, filter2, FILTER_ID_3, filter3, FILTER_ID_4, filter4,
FILTER_ID_5, filter5, FILTER_ID_6, filter6);

}

@Override
Expand Down Expand Up @@ -290,6 +301,32 @@ protected List<FormulaInfos> getFormulaInfos() {
ReferenceFieldOrValue.builder().value(200.).build(),
ReferenceFieldOrValue.builder().equipmentField(TwoWindingsTransformerField.RATED_S.name()).build());

// High tap position is always equals to lowTapPosition + steps.size() - 1 and its modification is ignored
FormulaInfos formulaInfos16 = getFormulaInfo(TwoWindingsTransformerField.RATIO_HIGH_TAP_POSITION.name(),
List.of(filter1),
Operator.ADDITION,
ReferenceFieldOrValue.builder().value(2.).build(),
ReferenceFieldOrValue.builder().equipmentField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()).build());

// High tap position is always equals to lowTapPosition + steps.size() - 1 and its modification is ignored
FormulaInfos formulaInfos17 = getFormulaInfo(TwoWindingsTransformerField.PHASE_HIGH_TAP_POSITION.name(),
List.of(filter3),
Operator.ADDITION,
ReferenceFieldOrValue.builder().value(2.).build(),
ReferenceFieldOrValue.builder().equipmentField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()).build());

FormulaInfos formulaInfos18 = getFormulaInfo(TwoWindingsTransformerField.RATIO_TAP_POSITION.name(),
List.of(filter5),
Operator.SUBTRACTION,
ReferenceFieldOrValue.builder().equipmentField(TwoWindingsTransformerField.RATIO_HIGH_TAP_POSITION.name()).build(),
ReferenceFieldOrValue.builder().value(2.).build());

FormulaInfos formulaInfos19 = getFormulaInfo(TwoWindingsTransformerField.PHASE_TAP_POSITION.name(),
List.of(filter6),
Operator.SUBTRACTION,
ReferenceFieldOrValue.builder().equipmentField(TwoWindingsTransformerField.PHASE_HIGH_TAP_POSITION.name()).build(),
ReferenceFieldOrValue.builder().value(2.).build());

return List.of(formulaInfos1,
formulaInfos2,
formulaInfos3,
Expand All @@ -304,7 +341,11 @@ protected List<FormulaInfos> getFormulaInfos() {
formulaInfos12,
formulaInfos13,
formulaInfos14,
formulaInfos15);
formulaInfos15,
formulaInfos16,
formulaInfos17,
formulaInfos18,
formulaInfos19);
}

@Override
Expand All @@ -325,6 +366,7 @@ protected void assertAfterNetworkModificationApplication() {
assertEquals(100, ratioTapChanger1.getTargetV(), 0);
assertEquals(1, ratioTapChanger1.getLowTapPosition());
assertEquals(5, ratioTapChanger1.getTapPosition());
assertEquals(6, ratioTapChanger1.getHighTapPosition());
assertEquals(11, ratioTapChanger1.getTargetDeadband(), 0);
assertEquals(60, twt1.getX(), 0);
assertEquals(150, twt1.getB(), 0);
Expand All @@ -339,7 +381,8 @@ protected void assertAfterNetworkModificationApplication() {
assertNotNull(ratioTapChanger2);
assertEquals(106, ratioTapChanger2.getTargetV(), 0);
assertEquals(3, ratioTapChanger2.getLowTapPosition());
assertEquals(4, ratioTapChanger2.getTapPosition());
assertEquals(6, ratioTapChanger2.getTapPosition());
assertEquals(8, ratioTapChanger2.getHighTapPosition());
assertEquals(11.6, ratioTapChanger2.getTargetDeadband(), 0);
assertEquals(65, twt2.getX(), 0);
assertEquals(162.5, twt2.getB(), 0);
Expand All @@ -363,6 +406,7 @@ protected void assertAfterNetworkModificationApplication() {
assertEquals(90, phaseTapChanger4.getRegulationValue(), 0);
assertEquals(2, phaseTapChanger4.getLowTapPosition());
assertEquals(5, phaseTapChanger4.getTapPosition());
assertEquals(7, phaseTapChanger4.getHighTapPosition());
assertEquals(24, phaseTapChanger4.getTargetDeadband(), 0);
assertEquals(90, twt4.getR(), 0);
assertEquals(75, twt4.getX(), 0);
Expand All @@ -374,16 +418,18 @@ protected void assertAfterNetworkModificationApplication() {

TwoWindingsTransformer twt5 = getNetwork().getTwoWindingsTransformer(TWT_ID_5);
PhaseTapChanger phaseTapChanger5 = twt5.getPhaseTapChanger();
assertNotNull(phaseTapChanger4);
assertNotNull(phaseTapChanger5);
assertEquals(4, phaseTapChanger5.getLowTapPosition());
assertEquals(6, phaseTapChanger5.getTapPosition());
assertEquals(9, phaseTapChanger5.getHighTapPosition());
assertEquals(100, twt5.getR(), 0);
assertEquals(200, twt5.getB(), 0);
assertEquals(20, twt5.getRatedU2(), 0);

TwoWindingsTransformer twt6 = getNetwork().getTwoWindingsTransformer(TWT_ID_6);
PhaseTapChanger phaseTapChanger6 = twt6.getPhaseTapChanger();
assertNotNull(phaseTapChanger4);
assertNotNull(phaseTapChanger6);
assertEquals(4, phaseTapChanger6.getTapPosition());
assertEquals(94, phaseTapChanger6.getRegulationValue(), 0);
assertEquals(26, phaseTapChanger6.getTargetDeadband(), 0);
assertEquals(85, twt6.getX(), 0);
Expand Down