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 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; }