Преглед на файлове

StorageElement and Controlle bug fixes

David Heck преди 4 години
родител
ревизия
79ff8cdc81
променени са 3 файла, в които са добавени 55 реда и са изтрити 41 реда
  1. 14 4
      src/algo/StorageElement.java
  2. 26 29
      src/algo/StorageProductionController.java
  3. 15 8
      src/algo/TestAlgo.java

+ 14 - 4
src/algo/StorageElement.java

@@ -43,11 +43,11 @@ public class StorageElement extends HolonElement {
 	}
 
 	public float getPossibleProduction() {
-		if (capacity > 0) {
-			if (capacity >= maxOutRatio) {
+		if (stateOfCharge > 0) {
+			if (stateOfCharge >= maxOutRatio) {
 				return maxOutRatio;
 			} else {
-				return capacity;
+				return stateOfCharge;
 			}
 		} else {
 			return 0;
@@ -71,7 +71,7 @@ public class StorageElement extends HolonElement {
 			if (stateOfCharge >= energy) { // enough energy stored than wanted
 				if (energy >= maxInRatio) { // more energy wanted than can be given
 					this.setEnergyPerElement(maxOutRatio);
-					stateOfCharge = stateOfCharge - maxOutRatio;
+					stateOfCharge = stateOfCharge - maxOutRatio;//TODO: not hear but in simulation manager
 					return maxOutRatio;
 				} else { // less energy wanted that can be given
 					this.setEnergyPerElement(energy);
@@ -125,6 +125,16 @@ public class StorageElement extends HolonElement {
 		return this.status;
 	}
 
+	public void setStateOfCharge(float stateOfCharge){
+		if(stateOfCharge < capacity){
+			this.stateOfCharge = stateOfCharge;
+		}else{
+			this.stateOfCharge = capacity;
+		}
+
+
+	}
+
 	public enum Mode {
 		COLLECT, EMIT, STANDBY
 	}

+ 26 - 29
src/algo/StorageProductionController.java

@@ -13,10 +13,10 @@ public class StorageProductionController {
 
 	public float currentPossibleStorageProduction() {
 		float possibleEnergy = 0;
-//		for (StorageElement so : storages) {
-//			possibleEnergy += so.getPossibleProduction();
-//		}
-		return 0;// TODO: fix when really in use
+		for (StorageElement so : storages) {
+			possibleEnergy += so.getPossibleProduction();
+		}
+		return possibleEnergy;
 	}
 
 	public float currentStorageProduction() {
@@ -29,37 +29,34 @@ public class StorageProductionController {
 		return producedEnergy;
 	}
 
-	public void enableStorageProduction(float energyNeeded) {
+	public void enableStorageProduction(final float energyNeeded) {
 		System.out.println("energy needed from storage" + energyNeeded);
-//        float enabledEnergy = 0;
-//        StorageObject.Mode lastMode = null;
-//        float lastEnergy = 0;
-//
-//        if(currentStorageProduction() < energyNeeded){
-//            for (StorageObject so: storages) {
-//                if (so.getStatus().equals(StorageObject.Mode.idle)
-//                || so.getStatus().equals(StorageObject.Mode.auto)
-//                || so.getStatus().equals(StorageObject.Mode.save)) {
-//                    // TODO: den groesten zuerst aktivieren? > unterversorgung
-//                    // TODO: den kleinsten zuerst aktivieren > ueberversorgung
-//                    lastEnergy = so.getEnergyAtTimeStep(0);
-//                    enabledEnergy += so.getEnergyAtTimeStep(0); //TODO:timestep
-//                    lastMode = so.getStatus();
-//                    so.setStatus(StorageObject.Mode.idle);
-//                }
-//
-//                if(enabledEnergy > energyNeeded){
-//                    so.setStatus(lastMode);
-//                    enabledEnergy -= lastEnergy;
-//                }
-//            }
-//        }else{
+        float energyLeftToEnabled = energyNeeded;
+
+        if(currentStorageProduction() < energyNeeded){//TODO: das if muss ich nochmal ueberdenken
+            for (StorageElement se: storages) {
+                if (se.getStatus().equals(StorageElement.Mode.STANDBY)
+                || se.getStatus().equals(StorageElement.Mode.COLLECT)) {
+                    // TODO: den groesten zuerst aktivieren? > unterversorgung
+                    // TODO: den kleinsten zuerst aktivieren > ueberversorgung
+					energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(StorageElement.Mode.EMIT, energyLeftToEnabled);
+                }
+
+                if(energyLeftToEnabled <= 0){
+                	System.out.println("enabled energy from storage" + energyLeftToEnabled);
+                    return;
+                }
+            }
+        }else{
 //            disableStorageProduction(energyNeeded - currentStorageProduction());
-//        }
+        }
 
 	}
 
 	public void disableStorageProduction(float energyNotNeeded) {
+		for (StorageElement se : storages) {
+			se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0);
+		}
 //		float disabledEnergy = 0;
 //		StorageElement.Mode lastMode = null;
 //		float lastEnergy = 0;

+ 15 - 8
src/algo/TestAlgo.java

@@ -245,6 +245,11 @@ public class TestAlgo implements AddOn {
 			/////////
 			setPowerplantProduction(0);
 			enableAllConsumers();
+			SPC.disableStorageProduction(-1);
+			for (StorageElement se :
+					getStorageElements()) {
+				se.setStateOfCharge(10000);
+			}
 //			StorageElement ele = new StorageElement("Storage", 1, 0, control.getModel());
 //			ele.setStatusAndSetEnergy(Mode.EMIT, 5000);
 //			
@@ -320,7 +325,6 @@ public class TestAlgo implements AddOn {
 				updateVisual();
 				blackstartMain(curIteration + 1);
 			}
-
 		}
 	}
 
@@ -372,13 +376,16 @@ public class TestAlgo implements AddOn {
 //			if(holonObject.getName().contentEquals("House")) {
 //				holonObject.addElement(new StorageElement("Storage", 1, 0, control.getModel()));
 //			}
-			for (HolonElement ele : holonObject.getElements()) {				
-				if (ele.getEleName().equals("Storage")) {
-					println(ele.getEleName() + "is : " + ele.getClass());
-					if (ele instanceof StorageElement) {
-						println("boomboomboomboom");
-					}
+			for (HolonElement ele : holonObject.getElements()) {
+				if(ele instanceof StorageElement){
+					storageElements.add((StorageElement) ele);
 				}
+//				if (ele.getEleName().equals("Storage")) {
+//					println(ele.getEleName() + "is : " + ele.getClass());
+//					if (ele instanceof StorageElement) {
+//						println("boomboomboomboom");
+//					}
+//				}
 			}
 		}
 		return storageElements;
@@ -425,7 +432,7 @@ public class TestAlgo implements AddOn {
 //			println("Distance to " + currentObject.getId() + ": " + distance);
 //			((HolonObject) currentObject).addElement(new StorageElement("Storage", 1, 0, control.getModel()));
 			for (HolonElement ele : ((HolonObject) currentObject).getElements()) {
-				if (ele.isProducer()) {
+				if (ele.getEleName() == "Solar Panels") {
 					ele.setEnergyPerElement(5000);// TODO: das wollen wir ja so nicht
 //					println("Energy: " + ele.getEnergyPerElement());
 					// set how much energy is left after resistance22