Beispiel #1
0
  /** Similar to "append", by creates the files. */
  public void openAllDIFiles() {
    if (saveDemandInterval) {

      clearDI_Totals(); // clears accumulator arrays

      for (EnergyMeterObj meter : DSS.activeCircuit.getEnergyMeters())
        if (meter.isEnabled()) meter.openDemandIntervalFile();

      systemMeter.openDemandIntervalFile();

      /* Optional exception reporting */
      if (doOverloadReport) openOverloadReportFile();
      if (doVoltageExceptionReport) openVoltageReportFile();

      /* Open DI_Totals */
      try {
        createDI_Totals();
      } catch (Exception e) {
        DSS.doSimpleMsg(
            "Error opening demand interval file \""
                + getClassName()
                + ".csv"
                + " for appending."
                + DSS.CRLF
                + e.getMessage(),
            538);
      }

      DSS.DIFilesAreOpen = true;
    }
  }
Beispiel #2
0
  public void appendAllDIFiles() {
    if (saveDemandInterval) {
      clearDI_Totals(); // clears accumulator arrays

      for (EnergyMeterObj meter : DSS.activeCircuit.getEnergyMeters())
        if (meter.isEnabled()) meter.appendDemandIntervalFile();

      systemMeter.appendDemandIntervalFile();

      /* Open DI_Totals */
      try {
        File DI_TotalsFile = new File(DI_Dir + DSS.SEPARATOR + "DI_Totals.csv");
        /* File must exist */
        if (DI_TotalsFile.exists()) {
          DI_Totals = new FileWriter(DI_TotalsFile, true);
        } else {
          createDI_Totals();
        }
      } catch (Exception e) {
        DSS.doSimpleMsg(
            "Error opening demand interval file \""
                + getClassName()
                + ".csv"
                + " for appending."
                + DSS.CRLF
                + e.getMessage(),
            538);
      }

      DSS.DIFilesAreOpen = true;
    }
  }
Beispiel #3
0
  /** Force all meters in active circuit to sample. */
  @Override
  public void sampleAll() {
    Circuit ckt = DSS.activeCircuit;

    for (EnergyMeterObj meter : ckt.getEnergyMeters()) if (meter.isEnabled()) meter.takeSample();

    systemMeter.takeSample();

    if (saveDemandInterval) {
        /* Write totals demand interval file */
      PrintWriter pw = new PrintWriter(DI_Totals);

      pw.printf("%-.6g ", ckt.getSolution().getDblHour());
      for (int i = 0; i < NUM_EM_REGISTERS; i++) pw.printf(", %-.6g", DI_RegisterTotals[i]);
      pw.println();
      pw.close();

      clearDI_Totals();
      if (overloadFileIsOpen) writeOverloadReport();
      if (voltageFileIsOpen) writeVoltageReport();
    }

    // sample generator and storage objects, too
    generatorClass.sampleAll();
    DSS.storageClass.sampleAll(); // samples energymeter part of storage elements (not update)
  }
Beispiel #4
0
  public void closeAllDIFiles() {
    if (saveDemandInterval) {
      /* While closing DI files, write all meter registers to one file */
      try {
        createMeterTotals();
      } catch (Exception e) {
        DSS.doSimpleMsg("Error on rewrite of totals file: " + e.getMessage(), 536);
      }

      /* Close all the DI file for each meter */
      for (EnergyMeterObj meter : DSS.activeCircuit.getEnergyMeters())
        if (meter.isEnabled()) meter.closeDemandIntervalFile();

      writeTotalsFile(); // sum all EnergyMeter registers to "totals.csv"
      systemMeter.closeDemandIntervalFile();
      systemMeter.save();
      try {
        meterTotals.close();
        DI_Totals.close();
        DSS.DIFilesAreOpen = false;
        if (overloadFileIsOpen) {
          overloadFile.close();
          overloadFileIsOpen = false;
        }
        if (voltageFileIsOpen) {
          voltageFile.close();
          voltageFileIsOpen = false;
        }
      } catch (IOException e) {
        DSS.doSimpleMsg("Error closing file: " + e.getMessage(), 537);
      }
    }
  }
Beispiel #5
0
  /** Force all EnergyMeters in the circuit to take a sample. */
  @Override
  public void saveAll() {
    Circuit ckt = DSS.activeCircuit;

    for (EnergyMeterObj meter : ckt.getEnergyMeters()) if (meter.isEnabled()) meter.saveRegisters();

    systemMeter.save();
  }
Beispiel #6
0
  /** Set the hasMeter flag for all cktElement; */
  protected void setHasMeterFlag() {
    Circuit ckt = DSS.activeCircuit;

    /* Initialize all to false */
    for (PDElement elem : ckt.getPDElements()) {
      elem.setHasEnergyMeter(false);
    }

    for (EnergyMeterObj meter : ckt.getEnergyMeters()) {
      if (meter.getMeteredElement() != null) meter.getMeteredElement().setHasEnergyMeter(true);
    }
  }
Beispiel #7
0
  private void processOptions(String opts) {
    String s2 = " ";

    DSS.auxParser.setCommand(opts); // load up aux parser

    EnergyMeterObj elem = activeEnergyMeterObj;

    /* Loop until no more options found */
    while (s2.length() > 0) {
      DSS.auxParser.getNextParam(); // ignore any parameter name not expecting any
      s2 = DSS.auxParser.stringValue().toLowerCase();
      if (s2.length() > 0) {
        switch (s2.charAt(0)) {
          case 'e':
            elem.setExcessFlag(true);
            break;
          case 't':
            elem.setExcessFlag(false);
            break;
          case 'r':
            elem.setZoneIsRadial(true);
            break;
          case 'm':
            elem.setZoneIsRadial(false);
            break;
          case 'c':
            elem.setVoltageUEOnly(false);
            break;
          case 'v':
            elem.setVoltageUEOnly(true);
            break;
        }
      }
    }
  }
Beispiel #8
0
  /** Reset all meters in active circuit to zero. */
  @Override
  public void resetAll() {
    Circuit ckt = DSS.activeCircuit;

    if (DSS.DIFilesAreOpen) closeAllDIFiles();

    if (saveDemandInterval) {
      /* Make directories to save data */
      File dir = new File(ckt.getCaseName());
      if (!dir.exists()) {
        try {
          dir.mkdir();
        } catch (Exception e) {
          DSS.doSimpleMsg(
              "Error making directory \"" + ckt.getCaseName() + "\": " + e.getMessage(), 522);
        }
      }
      DI_Dir = ckt.getCaseName() + "/DI_yr_" + String.valueOf(ckt.getSolution().getYear()).trim();
      dir = new File(DI_Dir);
      if (!dir.exists()) {
        try {
          dir.mkdir();
        } catch (Exception e) {
          DSS.doSimpleMsg(
              "Error making demand interval directory: \"" + DI_Dir + "\". " + e.getMessage(), 523);
        }
      }

      createDI_Totals();
      try {
        DI_Totals.close();
      } catch (IOException e) {
        DSS.doSimpleMsg("Error closing DI totals file: " + e.getMessage(), -1);
      }
    }

    for (EnergyMeterObj meter : ckt.getEnergyMeters()) meter.resetRegisters();

    systemMeter.reset();

    // reset generator objects, too
    generatorClass.resetRegistersAll();
    DSS.storageClass.resetRegistersAll();
  }
Beispiel #9
0
  public void resetMeterZonesAll() {
    int i;
    Circuit ckt = DSS.activeCircuit;

    if (ckt.getEnergyMeters().size() == 0) return;

    // initialize the checked flag for all circuit elements.
    for (CktElement elem : ckt.getCktElements()) {
      elem.setChecked(false);
      elem.setIsolated(true);
      for (i = 0; i < elem.getNumTerms(); i++) elem.getTerminal(i).setChecked(false);
    }

    /* Clear some things that will be set by the meter zone */
    for (PDElement elem : ckt.getPDElements()) {
      elem.setMeterObj(null);
      elem.setSensorObj(null);
      elem.setParentPDElement(null);
    }

    for (PCElement elem : ckt.getPCElements()) {
      elem.setMeterObj(null);
      elem.setSensorObj(null);
    }

    // set up the bus adjacency lists for faster searches to build meter zone lists
    CktTree.buildActiveBusAdjacencyLists(busAdjPD, busAdjPC);

    /* Set hasMeter flag for all cktElements */
    setHasMeterFlag();
    DSS.sensorClass.setHasSensorFlag(); // set all sensor branch flags, too.

    // initialise the checked flag for all buses
    for (i = 0; i < ckt.getNumBuses(); i++) ckt.getBus(i).setBusChecked(false);

    for (EnergyMeterObj meter : ckt.getEnergyMeters())
      if (meter.isEnabled()) meter.makeMeterZoneLists();

    CktTree.freeBusAdjacencyLists(busAdjPD, busAdjPC);
    busAdjPD = null;
    busAdjPC = null;
  }
Beispiel #10
0
  private void createDI_Totals() {
    EnergyMeterObj meter;

    try {
      DI_Totals = new FileWriter(DI_Dir + DSS.SEPARATOR + "DI_Totals.csv");
      PrintWriter pw = new PrintWriter(DI_Totals);

      pw.write("Time");
      for (int i = 0; i < DSS.activeCircuit.getEnergyMeters().size(); i++) {
        meter = DSS.activeCircuit.getEnergyMeters().get(i);
        pw.print(", \"" + meter.getRegisterName(i) + "\"");
      }
      pw.println();
      pw.close();
    } catch (Exception e) {
      DSS.doSimpleMsg(
          "Error creating: \"" + DI_Dir + DSS.SEPARATOR + "DI_Totals.csv\": " + e.getMessage(),
          539);
    }
  }
Beispiel #11
0
  private void createMeterTotals() {
    int i;
    EnergyMeterObj mtr;
    Circuit ckt = DSS.activeCircuit;

    try {
      File f = new File(DI_Dir + DSS.SEPARATOR + "EnergyMeterTotals.csv");
      meterTotals = new FileWriter(f);
      PrintWriter pw = new PrintWriter(meterTotals);

      pw.write("Name");
      mtr = ckt.getEnergyMeters().get(0);
      if (mtr != null) {
        for (i = 0; i < EnergyMeter.NUM_EM_REGISTERS; i++)
          pw.print(", \"" + mtr.getRegisterName(i) + "\"");
      }
      pw.println();

      pw.close();
    } catch (IOException e) {
      DSS.doSimpleMsg("Error writing meter totals: " + e.getMessage(), -1);
    }
  }
Beispiel #12
0
  private void writeTotalsFile() {
    EnergyMeterObj mtr;
    double[] regSum = new double[EnergyMeter.NUM_EM_REGISTERS];
    int i, j;
    File f;

    /* Sum up all registers of all meters and write to totals.csv */
    for (i = 0; i < EnergyMeter.NUM_EM_REGISTERS; i++) regSum[i] = 0.0;

    for (EnergyMeterObj meter : DSS.activeCircuit.getEnergyMeters()) {
      if (meter.isEnabled()) {
        for (j = 0; j < EnergyMeter.NUM_EM_REGISTERS; j++)
          regSum[j] = regSum[j] + meter.getRegister(j) * meter.getTotalsMask(j);
      }
    }

    try { // write the file
      f = new File(DI_Dir + DSS.SEPARATOR + "totals.csv");

      FileWriter fw = new FileWriter(f, false);
      PrintWriter pw = new PrintWriter(fw);

      pw.write("Year");
      mtr = DSS.activeCircuit.getEnergyMeters().get(0);
      if (mtr != null) {
        for (i = 0; i < EnergyMeter.NUM_EM_REGISTERS; i++)
          pw.print(", \"" + mtr.getRegisterName(i) + "\"");
      }
      pw.println();

      pw.write(DSS.activeCircuit.getSolution().getYear());
      for (i = 0; i < EnergyMeter.NUM_EM_REGISTERS; i++) pw.printf(", %g ", regSum[i]);
      pw.println();

      pw.close();
      fw.close();
    } catch (Exception e) {
      DSS.doSimpleMsg(
          "Error opening demand interval file Totals.csv." + DSS.CRLF + e.getMessage(), 543);
    }
  }
Beispiel #13
0
  @Override
  protected int makeLike(String energyMeterName) {
    EnergyMeterObj elem;
    int success = 0;

    /* See if we can find this EnergyMeter name in the present collection */
    EnergyMeterObj other = (EnergyMeterObj) find(energyMeterName);

    if (other != null) {
      elem = activeEnergyMeterObj;

      elem.setNumPhases(other.getNumPhases());
      elem.setNumConds(other.getNumConds()); // force reallocation of terminal stuff

      elem.setElementName(other.getElementName());
      elem.setMeteredElement(other.getMeteredElement()); // pointer to target circuit element
      elem.setMeteredTerminalIdx(other.getMeteredTerminalIdx());
      elem.setExcessFlag(other.isExcessFlag());

      elem.setMaxZoneKVANorm(other.getMaxZoneKVANorm());
      elem.setMaxZoneKVAEmerg(other.getMaxZoneKVAEmerg());

      elem.setDefinedZoneListSize(other.getDefinedZoneListSize());
      elem.setDefinedZoneList(new String[elem.getDefinedZoneListSize()]);

      // copy strings over (actually incr ref count on string)
      for (int i = 0; i < elem.getDefinedZoneListSize(); i++)
        elem.getDefinedZoneList()[i] = other.getDefinedZoneList()[i];

      elem.setLocalOnly(other.isLocalOnly());
      elem.setVoltageUEOnly(other.isVoltageUEOnly());

      /* Boolean flags */
      elem.setLosses(other.isLosses());
      elem.setLineLosses(other.isLineLosses());
      elem.setXfmrLosses(other.isXfmrLosses());
      elem.setSeqLosses(other.isSeqLosses());
      elem.setThreePhaseLosses(other.isThreePhaseLosses());
      elem.setVBaseLosses(other.isVBaseLosses());
      elem.setPhaseVoltageReport(other.isPhaseVoltageReport());

      for (int i = 0; i < elem.getParentClass().getNumProperties(); i++)
        elem.setPropertyValue(i, other.getPropertyValue(i));

      success = 1;
    } else {
      DSS.doSimpleMsg("Error in EnergyMeter makeLike: \"" + energyMeterName + "\" not found.", 521);
    }

    return success;
  }
Beispiel #14
0
  @Override
  public int edit() {
    Parser parser = Parser.getInstance();

    // continue parsing with contents of parser
    activeEnergyMeterObj = (EnergyMeterObj) elementList.getActive();
    DSS.activeCircuit.setActiveCktElement(activeEnergyMeterObj);

    boolean doRecalc = false;

    EnergyMeterObj elem = activeEnergyMeterObj;

    elem.setMeteredElementChanged(false);

    int paramPointer = -1;
    String paramName = parser.getNextParam();
    String param = parser.stringValue();

    while (param.length() > 0) {
      if (paramName.length() == 0) {
        paramPointer += 1;
      } else {
        paramPointer = commandList.getCommand(paramName);
      }

      if (paramPointer >= 0 && paramPointer < numProperties)
        elem.setPropertyValue(paramPointer, param);

      switch (paramPointer) {
        case -1:
          DSS.doSimpleMsg(
              "Unknown parameter \""
                  + paramName
                  + "\" for object \""
                  + getClassName()
                  + "."
                  + elem.getName()
                  + "\"",
              520);
          break;
        case 0:
          elem.setElementName(param.toLowerCase());
          break;
        case 1:
          elem.setMeteredTerminalIdx(parser.integerValue() - 1);
          break;
        case 2: /* Actions */
          switch (param.toLowerCase().charAt(0)) {
            case 'a':
              elem.allocateLoad();
              break;
            case 'c':
              elem.resetRegisters();
              break;
            case 'r':
              elem.reduceZone();
              break;
            case 's':
              elem.saveRegisters();
              break;
            case 't':
              elem.takeSample();
              break;
            case 'z':
              elem.zoneDump();
              break;
          }
          break;
        case 3:
          processOptions(param);
          break;
        case 4:
          elem.setMaxZoneKVANorm(parser.doubleValue());
          break;
        case 5:
          elem.setMaxZoneKVAEmerg(parser.doubleValue());
          break;
        case 6:
          parser.parseAsVector(elem.getNumPhases(), elem.getSensorCurrent()); // inits to zero
          break;
        case 7:
          Util.interpretAndAllocStrArray(
              param, elem.getDefinedZoneListSize(), elem.getDefinedZoneList());
          break;
        case 8:
          elem.setLocalOnly(Util.interpretYesNo(param));
          break;
        case 9:
          interpretRegisterMaskArray(elem.getTotalsMask());
          break;
        case 10:
          elem.setLosses(Util.interpretYesNo(param));
          break;
        case 11:
          elem.setLineLosses(Util.interpretYesNo(param));
          break;
        case 12:
          elem.setXfmrLosses(Util.interpretYesNo(param));
          break;
        case 13:
          elem.setSeqLosses(Util.interpretYesNo(param));
          break;
        case 14:
          elem.setThreePhaseLosses(Util.interpretYesNo(param));
          break;
        case 15:
          elem.setVBaseLosses(Util.interpretYesNo(param));
          break;
        case 16:
          elem.setPhaseVoltageReport(Util.interpretYesNo(param));
          break;
          /* case 10: aem.setHasFeeder(Utilities.interpretYesNo(Param)); break;*/
        default:
          classEdit(activeEnergyMeterObj, paramPointer - EnergyMeter.NumPropsThisClass);
          break;
      }

      switch (paramPointer) {
        case 0:
          elem.setMeteredElementChanged(true);
          doRecalc = true;
          break;
        case 1:
          elem.setMeteredElementChanged(true);
          doRecalc = true;
          break;
        case 10:
          if (elem.hasFeeder()) {
            doRecalc = true;
          } else {
            elem.removeFeederObj();
          }
          break;
      }

      paramName = parser.getNextParam();
      param = parser.stringValue();
    }

    if (doRecalc) elem.recalcElementData(); // when some basic data have changed

    return 0;
  }