Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix SVarC static references when standByAutomaton is not available. #299

Merged
merged 6 commits into from
Oct 30, 2023
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 @@ -12,20 +12,22 @@
import com.powsybl.dynawaltz.models.VarConnection;
import com.powsybl.dynawaltz.models.VarMapping;
import com.powsybl.dynawaltz.models.buses.EquipmentConnectionPoint;
import com.powsybl.iidm.network.extensions.StandbyAutomaton;

import java.util.Arrays;
import java.util.List;

/**
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
public class StaticVarCompensator extends AbstractEquipmentBlackBoxModel<com.powsybl.iidm.network.StaticVarCompensator> implements StaticVarCompensatorModel {

private static final List<VarMapping> VAR_MAPPING = Arrays.asList(
new VarMapping("SVarC_injector_PInjPu", "p"),
new VarMapping("SVarC_injector_QInjPu", "q"),
new VarMapping("SVarC_injector_state", "state"),
new VarMapping("SVarC_modeHandling_mode_value", "regulatingMode"));
private static final VarMapping P_MAPPING = new VarMapping("SVarC_injector_PInjPu", "p");
private static final VarMapping Q_MAPPING = new VarMapping("SVarC_injector_QInjPu", "q");
private static final VarMapping STATE_MAPPING = new VarMapping("SVarC_injector_state", "state");
private static final VarMapping MODE_MAPPING = new VarMapping("SVarC_modeHandling_mode_value", "regulatingMode");

private static final List<VarMapping> VAR_MAPPING_NO_STANDBY_AUTOMATON = List.of(P_MAPPING, Q_MAPPING, STATE_MAPPING);
private static final List<VarMapping> VAR_MAPPING_WITH_STANDBY_AUTOMATON = List.of(P_MAPPING, Q_MAPPING, STATE_MAPPING, MODE_MAPPING);

public StaticVarCompensator(String dynamicModelId, com.powsybl.iidm.network.StaticVarCompensator svarc, String parameterSetId, String lib) {
super(dynamicModelId, parameterSetId, svarc, lib);
Expand All @@ -42,7 +44,8 @@ private List<VarConnection> getVarConnectionsWith(EquipmentConnectionPoint conne

@Override
public List<VarMapping> getVarsMapping() {
return VAR_MAPPING;
StandbyAutomaton standbyAutomaton = equipment.getExtension(StandbyAutomaton.class);
return standbyAutomaton == null ? VAR_MAPPING_NO_STANDBY_AUTOMATON : VAR_MAPPING_WITH_STANDBY_AUTOMATON;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* Copyright (c) 2023, RTE (http://www.rte-france.com/)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.dynawaltz.xml;

import com.powsybl.dynawaltz.models.svarcs.StaticVarCompensator;
import com.powsybl.iidm.network.extensions.StandbyAutomatonAdder;
import com.powsybl.iidm.network.test.SvcTestCaseFactory;
import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;

import javax.xml.stream.XMLStreamException;
import java.io.IOException;

/**
* @author Florian Dupuy {@literal <florian.dupuy at rte-france.com>}
*/
class SvarcModelWithSbaXmlTest extends AbstractDynamicModelXmlTest {

@Override
protected void setupNetwork() {
network = SvcTestCaseFactory.create();
network.getStaticVarCompensator("SVC2").newExtension(StandbyAutomatonAdder.class)
.withB0(0.0001f)
.withStandbyStatus(true)
.withLowVoltageSetpoint(390f)
.withHighVoltageSetpoint(400f)
.withLowVoltageThreshold(385f)
.withHighVoltageThreshold(405f)
.add();
}

@Override
protected void addDynamicModels() {
dynamicModels.add(new StaticVarCompensator("BBM_SVARC2", network.getStaticVarCompensator("SVC2"), "svc", "StaticVarCompensator"));
}

@Test
void writeModel() throws SAXException, IOException, XMLStreamException {
DydXml.write(tmpDir, context);
validate("dyd.xsd", "svarc_sba_dyd.xml", tmpDir.resolve(DynaWaltzConstants.DYD_FILENAME));
}
}
1 change: 0 additions & 1 deletion dynawaltz/src/test/resources/svarc_dyd.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
<dyn:staticRef var="SVarC_injector_PInjPu" staticVar="p"/>
<dyn:staticRef var="SVarC_injector_QInjPu" staticVar="q"/>
<dyn:staticRef var="SVarC_injector_state" staticVar="state"/>
<dyn:staticRef var="SVarC_modeHandling_mode_value" staticVar="regulatingMode"/>
</dyn:macroStaticReference>
<dyn:macroConnect connector="MC_StaticVarCompensator-DefaultEquipmentConnectionPoint" id1="BBM_SVARC2" id2="NETWORK"/>
</dyn:dynamicModelsArchitecture>
16 changes: 16 additions & 0 deletions dynawaltz/src/test/resources/svarc_sba_dyd.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<dyn:dynamicModelsArchitecture xmlns:dyn="http://www.rte-france.com/dynawo">
<dyn:blackBoxModel id="BBM_SVARC2" lib="StaticVarCompensator" parFile="models.par" parId="svc" staticId="SVC2">
<dyn:macroStaticRef id="MSR_StaticVarCompensator"/>
</dyn:blackBoxModel>
<dyn:macroConnector id="MC_StaticVarCompensator-DefaultEquipmentConnectionPoint">
<dyn:connect var1="SVarC_terminal" var2="@STATIC_ID@@NODE@_ACPIN"/>
</dyn:macroConnector>
<dyn:macroStaticReference id="MSR_StaticVarCompensator">
<dyn:staticRef var="SVarC_injector_PInjPu" staticVar="p"/>
<dyn:staticRef var="SVarC_injector_QInjPu" staticVar="q"/>
<dyn:staticRef var="SVarC_injector_state" staticVar="state"/>
<dyn:staticRef var="SVarC_modeHandling_mode_value" staticVar="regulatingMode"/>
</dyn:macroStaticReference>
<dyn:macroConnect connector="MC_StaticVarCompensator-DefaultEquipmentConnectionPoint" id1="BBM_SVARC2" id2="NETWORK"/>
</dyn:dynamicModelsArchitecture>
Loading