@Override public double getP() { return generator.getTargetP(); }
public static double getNominalPower(Generator generator) { Objects.requireNonNull(generator, "generator is null"); double nominalPower = Double.NaN; double pMax = generator.getMaxP(); double qMax = generator.getReactiveLimits().getMaxQ(generator.getTargetP()); nominalPower = Math.sqrt(Math.pow(pMax, 2) + Math.pow(qMax, 2)); return nominalPower; }
@Override public double scale(Network n, double asked) { Objects.requireNonNull(n); Generator g = n.getGenerator(id); double done = 0; if (g != null) { Terminal t = g.getTerminal(); if (!t.isConnected()) { connectGenerator(g); } done = Math.min(asked, g.getMaxP() - g.getTargetP()); double oldTargetP = g.getTargetP(); g.setTargetP(g.getTargetP() + done); LOGGER.info("Change active power setpoint of {} from {} to {} (pmax={})", g.getId(), oldTargetP, g.getTargetP(), g.getMaxP()); } else { LOGGER.warn("Generator {} not found", id); } return done; }
@Override public void visitGenerator(Generator generator) { if (generator.isVoltageRegulatorOn()) { decoratedBus.regulatingGenerator++; decoratedBus.maxP += generator.getMaxP(); decoratedBus.minP += generator.getMinP(); decoratedBus.targetP += generator.getTargetP(); } } });
public static double getRedispatchPMin(Generator generator, float redispatchLimitsPercentage) { double redispatchPMin = generator.getMinP(); if (generator.getTargetP() > generator.getMaxP()) { redispatchPMin = generator.getMaxP() - redispatchLimitsPercentage * 0.01 * generator.getMaxP(); } else { redispatchPMin = generator.getTargetP() - redispatchLimitsPercentage * 0.01 * generator.getMaxP(); } return generator.getMinP() < redispatchPMin ? redispatchPMin : generator.getMinP(); }
public static double getRedispatchPMax(Generator generator, float redispatchLimitsPercentage) { double redispatchPMax = generator.getMaxP(); if (generator.getTargetP() < generator.getMinP()) { redispatchPMax = generator.getMinP() + redispatchLimitsPercentage * 0.01 * generator.getMaxP(); } else { redispatchPMax = generator.getTargetP() + redispatchLimitsPercentage * 0.01 * generator.getMaxP(); } return generator.getMaxP() > redispatchPMax ? redispatchPMax : generator.getMaxP(); }
private static void addGenerators(Network network, ConnectedPower balanceMainCC, ConnectedPower balanceOtherCC) { for (Generator g : network.getGenerators()) { Terminal.BusBreakerView view = g.getTerminal().getBusBreakerView(); if (view.getBus() != null) { if (view.getBus().isInMainConnectedComponent()) { balanceMainCC.connectedMaxGeneration += g.getMaxP(); balanceMainCC.connectedGeneration += g.getTargetP(); balanceMainCC.connectedGenerators.add(g.getId()); } else { balanceOtherCC.connectedMaxGeneration += g.getMaxP(); balanceOtherCC.connectedGeneration += g.getTargetP(); balanceOtherCC.connectedGenerators.add(g.getId()); } } else { if (view.getConnectableBus().isInMainConnectedComponent()) { balanceMainCC.disconnectedMaxGeneration += g.getMaxP(); balanceMainCC.disconnectedGeneration += g.getTargetP(); balanceMainCC.disconnectedGenerators.add(g.getId()); } else { balanceOtherCC.disconnectedMaxGeneration += g.getMaxP(); balanceOtherCC.disconnectedGeneration += g.getTargetP(); balanceOtherCC.disconnectedGenerators.add(g.getId()); } } } }
LOGGER.info("#------------ ---------------- -------------- ---------------- --------------"); for (Generator gen : network.getGenerators()) { LOGGER.info(String.format("%s %15.8f %15.8f %15.8f %15.8f", gen.getId(), gen.getTerminal().getQ(), gen.getTargetQ(), gen.getTerminal().getP(), gen.getTargetP()));
public static boolean isRedispatchable(Generator generator, float redispatchLimitsPercentage) { return (generator.getTerminal().getBusBreakerView().getBus() != null) // is connected && (generator.getEnergySource() == EnergySource.HYDRO || generator.getEnergySource() == EnergySource.THERMAL) // is hydro or thermal && (generator.getTerminal().getP() < 0) // inject power && (generator.isVoltageRegulatorOn()) // has voltage regulator on && (generator.getTargetP() <= getRedispatchPMax(generator, redispatchLimitsPercentage) && generator.getTargetP() >= getRedispatchPMin(generator, redispatchLimitsPercentage)); // target P is within redispatch limits //&& (generator.getTargetP() <= generator.getMaxP() && generator.getTargetP() >= generator.getMinP()) // target P is within limits }
public static void printGeneratorsSetpointDiff(Network network, Logger logger) { for (Generator g : network.getGenerators()) { double dp = Math.abs(g.getTerminal().getP() + g.getTargetP()); double dq = Math.abs(g.getTerminal().getQ() + g.getTargetQ()); double dv = Math.abs(g.getTerminal().getBusBreakerView().getConnectableBus().getV() - g.getTargetV()); if (dp > 1 || dq > 5 || dv > 0.1) { logger.warn("Generator {}: ({}, {}, {}) ({}, {}, {}) -> ({}, {}, {})", g.getId(), dp, dq, dv, -g.getTargetP(), -g.getTargetQ(), g.getTargetV(), g.getTerminal().getP(), g.getTerminal().getQ(), g.getTerminal().getBusBreakerView().getConnectableBus().getV()); } } }
if (!onlyVoltage) { if (!Double.isNaN(t.getP())) { double oldTargetP = g.getTargetP(); double newTargetP = -t.getP(); if (oldTargetP != newTargetP) {
private static void updateSlackBusData(Bus bus, Integer busIndex, SlackBusData slackBusData) { if (bus.getGenerators() == null) { return; } //...slackbus has at least one generator connected for (Generator generator : bus.getGenerators()) { //...which has a generator with voltage regulator on if (!generator.isVoltageRegulatorOn()) { continue; } //...assure the generator is the one connected to the bus (and not on the aggregated buses) if (!generator.getTerminal().getBusBreakerView().getBus().getId().equals(bus.getId())) { return; } //...candidate slackbus if (slackBusData.getSlackBusIndex() == -1) { slackBusData.setSlackBusIndex(busIndex); slackBusData.setSlackBusGenerator(generator); return; } //...choice the generator with the largest TargetP if (generator.getTargetP() > slackBusData.getSlackBusGenerator().getTargetP()) { slackBusData.setSlackBusIndex(busIndex); slackBusData.setSlackBusGenerator(generator); } } }
protected void updateSlackBusData(Bus bus, Integer busIndex, SlackBusData slackBusData) { if (bus.getGenerators() == null) { return; } //...slackbus has at least one generator connected for (Generator generator : bus.getGenerators()) { //...which has a generator with voltage regulator on if (!generator.isVoltageRegulatorOn()) { continue; } //...assure the generator is the one connected to the bus (and not on the aggregated buses) if (!generator.getTerminal().getBusBreakerView().getBus().getId().equals(bus.getId())) { return; } //...candidate slackbus if (slackBusData.getSlackBusIndex() == -1) { slackBusData.setSlackBusIndex(busIndex); slackBusData.setSlackBusGenerator(generator); return; } //...choice the generator with the largest TargetP if (generator.getTargetP() > slackBusData.getSlackBusGenerator().getTargetP()) { slackBusData.setSlackBusIndex(busIndex); slackBusData.setSlackBusGenerator(generator); } } }
double oldP = g.getTargetP(); LOGGER.trace(" gen {} - P:{} -> P:{}", g.getId(), oldP, gs.p); g.setTargetP(-gs.p); g.getTerminal().setP(gs.p); } else { double oldP = g.getTargetP(); double oldQ = g.getTargetQ(); LOGGER.trace(" gen {} - P:{}, Q:{} -> P:{}, Q:{} ", g.getId(), oldP, oldQ, gs.p, gs.q);
@Override protected void writeRootElementAttributes(Generator g, VoltageLevel vl, NetworkXmlWriterContext context) throws XMLStreamException { context.getWriter().writeAttribute("energySource", g.getEnergySource().name()); XmlUtil.writeDouble("minP", g.getMinP(), context.getWriter()); XmlUtil.writeDouble("maxP", g.getMaxP(), context.getWriter()); XmlUtil.writeDouble("ratedS", g.getRatedS(), context.getWriter()); context.getWriter().writeAttribute("voltageRegulatorOn", Boolean.toString(g.isVoltageRegulatorOn())); XmlUtil.writeDouble("targetP", g.getTargetP(), context.getWriter()); XmlUtil.writeDouble("targetV", g.getTargetV(), context.getWriter()); XmlUtil.writeDouble("targetQ", g.getTargetQ(), context.getWriter()); writeNodeOrBus(null, g.getTerminal(), context); writePQ(null, g.getTerminal(), context.getWriter()); }
generatorData.setMinActivePower(generator.getMinP()); generatorData.setMaxActivePower(generator.getMaxP()); generatorData.setMinReactivePower(generator.getReactiveLimits().getMinQ(generator.getTargetP())); generatorData.setMaxReactivePower(generator.getReactiveLimits().getMaxQ(generator.getTargetP())); generatorData.setNominalPower(MCSNetworkUtils.getNominalPower(generator)); generatorData.setRenewableEnergySource(MCSNetworkUtils.getRenewableEnergySource(generator));
double pgen = g.getTargetP(); double qgen = g.getTargetQ(); double pgmin = g.getMinP(); if (config.isSpecificCompatibility() && (g.getTargetP() < 0.0001) && (g.getMinP() > 0.0001)) { isVoltageRegulatorOn = false; LOGGER.warn("out of bound regulating generator {}, targetP {}, minP {} : turn off its voltage regulation", g.getId(), g.getTargetP(), g.getMinP());
private static void extractGeneratorsData(Network network, NetworkData networkData) { for (Generator generator : network.getGenerators()) { networkData.addGeneratorData(new GeneratorData(generator.getId(), (generator.getTerminal().getBusBreakerView().getBus() != null) ? generator.getTerminal().getBusBreakerView().getBus().getId() : generator.getTerminal().getBusBreakerView().getConnectableBus().getId(), generator.getTerminal().getBusBreakerView().getBus() != null, apparentPower(generator.getTerminal()), generator.getTerminal().getP(), generator.getTerminal().getQ(), generator.getRatedS(), generator.getReactiveLimits().getMaxQ(generator.getTargetP()), generator.getReactiveLimits().getMinQ(generator.getTargetP())) // generator.getReactiveLimits().getMaxQ(generator.getTerminal().getP()), // generator.getReactiveLimits().getMinQ(generator.getTerminal().getP())) ); } }
for (Generator g : network.getGenerators()) { if (g.getEnergySource().isIntermittent()) { generationP += g.getTargetP(); if (!g.isVoltageRegulatorOn()) { generationQ += g.getTargetQ();
.writeCell(g.isVoltageRegulatorOn()) .writeCell(g.getTargetV() / vb) .writeCell(g.getTargetP()) .writeCell(g.getTargetQ()) .writeCell(faultNum)