Skip to content

Commit 1ba7e3b

Browse files
authored
add battery shortcircuit creation and modification (#698)
Signed-off-by: Etienne LESOT <[email protected]>
1 parent 3503030 commit 1ba7e3b

File tree

7 files changed

+127
-4
lines changed

7 files changed

+127
-4
lines changed

src/main/java/org/gridsuite/modification/server/entities/equipment/creation/BatteryCreationEntity.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ public class BatteryCreationEntity extends InjectionCreationEntity {
6161
@Column(name = "droop")
6262
private Float droop;
6363

64+
@Column(name = "directTransX")
65+
private Double directTransX;
66+
67+
@Column(name = "stepUpTransformerX")
68+
private Double stepUpTransformerX;
69+
6470
public BatteryCreationEntity(@NonNull BatteryCreationInfos batteryCreationInfos) {
6571
super(batteryCreationInfos);
6672
assignAttributes(batteryCreationInfos);
@@ -83,6 +89,8 @@ private void assignAttributes(BatteryCreationInfos batteryCreationInfos) {
8389
this.targetQ = batteryCreationInfos.getTargetQ();
8490
this.participate = batteryCreationInfos.getParticipate();
8591
this.droop = batteryCreationInfos.getDroop();
92+
this.directTransX = batteryCreationInfos.getDirectTransX();
93+
this.stepUpTransformerX = batteryCreationInfos.getStepUpTransformerX();
8694
}
8795

8896
@Override
@@ -117,6 +125,8 @@ public BatteryCreationInfos toModificationInfos() {
117125
.targetQ(getTargetQ())
118126
.participate(getParticipate())
119127
.droop(getDroop())
128+
.directTransX(getDirectTransX())
129+
.stepUpTransformerX(getStepUpTransformerX())
120130
// properties
121131
.properties(CollectionUtils.isEmpty(getProperties()) ? null :
122132
getProperties().stream()

src/main/java/org/gridsuite/modification/server/entities/equipment/modification/BatteryModificationEntity.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,16 @@ public class BatteryModificationEntity extends InjectionModificationEntity {
6363
})
6464
private FloatModificationEmbedded droop;
6565

66+
@Embedded
67+
@AttributeOverrides(value = {@AttributeOverride(name = "value", column = @Column(name = "directTransX")), @AttributeOverride(name = "opType", column = @Column(name = "directTransxOp"))
68+
})
69+
private DoubleModificationEmbedded directTransX;
70+
71+
@Embedded
72+
@AttributeOverrides(value = {@AttributeOverride(name = "value", column = @Column(name = "stepUpTransformerX")), @AttributeOverride(name = "opType", column = @Column(name = "stepUpTransformerxOp"))
73+
})
74+
private DoubleModificationEmbedded stepUpTransformerX;
75+
6676
@Embedded
6777
@AttributeOverrides(value = {@AttributeOverride(name = "value", column = @Column(name = "minQ")), @AttributeOverride(name = "opType", column = @Column(name = "minqOp"))
6878
})
@@ -102,6 +112,8 @@ private void assignAttributes(BatteryModificationInfos batteryModificationInfos)
102112
this.maxQ = batteryModificationInfos.getMaxQ() != null ? new DoubleModificationEmbedded(batteryModificationInfos.getMaxQ()) : null;
103113
this.participate = batteryModificationInfos.getParticipate() != null ? new BooleanModificationEmbedded(batteryModificationInfos.getParticipate()) : null;
104114
this.droop = batteryModificationInfos.getDroop() != null ? new FloatModificationEmbedded(batteryModificationInfos.getDroop()) : null;
115+
this.directTransX = batteryModificationInfos.getDirectTransX() != null ? new DoubleModificationEmbedded(batteryModificationInfos.getDirectTransX()) : null;
116+
this.stepUpTransformerX = batteryModificationInfos.getStepUpTransformerX() != null ? new DoubleModificationEmbedded(batteryModificationInfos.getStepUpTransformerX()) : null;
105117
this.reactiveCapabilityCurve = batteryModificationInfos.getReactiveCapabilityCurve() != null ? new BooleanModificationEmbedded(batteryModificationInfos.getReactiveCapabilityCurve()) : null;
106118
this.reactiveCapabilityCurvePoints = toEmbeddablePoints(batteryModificationInfos.getReactiveCapabilityCurvePoints());
107119
}
@@ -134,6 +146,8 @@ public BatteryModificationInfos toModificationInfos() {
134146
.maxQ(toAttributeModification(getMaxQ()))
135147
.participate(toAttributeModification(getParticipate()))
136148
.droop(toAttributeModification(getDroop()))
149+
.directTransX(toAttributeModification(getDirectTransX()))
150+
.stepUpTransformerX(toAttributeModification(getStepUpTransformerX()))
137151
.reactiveCapabilityCurve(toAttributeModification(getReactiveCapabilityCurve()))
138152
.reactiveCapabilityCurvePoints(DTOUtils.toReactiveCapabilityCurvePointsModificationInfos(getReactiveCapabilityCurvePoints()))
139153
// properties
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
2+
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
3+
<changeSet author="lesoteti (generated)" id="1759474876222-35">
4+
<addColumn tableName="battery_creation">
5+
<column name="direct_transx" type="float(53)"/>
6+
</addColumn>
7+
</changeSet>
8+
<changeSet author="lesoteti (generated)" id="1759474876222-36">
9+
<addColumn tableName="battery_modification">
10+
<column name="direct_transx" type="float(53)"/>
11+
</addColumn>
12+
</changeSet>
13+
<changeSet author="lesoteti (generated)" id="1759474876222-37">
14+
<addColumn tableName="battery_modification">
15+
<column name="direct_transx_op" type="varchar(255)"/>
16+
</addColumn>
17+
</changeSet>
18+
<changeSet author="lesoteti (generated)" id="1759474876222-38">
19+
<addColumn tableName="battery_creation">
20+
<column name="step_up_transformerx" type="float(53)"/>
21+
</addColumn>
22+
</changeSet>
23+
<changeSet author="lesoteti (generated)" id="1759474876222-39">
24+
<addColumn tableName="battery_modification">
25+
<column name="step_up_transformerx" type="float(53)"/>
26+
</addColumn>
27+
</changeSet>
28+
<changeSet author="lesoteti (generated)" id="1759474876222-40">
29+
<addColumn tableName="battery_modification">
30+
<column name="step_up_transformerx_op" type="varchar(255)"/>
31+
</addColumn>
32+
</changeSet>
33+
</databaseChangeLog>

src/main/resources/db/changelog/db.changelog-master.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,3 +411,6 @@ databaseChangeLog:
411411
- include:
412412
file: changesets/changelog_20250921T151431Z.xml
413413
relativeToChangelogFile: true
414+
- include:
415+
file: changesets/changelog_20251003T070056Z.xml
416+
relativeToChangelogFile: true

src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInBusBreakerTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ protected ModificationInfos buildModification() {
5656
.minQ(20.0)
5757
.maxQ(25.0)
5858
.droop(5f)
59+
.stepUpTransformerX(60.0)
60+
.directTransX(61.0)
5961
.participate(true)
6062
.reactiveCapabilityCurve(true)
6163
.reactiveCapabilityCurvePoints(Arrays.asList(new ReactiveCapabilityCurvePointsInfos(2.0, 3.0, 3.1),
@@ -81,6 +83,8 @@ protected ModificationInfos buildModificationUpdate() {
8183
.minQ(23.0)
8284
.maxQ(26.0)
8385
.droop(6f)
86+
.stepUpTransformerX(61.0)
87+
.directTransX(62.0)
8488
.participate(true)
8589
.reactiveCapabilityCurve(true)
8690
.reactiveCapabilityCurvePoints(Arrays.asList(new ReactiveCapabilityCurvePointsInfos(1.0, 2.0, 2.1),

src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,21 @@
1010
import com.powsybl.iidm.network.Network;
1111
import com.powsybl.iidm.network.extensions.ConnectablePosition;
1212
import org.gridsuite.modification.NetworkModificationException;
13-
import org.gridsuite.modification.dto.*;
13+
import org.gridsuite.modification.dto.BatteryCreationInfos;
14+
import org.gridsuite.modification.dto.FreePropertyInfos;
15+
import org.gridsuite.modification.dto.ModificationInfos;
16+
import org.gridsuite.modification.dto.ReactiveCapabilityCurvePointsInfos;
1417
import org.gridsuite.modification.server.dto.NetworkModificationsResult;
1518
import org.gridsuite.modification.server.utils.NetworkCreation;
1619
import org.junit.jupiter.api.Tag;
1720
import org.junit.jupiter.api.Test;
1821
import org.springframework.http.MediaType;
1922
import org.springframework.test.web.servlet.MvcResult;
2023

21-
import java.util.*;
24+
import java.util.Arrays;
25+
import java.util.List;
26+
import java.util.Map;
27+
import java.util.UUID;
2228

2329
import static org.gridsuite.modification.NetworkModificationException.Type.*;
2430
import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY;
@@ -53,6 +59,8 @@ protected ModificationInfos buildModification() {
5359
.minQ(20.0)
5460
.maxQ(25.0)
5561
.droop(5f)
62+
.stepUpTransformerX(60.0)
63+
.directTransX(61.0)
5664
.participate(true)
5765
.reactiveCapabilityCurve(true)
5866
.reactiveCapabilityCurvePoints(Arrays.asList(new ReactiveCapabilityCurvePointsInfos(2.0, 3.0, 3.1),
@@ -78,6 +86,8 @@ protected ModificationInfos buildModificationUpdate() {
7886
.minQ(23.0)
7987
.maxQ(26.0)
8088
.droop(6f)
89+
.stepUpTransformerX(61.0)
90+
.directTransX(62.0)
8191
.participate(true)
8292
.reactiveCapabilityCurve(true)
8393
.reactiveCapabilityCurvePoints(Arrays.asList(new ReactiveCapabilityCurvePointsInfos(1.0, 2.0, 2.1),
@@ -219,4 +229,16 @@ protected void testUpdateModificationMessage(ModificationInfos modificationInfos
219229
Map<String, String> updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { });
220230
assertEquals("idBattery2Edited", updatedValues.get("equipmentId"));
221231
}
232+
233+
@Test
234+
void testCreateWithShortCircuitErrors() throws Exception {
235+
// invalid short circuit transient reactance
236+
BatteryCreationInfos batteryCreationInfos = (BatteryCreationInfos) buildModification();
237+
batteryCreationInfos.setDirectTransX(Double.NaN);
238+
239+
String batteryCreationInfosJson = getJsonBody(batteryCreationInfos, null);
240+
mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON))
241+
.andExpect(status().isOk());
242+
assertLogMessage("cannot add short-circuit extension on battery with id=idBattery1 : Undefined directTransX", "network.modification.ShortCircuitExtensionAddError", reportService);
243+
}
222244
}

src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.powsybl.iidm.network.ReactiveCapabilityCurve;
1313
import com.powsybl.iidm.network.ReactiveLimitsKind;
1414
import com.powsybl.iidm.network.extensions.ActivePowerControl;
15+
import com.powsybl.iidm.network.extensions.BatteryShortCircuit;
1516
import org.gridsuite.modification.dto.*;
1617
import org.gridsuite.modification.server.dto.NetworkModificationsResult;
1718
import org.gridsuite.modification.server.utils.NetworkCreation;
@@ -28,8 +29,7 @@
2829
import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY;
2930
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
3031
import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat;
31-
import static org.junit.jupiter.api.Assertions.assertEquals;
32-
import static org.junit.jupiter.api.Assertions.assertTrue;
32+
import static org.junit.jupiter.api.Assertions.*;
3333
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
3434
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
3535

@@ -61,6 +61,8 @@ protected ModificationInfos buildModification() {
6161
new ReactiveCapabilityCurvePointsInfos(100., 100., 0.1),
6262
new ReactiveCapabilityCurvePointsInfos(100., 100., 150.)))
6363
.droop(new AttributeModification<>(0.1f, OperationType.SET))
64+
.directTransX(new AttributeModification<>(0.1, OperationType.SET))
65+
.stepUpTransformerX(new AttributeModification<>(0.2, OperationType.SET))
6466
.participate(new AttributeModification<>(true, OperationType.SET))
6567
.reactiveCapabilityCurve(new AttributeModification<>(true, OperationType.SET))
6668
.properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build()))
@@ -107,6 +109,10 @@ protected void assertAfterNetworkModificationCreation() {
107109
});
108110
}
109111
assertEquals(PROPERTY_VALUE, getNetwork().getBattery("v3Battery").getProperty(PROPERTY_NAME));
112+
BatteryShortCircuit batteryShortCircuit = modifiedBattery.getExtension(BatteryShortCircuit.class);
113+
assertNotNull(batteryShortCircuit);
114+
assertEquals(0.1, batteryShortCircuit.getDirectTransX());
115+
assertEquals(0.2, batteryShortCircuit.getStepUpTransformerX());
110116
}
111117

112118
@Override
@@ -351,4 +357,35 @@ void testDisconnection() throws Exception {
351357
void testConnection() throws Exception {
352358
assertChangeConnectionState(getNetwork().getBattery("v3Battery"), true);
353359
}
360+
361+
@Test
362+
void testBatteryShortCircuitAttributesModification() throws Exception {
363+
BatteryModificationInfos batteryModificationInfos = (BatteryModificationInfos) buildModification();
364+
365+
// setting transient reactance to null, modifying only step up transformer reactance
366+
batteryModificationInfos.setDirectTransX(null);
367+
String modificationToCreateJson = getJsonBody(batteryModificationInfos, null);
368+
369+
mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON))
370+
.andExpect(status().isOk()).andReturn();
371+
372+
BatteryModificationInfos createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0);
373+
374+
assertThat(createdModification).recursivelyEquals(batteryModificationInfos);
375+
testNetworkModificationsCount(getGroupId(), 1);
376+
377+
// setting step up transformer reactance to null, modifying only transient reactance
378+
batteryModificationInfos.setDirectTransX(new AttributeModification<>(1.1, OperationType.SET));
379+
batteryModificationInfos.setStepUpTransformerX(null);
380+
381+
modificationToCreateJson = getJsonBody(batteryModificationInfos, null);
382+
383+
mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON))
384+
.andExpect(status().isOk()).andReturn();
385+
386+
createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1);
387+
388+
assertThat(createdModification).recursivelyEquals(batteryModificationInfos);
389+
testNetworkModificationsCount(getGroupId(), 2);
390+
}
354391
}

0 commit comments

Comments
 (0)