|
@@ -39,6 +39,11 @@ public class ControlAlgorithm implements AddOn {
|
|
|
private TextField fileNameTextfield;
|
|
|
private TextField schedulTextfield;
|
|
|
private TextField renewableTextfield;
|
|
|
+ private TextField addBatteryTextfield;
|
|
|
+ private TextField addBatteryTypeTextfield;
|
|
|
+ private TextField removeBatteryTextfield;
|
|
|
+ private TextField removeBatteryTypeTextfield;
|
|
|
+
|
|
|
|
|
|
private int blackstartSuccessTime;
|
|
|
private int blackstartStartTime;
|
|
@@ -177,6 +182,38 @@ public class ControlAlgorithm implements AddOn {
|
|
|
renewableLabel.setBounds(530, 60, 300, 20);
|
|
|
parameterPanel.add(renewableLabel);
|
|
|
|
|
|
+ addBatteryTextfield = new TextField("0");
|
|
|
+ addBatteryTextfield.setBounds(425, 110, 95, 20);
|
|
|
+ parameterPanel.add(addBatteryTextfield);
|
|
|
+
|
|
|
+ JLabel addBatteryLabel = new JLabel("add number of certain batterytype");
|
|
|
+ addBatteryLabel.setBounds(530, 110, 300, 20);
|
|
|
+ parameterPanel.add(addBatteryLabel);
|
|
|
+
|
|
|
+ addBatteryTypeTextfield = new TextField("Car");
|
|
|
+ addBatteryTypeTextfield.setBounds(425, 135, 95, 20);
|
|
|
+ parameterPanel.add(addBatteryTypeTextfield);
|
|
|
+
|
|
|
+ JLabel addBatteryTypeLabel = new JLabel("What kind of battery to add");
|
|
|
+ addBatteryTypeLabel.setBounds(530, 135, 300, 20);
|
|
|
+ parameterPanel.add(addBatteryTypeLabel);
|
|
|
+
|
|
|
+ removeBatteryTextfield = new TextField("0");
|
|
|
+ removeBatteryTextfield.setBounds(425, 160, 95, 20);
|
|
|
+ parameterPanel.add(removeBatteryTextfield);
|
|
|
+
|
|
|
+ JLabel removeBatteryLabel = new JLabel("remove number of certain batterytype");
|
|
|
+ removeBatteryLabel.setBounds(530, 160, 300, 20);
|
|
|
+ parameterPanel.add(removeBatteryLabel);
|
|
|
+
|
|
|
+ removeBatteryTypeTextfield = new TextField("Car");
|
|
|
+ removeBatteryTypeTextfield.setBounds(425, 205, 95, 20);
|
|
|
+ parameterPanel.add(removeBatteryTypeTextfield);
|
|
|
+
|
|
|
+ JLabel removeBatteryTypeLabel = new JLabel("What kind of battery to remove");
|
|
|
+ removeBatteryTypeLabel.setBounds(530, 205, 300, 20);
|
|
|
+ parameterPanel.add(removeBatteryTypeLabel);
|
|
|
+
|
|
|
return parameterPanel;
|
|
|
}
|
|
|
|
|
@@ -242,6 +279,8 @@ public class ControlAlgorithm implements AddOn {
|
|
|
// init
|
|
|
renewableProducers = getRenewableProducers();
|
|
|
consumers = getConsumers();
|
|
|
+ addCertainKindOfBatteries(Integer.parseInt(addBatteryTextfield.getText()),addBatteryTypeTextfield.getText());
|
|
|
+ removeCertainKindOfBatteries(Integer.parseInt(removeBatteryTextfield.getText()), removeBatteryTypeTextfield.getText());
|
|
|
totalNumberOfHouses = consumers.size();
|
|
|
powerplant = control.getSimManager().getPowerplant();// DANGER DONT GIVE NULL
|
|
|
setPowerPlantBlackstartResistance(-Float.parseFloat(blackstartEnergyrequierementTextfield.getText()));
|
|
@@ -277,7 +316,7 @@ public class ControlAlgorithm implements AddOn {
|
|
|
blackstartStartTime = Integer.parseInt(blackstartStartTimeTextfield.getText());
|
|
|
control.getModel().setIterations(Integer.parseInt(simulationDurationTextfield.getText()));
|
|
|
for (StorageElement se : getStorageElements()) {
|
|
|
- if ("Car".equals(se.getEleName())) {
|
|
|
+ if (se.getEleName().startsWith("Car")) {
|
|
|
se.setStateOfCharge(Float.parseFloat(carStartCharge.getText()));
|
|
|
} else {
|
|
|
se.setStateOfCharge(Float.parseFloat(storageStartCharge.getText()));
|
|
@@ -554,6 +593,87 @@ public class ControlAlgorithm implements AddOn {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ private void removeCertainKindOfBatteries(int amount, String kind){
|
|
|
+ int start = highestAmountOfBatteriesOfCertainKindInALLHouse(kind);
|
|
|
+ while(amount > 0){
|
|
|
+ for (HolonObject hO : consumers){
|
|
|
+ if(numberOfCertainKindOfBatteryPerHouse(hO, kind) == start) {
|
|
|
+ if (delSingleElem(hO, kind)) {
|
|
|
+ amount--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(amount == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ start--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean delSingleElem(HolonObject hO, String kind){
|
|
|
+ for(HolonElement ele : hO.getElements()){
|
|
|
+ if(ele.getEleName().startsWith(kind)){
|
|
|
+// control.deleteElementCanvas(hO.getId(),ele.getId());
|
|
|
+ hO.getElements().remove(ele);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private int highestAmountOfBatteriesOfCertainKindInALLHouse(String kind){
|
|
|
+ int count = 0;
|
|
|
+ for (HolonObject hO : consumers){
|
|
|
+ int eleCount = numberOfCertainKindOfBatteryPerHouse(hO, kind);
|
|
|
+ if(eleCount > count){
|
|
|
+ count = eleCount;
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addCertainKindOfBatteries(int amount, String kind){
|
|
|
+ int start = 0;
|
|
|
+ while(amount > 0){
|
|
|
+ for (HolonObject hO : consumers){
|
|
|
+ if(numberOfCertainKindOfBatteryPerHouse(hO, kind) <= start){
|
|
|
+ if(kind.startsWith("Car")){
|
|
|
+ hO.addElement(new StorageElement(kind + start,
|
|
|
+ 1,
|
|
|
+ 0,
|
|
|
+ control.getModel(),
|
|
|
+ 75000,
|
|
|
+ 22000,
|
|
|
+ 22000));
|
|
|
+ }else{
|
|
|
+ hO.addElement(new StorageElement(kind + start,
|
|
|
+ 1,
|
|
|
+ 0,
|
|
|
+ control.getModel(),
|
|
|
+ 13500,
|
|
|
+ 46000,
|
|
|
+ 4600));
|
|
|
+ }
|
|
|
+ amount--;
|
|
|
+ }
|
|
|
+ if(amount == 0){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ start++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int numberOfCertainKindOfBatteryPerHouse(HolonObject house, String kind){
|
|
|
+ int count = 0;
|
|
|
+ for(HolonElement ele : house.getElements()){
|
|
|
+ if(ele.getEleName().startsWith(kind)){
|
|
|
+ count++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
private void writeOutputTxt(){
|
|
|
println("totalSOC: " + SPC.getTotalSoc() + "W/m");
|
|
|
try {
|
|
@@ -568,6 +688,7 @@ public class ControlAlgorithm implements AddOn {
|
|
|
println("blackstart resi: " + getEnergyRequiredForPowerplantBlackstart());
|
|
|
println("renewable: " + currentRenewableProduction());
|
|
|
println("totalnumber of houses: " + totalNumberOfHouses);
|
|
|
+ println("totalcars: " + SPC.getTotalCarNumber() + " totalhomebatteries: " + SPC.getTotalHomeBatteryNumber());
|
|
|
println("possiblestorage: " + SPC.currentPossibleStorageProduction());
|
|
|
println("totalSOC: " + SPC.getTotalSoc() + "W/m");
|
|
|
for (StorageElement ele :
|