Skip to content

Commit

Permalink
CGMES fix export SV: export phase and ratio tap changer if both prese…
Browse files Browse the repository at this point in the history
…nt (#2685)

Signed-off-by: Luma <zamarrenolm@aia.es>
Signed-off-by: José Antonio Marqués <marquesja@aia.es>

* Improve check of the unitary test

Signed-off-by: José Antonio Marqués <marquesja@aia.es>

* fix bug

Signed-off-by: José Antonio Marqués <marquesja@aia.es>

---------

Signed-off-by: Luma <zamarrenolm@aia.es>
Signed-off-by: José Antonio Marqués <marquesja@aia.es>
Co-authored-by: José Antonio Marqués <marquesja@aia.es>
Co-authored-by: marqueslanauja <51124986+marqueslanauja@users.noreply.github.com>
  • Loading branch information
3 people authored Sep 7, 2023
1 parent 5512743 commit 04f9042
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,8 @@ private static void writeTapSteps(Network network, String cimNamespace, XMLStrea
String ptcId = context.getNamingStrategy().getCgmesIdFromAlias(twt, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.PHASE_TAP_CHANGER + endNumber);
writeSvTapStep(ptcId, twt.getPhaseTapChanger().getTapPosition(), cimNamespace, writer, context);
writeSvTapStepHidden(twt, ptcId, cimNamespace, writer, context);
} else if (twt.hasRatioTapChanger()) {
}
if (twt.hasRatioTapChanger()) {
int endNumber = twt.getAliasFromType(Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.RATIO_TAP_CHANGER + 1).isPresent() ? 1 : 2;
String rtcId = context.getNamingStrategy().getCgmesIdFromAlias(twt, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.RATIO_TAP_CHANGER + endNumber);
writeSvTapStep(rtcId, twt.getRatioTapChanger().getTapPosition(), cimNamespace, writer, context);
Expand All @@ -368,7 +369,8 @@ private static void writeTapSteps(Network network, String cimNamespace, XMLStrea
String ptcId = context.getNamingStrategy().getCgmesIdFromAlias(twt, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.PHASE_TAP_CHANGER + endNumber);
writeSvTapStep(ptcId, leg.getPhaseTapChanger().getTapPosition(), cimNamespace, writer, context);
writeSvTapStepHidden(twt, ptcId, cimNamespace, writer, context);
} else if (leg.hasRatioTapChanger()) {
}
if (leg.hasRatioTapChanger()) {
String rtcId = context.getNamingStrategy().getCgmesIdFromAlias(twt, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.RATIO_TAP_CHANGER + endNumber);
writeSvTapStep(rtcId, leg.getRatioTapChanger().getTapPosition(), cimNamespace, writer, context);
writeSvTapStepHidden(twt, rtcId, cimNamespace, writer, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@
*/
package com.powsybl.cgmes.conversion.test.export;

import com.powsybl.cgmes.conformity.Cgmes3Catalog;
import com.powsybl.cgmes.conformity.CgmesConformity1Catalog;
import com.powsybl.cgmes.conformity.CgmesConformity1ModifiedCatalog;
import com.powsybl.cgmes.conversion.CgmesImport;
import com.powsybl.cgmes.conversion.CgmesExport;
import com.powsybl.cgmes.conversion.Conversion;
import com.powsybl.cgmes.conversion.export.CgmesExportContext;
import com.powsybl.cgmes.conversion.export.StateVariablesExport;
import com.powsybl.cgmes.conversion.export.TopologyExport;
import com.powsybl.cgmes.conversion.test.ConversionUtil;
import com.powsybl.cgmes.model.CgmesNames;
import com.powsybl.cgmes.model.PowerFlow;
import com.powsybl.commons.datasource.FileDataSource;
import com.powsybl.commons.datasource.ReadOnlyDataSource;
import com.powsybl.commons.test.AbstractConverterTest;
import com.powsybl.commons.xml.XmlUtil;
Expand All @@ -29,10 +33,7 @@

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collections;
Expand All @@ -42,8 +43,7 @@
import java.util.regex.Pattern;
import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;

/**
* @author Miora Ralambotiana <miora.ralambotiana at rte-france.com>
Expand Down Expand Up @@ -237,6 +237,80 @@ void microGridBEWithHiddenTapChangers() throws XMLStreamException {
assertTrue(sv.contains(hiddenTapChangerId));
}

@Test
void cgmes3MiniGridwithTransformersWithRtcAndPtc() throws IOException, XMLStreamException {

Network network = ConversionUtil.networkModel(Cgmes3Catalog.miniGrid(), new Conversion.Config());

// Add a PTC
TwoWindingsTransformer t2wt = network.getTwoWindingsTransformer("813365c3-5be7-4ef0-a0a7-abd1ae6dc174");
t2wt.newPhaseTapChanger()
.setLowTapPosition(0)
.setTapPosition(0)
.beginStep()
.setR(0.0)
.setX(0.0)
.setB(0)
.setG(0)
.setRho(1.0)
.setAlpha(20)
.endStep()
.add();
// Change the RTC tap position and add a PTC
ThreeWindingsTransformer t3wt = network.getThreeWindingsTransformer("411b5401-0a43-404a-acb4-05c3d7d0c95c");
t3wt.getLeg1().newPhaseTapChanger()
.setLowTapPosition(0)
.setTapPosition(1)
.beginStep()
.setR(0.0)
.setX(0.0)
.setB(0)
.setG(0)
.setRho(1.0)
.setAlpha(10)
.endStep()
.beginStep()
.setR(0.0)
.setX(0.0)
.setB(0)
.setG(0)
.setRho(1.0)
.setAlpha(20)
.endStep()
.add();

// Export as cgmes
Path outputPath = Files.createTempDirectory("temp.cgmesExport");
String baseName = "minGridWithTransformersWithRTCAndPtc";
new CgmesExport().export(network, new Properties(), new FileDataSource(outputPath, baseName));

// re-import after adding the original boundary files
copyBoundary(outputPath, baseName, Cgmes3Catalog.miniGrid().dataSource());
Network actual = new CgmesImport().importData(new FileDataSource(outputPath, baseName), NetworkFactory.findDefault(), new Properties());

// check
TwoWindingsTransformer t2wta = actual.getTwoWindingsTransformer("813365c3-5be7-4ef0-a0a7-abd1ae6dc174");
assertNotNull(t2wta.getRatioTapChanger());
assertEquals(t2wt.getRatioTapChanger().getTapPosition(), t2wta.getRatioTapChanger().getTapPosition());
assertNotNull(t2wta.getPhaseTapChanger());
assertEquals(t2wt.getPhaseTapChanger().getTapPosition(), t2wta.getPhaseTapChanger().getTapPosition());

ThreeWindingsTransformer t3wta = actual.getThreeWindingsTransformer("411b5401-0a43-404a-acb4-05c3d7d0c95c");
assertNotNull(t3wta.getLeg1().getRatioTapChanger());
assertEquals(t3wt.getLeg1().getRatioTapChanger().getTapPosition(), t3wta.getLeg1().getRatioTapChanger().getTapPosition());
assertNotNull(t3wta.getLeg1().getPhaseTapChanger());
assertEquals(t3wt.getLeg1().getPhaseTapChanger().getTapPosition(), t3wta.getLeg1().getPhaseTapChanger().getTapPosition());
}

private void copyBoundary(Path outputFolder, String baseName, ReadOnlyDataSource originalDataSource) throws IOException {
String eqbd = originalDataSource.listNames(".*EQ_BD.*").stream().findFirst().orElse(null);
if (eqbd != null) {
try (InputStream is = originalDataSource.newInputStream(eqbd)) {
Files.copy(is, outputFolder.resolve(baseName + "_EQ_BD.xml"));
}
}
}

private static Network importNetwork(ReadOnlyDataSource ds) {
Properties properties = new Properties();
properties.put("iidm.import.cgmes.create-cgmes-export-mapping", "true");
Expand Down

0 comments on commit 04f9042

Please sign in to comment.