/** 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; } }
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; } }
/** 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) }
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); } } }
/** 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(); }
/** 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); } }
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; } } } }
/** 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(); }
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; }
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); } }
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); } }
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); } }
@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; }
@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; }