@enervance/insight-cim-model 0.0.161 → 0.0.162

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/constants/cim-class-names.d.ts +10 -0
  2. package/dist/constants/cim-class-names.js +11 -1
  3. package/dist/constants/cim-class-names.js.map +1 -1
  4. package/dist/converter/integral7/converter.integral7.d.ts +3 -1
  5. package/dist/converter/integral7/converter.integral7.js +219 -243
  6. package/dist/converter/integral7/converter.integral7.js.map +1 -1
  7. package/dist/converter/integral7/dl-convert/data-manager.d.ts +1 -10
  8. package/dist/converter/integral7/dl-convert/data-manager.js +0 -34
  9. package/dist/converter/integral7/dl-convert/data-manager.js.map +1 -1
  10. package/dist/converter/integral7/dl-convert/db/data-types.d.ts +0 -9
  11. package/dist/converter/integral7/dl-convert/db/data-types.js +0 -11
  12. package/dist/converter/integral7/dl-convert/db/data-types.js.map +1 -1
  13. package/dist/converter/integral7/dl-convert/dl-converter-i7.d.ts +153 -99
  14. package/dist/converter/integral7/dl-convert/dl-converter-i7.js +3401 -1315
  15. package/dist/converter/integral7/dl-convert/dl-converter-i7.js.map +1 -1
  16. package/dist/converter/integral7/dl-convert/executor.d.ts +3 -1
  17. package/dist/converter/integral7/dl-convert/executor.js +4 -3
  18. package/dist/converter/integral7/dl-convert/executor.js.map +1 -1
  19. package/dist/converter/integral7/model/dl-utils/util-functions.d.ts +7 -35
  20. package/dist/converter/integral7/model/dl-utils/util-functions.js +7 -659
  21. package/dist/converter/integral7/model/dl-utils/util-functions.js.map +1 -1
  22. package/dist/converter/integral7/{util-asset.model.d.ts → util-cim.model.d.ts} +5 -1
  23. package/dist/converter/integral7/{util-asset.model.js → util-cim.model.js} +10 -4
  24. package/dist/converter/integral7/util-cim.model.js.map +1 -0
  25. package/dist/converter/integral7/utils-cgmes-export.js +2 -0
  26. package/dist/converter/integral7/utils-cgmes-export.js.map +1 -1
  27. package/dist/converter/integral7/utils-trafo3w.d.ts +2 -2
  28. package/dist/converter/integral7/utils-trafo3w.js +21 -4
  29. package/dist/converter/integral7/utils-trafo3w.js.map +1 -1
  30. package/dist/converter/integral7/utils.d.ts +10 -22
  31. package/dist/converter/integral7/utils.js +187 -327
  32. package/dist/converter/integral7/utils.js.map +1 -1
  33. package/dist/etl/etl-dppower/etl-dppower.d.ts +15 -0
  34. package/dist/etl/etl-dppower/etl-dppower.js +204 -0
  35. package/dist/etl/etl-dppower/etl-dppower.js.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +3 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/interfaces/model/wires/IRegulatingCondEq.d.ts +3 -0
  40. package/dist/model/assetinfo/CableInfo.d.ts +7 -0
  41. package/dist/model/assetinfo/CableInfo.js +49 -0
  42. package/dist/model/assetinfo/CableInfo.js.map +1 -1
  43. package/dist/model/assetinfo/OverheadWireInfo.d.ts +7 -0
  44. package/dist/model/assetinfo/OverheadWireInfo.js +49 -0
  45. package/dist/model/assetinfo/OverheadWireInfo.js.map +1 -1
  46. package/dist/model/assets/Facility.js +17 -3
  47. package/dist/model/assets/Facility.js.map +1 -1
  48. package/dist/model/assets/LifecycleDate.d.ts +1 -0
  49. package/dist/model/assets/LifecycleDate.js +3 -0
  50. package/dist/model/assets/LifecycleDate.js.map +1 -1
  51. package/dist/model/common/Location.js +1 -1
  52. package/dist/model/common/Location.js.map +1 -1
  53. package/dist/model/core/ACDCTerminal.js +2 -1
  54. package/dist/model/core/ACDCTerminal.js.map +1 -1
  55. package/dist/model/core/Equipment.js +6 -1
  56. package/dist/model/core/Equipment.js.map +1 -1
  57. package/dist/model/core/Substation.js +7 -7
  58. package/dist/model/core/Substation.js.map +1 -1
  59. package/dist/model/dc/DCLine.js +17 -17
  60. package/dist/model/dc/DCLineSegment.js +25 -25
  61. package/dist/model/diagram/DiagramObject.js +2 -2
  62. package/dist/model/diagram/DiagramObject.js.map +1 -1
  63. package/dist/model/equivalents/EquivalentInjection.d.ts +10 -0
  64. package/dist/model/equivalents/EquivalentInjection.js +111 -0
  65. package/dist/model/equivalents/EquivalentInjection.js.map +1 -1
  66. package/dist/model/extensions/amprion/core/AMPRIONBay.js.map +1 -1
  67. package/dist/model/extensions/enervance/assets/EVWireObject.js +7 -1
  68. package/dist/model/extensions/enervance/assets/EVWireObject.js.map +1 -1
  69. package/dist/model/extensions/integral/wires/INTEGRALAsynchronousMachine.d.ts +0 -1
  70. package/dist/model/extensions/integral/wires/INTEGRALAsynchronousMachine.js +0 -3
  71. package/dist/model/extensions/integral/wires/INTEGRALAsynchronousMachine.js.map +1 -1
  72. package/dist/model/extensions/neplan-westnetz/core/WNConnectivityNode.js +8 -1
  73. package/dist/model/extensions/neplan-westnetz/core/WNConnectivityNode.js.map +1 -1
  74. package/dist/model/loadmodel/ConformLoadGroup.js +22 -22
  75. package/dist/model/loadmodel/LoadArea.js +21 -21
  76. package/dist/model/loadmodel/SubLoadArea.js +22 -22
  77. package/dist/model/wires/ACLineSegment.d.ts +3 -0
  78. package/dist/model/wires/ACLineSegment.js +7 -1
  79. package/dist/model/wires/ACLineSegment.js.map +1 -1
  80. package/dist/model/wires/AsynchronousMachine.js +0 -1
  81. package/dist/model/wires/AsynchronousMachine.js.map +1 -1
  82. package/dist/model/wires/ExternalNetworkInjection.js.map +1 -1
  83. package/dist/model/wires/PowerTransformer.js +2 -0
  84. package/dist/model/wires/PowerTransformer.js.map +1 -1
  85. package/dist/model/wires/PowerTransformerEnd.js +1 -0
  86. package/dist/model/wires/PowerTransformerEnd.js.map +1 -1
  87. package/dist/model/wires/RatioTapChanger.js +1 -1
  88. package/dist/model-container/enum/EVSourceSystemKind.d.ts +1 -0
  89. package/dist/model-container/enum/EVSourceSystemKind.js +1 -0
  90. package/dist/model-container/enum/EVSourceSystemKind.js.map +1 -1
  91. package/dist/model-container/model/ModelContainer.d.ts +5 -0
  92. package/dist/model-container/model/ModelContainer.js +9 -0
  93. package/dist/model-container/model/ModelContainer.js.map +1 -1
  94. package/dist/util/util-create.d.ts +1 -1
  95. package/dist/util/util-create.js +4 -2
  96. package/dist/util/util-create.js.map +1 -1
  97. package/dist/util/utils.d.ts +1 -1
  98. package/dist/util/utils.js +4 -2
  99. package/dist/util/utils.js.map +1 -1
  100. package/dist/utils2/cim.model.utils.js +6 -0
  101. package/dist/utils2/cim.model.utils.js.map +1 -1
  102. package/dist/utils2/common.utils.d.ts +1 -0
  103. package/dist/utils2/common.utils.js +6 -2
  104. package/dist/utils2/common.utils.js.map +1 -1
  105. package/dist/utils2/fuseki.utils.js +7 -1
  106. package/dist/utils2/fuseki.utils.js.map +1 -1
  107. package/dist/utils2/import.utils.d.ts +2 -1
  108. package/dist/utils2/import.utils.js +9 -3
  109. package/dist/utils2/import.utils.js.map +1 -1
  110. package/dist/utils2/parser.utils.js +7 -7
  111. package/dist/utils2/parser.utils.js.map +1 -1
  112. package/package.json +5 -2
  113. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.d.ts +0 -157
  114. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.js +0 -3521
  115. package/dist/converter/integral7/dl-convert/dl-converter-i7-2.js.map +0 -1
  116. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.d.ts +0 -3
  117. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.js +0 -3
  118. package/dist/converter/integral7/dl-convert/dl-converter-i7.types.js.map +0 -1
  119. package/dist/converter/integral7/util-asset.model.js.map +0 -1
@@ -1,28 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getIntegral7IDs = exports.createTempDirPath = exports.determineEquipmentContainer = exports.getSchemaValue = exports.writeZipFile = exports.generateNodeStream = exports.writeFile = exports.generateFuelType = exports.getNumber = exports.getDescription = exports.getPMech = exports.getActiveReactivePower2 = exports.getActiveReactivePower = exports.getTapChangerStepArray = exports.getTapChangerStepCount = exports.setTapChangerControl = exports.createPhaseTapChanger = exports.createRatioTapChanger = exports.getConductingEquipmentTerminalBySecNumber = exports.getTrafoIr = exports.getTrafoIleer = exports.getTrafoPleer = exports.calculateStatVarComRating = exports.calculateG0ch = exports.calculateBC = exports.calculateG0PerSection = exports.calculateGPerSection = exports.calculateB0PerSection = exports.calculateBPerSection = exports.calculateB = exports.calculateG = exports.calculateXSeriesCompensator = exports.calculateRSeriesCompensator = exports.calculateX = exports.calculateRatedIdc = exports.calculateR = exports.calculateSigma = exports.getUrTrafo = exports.getSrTrafo = exports.getUkrTrafo = exports.getPkrTrafo = exports.getSchaltgruppeAngleClock = exports.getSchaltgruppe = exports.getTerminalUn = exports.getU = exports.getLine = exports.getLineByAttribute = exports.getName = exports.ueberpruefeZeichenkette = exports.deepcopy = void 0;
4
- exports.getSpannungsband = exports.createRegulatingControl = exports.createWriteStreamPromise = exports.getPSRType = exports.putUUIDtoI7Ids = void 0;
3
+ exports.putUUIDtoI7Ids = exports.getIntegral7IDs = exports.createTempDirPath = exports.determineEquipmentContainer = exports.getSchemaValue = exports.writeZipFile = exports.generateNodeStream = exports.writeFile = exports.generateFuelType = exports.getNumber = exports.getDescription = exports.getPMech = exports.getActiveReactivePower2 = exports.getActiveReactivePower = exports.getTapChangerStepArray = exports.getTapChangerStepCount = exports.setTapChangerControl = exports.getConductingEquipmentTerminalBySecNumber = exports.getTrafoIr = exports.getTrafoIleer = exports.getTrafoPleer = exports.calculateStatVarComRating = exports.calculateG0ch = exports.calculateBC = exports.calculateG0PerSection = exports.calculateGPerSection = exports.calculateB0PerSection = exports.calculateBPerSection = exports.calculateB = exports.calculateG = exports.calculateXSeriesCompensator = exports.calculateRSeriesCompensator = exports.calculateX = exports.calculateRatedIdc = exports.calculateR = exports.calculateSigma = exports.getX0R0Transformer = exports.getUrTrafo = exports.getSrTrafo = exports.getUkrTrafo = exports.getPkrTrafo = exports.getSchaltgruppeAngleClock = exports.getSchaltgruppe = exports.getTerminalUn = exports.getU = exports.getLine = exports.getLineByAttribute = exports.getName = exports.ueberpruefeZeichenkette = exports.deepcopy = void 0;
4
+ exports.getSpannungsband = exports.getGroundingCountFromWindingConnection = exports.calculateComplexZeroSequImpedanzenTrafo = exports.createRegulatingControl = exports.createWriteStreamPromise = exports.getPSRType = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const fs = require("fs");
7
- const PhaseTapChangerAsymmetrical_1 = require("../../model/wires/PhaseTapChangerAsymmetrical.js");
8
- const PhaseTapChangerLinear_1 = require("../../model/wires/PhaseTapChangerLinear.js");
9
7
  const Bay_1 = require("../../model/core/Bay.js");
10
8
  const VoltageLevel_1 = require("../../model/core/VoltageLevel.js");
11
9
  const WindingConnection_1 = require("../../model/wires/WindingConnection.js");
12
10
  const common_utils_1 = require("../../utils2/common.utils.js");
13
- const RatioTapChangerTable_1 = require("../../model/wires/RatioTapChangerTable.js");
14
- const util_create_1 = require("../../util/util-create.js");
15
- const RatioTapChanger_1 = require("../../model/wires/RatioTapChanger.js");
16
- const TransformerControlMode_1 = require("../../model/wires/TransformerControlMode.js");
17
- const TapChangerControl_1 = require("../../model/wires/TapChangerControl.js");
18
- const RegulatingControlModeKind_1 = require("../../model/wires/RegulatingControlModeKind.js");
19
- const UnitMultiplier_1 = require("../../model/domain/UnitMultiplier.js");
20
11
  const FuelType_1 = require("../../model/generation/FuelType.js");
21
12
  const RegulatingControl_1 = require("../../model/wires/RegulatingControl.js");
22
13
  const FossilFuel_1 = require("../../model/generation/FossilFuel.js");
23
14
  const PSRType_1 = require("../../model/core/PSRType.js");
24
15
  const parser_utils_1 = require("../../utils2/parser.utils.js");
25
16
  const cim_class_names_1 = require("../../constants/cim-class-names.js");
17
+ const complex_js_1 = require("complex.js");
26
18
  function deepcopy(converter) {
27
19
  let converter_copy = undefined;
28
20
  converter_copy = eval(`new ${converter.constructor.name}(getUUID(),)`);
@@ -397,6 +389,18 @@ function getUrTrafo(i7Data, powerTransformerInfo, endNumber) {
397
389
  return 0;
398
390
  }
399
391
  exports.getUrTrafo = getUrTrafo;
392
+ function getX0R0Transformer(i7Data, powerTransformerInfo, varNameI7) {
393
+ let ret_val = undefined;
394
+ const prop = `${varNameI7}`;
395
+ if (i7Data[prop] !== undefined && (0, parser_utils_1.isNumericI7)(i7Data[prop])) { //read data from i7 net data object
396
+ ret_val = i7Data[prop];
397
+ }
398
+ else if (powerTransformerInfo !== undefined && powerTransformerInfo[prop] !== undefined && (0, parser_utils_1.isNumericI7)(powerTransformerInfo[prop])) { //read data from net data object type
399
+ ret_val = powerTransformerInfo[prop];
400
+ }
401
+ return ret_val;
402
+ }
403
+ exports.getX0R0Transformer = getX0R0Transformer;
400
404
  /**
401
405
  * @param fn Nennfrquenz in Hz
402
406
  * @param pn Nennwirkleistung in MW
@@ -712,321 +716,6 @@ function getConductingEquipmentTerminalBySecNumber(conductingEquipment, sequence
712
716
  return;
713
717
  }
714
718
  exports.getConductingEquipmentTerminalBySecNumber = getConductingEquipmentTerminalBySecNumber;
715
- function createRatioTapChanger(i7Data, transformerEnd, cimModel, neutralU, terminals, knotenSpannungsband) {
716
- // ist ein Stufenschalter vorhanden?
717
- /**
718
- * 0 - obere Spannungsseite (Anschluss 1)
719
- * 1 - obere Spannungsseite (Anschluss 1)
720
- * 2 - mittlere Spannungsseite (Anschluss 1)
721
- * 3 - Niederspannungsseite (Anschluss 2)
722
- * ? - Externer Knoten (Anschluss 3)
723
- * */
724
- /**
725
- * 1 obere Spannungsseite
726
- * 2 mittlere Spannungsseite
727
- * 3 Niederspannungsseite
728
- * */
729
- /** Regelung */
730
- /** Spezialregelung - trafo_spezial
731
- * 0 - keine Spezialitäten
732
- * Winkel == 0 Grad => Längsregler => RatioTapChanger
733
- * Querregler Winkel != 0 => Querregler => PhaseTapChanger => PhaseTapChangerLinear | PhaseTapChangerTabular
734
- * 1 - Typ Meeden
735
- * Symetrischer Querregler => PhaseTapChangerSymmetrical
736
- * 2 - Typ Helmstedt
737
- * Asymetrischer Querregler => PhaseTapChangerAsymmetrical
738
- * */
739
- const wicklungsnummer = transformerEnd.endNumber;
740
- /** Normieren auf die Wicklungsnummer, da 0 obere Spannungsseite ist */
741
- const gestufteSeite = i7Data[`gestufte_seite_s${wicklungsnummer}`] === 0 ? 1 : i7Data[`gestufte_seite_s${wicklungsnummer}`];
742
- //const gestufteSeiteS1 = i7Data.gestufte_seite_s1 === 0 ? 1 : i7Data.gestufte_seite_s1;
743
- if (gestufteSeite === wicklungsnummer) {
744
- const lowStep = i7Data[`minstufe_s${transformerEnd.endNumber}`];
745
- const highStep = i7Data[`maxstufe_s${transformerEnd.endNumber}`];
746
- const neutralStep = i7Data[`mittelstufe_s${transformerEnd.endNumber}`];
747
- const currentStep = i7Data[`aktstufe_s${transformerEnd.endNumber}`];
748
- /** die Stufenpositionen werden auf 1..n normiert
749
- * Zu Betimmung der aktuellen Stufe, wird ein Array mit den i7 Stufennummern angelegt.
750
- * Der Index wird später die verwendet, um die normierte Stufenposition zu bestimmen */
751
- const i7TapArray = getTapChangerStepArray(lowStep, highStep);
752
- const mappedCurrentStep = i7TapArray.indexOf(currentStep) + 1;
753
- const lowerVoltageStepCount = getTapChangerStepCount(lowStep, neutralStep); // 9
754
- const increaseVoltageStepCount = getTapChangerStepCount(neutralStep, highStep);
755
- const lowerVoltageStepIncrement = Math.abs(i7Data[`umin_s${transformerEnd.endNumber}`]) /*/ 100*/ / lowerVoltageStepCount * -1; // -0.01778 => -1.78%
756
- let increaseVoltageStepIncrement = Math.abs(i7Data[`umax_s${transformerEnd.endNumber}`]) /*/ 100*/ / lowerVoltageStepCount; // 0.01778 => 1.78%
757
- increaseVoltageStepIncrement = isNaN(increaseVoltageStepIncrement) ? 1 : increaseVoltageStepIncrement;
758
- const ratioTapChangerTable = new RatioTapChangerTable_1.RatioTapChangerTable(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W${transformerEnd.endNumber}`);
759
- // Spannung verringern
760
- for (let i = 0; i < lowerVoltageStepCount; i++) {
761
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, i + 1, 1 + (lowerVoltageStepIncrement * (lowerVoltageStepCount - i)));
762
- }
763
- // neutral Step
764
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, lowerVoltageStepCount + 1, 1);
765
- // Spannung erhoehen
766
- for (let i = 0; i < increaseVoltageStepCount; i++) {
767
- const step = (lowerVoltageStepCount + 1) + (i + 1);
768
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, step, 1 + (increaseVoltageStepIncrement * (i + 1)));
769
- }
770
- const ratioTapChanger = new RatioTapChanger_1.RatioTapChanger(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W${transformerEnd.endNumber}`);
771
- // Attribute
772
- ratioTapChanger.stepVoltageIncrement = increaseVoltageStepIncrement;
773
- ratioTapChanger.tculControlMode = TransformerControlMode_1.TransformerControlMode.volt;
774
- ratioTapChanger.ltcFlag = false;
775
- ratioTapChanger.lowStep = 1;
776
- ratioTapChanger.highStep = ratioTapChangerTable.ratioTapChangerTablePoints.length;
777
- ratioTapChanger.neutralStep = i7TapArray.indexOf(neutralStep) + 1;
778
- ratioTapChanger.normalStep = ratioTapChanger.neutralStep;
779
- ratioTapChanger.step = mappedCurrentStep;
780
- ratioTapChanger.transformerEnd = transformerEnd;
781
- transformerEnd.ratioTapChanger = ratioTapChanger;
782
- ratioTapChanger.neutralU = neutralU;
783
- ratioTapChanger.ratioTapChangerTableUUID = ratioTapChangerTable.mrid;
784
- ratioTapChangerTable.ratioTapChanger = ratioTapChanger;
785
- // Ist die Regelungung aktiv?
786
- // wenn ja, welche Art=
787
- const regelung = +i7Data[`regelung_s${transformerEnd.endNumber}`];
788
- if (regelung > 0) {
789
- /** Ausprägungen
790
- * 0 -> keine automatische Stufung
791
- * 1 -> Spannungsbetragsregelung
792
- * 2 -> Wirkflussvorgabe
793
- * 3 -> Stromkompoundierung -> stromabhängige Spannungsregelung
794
- * 4 -> Blindleitungsbilazierung
795
- * */
796
- const tapChangerControl = new TapChangerControl_1.TapChangerControl(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
797
- tapChangerControl.discrete = true;
798
- /** TODO usoll, umin, umax bestimmen -> Anschlusskoten bestimmen (ssab oder abzweigknoten) */
799
- const umax = getSpannungsband('umax', knotenSpannungsband, neutralU);
800
- const umin = getSpannungsband('umin', knotenSpannungsband, neutralU);
801
- const usoll = getSpannungsband('usoll', knotenSpannungsband, (umax + umin) / 2);
802
- const pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe`]) ? +i7Data[`p_vorgabe`] : undefined; // PST Trafo
803
- switch (regelung) {
804
- case 1: {
805
- ratioTapChanger.controlEnabled = true;
806
- tapChangerControl.enabled = true;
807
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
808
- tapChangerControl.targetValue = usoll;
809
- tapChangerControl.targetDeadband = umax - usoll;
810
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
811
- break;
812
- }
813
- case 2: {
814
- ratioTapChanger.controlEnabled = true;
815
- tapChangerControl.enabled = true;
816
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.activePower;
817
- tapChangerControl.targetValue = pVorgabe;
818
- // TODO targetDeadband
819
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M;
820
- break;
821
- }
822
- case 3: {
823
- ratioTapChanger.controlEnabled = true;
824
- tapChangerControl.enabled = true;
825
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.currentFlow;
826
- // TODO targetDeadband
827
- // TODO targetValue
828
- // TODO targetValueUnitMultiplier
829
- break;
830
- }
831
- case 4: {
832
- ratioTapChanger.controlEnabled = true;
833
- tapChangerControl.enabled = true;
834
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.reactivePower;
835
- // TODO targetDeadband
836
- // TODO targetValue
837
- // TODO targetValueUnitMultiplier
838
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M;
839
- break;
840
- }
841
- }
842
- // Assoziationen
843
- ratioTapChanger.tapChangerControl = tapChangerControl;
844
- tapChangerControl.addTapChanger(ratioTapChanger);
845
- cimModel.addTapChangerControl(tapChangerControl);
846
- }
847
- else {
848
- ratioTapChanger.controlEnabled = false;
849
- }
850
- // Spannungsgeregelter Anschluss
851
- /**
852
- * 0 - obere Spannungsseite (Anschluss 1)
853
- * 1 - mittlere Spannungsseite (Anschluss 2)
854
- * 2 - Niederspannungsseite (Anschluss 3)
855
- * 3 - Externer Knoten
856
- * */
857
- /** Normieren auf die Wicklungsnummer, da 0 neben 1 obere Spannungsseite angibt */
858
- const terminal = knotenSpannungsband ? knotenSpannungsband.terminals.find(term => term.connected !== false) : undefined;
859
- if (terminal) {
860
- setTapChangerControl(ratioTapChanger, terminal.uuid);
861
- }
862
- else {
863
- if (transformerEnd.ratioTapChanger) {
864
- transformerEnd.ratioTapChanger.tapChangerControl = undefined;
865
- transformerEnd.ratioTapChanger.tapChangerControlUUID = undefined;
866
- }
867
- }
868
- //SV Profil: Aktuelle Stufenstellung
869
- /* const svTapStep = new SvTapStep(CommonUtils.generateUUID(), i7TapArray.indexOf(currentStep) + 1, ratioTapChanger);
870
- ratioTapChanger.svTapStepUUID = svTapStep.mrid;
871
- cimModel.addSvTapStep(svTapStep);*/
872
- cimModel.addRatioTapChanger(ratioTapChanger);
873
- cimModel.addRatioTapChangerTable(ratioTapChangerTable);
874
- }
875
- }
876
- exports.createRatioTapChanger = createRatioTapChanger;
877
- function createPhaseTapChanger(i7Data, transformerEnd, cimModel, neutralU, trafoTerminals, knotenSpannungsband) {
878
- // ist ein Stufenschalter vorhanden?
879
- /**
880
- * 0 - obere Spannungsseite (Anschluss 1)
881
- * 1 - obere Spannungsseite (Anschluss 1)
882
- * 2 - mittlere Spannungsseite (Anschluss 1)
883
- * 3 - Niederspannungsseite (Anschluss 2)
884
- * ? - Externer Knoten (Anschluss 3)
885
- * */
886
- /**
887
- * 1 obere Spannungsseite
888
- * 2 mittlere Spannungsseite
889
- * 3 Niederspannungsseite
890
- * */
891
- /** Regelung */
892
- /** Spezialregelung - trafo_spezial
893
- * 0 - keine Spezialitäten
894
- * Winkel == 0 Grad => Längsregler => RatioTapChanger
895
- * Querregler Winkel != 0 => Querregler => PhaseTapChanger => PhaseTapChangerLinear | PhaseTapChangerTabular
896
- * 1 - Typ Meeden
897
- * Symetrischer Querregler => PhaseTapChangerSymmetrical
898
- * 2 - Typ Helmstedt
899
- * Asymetrischer Querregler => PhaseTapChangerAsymmetrical
900
- * */
901
- const wicklungsnummer = transformerEnd.endNumber;
902
- /** Normieren auf die Wicklungsnummer, da 0 obere Spannungsseite ist */
903
- const gestufteSeite = i7Data[`gestufte_seite_s${wicklungsnummer}`] === 0 ? 1 : i7Data[`gestufte_seite_s${wicklungsnummer}`];
904
- if (gestufteSeite === wicklungsnummer) {
905
- const spezialregelung = i7Data.trafo_spezial;
906
- /* const tapChangerControl = new TapChangerControl(CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
907
- // TODO
908
- tapChangerControl.mode = RegulatingControlModeKind.activePower;
909
- tapChangerControl.discrete = true;*/
910
- let phaseTapChanger;
911
- switch (spezialregelung) {
912
- case (2): {
913
- const phaseTapChangerAsync = new PhaseTapChangerAsymmetrical_1.PhaseTapChangerAsymmetrical(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
914
- phaseTapChangerAsync.windingConnectionAngle = (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${transformerEnd.endNumber}`]);
915
- phaseTapChanger = phaseTapChangerAsync;
916
- cimModel.addPhaseTapChangerAsymmetrical(phaseTapChangerAsync);
917
- break;
918
- }
919
- default: {
920
- // 0 - keine Spezialitäten
921
- // 1 - Typ Meeden
922
- const phaseTapChangerLinear = new PhaseTapChangerLinear_1.PhaseTapChangerLinear(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
923
- phaseTapChangerLinear.stepPhaseShiftIncrement = (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${transformerEnd.endNumber}`]);
924
- cimModel.addPhaseTapChangerLinear(phaseTapChangerLinear);
925
- phaseTapChanger = phaseTapChangerLinear;
926
- }
927
- }
928
- // Attribute
929
- phaseTapChanger.ltcFlag = false;
930
- phaseTapChanger.lowStep = i7Data[`minstufe_s${transformerEnd.endNumber}`];
931
- phaseTapChanger.highStep = i7Data[`maxstufe_s${transformerEnd.endNumber}`];
932
- phaseTapChanger.neutralStep = i7Data[`mittelstufe_s${transformerEnd.endNumber}`];
933
- phaseTapChanger.normalStep = phaseTapChanger.neutralStep;
934
- phaseTapChanger.step = i7Data[`aktstufe_s${transformerEnd.endNumber}`];
935
- phaseTapChanger.neutralU = neutralU;
936
- transformerEnd.phaseTapChanger = phaseTapChanger;
937
- phaseTapChanger.transformerEndUUID = transformerEnd.mrid;
938
- // Ist die Regelungung aktiv?
939
- // wenn ja, welche Art=
940
- const regelung = +i7Data[`regelung_s${transformerEnd.endNumber}`];
941
- if (regelung > 0) {
942
- /** Ausprägungen
943
- * 0 -> keine automatische Stufung
944
- * 1 -> Spannungsbetragsregelung
945
- * 2 -> Wirkflussvorgabe
946
- * 3 -> Stromkompoundierung -> stromabhängige Spannungsregelung
947
- * 4 -> Blindleitungsbilazierung
948
- * */
949
- const tapChangerControl = new TapChangerControl_1.TapChangerControl(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
950
- tapChangerControl.discrete = true;
951
- /** TODO usoll, umin, umax bestimmen -> Anschlusskoten bestimmen (ssab oder abzweigknoten) */
952
- const umax = getSpannungsband('umax', knotenSpannungsband, neutralU);
953
- const umin = getSpannungsband('umin', knotenSpannungsband, neutralU);
954
- const usoll = getSpannungsband('usoll', knotenSpannungsband, (umax + umin) / 2);
955
- const pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe`]) ? +i7Data[`p_vorgabe`] : undefined; // PST Trafo
956
- switch (regelung) {
957
- case 1: {
958
- phaseTapChanger.controlEnabled = true;
959
- tapChangerControl.enabled = true;
960
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
961
- tapChangerControl.targetValue = usoll;
962
- tapChangerControl.targetDeadband = umax - usoll;
963
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
964
- break;
965
- }
966
- case 2: {
967
- phaseTapChanger.controlEnabled = true;
968
- tapChangerControl.enabled = true;
969
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.activePower;
970
- tapChangerControl.targetValue = pVorgabe;
971
- // TODO targetDeadband
972
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M;
973
- break;
974
- }
975
- case 3: {
976
- phaseTapChanger.controlEnabled = true;
977
- tapChangerControl.enabled = true;
978
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.currentFlow;
979
- // TODO targetDeadband
980
- // TODO targetValue
981
- // TODO targetValueUnitMultiplier
982
- break;
983
- }
984
- case 4: {
985
- phaseTapChanger.controlEnabled = true;
986
- tapChangerControl.enabled = true;
987
- tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.reactivePower;
988
- // TODO targetDeadband
989
- // TODO targetValue
990
- // TODO targetValueUnitMultiplier
991
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M;
992
- break;
993
- }
994
- }
995
- // Assoziationen
996
- phaseTapChanger.tapChangerControl = tapChangerControl;
997
- tapChangerControl.addTapChanger(phaseTapChanger);
998
- cimModel.addTapChangerControl(tapChangerControl);
999
- }
1000
- else {
1001
- phaseTapChanger.controlEnabled = false;
1002
- }
1003
- // Spannungsgeregelter Anschluss
1004
- /**
1005
- * 0 - obere Spannungsseite (Anschluss 1)
1006
- * 1 - mittlere Spannungsseite (Anschluss 2)
1007
- * 2 - Niederspannungsseite (Anschluss 3)
1008
- * 3 - Externer Knoten
1009
- * */
1010
- /** Normieren auf die Wicklungsnummer, da 0 neben 1 obere Spannungsseite angibt */
1011
- const terminal = knotenSpannungsband ? knotenSpannungsband.terminals.find(term => term.connected !== false) : undefined;
1012
- if (terminal) {
1013
- setTapChangerControl(phaseTapChanger, terminal.uuid);
1014
- }
1015
- else {
1016
- if (transformerEnd.phaseTapChanger) {
1017
- transformerEnd.phaseTapChanger.tapChangerControl = undefined;
1018
- transformerEnd.phaseTapChanger.tapChangerControlUUID = undefined;
1019
- }
1020
- // Phase
1021
- console.log();
1022
- }
1023
- //SV Profil: Aktuelle Stufenstellung
1024
- /* const svTapStep = new SvTapStep(CommonUtils.generateUUID(), i7TapArray.indexOf(currentStep) + 1, ratioTapChanger);
1025
- ratioTapChanger.svTapStepUUID = svTapStep.mrid;
1026
- cimModel.addSvTapStep(svTapStep);*/
1027
- }
1028
- }
1029
- exports.createPhaseTapChanger = createPhaseTapChanger;
1030
719
  function setTapChangerControl(tapChanger, terminalUUID) {
1031
720
  if (tapChanger && terminalUUID) {
1032
721
  if (tapChanger.tapChangerControl) {
@@ -1193,7 +882,7 @@ function getActiveReactivePower(i7Data, mf) {
1193
882
  reactivePowerMf = -1 * Math.sqrt((Math.pow(activePowerMf, 2) - Math.pow(activePowerMf * mf.cosPhiKap, 2)) / Math.pow(mf.cosPhiKap, 2));
1194
883
  }
1195
884
  }
1196
- return [activePower, reactivePower, activePowerMf, reactivePowerMf];
885
+ return [activePower, reactivePower, Math.abs(activePowerMf), Math.abs(reactivePowerMf)];
1197
886
  }
1198
887
  exports.getActiveReactivePower = getActiveReactivePower;
1199
888
  function getActiveReactivePower2(i7Data, mf) {
@@ -1577,6 +1266,177 @@ function createRegulatingControl(uuid, name, enabled, unitMultiplier, mode) {
1577
1266
  return regulatingControl;
1578
1267
  }
1579
1268
  exports.createRegulatingControl = createRegulatingControl;
1269
+ /**Calculate Zero Sequence Impedanzen
1270
+ * @param scZeroSepImp real and imaginary parts of the measured short circuit impedances for the powertransformer endings.
1271
+ * @param idleZeroSeqImp real and imaginary parts of the measured no load impedances for the powertransformer endings.
1272
+ * @param baseVoltage rated voltages of the powertransformer endings.
1273
+ * */
1274
+ function calculateComplexZeroSequImpedanzenTrafo(scZeroSeqImp, idleZeroSeqImp, baseVoltage, groundingCount, powerTransformer) {
1275
+ var _a, _b, _c, _d, _e, _f;
1276
+ const conversion_factor_ur = Math.pow(10, 3);
1277
+ const ur1 = baseVoltage[0];
1278
+ const ur2 = baseVoltage[1];
1279
+ const ur3 = baseVoltage[2];
1280
+ let r00r1 = idleZeroSeqImp[0];
1281
+ let x00r1 = idleZeroSeqImp[1];
1282
+ let r00r2 = idleZeroSeqImp[2];
1283
+ let x00r2 = idleZeroSeqImp[3];
1284
+ let r0kr1 = scZeroSeqImp[0];
1285
+ let x0kr1 = scZeroSeqImp[1];
1286
+ let r0kr2 = scZeroSeqImp[2]; //not needed. overdetermined eq
1287
+ let x0kr2 = scZeroSeqImp[3]; //not needed. overdetermined eq
1288
+ let z01 = new complex_js_1.default(r00r1, x00r1);
1289
+ let z02 = new complex_js_1.default(r00r2, x00r2);
1290
+ let z01k = new complex_js_1.default(r0kr1, x0kr1);
1291
+ let z02k = new complex_js_1.default(r0kr2, x0kr2);
1292
+ let incidents = 0;
1293
+ const impedanz = {
1294
+ r01: 0,
1295
+ r02: 0,
1296
+ r03: 0,
1297
+ x01: 0,
1298
+ x02: 0,
1299
+ x03: 0
1300
+ };
1301
+ let ret_val = undefined;
1302
+ switch (baseVoltage.length) {
1303
+ case (2): { //two-winding-powertransformer
1304
+ if (ur1 >= ur2) {
1305
+ impedanz['r01'] = r00r1;
1306
+ impedanz['r02'] = 0;
1307
+ impedanz['r03'] = undefined;
1308
+ impedanz['x01'] = x00r1;
1309
+ impedanz['x02'] = 0;
1310
+ impedanz['x03'] = undefined;
1311
+ }
1312
+ else {
1313
+ impedanz['r01'] = 0;
1314
+ impedanz['r02'] = r00r2;
1315
+ impedanz['r03'] = undefined;
1316
+ impedanz['x01'] = 0;
1317
+ impedanz['x02'] = x00r2;
1318
+ impedanz['x03'] = undefined;
1319
+ }
1320
+ ret_val = impedanz;
1321
+ break;
1322
+ }
1323
+ case (3): { //three-winding-powertransformer
1324
+ switch (groundingCount) {
1325
+ case (0): {
1326
+ break;
1327
+ }
1328
+ case (1): {
1329
+ break;
1330
+ }
1331
+ case (2): {
1332
+ if (z01k.mul(z02) != z02k.mul(z01)) {
1333
+ if (r00r1 == undefined || x00r1 == undefined) { //z01 not given
1334
+ z01 = (z01k.mul(z02)).div(z02k);
1335
+ r00r1 = z01.re;
1336
+ x00r1 = z01.im;
1337
+ incidents++;
1338
+ }
1339
+ if (r00r2 == undefined || x00r2 == undefined) { //z02 not given
1340
+ z02 = (z01.mul(z02k)).div(z01k);
1341
+ r00r2 = z02.re;
1342
+ x00r2 = z02.im;
1343
+ incidents++;
1344
+ }
1345
+ if (r0kr1 == undefined || x0kr1 == undefined) { //z01k not given
1346
+ z01k = (z01.mul(z02k)).div(z02);
1347
+ r0kr1 = z01k.re;
1348
+ x0kr1 = z01k.im;
1349
+ incidents++;
1350
+ }
1351
+ if (r0kr2 == undefined || x0kr2 == undefined) { //z02k not given
1352
+ z02k = (z01k.mul(z02)).div(z01);
1353
+ r0kr2 = z02k.re;
1354
+ x0kr2 = z02k.im;
1355
+ incidents++;
1356
+ }
1357
+ }
1358
+ const z01OHM = new complex_js_1.default(r00r1, x00r1);
1359
+ const z02OHM = new complex_js_1.default(r00r2, x00r2).mul((Math.pow(ur1 * conversion_factor_ur, 2)) / (Math.pow(ur2 * conversion_factor_ur, 2)));
1360
+ const zsOHM = new complex_js_1.default(r0kr1, x0kr1);
1361
+ const ztOHM = (z02OHM.mul(z01OHM.sub(zsOHM))).sqrt();
1362
+ const z_osOHM = z01OHM.sub(ztOHM);
1363
+ const z_msOHM = z02OHM.sub(ztOHM).mul((Math.pow(ur2 * conversion_factor_ur, 2)) / (Math.pow(ur1 * conversion_factor_ur, 2)));
1364
+ const z_usOHM = ztOHM.mul((Math.pow(ur3 * conversion_factor_ur, 2)) / (Math.pow(ur1 * conversion_factor_ur, 2)));
1365
+ impedanz['r01'] = z_osOHM.re;
1366
+ impedanz['r02'] = z_msOHM.re;
1367
+ impedanz['r03'] = z_usOHM.re;
1368
+ impedanz['x01'] = z_osOHM.im;
1369
+ impedanz['x02'] = z_msOHM.im;
1370
+ impedanz['x03'] = z_usOHM.im;
1371
+ ret_val = impedanz;
1372
+ break;
1373
+ }
1374
+ case (3): {
1375
+ impedanz['r01'] = (_a = powerTransformer.powerTransformerEnd[0]) === null || _a === void 0 ? void 0 : _a.r;
1376
+ impedanz['r02'] = (_b = powerTransformer.powerTransformerEnd[1]) === null || _b === void 0 ? void 0 : _b.r;
1377
+ impedanz['r03'] = (_c = powerTransformer.powerTransformerEnd[2]) === null || _c === void 0 ? void 0 : _c.r;
1378
+ impedanz['x01'] = (_d = powerTransformer.powerTransformerEnd[0]) === null || _d === void 0 ? void 0 : _d.x;
1379
+ impedanz['x02'] = (_e = powerTransformer.powerTransformerEnd[1]) === null || _e === void 0 ? void 0 : _e.x;
1380
+ impedanz['x03'] = (_f = powerTransformer.powerTransformerEnd[2]) === null || _f === void 0 ? void 0 : _f.x;
1381
+ break;
1382
+ }
1383
+ }
1384
+ }
1385
+ default: {
1386
+ ret_val = impedanz;
1387
+ }
1388
+ }
1389
+ //calculation with complex numbers
1390
+ return [ret_val, incidents <= 1];
1391
+ }
1392
+ exports.calculateComplexZeroSequImpedanzenTrafo = calculateComplexZeroSequImpedanzenTrafo;
1393
+ function getGroundingCountFromWindingConnection(powerTransformer) {
1394
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
1395
+ let retVal = undefined;
1396
+ let count = 0;
1397
+ let count2 = 0;
1398
+ let count3 = 0;
1399
+ let powerTransformerEndCount = powerTransformer.powerTransformerEnd.length;
1400
+ switch (powerTransformerEndCount) {
1401
+ case (2): {
1402
+ const powerTransformerEnd1 = powerTransformer.powerTransformerEnd[0];
1403
+ const powerTransformerEnd2 = powerTransformer.powerTransformerEnd[1];
1404
+ count = (((_a = powerTransformerEnd1.connectionKind.match('Y')) === null || _a === void 0 ? void 0 : _a.length) ? (_b = powerTransformerEnd1.connectionKind.match('Y')) === null || _b === void 0 ? void 0 : _b.length : 0);
1405
+ if (count == 0) {
1406
+ count = (((_c = powerTransformerEnd1.connectionKind.match('Z')) === null || _c === void 0 ? void 0 : _c.length) ? (_d = powerTransformerEnd1.connectionKind.match('Z')) === null || _d === void 0 ? void 0 : _d.length : 0);
1407
+ }
1408
+ count2 = (((_e = powerTransformerEnd2.connectionKind.match('Y')) === null || _e === void 0 ? void 0 : _e.length) ? (_f = powerTransformerEnd2.connectionKind.match('Y')) === null || _f === void 0 ? void 0 : _f.length : 0);
1409
+ if (count2 == 0) {
1410
+ count2 = (((_g = powerTransformerEnd2.connectionKind.match('Z')) === null || _g === void 0 ? void 0 : _g.length) ? (_h = powerTransformerEnd2.connectionKind.match('Z')) === null || _h === void 0 ? void 0 : _h.length : 0);
1411
+ }
1412
+ retVal = count + count2;
1413
+ break;
1414
+ }
1415
+ case (3): {
1416
+ const powerTransformerEnd1 = powerTransformer.powerTransformerEnd[0];
1417
+ const powerTransformerEnd2 = powerTransformer.powerTransformerEnd[1];
1418
+ const powerTransformerEnd3 = powerTransformer.powerTransformerEnd[2];
1419
+ count = (((_j = powerTransformerEnd1.connectionKind.match('Y')) === null || _j === void 0 ? void 0 : _j.length) ? (_k = powerTransformerEnd1.connectionKind.match('Y')) === null || _k === void 0 ? void 0 : _k.length : 0);
1420
+ if (count == 0) {
1421
+ count = (((_l = powerTransformerEnd1.connectionKind.match('Z')) === null || _l === void 0 ? void 0 : _l.length) ? (_m = powerTransformerEnd1.connectionKind.match('Z')) === null || _m === void 0 ? void 0 : _m.length : 0);
1422
+ }
1423
+ count2 = (((_o = powerTransformerEnd2.connectionKind.match('Y')) === null || _o === void 0 ? void 0 : _o.length) ? (_p = powerTransformerEnd2.connectionKind.match('Y')) === null || _p === void 0 ? void 0 : _p.length : 0);
1424
+ if (count2 == 0) {
1425
+ count2 = (((_q = powerTransformerEnd2.connectionKind.match('Z')) === null || _q === void 0 ? void 0 : _q.length) ? (_r = powerTransformerEnd2.connectionKind.match('Z')) === null || _r === void 0 ? void 0 : _r.length : 0);
1426
+ }
1427
+ count3 = (((_s = powerTransformerEnd3.connectionKind.match('Y')) === null || _s === void 0 ? void 0 : _s.length) ? (_t = powerTransformerEnd3.connectionKind.match('Y')) === null || _t === void 0 ? void 0 : _t.length : 0);
1428
+ if (count3 == 0) {
1429
+ count3 = (((_u = powerTransformerEnd3.connectionKind.match('Z')) === null || _u === void 0 ? void 0 : _u.length) ? (_v = powerTransformerEnd3.connectionKind.match('Z')) === null || _v === void 0 ? void 0 : _v.length : 0);
1430
+ }
1431
+ retVal = count + count2 + count3;
1432
+ break;
1433
+ }
1434
+ default:
1435
+ retVal = 0;
1436
+ }
1437
+ return retVal;
1438
+ }
1439
+ exports.getGroundingCountFromWindingConnection = getGroundingCountFromWindingConnection;
1580
1440
  function getSpannungsband(propName, knotenSpannungsband, defaultValue) {
1581
1441
  if (knotenSpannungsband) {
1582
1442
  switch (propName) {