resistanceCalculator.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package blackstart;
  2. import classes.*;
  3. import ui.model.Model;
  4. public class resistanceCalculator {
  5. private Model model;
  6. public resistanceCalculator(Model model){
  7. this.model = model;
  8. }
  9. void setDistanceToCalcResistance(HolonObject powerPlant) {
  10. if (powerPlant != null) {
  11. // travers
  12. if (powerPlant.getConnectedTo().size() > 0) {
  13. for (CpsEdge edge : powerPlant.getConnectedTo()) {
  14. if (powerPlant.getId() == edge.getA().getId()) {
  15. traversEdges(edge.getB(), powerPlant, calcEdgeLength(edge));
  16. } else {
  17. traversEdges(edge.getA(), powerPlant, calcEdgeLength(edge));
  18. }
  19. }
  20. } else {
  21. System.out.println("Nothing connected to powerplant");
  22. }
  23. } else {
  24. System.out.println("No powerplant connected");
  25. }
  26. }
  27. private void traversEdges(AbstractCpsObject currentObject, AbstractCpsObject last, double distance) {
  28. if (currentObject.getConnectedTo().size() > 1) { // recursive call for all edges
  29. for (CpsEdge edge : currentObject.getConnectedTo()) {
  30. if (currentObject.getId() == edge.getA().getId()) { // look at which way the edge points
  31. if (last.getId() != edge.getB().getId()) {
  32. traversEdges(edge.getB(), currentObject, distance + calcEdgeLength(edge));
  33. }
  34. } else {
  35. if (last.getId() != edge.getA().getId()) {
  36. traversEdges(edge.getA(), currentObject, distance + calcEdgeLength(edge));
  37. }
  38. }
  39. }
  40. } else { // at leaf
  41. for (HolonElement ele : ((HolonObject) currentObject).getElements()) {
  42. ele.setDistance(distance);
  43. }
  44. }
  45. }
  46. private double calcEdgeLength(CpsEdge edge) {
  47. Position aPos = edge.getA().getPosition();
  48. Position bPos = edge.getB().getPosition();
  49. double xDiff = Math.abs(aPos.x - bPos.x);
  50. double yDiff = Math.abs(aPos.y - bPos.y);
  51. return Math.sqrt(Math.pow(xDiff, 2) + Math.pow(yDiff, 2));
  52. }
  53. public float calcEnergyAfterResistance(float currentEnergy, double distance, float energyRequiredForPowerplantBlackstart){
  54. // 230v kupfer 30mm durchmesser
  55. int volatage = 230;
  56. int diameter = 30;
  57. // kupfer
  58. double specificMaterialResistance = 0.017;
  59. double blackstartResistance = Math.pow(volatage, 2) / energyRequiredForPowerplantBlackstart;
  60. double cableResistance = specificMaterialResistance * (distance / (0.25 * Math.PI * Math.pow(diameter, 2)));
  61. return (float) (1 - (cableResistance / (cableResistance + blackstartResistance))) * currentEnergy;
  62. }
  63. }