@enervance/insight-cim-model 0.0.101 → 0.0.103

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 (104) hide show
  1. package/dist/analysis/analysis-neplan/digi-ons.js +1 -1
  2. package/dist/analysis/analysis-neplan/digi-ons.js.map +1 -1
  3. package/dist/config/load.confings.js +1 -1
  4. package/dist/config/load.confings.js.map +1 -1
  5. package/dist/converter/integral7/ConverterIntegral7.d.ts +0 -0
  6. package/dist/converter/integral7/ConverterIntegral7.js +1 -0
  7. package/dist/converter/integral7/ConverterIntegral7.js.map +1 -0
  8. package/dist/converter/integral7/converter.integral7.d.ts +16 -4
  9. package/dist/converter/integral7/converter.integral7.js +904 -470
  10. package/dist/converter/integral7/converter.integral7.js.map +1 -1
  11. package/dist/converter/integral7/dl-convert/dl-converter-i7.d.ts +1 -0
  12. package/dist/converter/integral7/dl-convert/dl-converter-i7.js +22 -6
  13. package/dist/converter/integral7/dl-convert/dl-converter-i7.js.map +1 -1
  14. package/dist/converter/integral7/interface-i7/data-structures-i7.d.ts +2 -0
  15. package/dist/converter/integral7/interface-i7/data-structures-i7.js.map +1 -1
  16. package/dist/converter/integral7/interface-i7/export-frame-i7.d.ts +2 -0
  17. package/dist/converter/integral7/interface-i7/export-frame-i7.js +9 -0
  18. package/dist/converter/integral7/interface-i7/export-frame-i7.js.map +1 -1
  19. package/dist/converter/integral7/model/integral/Kopfstation.d.ts +15 -2
  20. package/dist/converter/integral7/model/integral/Kopfstation.js +7 -0
  21. package/dist/converter/integral7/model/integral/Kopfstation.js.map +1 -1
  22. package/dist/converter/integral7/model/interfaces.d.ts +41 -3
  23. package/dist/converter/integral7/model/interfaces.js.map +1 -1
  24. package/dist/converter/integral7/sql/integral.sql.d.ts +2 -0
  25. package/dist/converter/integral7/sql/integral.sql.js +16 -8
  26. package/dist/converter/integral7/sql/integral.sql.js.map +1 -1
  27. package/dist/converter/integral7/utils-cgmes-export.js +21 -0
  28. package/dist/converter/integral7/utils-cgmes-export.js.map +1 -1
  29. package/dist/converter/integral7/utils-trafo3w.d.ts +8 -1
  30. package/dist/converter/integral7/utils-trafo3w.js +57 -12
  31. package/dist/converter/integral7/utils-trafo3w.js.map +1 -1
  32. package/dist/converter/integral7/utils.d.ts +45 -11
  33. package/dist/converter/integral7/utils.js +156 -45
  34. package/dist/converter/integral7/utils.js.map +1 -1
  35. package/dist/data-structures/graph/graph.d.ts +1 -0
  36. package/dist/data-structures/graph/graph.js +10 -1
  37. package/dist/data-structures/graph/graph.js.map +1 -1
  38. package/dist/data-structures/tree/GraphTree.js +5 -3
  39. package/dist/data-structures/tree/GraphTree.js.map +1 -1
  40. package/dist/etl/etl-neplan/etl-neplan-contingency-analysis.js +1 -1
  41. package/dist/etl/etl-neplan/etl-neplan-contingency-analysis.js.map +1 -1
  42. package/dist/etl/etl-neplan/etl-neplan-feederline.js.map +1 -1
  43. package/dist/etl/etl-neplan/etl-neplan.js +77 -21
  44. package/dist/etl/etl-neplan/etl-neplan.js.map +1 -1
  45. package/dist/etl/etl-neplan/neplan-contingency-analysis.js +1 -1
  46. package/dist/etl/etl-neplan/neplan-contingency-analysis.js.map +1 -1
  47. package/dist/interfaces/model/core/IFeeder.d.ts +1 -1
  48. package/dist/model/core/BaseVoltage.d.ts +7 -0
  49. package/dist/model/core/BaseVoltage.js +13 -0
  50. package/dist/model/core/BaseVoltage.js.map +1 -1
  51. package/dist/model/core/ConnectivityNode.d.ts +3 -1
  52. package/dist/model/core/ConnectivityNode.js +13 -3
  53. package/dist/model/core/ConnectivityNode.js.map +1 -1
  54. package/dist/model/core/Equipment.js +0 -9
  55. package/dist/model/core/Equipment.js.map +1 -1
  56. package/dist/model/core/Feeder.d.ts +1 -1
  57. package/dist/model/core/Feeder.js +4 -4
  58. package/dist/model/core/Feeder.js.map +1 -1
  59. package/dist/model/core/VoltageLevel.js +1 -1
  60. package/dist/model/core/VoltageLevel.js.map +1 -1
  61. package/dist/model/dc/DCConverterUnit.js +2 -2
  62. package/dist/model/dc/DCConverterUnit.js.map +1 -1
  63. package/dist/model/dc/DCGround.d.ts +10 -0
  64. package/dist/model/dc/DCGround.js +32 -0
  65. package/dist/model/dc/DCGround.js.map +1 -0
  66. package/dist/model/equivalents/EquivalentBranch.d.ts +1 -0
  67. package/dist/model/equivalents/EquivalentBranch.js +1 -58
  68. package/dist/model/equivalents/EquivalentBranch.js.map +1 -1
  69. package/dist/model/extensions/amprion/equivalents/INTEGRALEquivalentBranch.d.ts +17 -0
  70. package/dist/model/extensions/amprion/equivalents/INTEGRALEquivalentBranch.js +64 -0
  71. package/dist/model/extensions/amprion/equivalents/INTEGRALEquivalentBranch.js.map +1 -0
  72. package/dist/model/extensions/enervance/assetinfo/EVPowerTransformerEndInfo.js.map +1 -1
  73. package/dist/model/extensions/enervance/assetinfo/EVPowerTransformerInfo.js.map +1 -1
  74. package/dist/model/extensions/integral/common/INTEGRALMultiplierFactor.js +5 -15
  75. package/dist/model/extensions/integral/common/INTEGRALMultiplierFactor.js.map +1 -1
  76. package/dist/model/extensions/integral/dc/DCConverterUnit.d.ts +11 -0
  77. package/dist/model/extensions/integral/dc/DCConverterUnit.js +34 -0
  78. package/dist/model/extensions/integral/dc/DCConverterUnit.js.map +1 -0
  79. package/dist/model/extensions/integral/equivalents/INTEGRALEquivalentInjection.d.ts +5 -0
  80. package/dist/model/extensions/integral/equivalents/INTEGRALEquivalentInjection.js +5 -0
  81. package/dist/model/extensions/integral/equivalents/INTEGRALEquivalentInjection.js.map +1 -1
  82. package/dist/model/extensions/integral/wires/INTEGRALSynchronousMachine.js +1 -1
  83. package/dist/model/extensions/integral/wires/INTEGRALSynchronousMachine.js.map +1 -1
  84. package/dist/model/extensions/neplan-westnetz/core/WNFeeder.js +4 -4
  85. package/dist/model/extensions/neplan-westnetz/core/WNFeeder.js.map +1 -1
  86. package/dist/model/model/Model.d.ts +0 -0
  87. package/dist/model/model/Model.js +1 -0
  88. package/dist/model/model/Model.js.map +1 -0
  89. package/dist/model-container/model/ModelContainer.d.ts +3 -0
  90. package/dist/model-container/model/ModelContainer.js +5 -0
  91. package/dist/model-container/model/ModelContainer.js.map +1 -1
  92. package/dist/util/collection/util-graph2tree.js +9 -3
  93. package/dist/util/collection/util-graph2tree.js.map +1 -1
  94. package/dist/util/util-create.d.ts +6 -1
  95. package/dist/util/util-create.js +89 -6
  96. package/dist/util/util-create.js.map +1 -1
  97. package/dist/util/util-test.js +109 -0
  98. package/dist/util/util-test.js.map +1 -1
  99. package/dist/util/utils.d.ts +2 -0
  100. package/dist/util/utils.js +12 -1
  101. package/dist/util/utils.js.map +1 -1
  102. package/dist/utils2/cim.model.utils.js +1 -1
  103. package/dist/utils2/cim.model.utils.js.map +1 -1
  104. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGeoCoordinates = exports.ConverterIntegral7 = void 0;
3
+ exports.connectDCGround = exports.createNeutralGroundReturn = exports.createDCGround = exports.getGeoCoordinates = exports.ConverterIntegral7 = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const fs = require("fs");
6
6
  const JSZip = require("jszip");
@@ -25,7 +25,6 @@ const ACDCConverterDCTerminal_1 = require("../../model/dc/ACDCConverterDCTermina
25
25
  const CsConverter_1 = require("../../model/dc/CsConverter.js");
26
26
  const CsOperatingModeKind_1 = require("../../model/dc/CsOperatingModeKind.js");
27
27
  const DCConverterOperatingModeKind_1 = require("../../model/dc/DCConverterOperatingModeKind.js");
28
- const DCConverterUnit_1 = require("../../model/dc/DCConverterUnit.js");
29
28
  const DCLine_1 = require("../../model/dc/DCLine.js");
30
29
  const DCLineSegment_1 = require("../../model/dc/DCLineSegment.js");
31
30
  const DCNode_1 = require("../../model/dc/DCNode.js");
@@ -39,7 +38,6 @@ const UnitMultiplier_1 = require("../../model/domain/UnitMultiplier.js");
39
38
  const UnitSymbol_1 = require("../../model/domain/UnitSymbol.js");
40
39
  const Voltage_1 = require("../../model/domain/Voltage.js");
41
40
  const SynchronousMachineTimeConstantReactance_1 = require("../../model/dynamics/standard-models/synchronous-machine-dynamics/SynchronousMachineTimeConstantReactance.js");
42
- const EquivalentBranch_1 = require("../../model/equivalents/EquivalentBranch.js");
43
41
  const EquivalentInjection_1 = require("../../model/equivalents/EquivalentInjection.js");
44
42
  const AMPRIONBay_1 = require("../../model/extensions/amprion/core/AMPRIONBay.js");
45
43
  const AMPRIONConnectivityNode_1 = require("../../model/extensions/amprion/core/AMPRIONConnectivityNode.js");
@@ -125,6 +123,12 @@ const dl_converter_i7_1 = require("./dl-convert/dl-converter-i7.js");
125
123
  const util_graph2tree_1 = require("../../util/collection/util-graph2tree.js");
126
124
  const parser_utils_1 = require("../../utils2/parser.utils.js");
127
125
  const common_utils_1 = require("../../utils2/common.utils.js");
126
+ const SVCControlMode_1 = require("../../model/wires/SVCControlMode.js");
127
+ const DCGround_1 = require("../../model/dc/DCGround.js");
128
+ const INTEGRALEquivalentBranch_1 = require("../../model/extensions/amprion/equivalents/INTEGRALEquivalentBranch.js");
129
+ const PhaseTapChangerLinear_1 = require("../../model/wires/PhaseTapChangerLinear.js");
130
+ const DCConverterUnit_1 = require("../../model/extensions/integral/dc/DCConverterUnit.js");
131
+ const DCPolarityKind_1 = require("../../model/dc/DCPolarityKind.js");
128
132
  class ConverterIntegral7 {
129
133
  constructor() {
130
134
  /** Exportnetze gemäß Konfiguration */
@@ -745,7 +749,7 @@ class ConverterIntegral7 {
745
749
  integral_prefix_1.MITTIGER_PUNKT +
746
750
  (0, utils_2.ueberpruefeZeichenkette)(i7Data.bezeichner);
747
751
  const vl = new VoltageLevel_1.VoltageLevel((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_', i7Data.un.toString(), '_VL']), i7Data.kurzname, i7Schluessel);
748
- const un = (0, utils_2.getU)(i7Data.un, defaultValuesConfig.DefaultVoltage);
752
+ const un = (0, utils_2.getU)(i7Data.un);
749
753
  const baseVoltage = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, un, this.exportFramesBoundary);
750
754
  vl.baseVoltage = baseVoltage;
751
755
  cimModel.addVoltageLevel(vl);
@@ -839,7 +843,7 @@ class ConverterIntegral7 {
839
843
  if (frame.boundary) {
840
844
  connectivityNode.boundaryPoint = true;
841
845
  }
842
- const un = (0, utils_2.getU)(i7Data.un, defaultValuesConfig.DefaultVoltage);
846
+ const un = (0, utils_2.getU)(i7Data.un);
843
847
  const baseVoltage = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, un, this.exportFramesBoundary);
844
848
  /** Spannungsband */
845
849
  integral7.targetVoltages.set(i7Data.id, { usoll: i7Data.usoll, umin: i7Data.umin, umax: i7Data.umax });
@@ -1052,6 +1056,8 @@ class ConverterIntegral7 {
1052
1056
  const result = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.BELASTUNG, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.BELASTUNG), knotenSfIDs));
1053
1057
  for (const i7Data of result) {
1054
1058
  const load = targetClass === cim_class_names_1.ClassNames.ConformLoad ? new INTEGRALConformLoad_1.INTEGRALConformLoad((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_CL']), i7Data.kurzname) : new EnergyConsumer_1.EnergyConsumer((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_EC']), i7Data.kurzname);
1059
+ const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
1060
+ const spannungslos = (0, parser_utils_1.isBooleanI7)(i7Data.spannungslos) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.spannungslos) : undefined;
1055
1061
  this.setTopologyEnergySourceConsumerObject(cimModel, load, i7Data);
1056
1062
  /** powerData 0 -> Wirkleistung
1057
1063
  * 1 -> Blindleitung */
@@ -1060,9 +1066,11 @@ class ConverterIntegral7 {
1060
1066
  cimModel.addMultiplierFactor(mf);
1061
1067
  load.multiplierFactorUUID = mf.getUUID();
1062
1068
  }
1069
+ /** SSH */
1063
1070
  const powerData = (0, utils_2.getActiveReactivePower)(i7Data, mf);
1064
1071
  load.p = powerData[0];
1065
1072
  load.q = powerData[1];
1073
+ /** Extension */
1066
1074
  load.p_mf = powerData[2] ? powerData[2] : undefined;
1067
1075
  load.q_mf = powerData[3] ? powerData[3] : undefined;
1068
1076
  //TODO
@@ -1070,6 +1078,7 @@ class ConverterIntegral7 {
1070
1078
  conformLoad.qFixed = conformLoad.q; */
1071
1079
  if (targetClass === cim_class_names_1.ClassNames.ConformLoad) {
1072
1080
  const conformLoadGroup = cimModel.getObjectByName(defaultValuesConfig.ConformLoadGroup.name, cim_class_names_1.ClassNames.ConformLoadGroup);
1081
+ //createSvPowerFlow(cimModel, flussinfo3p.p, flusinfo3p)
1073
1082
  load.loadGroup = conformLoadGroup;
1074
1083
  cimModel.addConformLoad(load);
1075
1084
  }
@@ -1140,6 +1149,7 @@ class ConverterIntegral7 {
1140
1149
  });
1141
1150
  }
1142
1151
  convertGeneratoren(cimModel, knotenSfIDs, energyTypesConfig) {
1152
+ var _a;
1143
1153
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1144
1154
  // Generatoren werden als GeneratingUnit und SynchronousMachine abgebildet
1145
1155
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.GENERATOR)) {
@@ -1148,17 +1158,17 @@ class ConverterIntegral7 {
1148
1158
  const genType = this.generatorTypen.get(i7Data.nametyp);
1149
1159
  const synchronousMachine = new INTEGRALSynchronousMachine_1.INTEGRALSynchronousMachine((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_SM'], 32, true), i7Data.kurzname, i7Data.nameprimaertyp);
1150
1160
  const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
1151
- const maxP = (0, parser_utils_1.isNumericI7)(i7Data.p_max) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_max) : 0;
1152
- const minP = (0, parser_utils_1.isNumericI7)(i7Data.p_min) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_min) : 0; //exported by capability curve data
1161
+ const maxP = (0, parser_utils_1.isNumericI7)(i7Data.p_max) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_max) : undefined;
1162
+ const minP = (0, parser_utils_1.isNumericI7)(i7Data.p_min) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_min) : undefined;
1153
1163
  const mf = this.cimModelDefault.multiplierFactors.get(this.integralID2UUID.get(i7Data.multfaktor));
1154
1164
  const powerData = (0, utils_2.getActiveReactivePower)(i7Data, mf);
1155
1165
  const p = powerData[0];
1156
1166
  const q = powerData[1];
1157
1167
  const flagCondenserOperationMode = (0, parser_utils_1.isBooleanI7)(i7Data.flag_phasenschieber) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_phasenschieber) : true;
1158
- const isRotatingPhaseShifter = mf !== undefined && flagCondenserOperationMode && maxP === 0 && minP === 0;
1159
- const isGenerator = (maxP >= 0 || maxP === undefined) && (minP >= 0 || minP === undefined);
1160
- const isMotor = (maxP <= 0 || maxP === undefined) && (minP <= 0 || minP === undefined);
1161
- synchronousMachine.nameprimaertyp = i7Data.nameprimaertyp;
1168
+ const isRotatingPhaseShifter = (mf !== undefined && maxP === 0 && minP === 0) || flagCondenserOperationMode;
1169
+ const isGenerator = (maxP > 0 || maxP === undefined);
1170
+ const isMotor = (minP < 0 || minP === undefined);
1171
+ synchronousMachine.nameprimaertyp = i7Data.nameprimaertyp !== undefined ? i7Data.nameprimaertyp : (genType !== undefined ? genType.nameprimaertyp : undefined);
1162
1172
  /** Set machine type */
1163
1173
  if (isRotatingPhaseShifter && isGenerator && isMotor) {
1164
1174
  synchronousMachine.type = SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenserOrMotor;
@@ -1189,11 +1199,11 @@ class ConverterIntegral7 {
1189
1199
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.motorOrCondenser
1190
1200
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenser
1191
1201
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenserOrMotor);
1192
- const generatorOperationMode = p !== undefined && p >= 0 && (synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generator
1202
+ const generatorOperationMode = p !== undefined && p > 0 && (synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generator
1193
1203
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrMotor
1194
1204
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenser
1195
1205
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenserOrMotor);
1196
- const motorOperationMode = p !== undefined && p <= 0 && (synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.motor
1206
+ const motorOperationMode = p !== undefined && p < 0 && (synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.motor
1197
1207
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrMotor
1198
1208
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.motorOrCondenser
1199
1209
  || synchronousMachine.type === SynchronousMachineKind_1.SynchronousMachineKind.generatorOrCondenserOrMotor);
@@ -1202,7 +1212,6 @@ class ConverterIntegral7 {
1202
1212
  }
1203
1213
  else if (!condenserOperationMode && generatorOperationMode && !motorOperationMode) {
1204
1214
  synchronousMachine.operatingMode = SynchronousMachineOperatingMode_1.SynchronousMachineOperatingMode.generator;
1205
- synchronousMachine.type = SynchronousMachineKind_1.SynchronousMachineKind.generator;
1206
1215
  }
1207
1216
  else if (!condenserOperationMode && !generatorOperationMode && motorOperationMode) {
1208
1217
  synchronousMachine.operatingMode = SynchronousMachineOperatingMode_1.SynchronousMachineOperatingMode.motor;
@@ -1245,60 +1254,54 @@ class ConverterIntegral7 {
1245
1254
  synchronousMachine.q_mf = powerData[3] ? powerData[3] * -1 : undefined; //convert to load sign system
1246
1255
  /** TODO Berechnung überprüfen => DONE */
1247
1256
  /* const s = Math.sqrt(Math.pow(maxP, 2) + Math.pow(maxQvonPmax, 2));*/
1248
- const sr = (0, parser_utils_1.isNumericI7)(i7Data.sr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sr) : genType === null || genType === void 0 ? void 0 : genType.sr;
1257
+ const sr = (0, parser_utils_1.isNumericI7)(i7Data.sr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sr) : ((0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.sr) ? (0, parser_utils_1.convertToNumberI7)(genType.sr) : undefined);
1249
1258
  if (sr && sr >= 0) {
1250
1259
  synchronousMachine.ratedS = sr;
1251
1260
  }
1252
1261
  else {
1253
1262
  synchronousMachine.ratedS = Math.sqrt(Math.pow(maxP, 2) + Math.pow(maxQvonPmax, 2));
1254
1263
  }
1255
- const ur = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : (0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.ur) ? genType.ur : undefined;
1264
+ const ur = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : ((0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.ur) ? genType.ur : undefined);
1256
1265
  const usoll = (0, parser_utils_1.isNumericI7)(i7Data.usoll) ? (0, parser_utils_1.convertToNumberI7)(i7Data.usoll) : ur;
1257
- const cosphir = (0, parser_utils_1.isNumericI7)(i7Data.cosphir) ? (0, parser_utils_1.convertToNumberI7)(i7Data.cosphir) : genType.cosphir;
1258
- synchronousMachine.ratedU = ur ? ur : usoll;
1259
- // TODO
1260
- synchronousMachine.aggregate = true; //synchronousMachine.aggregate = false;
1266
+ const cosphir = (0, parser_utils_1.isNumericI7)(i7Data.cosphir) ? (0, parser_utils_1.convertToNumberI7)(i7Data.cosphir) : ((0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.cosphir) ? (0, parser_utils_1.convertToNumberI7)(genType.cosphir) : undefined);
1267
+ synchronousMachine.ratedU = ur !== undefined ? ur : usoll;
1268
+ synchronousMachine.aggregate = false;
1261
1269
  /** Percent of the coordinated reactive control that comes from this machine.*/
1262
1270
  /** TODO qPercent */
1263
1271
  // synchronousMachine.qPercent = 0; // I7 Export
1264
- /** TODO ratedPowerFactor */
1265
- /**Export des Leistungszahlfaktor cosinus phi.*/
1266
1272
  synchronousMachine.ratedPowerFactor = cosphir ? cosphir : undefined;
1267
- // synchronousMachine.qPercent = i7Data.cos_phi ? (1 - i7Data.cosphir) : 0; // PF/&I7 Export immer 1
1268
- // synchronousMachine.earthing = false; // I7 Export alle nicht geerdet
1269
- synchronousMachine.r = (0, parser_utils_1.isNumericI7)(i7Data.rg) ? (0, parser_utils_1.convertToNumberI7)(i7Data.rg) : genType === null || genType === void 0 ? void 0 : genType.rg;
1270
- // synchronousMachine.r0 = 0;
1271
- // synchronousMachine.r2 = 0;
1272
- // synchronousMachine.x0 = 0;
1273
- // synchronousMachine.x2 = 0;
1274
- // synchronousMachine.satDirectSubtransX = i7Data.xd2s ? i7Data.xd2s : 0;
1273
+ /** EQ-SC */
1274
+ synchronousMachine.earthing = ((_a = i7Data.erdung) === null || _a === void 0 ? void 0 : _a.length) > 0 && i7Data.erdung != 'isoliert' ? true : false;
1275
+ synchronousMachine.r = (0, parser_utils_1.isNumericI7)(i7Data.rg) ? (0, parser_utils_1.convertToNumberI7)(i7Data.rg) : ((0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.rg) ? (0, parser_utils_1.convertToNumberI7)(genType.rg) : undefined);
1276
+ synchronousMachine.r0 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r0) : undefined;
1277
+ synchronousMachine.r2 = 0;
1278
+ synchronousMachine.x0 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x0) : undefined;
1279
+ synchronousMachine.x2 = 0;
1280
+ synchronousMachine.satDirectSubtransX = (0, parser_utils_1.isNumericI7)(i7Data.xd2s) ? (0, parser_utils_1.convertToNumberI7)(i7Data.xd2s) : ((0, parser_utils_1.isNumericI7)(genType === null || genType === void 0 ? void 0 : genType.xd2s) ? (0, parser_utils_1.convertToNumberI7)(genType.xd2s) : undefined);
1275
1281
  // synchronousMachine.earthingStarPointR
1276
1282
  // synchronousMachine.earthingStarPointX
1277
- // ynchronousMachine.ikk: number;
1283
+ synchronousMachine.ikk = (0, parser_utils_1.isNumericI7)(i7Data.sk_min) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sk_min) : ((0, parser_utils_1.isNumericI7)(i7Data.sk_akt) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sk_akt) : ((0, parser_utils_1.isNumericI7)(i7Data.sk_max) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sk_max) : undefined));
1278
1284
  // synchronousMachine.mu: number;
1279
1285
  // synchronousMachine.satDirectSyncX: number;
1280
1286
  // synchronousMachine.satDirectTransX: number;
1281
1287
  // synchronousMachine.shortCircuitRotorType: ShortCircuitRotorKind;
1282
1288
  // synchronousMachine.voltageRegulationRange: number;
1283
- // synchronousMachine.p: number;
1284
- // synchronousMachine.q: number;
1285
- // synchronousMachine.controlEnabled: number;
1286
1289
  /** Create ReactiveCapabilityCurves */
1287
1290
  if (minP && maxP && minQvonPmin && maxQvonPmax) {
1288
- const reactiveCapabilityCurve = new ReactiveCapabilityCurve_1.ReactiveCapabilityCurve(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)(['CurveData', synchronousMachine.mrid, '_RCC']));
1291
+ const reactiveCapabilityCurve = new ReactiveCapabilityCurve_1.ReactiveCapabilityCurve((0, parser_utils_1.getUUID)(i7Data.guid_rcc), (0, util_create_1.createNotation)(['CurveData', synchronousMachine.mrid, '_RCC']));
1289
1292
  reactiveCapabilityCurve.curveStyle = CurveStyle_1.CurveStyle.straightLineYValues;
1290
1293
  reactiveCapabilityCurve.xUnit = UnitSymbol_1.UnitSymbol.W;
1291
1294
  reactiveCapabilityCurve.y1Unit = UnitSymbol_1.UnitSymbol.VAr;
1292
1295
  reactiveCapabilityCurve.y2Unit = UnitSymbol_1.UnitSymbol.VAr;
1293
1296
  //reactive capability curve data for pmin
1294
- const curveData1 = new CurveData_1.CurveData(common_utils_1.CommonUtils.generateUUID());
1297
+ const curveData1 = new CurveData_1.CurveData((0, parser_utils_1.getUUID)(i7Data.guid_cd1));
1295
1298
  curveData1.curve = reactiveCapabilityCurve;
1296
1299
  curveData1.xvalue = minP; //pMin
1297
1300
  curveData1.y1value = minQvonPmin; //qMin pMin
1298
1301
  curveData1.y2value = maxQvonPmin; //qMax pMin
1299
1302
  cimModel.addCurveData(curveData1);
1300
1303
  //reactive capability curve data for pmax
1301
- const curveData2 = new CurveData_1.CurveData(common_utils_1.CommonUtils.generateUUID());
1304
+ const curveData2 = new CurveData_1.CurveData((0, parser_utils_1.getUUID)(i7Data.guid_cd2));
1302
1305
  curveData2.curve = reactiveCapabilityCurve;
1303
1306
  curveData2.xvalue = maxP; //pMax
1304
1307
  curveData2.y1value = minQvonPmax; //qMin pMax
@@ -1307,20 +1310,19 @@ class ConverterIntegral7 {
1307
1310
  cimModel.addReactiveCapabilityCurve(reactiveCapabilityCurve);
1308
1311
  synchronousMachine.initialReactiveCapabilityCurveUUID = reactiveCapabilityCurve.mrid;
1309
1312
  }
1310
- // RegulatingControl
1313
+ /** RegulatingControl */
1311
1314
  let regulatingControl = undefined;
1312
1315
  // TODO targetDeadband: ab welcher spannung soll reguliert werden.
1313
1316
  switch (i7Data.spannungsgeregelt) {
1314
- // TODO Welche Modi sind möglich?
1315
1317
  case 1: {
1316
- regulatingControl = new RegulatingControl_1.RegulatingControl(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)(['GEN'], 32, true));
1317
- regulatingControl.targetValue = usoll;
1318
+ regulatingControl = new RegulatingControl_1.RegulatingControl((0, parser_utils_1.getUUID)(i7Data.guid_rc), (0, util_create_1.createNotation)(['GEN'], 32, true));
1319
+ regulatingControl.targetValue = usoll !== undefined ? usoll : synchronousMachine.ratedU;
1318
1320
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1319
1321
  regulatingControl.discrete = false;
1320
- regulatingControl.enabled = inBetrieb;
1321
- synchronousMachine.controlEnabled = inBetrieb;
1322
+ regulatingControl.enabled = true;
1323
+ synchronousMachine.controlEnabled = true;
1322
1324
  regulatingControl.addRegulatingCondEq(synchronousMachine);
1323
- synchronousMachine.regulatingControlUUID = regulatingControl.mrid;
1325
+ synchronousMachine.regulatingControlUUID = regulatingControl.getUUID();
1324
1326
  cimModel.addRegulatingControl(regulatingControl);
1325
1327
  break;
1326
1328
  }
@@ -1336,18 +1338,18 @@ class ConverterIntegral7 {
1336
1338
  if (generatingUnitConfig) {
1337
1339
  switch (generatingUnitConfig.class) {
1338
1340
  case 'ThermalGeneratingUnit': {
1339
- generatingUnit = new ThermalGeneratingUnit_1.ThermalGeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_TGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1341
+ generatingUnit = new ThermalGeneratingUnit_1.ThermalGeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_TGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1340
1342
  if (generatingUnitConfig.fuelType) {
1341
1343
  (0, utils_2.generateFuelType)(i7Data.nameprimaertyp, generatingUnitConfig.fuelType, generatingUnit, cimModel);
1342
1344
  }
1343
1345
  break;
1344
1346
  }
1345
1347
  case 'SolarGeneratingUnit': {
1346
- generatingUnit = new SolarGeneratingUnit_1.SolarGeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_SGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1348
+ generatingUnit = new SolarGeneratingUnit_1.SolarGeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_SGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1347
1349
  break;
1348
1350
  }
1349
1351
  case 'WindGeneratingUnit': {
1350
- generatingUnit = new WindGeneratingUnit_1.WindGeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_WGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1352
+ generatingUnit = new WindGeneratingUnit_1.WindGeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_WGU']), i7Data.kurzname, i7Data.nameprimaertyp);
1351
1353
  switch (generatingUnitConfig.fuelType) {
1352
1354
  case 'onshore': {
1353
1355
  generatingUnit.windGenUnitType = WindGenUnitKind_1.WindGenUnitKind.onshore;
@@ -1366,17 +1368,17 @@ class ConverterIntegral7 {
1366
1368
  break;
1367
1369
  }
1368
1370
  case 'NuclearGeneratingUnit': {
1369
- generatingUnit = new NuclearGeneratingUnit_1.NuclearGeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_NGU']), i7Data.kurzname);
1371
+ generatingUnit = new NuclearGeneratingUnit_1.NuclearGeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_NGU']), i7Data.kurzname);
1370
1372
  break;
1371
1373
  }
1372
1374
  case 'HydroGeneratingUnit': {
1373
- generatingUnit = new HydroGeneratingUnit_1.HydroGeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_HGU']), i7Data.kurzname);
1375
+ generatingUnit = new HydroGeneratingUnit_1.HydroGeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_HGU']), i7Data.kurzname);
1374
1376
  /** Default pumpAndGenerator*/
1375
1377
  generatingUnit.energyConversionCapability = HydroEnergyConversionKind_1.HydroEnergyConversionKind.pumpAndGenerator;
1376
1378
  break;
1377
1379
  }
1378
1380
  default: {
1379
- generatingUnit = new GeneratingUnit_1.GeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_GU']), i7Data.kurzname);
1381
+ generatingUnit = new GeneratingUnit_1.GeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_GU']), i7Data.kurzname);
1380
1382
  break;
1381
1383
  }
1382
1384
  }
@@ -1384,7 +1386,7 @@ class ConverterIntegral7 {
1384
1386
  else {
1385
1387
  /** Wenn über Config keine spezielle Klasse bestimmt wurde,
1386
1388
  * dann initialisiere die Standardklasse GeneratingUnit. */
1387
- generatingUnit = new GeneratingUnit_1.GeneratingUnit((0, parser_utils_1.getUUID)(''), (0, util_create_1.createNotation)([i7Data.bezeichner, '_GU']), i7Data.kurzname);
1389
+ generatingUnit = new GeneratingUnit_1.GeneratingUnit((0, parser_utils_1.getUUID)(i7Data.guid_gu), (0, util_create_1.createNotation)([i7Data.bezeichner, '_GU']), i7Data.kurzname);
1388
1390
  }
1389
1391
  // TODO: genControlSource is not required.
1390
1392
  //generatingUnit.genControlSource = GeneratorControlSource.onAGC;
@@ -1487,10 +1489,10 @@ class ConverterIntegral7 {
1487
1489
  const powerData = (0, utils_2.getActiveReactivePower)(i7Data, mf);
1488
1490
  const p = powerData[0];
1489
1491
  const q = powerData[1];
1490
- asynchronousMachine.setActivePower(p * -1);
1491
- asynchronousMachine.setReactivePower(q * -1);
1492
- asynchronousMachine.p_mf = powerData[2] ? powerData[2] * -1 : undefined;
1493
- asynchronousMachine.q_mf = powerData[3] ? powerData[3] * -1 : undefined;
1492
+ asynchronousMachine.setActivePower(p);
1493
+ asynchronousMachine.setReactivePower(q);
1494
+ asynchronousMachine.p_mf = powerData[2] ? powerData[2] : undefined;
1495
+ asynchronousMachine.q_mf = powerData[3] ? powerData[3] : undefined;
1494
1496
  asynchronousMachine.controlEnabled = false;
1495
1497
  const inBetrieb = (0, parser_utils_1.isBooleanI7)(i7Data.betrieb) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb) : true;
1496
1498
  asynchronousMachine.normallyInService = inBetrieb;
@@ -1680,7 +1682,7 @@ class ConverterIntegral7 {
1680
1682
  const prio = (0, parser_utils_1.isNumericI7)(i7Data.einspprio) ? (0, parser_utils_1.convertToNumberI7)(i7Data.einspprio) : undefined;
1681
1683
  externalNetworkInjection.referencePriority = prio;
1682
1684
  externalNetworkInjection.aggregate = true; // default Wert im I7 Export
1683
- externalNetworkInjection.ikSecond = true; // default Wert im I7 Export
1685
+ externalNetworkInjection.ikSecond = undefined; // default Wert im I7 Export
1684
1686
  /* externalNetworkInjection.voltageFactor
1685
1687
  externalNetworkInjection.maxInitialSymShCCurrent
1686
1688
  externalNetworkInjection.minInitialSymShCCurrent
@@ -1706,19 +1708,23 @@ class ConverterIntegral7 {
1706
1708
  convertErsatzQuerZweige2EquivalentInjection(cimModel, result) {
1707
1709
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1708
1710
  for (const i7Data of result) {
1709
- const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
1710
1711
  const einspeisePrio = (0, parser_utils_1.isNumericI7)(i7Data.einspprio) ? (0, parser_utils_1.convertToNumberI7)(i7Data.einspprio) : 1;
1711
1712
  const flag_lfl = (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_lfl);
1712
1713
  const flag_ks = (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_ks);
1713
1714
  const usoll = (0, parser_utils_1.isNumericI7)(i7Data.usoll) ? (0, parser_utils_1.convertToNumberI7)(i7Data.usoll) : undefined;
1714
1715
  const r_ext = (0, parser_utils_1.isNumericI7)(i7Data.r_ext) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r_ext) : undefined;
1715
1716
  const x_ext = (0, parser_utils_1.isNumericI7)(i7Data.x_ext) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x_ext) : undefined;
1717
+ const sk2 = (0, parser_utils_1.isNumericI7)(i7Data.sk) ? (0, parser_utils_1.convertToNumberI7)(i7Data.sk) : undefined;
1718
+ const p_ein = (0, parser_utils_1.isNumericI7)(i7Data.p_ein) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_ein) * -1 : undefined; //Einspeisung: Erzeugerzählpfeilsystem, d.h. eine Übersetzung ins Verbraucherzählpfeilsystem wird durchgeführt
1719
+ const q_ein = (0, parser_utils_1.isNumericI7)(i7Data.q_ein) ? (0, parser_utils_1.convertToNumberI7)(i7Data.q_ein) * -1 : undefined; //Einspeisung: Erzeugerzählpfeilsystem, d.h. eine Übersetzung ins Verbraucherzählpfeilsystem wird durchgeführt
1720
+ const kr = (0, parser_utils_1.isNumericI7)(i7Data.kr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr) : undefined;
1721
+ const r0 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r1) : undefined;
1722
+ const r1 = (0, parser_utils_1.isNumericI7)(i7Data.r1) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r1) : undefined;
1723
+ const x0 = (0, parser_utils_1.isNumericI7)(i7Data.r1) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r1) : undefined;
1724
+ const x1 = (0, parser_utils_1.isNumericI7)(i7Data.r1) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r1) : undefined;
1716
1725
  const equivalentInjection = new INTEGRALEquivalentInjection_1.INTEGRALEquivalentInjection((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_EI']), i7Data.kurzname);
1717
- equivalentInjection.normallyInService = inBetrieb;
1718
- /** TODO: Take flag_lfl und flag_ks into account. export Extended Ward r_ext and x_ext if given. Devide between flag_lfl === true && flag_ks ===true
1719
- * flag_lfl === true && !flag_ks and !flag_lfl && flag_ks see documentation for eq and eq-sc parameter to export for equivalentInjections */
1720
1726
  /** Export Extended Ward equivalent with voltage regulation */
1721
- if (flag_lfl && usoll && (r_ext || x_ext)) {
1727
+ if (flag_lfl && !flag_ks && usoll && (r_ext !== 0 || x_ext !== 0)) {
1722
1728
  //is regulating equivalent equipment
1723
1729
  equivalentInjection.regulationCapability = true;
1724
1730
  equivalentInjection.regulationStatus = true;
@@ -1732,8 +1738,52 @@ class ConverterIntegral7 {
1732
1738
  equivalentInjection.x0 = 1e9;
1733
1739
  equivalentInjection.x2 = 1e9;
1734
1740
  }
1735
- /** Export equivalent injections with p and q values and r, r1, x, x1 values from network reduction TODO: export as externalnetworkinjection see: Integral INT7XNL Import document */
1736
- equivalentInjection.aggregate = true; // default Wert im I7 Export
1741
+ else if (!flag_lfl && flag_ks) {
1742
+ equivalentInjection.regulationCapability = false;
1743
+ equivalentInjection.r = r1;
1744
+ equivalentInjection.r0 = r0;
1745
+ equivalentInjection.r2 = r1;
1746
+ equivalentInjection.x = x1;
1747
+ equivalentInjection.x0 = x0;
1748
+ equivalentInjection.x2 = x1;
1749
+ }
1750
+ else if (flag_lfl && usoll && einspeisePrio) {
1751
+ equivalentInjection.regulationCapability = true;
1752
+ equivalentInjection.regulationStatus = true;
1753
+ equivalentInjection.regulationTarget = usoll;
1754
+ equivalentInjection.r = r1;
1755
+ equivalentInjection.r0 = r0;
1756
+ equivalentInjection.r2 = r1;
1757
+ equivalentInjection.x = x1;
1758
+ equivalentInjection.x0 = x0;
1759
+ equivalentInjection.x2 = x1;
1760
+ }
1761
+ else if ((r_ext !== 0 || x_ext !== 0)) {
1762
+ equivalentInjection.regulationCapability = false;
1763
+ equivalentInjection.rExt = r_ext;
1764
+ equivalentInjection.r = 1e9;
1765
+ equivalentInjection.r0 = 1e9;
1766
+ equivalentInjection.r2 = 1e9;
1767
+ equivalentInjection.xExt = x_ext;
1768
+ equivalentInjection.x = 1e9;
1769
+ equivalentInjection.x0 = 1e9;
1770
+ equivalentInjection.x2 = 1e9;
1771
+ }
1772
+ else {
1773
+ equivalentInjection.regulationCapability = false;
1774
+ equivalentInjection.r = 1e9;
1775
+ equivalentInjection.r0 = 1e9;
1776
+ equivalentInjection.r2 = 1e9;
1777
+ equivalentInjection.x = 1e9;
1778
+ equivalentInjection.x0 = 1e9;
1779
+ equivalentInjection.x2 = 1e9;
1780
+ }
1781
+ equivalentInjection.sk2 = sk2;
1782
+ equivalentInjection.p_ein = p_ein;
1783
+ equivalentInjection.q_ein = q_ein;
1784
+ equivalentInjection.einspeisePrio = einspeisePrio;
1785
+ equivalentInjection.kr = kr;
1786
+ equivalentInjection.aggregate = true; // default Wert im I7 Export. Not needed for EquivalentInjection, BusbarSection, PowerTransformerEnd, EquivalentShunt, EquivalentBranch
1737
1787
  this.setTopologyEnergySourceConsumerObject(cimModel, equivalentInjection, i7Data);
1738
1788
  // ToDo PSRType
1739
1789
  cimModel.addEquivalentInjection(equivalentInjection);
@@ -1881,7 +1931,7 @@ class ConverterIntegral7 {
1881
1931
  // Topologie
1882
1932
  /* Anfang
1883
1933
  * 3 moegliche Anschluesse
1884
- * KontenSo -> Anschluesspunkt
1934
+ * KontenSo -> Anschlusspunkt
1885
1935
  * KnotenSf -> Schaltfeldpunkt
1886
1936
  * KnotenZw -> Netzschlaufe -> KnotenSo -> Anschlusspunkt */
1887
1937
  const i7Schluessel = integral_prefix_1.ERSATZLAENGSZWEIG_PRAEFIX +
@@ -1893,49 +1943,86 @@ class ConverterIntegral7 {
1893
1943
  integral_prefix_1.MITTIGER_PUNKT +
1894
1944
  (0, utils_2.ueberpruefeZeichenkette)(i7Data.stkabname);
1895
1945
  const rdfid = (0, parser_utils_1.getUUID)(i7Data.guid);
1896
- const equivalentBranch = new EquivalentBranch_1.EquivalentBranch(rdfid, (0, util_create_1.createNotation)([i7Data.bezeichner, '_', rdfid.substring(0, 8), '_EB'], 32, true), i7Data.kurzname, i7Schluessel);
1897
- // TODO alles überprüfen
1898
- /* equivalentBranch.negativeR12 = i7Data.r12_lfl;
1899
- equivalentBranch.negativeR21 = i7Data.r21_lfl;
1900
- equivalentBranch.negativeX12 = i7Data.x12_lfl;
1901
- equivalentBranch.negativeX21 = i7Data.x21_lfl;
1902
-
1903
- equivalentBranch.positiveR12 = i7Data.r12_lfl;
1904
- equivalentBranch.positiveR21 = i7Data.r21_lfl;
1905
- equivalentBranch.positiveX12 = i7Data.x12_lfl;
1906
- equivalentBranch.positiveX21 = i7Data.x21_lfl;
1907
-
1908
- equivalentBranch.r = equivalentBranch.negativeR12;
1909
- equivalentBranch.x = equivalentBranch.negativeX21;
1910
- equivalentBranch.r21 = equivalentBranch.positiveR12;
1911
-
1912
- equivalentBranch.x21 = equivalentBranch.negativeX21*/
1913
- /* equivalentBranch.zeroR12 = i7Data.r12_ks;
1914
- equivalentBranch.zeroR21 = i7Data.r12_ks;
1915
- equivalentBranch.zeroX12 = isNaN(i7Data.x12_ks) ? 0.1 : i7Data.x12_ks;
1916
- equivalentBranch.zeroX21 = isNaN(i7Data.x12_ks) ? 0.1 : i7Data.x12_ks;*/
1917
- const ur1 = (0, utils_2.getU)(i7Data.ur1, defaultValuesConfig.DefaultVoltage);
1918
- const ur2 = (0, utils_2.getU)(i7Data.ur2, defaultValuesConfig.DefaultVoltage);
1919
- const baseVoltageUr1 = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, ur1, this.exportFramesBoundary);
1920
- const baseVoltageUr2 = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, ur2, this.exportFramesBoundary);
1921
- if (baseVoltageUr1) {
1922
- equivalentBranch.baseVoltage = baseVoltageUr1;
1923
- }
1924
- else if (baseVoltageUr2) {
1925
- equivalentBranch.baseVoltage = baseVoltageUr2;
1926
- }
1946
+ const equivalentBranch = new INTEGRALEquivalentBranch_1.INTEGRALEquivalentBranch(rdfid, (0, util_create_1.createNotation)([i7Data.bezeichner, '_', rdfid.substring(0, 8), '_EB'], 32, true), i7Data.kurzname, i7Schluessel);
1947
+ const flag_lfl = (0, parser_utils_1.isBooleanI7)(i7Data.flag_lfl) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_lfl) : false;
1948
+ const flag_ks = (0, parser_utils_1.isBooleanI7)(i7Data.flag_ks) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_ks) : false;
1927
1949
  // Topologie
1928
- /* Anfang
1929
- * 3 moegliche Anschluesse
1930
- * KontenSo -> Anschluesspunkt
1931
- * KnotenSf -> Schaltfeldpunkt
1932
- * KnotenZw -> Netzschlaufe -> KnotenSo -> Anschlusspunkt */
1933
- /*
1934
- const startUUID = this.integralID2UUID.get(i7Data.aknoten);
1935
- const targetUUID = this.integralID2UUID.get(i7Data.eknoten);
1936
- */
1950
+ /** Anfang
1951
+ * 3 moegliche Anschluesse
1952
+ * KontenSo -> Anschluesspunkt
1953
+ * KnotenSf -> Schaltfeldpunkt
1954
+ * KnotenZw -> Netzschlaufe -> KnotenSo -> Anschlusspunkt */
1937
1955
  this.createBoundaryConnection(frame, equivalentBranch, i7Data.aknoten, PhaseCode_1.PhaseCode.ABC);
1938
1956
  this.createBoundaryConnection(frame, equivalentBranch, i7Data.eknoten, PhaseCode_1.PhaseCode.ABC);
1957
+ /**EQ */
1958
+ if (flag_lfl || (flag_lfl && flag_ks)) {
1959
+ equivalentBranch.r = (0, parser_utils_1.isNumericI7)(i7Data.r12_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r12_lfl) : 0;
1960
+ equivalentBranch.x = (0, parser_utils_1.isNumericI7)(i7Data.x12_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x12_lfl) : 0;
1961
+ equivalentBranch.r21 = (0, parser_utils_1.isNumericI7)(i7Data.r21_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r21_lfl) : equivalentBranch.r;
1962
+ equivalentBranch.x21 = (0, parser_utils_1.isNumericI7)(i7Data.x21_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x21_lfl) : equivalentBranch.x;
1963
+ equivalentBranch.positiveR12 = (0, parser_utils_1.isNumericI7)(i7Data.r12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r12_ks) : 10e9;
1964
+ equivalentBranch.positiveR21 = equivalentBranch.positiveR12;
1965
+ equivalentBranch.positiveX12 = (0, parser_utils_1.isNumericI7)(i7Data.x12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x12_ks) : 10e9;
1966
+ equivalentBranch.positiveX21 = equivalentBranch.positiveX12;
1967
+ equivalentBranch.negativeR12 = equivalentBranch.positiveR12;
1968
+ equivalentBranch.negativeR21 = equivalentBranch.positiveR21;
1969
+ equivalentBranch.negativeX12 = equivalentBranch.positiveX12;
1970
+ equivalentBranch.negativeX21 = equivalentBranch.positiveX21;
1971
+ equivalentBranch.zeroR12 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r0) : 10e9;
1972
+ equivalentBranch.zeroR21 = equivalentBranch.zeroR12;
1973
+ equivalentBranch.zeroX12 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x0) : 10e9;
1974
+ equivalentBranch.zeroX21 = equivalentBranch.zeroX12;
1975
+ }
1976
+ else if (!flag_lfl && flag_ks) {
1977
+ /**EQ-SC */
1978
+ equivalentBranch.positiveR12 = (0, parser_utils_1.isNumericI7)(i7Data.r12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r12_ks) : 10e9;
1979
+ equivalentBranch.positiveR21 = equivalentBranch.positiveR12;
1980
+ equivalentBranch.positiveX12 = (0, parser_utils_1.isNumericI7)(i7Data.x12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x12_ks) : 10e9;
1981
+ equivalentBranch.positiveX21 = equivalentBranch.positiveX12;
1982
+ equivalentBranch.negativeR12 = equivalentBranch.positiveR12;
1983
+ equivalentBranch.negativeR21 = equivalentBranch.positiveR21;
1984
+ equivalentBranch.negativeX12 = equivalentBranch.positiveX12;
1985
+ equivalentBranch.negativeX21 = equivalentBranch.positiveX21;
1986
+ equivalentBranch.zeroR12 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r0) : 10e9;
1987
+ equivalentBranch.zeroR21 = equivalentBranch.zeroR12;
1988
+ equivalentBranch.zeroX12 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x0) : 10e9;
1989
+ equivalentBranch.zeroX21 = equivalentBranch.zeroX12;
1990
+ }
1991
+ else { //If neither flag_lfl nor flag_ks are specified, any impedance value that is specified will be exported.
1992
+ equivalentBranch.r = (0, parser_utils_1.isNumericI7)(i7Data.r12_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r12_lfl) : 0;
1993
+ equivalentBranch.x = (0, parser_utils_1.isNumericI7)(i7Data.x12_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x12_lfl) : 0;
1994
+ equivalentBranch.r21 = (0, parser_utils_1.isNumericI7)(i7Data.r21_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r21_lfl) : equivalentBranch.r;
1995
+ equivalentBranch.x21 = (0, parser_utils_1.isNumericI7)(i7Data.x21_lfl) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x21_lfl) : equivalentBranch.x;
1996
+ equivalentBranch.positiveR12 = (0, parser_utils_1.isNumericI7)(i7Data.r12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r12_ks) : 10e9;
1997
+ equivalentBranch.positiveR21 = equivalentBranch.positiveR12;
1998
+ equivalentBranch.positiveX12 = (0, parser_utils_1.isNumericI7)(i7Data.x12_ks) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x12_ks) : 10e9;
1999
+ equivalentBranch.positiveX21 = equivalentBranch.positiveX12;
2000
+ equivalentBranch.negativeR12 = equivalentBranch.positiveR12;
2001
+ equivalentBranch.negativeR21 = equivalentBranch.positiveR21;
2002
+ equivalentBranch.negativeX12 = equivalentBranch.positiveX12;
2003
+ equivalentBranch.negativeX21 = equivalentBranch.positiveX21;
2004
+ equivalentBranch.zeroR12 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.r0) : 10e9;
2005
+ equivalentBranch.zeroR21 = equivalentBranch.zeroR12;
2006
+ equivalentBranch.zeroX12 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? (0, parser_utils_1.convertToNumberI7)(i7Data.x0) : 10e9;
2007
+ equivalentBranch.zeroX21 = equivalentBranch.zeroX12;
2008
+ this.logger.warn(`Ersatzlängszweig mit GUID ${equivalentBranch.getUUID()} sind die Flags flag_lfl sowie flag_ks nicht definiert.`);
2009
+ }
2010
+ const bdf = [];
2011
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten)));
2012
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.eknoten)));
2013
+ const baseVoltages = (0, utils_2.getTerminalUn)(cimModel, bdf, equivalentBranch);
2014
+ if (baseVoltages[0]) {
2015
+ equivalentBranch.baseVoltage = baseVoltages[0];
2016
+ }
2017
+ else if (baseVoltages[1]) {
2018
+ equivalentBranch.baseVoltage = baseVoltages[1];
2019
+ }
2020
+ else {
2021
+ equivalentBranch.baseVoltage = undefined;
2022
+ this.logger.error(`Ersatzlängszweig mit GUID ${equivalentBranch.getUUID()} konnte keine Bezugsspannung ermittelt werden.`);
2023
+ }
2024
+ equivalentBranch.ur1 = (0, parser_utils_1.isNumericI7)(i7Data.ur1) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur1) : undefined;
2025
+ equivalentBranch.ur2 = (0, parser_utils_1.isNumericI7)(i7Data.ur2) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur2) : undefined;
1939
2026
  cimModel.addEquivalentBranch(equivalentBranch);
1940
2027
  this.checkErsatzZweigID(i7Data.id, integral7);
1941
2028
  this.addIdMapping(i7Data.id, equivalentBranch.mrid, integral_sql_1.Integral7TableNames.ERSATZLAENGSZWEIG);
@@ -1952,77 +2039,115 @@ class ConverterIntegral7 {
1952
2039
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1953
2040
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL)) {
1954
2041
  const result = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.KOMPENSATIONSDROSSEL, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL), knotenSfIDs));
2042
+ let sternpunktKnotenResult = [];
2043
+ let sternpunktKnotenMap = new Map();
2044
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN)) {
2045
+ sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN), []));
2046
+ for (const spKnoten of sternpunktKnotenResult) {
2047
+ sternpunktKnotenMap.set(spKnoten.id, spKnoten);
2048
+ }
2049
+ }
1955
2050
  for (const i7Data of result) {
1956
- try {
1957
- if (i7Data.id === 940386872) {
1958
- console.log();
1959
- }
1960
- const shunt = new LinearShuntCompensator_1.LinearShuntCompensator((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_LSC']), i7Data.kurzname);
1961
- // Get electrical properties
1962
- const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
1963
- const qr = (0, parser_utils_1.isNumericI7)(i7Data.qr) ? i7Data.qr : undefined;
1964
- const pr = (0, parser_utils_1.isNumericI7)(i7Data.pr) ? i7Data.pr : undefined;
1965
- shunt.nomU = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? i7Data.ur : undefined;
1966
- // Set electrical properties
1967
- shunt.normalSections = (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) ? i7Data.aktstufe : undefined;
1968
- shunt.maximumSections = (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) ? i7Data.maxstufe : undefined;
1969
- shunt.bPerSection = (0, utils_2.calculateBPerSection)(qr * -1, shunt.nomU, shunt.maximumSections);
1970
- shunt.gPerSection = (0, utils_2.calculateGPerSection)(pr, shunt.nomU, shunt.maximumSections);
1971
- // RegulatingControl
1972
- const spannungsregelungLokal = (0, parser_utils_1.isBooleanI7)(i7Data.flag_lf) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_lf) : false;
1973
- const spannungsregelungRemote = (0, parser_utils_1.isBooleanI7)(i7Data.rpv_geregelt) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.rpv_geregelt) : false;
1974
- let knotenSpgGeregelt = undefined;
1975
- if (spannungsregelungRemote) {
1976
- knotenSpgGeregelt = cimModel.objects.get(this.integralID2UUID.get(i7Data.knotenspgreg));
1977
- }
1978
- let regulatingControl = undefined;
1979
- if (spannungsregelungLokal || spannungsregelungRemote) {
1980
- //Create and define regulating control for voltage control
1981
- regulatingControl = new RegulatingControl_1.RegulatingControl(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([shunt.getUUID().substring(0, 8), '_LSC']));
1982
- regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1983
- regulatingControl.discrete = true; //default für ShuntCompensator ist true. s. CGMES Doku
1984
- regulatingControl.targetDeadband = i7Data.uband; //zulässiges Spannungsband
1985
- /** Spannung in kilo*/
1986
- regulatingControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
1987
- regulatingControl.enabled = inBetrieb;
1988
- if (knotenSpgGeregelt) {
1989
- const cn_point = cimModel.objects.get(this.integralID2UUID.get(i7Data.anschluss));
1990
- let visited_set = [];
1991
- const terminal = (0, util_graph2tree_1.getControlledNode)(cn_point, knotenSpgGeregelt);
1992
- if (terminal) {
1993
- const cn = terminal.getConnectivityNode();
1994
- if (cn.getVoltageLevel() === undefined) {
1995
- console.log();
1996
- }
1997
- regulatingControl.terminalUUID = terminal.getUUID();
1998
- regulatingControl.name = (0, util_create_1.createNotation)([regulatingControl.name, '_', (_a = cn.getVoltageLevel()) === null || _a === void 0 ? void 0 : _a.getUUID().substring(0, 8), '_RC'], 32, true);
1999
- const tV = targetVoltages.get(this.UUID2Integral7ID.get(cn.getUUID()).find(elem => elem));
2000
- if (tV && regulatingControl.targetValue === undefined) {
2001
- regulatingControl.targetValue = tV['usoll'];
2002
- }
2003
- regulatingControl.targetValue = targetVoltages.get((_b = this.UUID2Integral7ID.get(cn.getUUID())) === null || _b === void 0 ? void 0 : _b.find(elem => elem))['usoll'];
2051
+ const shunt = new LinearShuntCompensator_1.LinearShuntCompensator((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_LSC']), i7Data.kurzname);
2052
+ // Get electrical properties
2053
+ const inBetrieb = (0, parser_utils_1.isBooleanI7)(i7Data.betrieb) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb) : undefined;
2054
+ shunt.normallyInService = inBetrieb;
2055
+ const qr = (0, parser_utils_1.isNumericI7)(i7Data.qr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.qr) : undefined;
2056
+ const pr = (0, parser_utils_1.isNumericI7)(i7Data.pr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.pr) : undefined;
2057
+ shunt.nomU = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : undefined;
2058
+ // Set electrical properties
2059
+ // Set electrical properties (EQ)
2060
+ if ((0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe)) {
2061
+ shunt.sections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2062
+ shunt.normalSections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2063
+ shunt.maximumSections = (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe);
2064
+ }
2065
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && !(0, parser_utils_1.isNumericI7)(i7Data.maxstufe)) {
2066
+ shunt.sections = 1;
2067
+ shunt.normalSections = 1;
2068
+ shunt.maximumSections = 1;
2069
+ }
2070
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe) > 0) {
2071
+ shunt.maximumSections = (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe);
2072
+ shunt.sections = shunt.maximumSections;
2073
+ shunt.normalSections = shunt.maximumSections;
2074
+ }
2075
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe) <= 0) {
2076
+ shunt.maximumSections = 1;
2077
+ shunt.sections = shunt.maximumSections;
2078
+ shunt.normalSections = shunt.maximumSections;
2079
+ }
2080
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe) > 0) {
2081
+ shunt.sections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2082
+ shunt.normalSections = shunt.sections;
2083
+ shunt.maximumSections = shunt.normalSections;
2084
+ }
2085
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe) <= 0) {
2086
+ shunt.sections = 1;
2087
+ shunt.normalSections = shunt.sections;
2088
+ shunt.maximumSections = shunt.normalSections;
2089
+ }
2090
+ else {
2091
+ this.logger.error(`Kompensationsdrossel mit GUID ${i7Data.guid} besitzt unerwartete $akstufe oder $maxstufe.`);
2092
+ }
2093
+ shunt.bPerSection = (0, utils_2.calculateBPerSection)(qr * -1, shunt.nomU, shunt.maximumSections);
2094
+ shunt.gPerSection = (0, utils_2.calculateGPerSection)(pr, shunt.nomU, shunt.maximumSections);
2095
+ // RegulatingControl
2096
+ const spannungsregelungLokal = (0, parser_utils_1.isBooleanI7)(i7Data.flag_lf) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_lf) : false;
2097
+ const spannungsregelungRemote = (0, parser_utils_1.isBooleanI7)(i7Data.rpv_geregelt) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.rpv_geregelt) : (cimModel.objects.get(this.integralID2UUID.get(i7Data.knotenspgreg)) !== undefined ? true : false);
2098
+ let knotenSpgGeregelt = undefined;
2099
+ if (spannungsregelungRemote) {
2100
+ knotenSpgGeregelt = cimModel.objects.get(this.integralID2UUID.get(i7Data.knotenspgreg));
2101
+ }
2102
+ let regulatingControl = undefined;
2103
+ if (spannungsregelungLokal || spannungsregelungRemote) {
2104
+ //Create and define regulating control for voltage control
2105
+ regulatingControl = new RegulatingControl_1.RegulatingControl((0, parser_utils_1.getUUID)(i7Data.guid_rc), (0, util_create_1.createNotation)([shunt.getUUID().substring(0, 8), '_LSC']));
2106
+ regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
2107
+ regulatingControl.discrete = true; //default für ShuntCompensator ist true. s. CGMES Doku
2108
+ regulatingControl.targetDeadband = (0, parser_utils_1.isNumericI7)(i7Data.uband) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uband) : undefined; //zulässiges Spannungsband
2109
+ /** Spannung in kilo*/
2110
+ regulatingControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
2111
+ regulatingControl.enabled = true;
2112
+ if (knotenSpgGeregelt) {
2113
+ const cn_point = cimModel.objects.get(this.integralID2UUID.get(i7Data.anschluss));
2114
+ const terminal = (0, util_graph2tree_1.getControlledNode)(cn_point, knotenSpgGeregelt);
2115
+ if (terminal) {
2116
+ const cn = terminal.getConnectivityNode();
2117
+ if (regulatingControl.targetDeadband === undefined) {
2118
+ regulatingControl.targetDeadband = cn.getBaseVoltageAsNumber() * 0.1;
2004
2119
  }
2005
- }
2006
- regulatingControl.addRegulatingCondEq(shunt);
2007
- shunt.regulatingControlUUID = regulatingControl.mrid;
2008
- shunt.controlEnabled = inBetrieb;
2009
- shunt.regulatingControl = regulatingControl;
2010
- cimModel.addRegulatingControl(regulatingControl);
2011
- const term = cimModel.terminals.get(regulatingControl.terminalUUID);
2012
- if (term) {
2013
- term.addRegulatingControl(regulatingControl);
2014
- }
2015
- else {
2016
- let stop = true;
2120
+ regulatingControl.terminalUUID = terminal.getUUID();
2121
+ regulatingControl.name = (0, util_create_1.createNotation)([regulatingControl.name, '_', (_a = cn.getVoltageLevel()) === null || _a === void 0 ? void 0 : _a.getUUID().substring(0, 8), '_RC'], 32, true);
2122
+ const tV = targetVoltages.get(this.UUID2Integral7ID.get(cn.getUUID()).find(elem => elem));
2123
+ if (tV && regulatingControl.targetValue === undefined) {
2124
+ regulatingControl.targetValue = tV['usoll'];
2125
+ }
2126
+ regulatingControl.targetValue = targetVoltages.get((_b = this.UUID2Integral7ID.get(cn.getUUID())) === null || _b === void 0 ? void 0 : _b.find(elem => elem))['usoll'];
2017
2127
  }
2018
2128
  }
2019
- this.setTopologyEnergySourceConsumerObject(cimModel, shunt, i7Data, shunt.regulatingControl, undefined, targetVoltages);
2020
- cimModel.addLinearShuntCompensator(shunt);
2021
- this.addIdMapping(i7Data.id, shunt.mrid, integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL);
2022
- }
2023
- catch (err) {
2024
- console.log();
2129
+ regulatingControl.addRegulatingCondEq(shunt);
2130
+ shunt.regulatingControlUUID = regulatingControl.mrid;
2131
+ shunt.controlEnabled = regulatingControl === undefined ? false : regulatingControl.enabled;
2132
+ shunt.regulatingControl = regulatingControl;
2133
+ cimModel.addRegulatingControl(regulatingControl);
2134
+ const term = cimModel.terminals.get(regulatingControl.terminalUUID);
2135
+ if (term) {
2136
+ term.addRegulatingControl(regulatingControl);
2137
+ }
2138
+ else {
2139
+ let stop = true;
2140
+ }
2025
2141
  }
2142
+ //SHC section
2143
+ const r0 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? i7Data.r0 : undefined;
2144
+ const x0 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? i7Data.x0 : undefined;
2145
+ shunt.b0PerSection = (0, utils_2.calculateB0PerSection)(/*r0,*/ Math.abs(x0)) * -1;
2146
+ shunt.g0PerSection = (0, utils_2.calculateG0PerSection)(r0 /*,x0*/);
2147
+ this.setShuntGrounding(shunt, sternpunktKnotenMap.get(i7Data.knoten1p), r0, x0);
2148
+ this.setTopologyEnergySourceConsumerObject(cimModel, shunt, i7Data, shunt.regulatingControl, undefined, targetVoltages);
2149
+ cimModel.addLinearShuntCompensator(shunt);
2150
+ this.addIdMapping(i7Data.id, shunt.mrid, integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL);
2026
2151
  }
2027
2152
  }
2028
2153
  else {
@@ -2036,16 +2161,57 @@ class ConverterIntegral7 {
2036
2161
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2037
2162
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KOMPENSATIONSKONDENSATOR)) {
2038
2163
  const result = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.KOMPENSATIONSKONDENSATOR, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.KOMPENSATIONSKONDENSATOR), knotenSfIDs));
2164
+ let sternpunktKnotenResult = [];
2165
+ let sternpunktKnotenMap = new Map();
2166
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN)) {
2167
+ sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN), []));
2168
+ for (const spKnoten of sternpunktKnotenResult) {
2169
+ sternpunktKnotenMap.set(spKnoten.id, spKnoten);
2170
+ }
2171
+ }
2039
2172
  for (const i7Data of result) {
2040
2173
  const shunt = new LinearShuntCompensator_1.LinearShuntCompensator((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_LSC']), i7Data.kurzname);
2041
2174
  // Get electrical properties
2042
- const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
2175
+ const inBetrieb = (0, parser_utils_1.isBooleanI7)(i7Data.betrieb) ? (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb) : undefined;
2043
2176
  const qr = (0, parser_utils_1.isNumericI7)(i7Data.qr) ? i7Data.qr : undefined;
2044
2177
  const pr = (0, parser_utils_1.isNumericI7)(i7Data.pr) ? i7Data.pr : undefined;
2045
2178
  shunt.nomU = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? i7Data.ur : undefined;
2046
- // Set electrical properties
2047
- shunt.normalSections = (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) ? i7Data.aktstufe : undefined;
2048
- shunt.maximumSections = (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) ? i7Data.maxstufe : undefined;
2179
+ // Set extension properties (AMPI7)
2180
+ shunt.normallyInService = inBetrieb;
2181
+ // Set electrical properties (EQ)
2182
+ if ((0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe)) {
2183
+ shunt.sections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2184
+ shunt.normalSections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2185
+ shunt.maximumSections = (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe);
2186
+ }
2187
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && !(0, parser_utils_1.isNumericI7)(i7Data.maxstufe)) {
2188
+ shunt.sections = 1;
2189
+ shunt.normalSections = 1;
2190
+ shunt.maximumSections = 1;
2191
+ }
2192
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe) > 0) {
2193
+ shunt.maximumSections = (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe);
2194
+ shunt.sections = shunt.maximumSections;
2195
+ shunt.normalSections = shunt.maximumSections;
2196
+ }
2197
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.maxstufe) <= 0) {
2198
+ shunt.maximumSections = 1;
2199
+ shunt.sections = shunt.maximumSections;
2200
+ shunt.normalSections = shunt.maximumSections;
2201
+ }
2202
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe) > 0) {
2203
+ shunt.sections = (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe);
2204
+ shunt.normalSections = shunt.sections;
2205
+ shunt.maximumSections = shunt.normalSections;
2206
+ }
2207
+ else if (!(0, parser_utils_1.isNumericI7)(i7Data.maxstufe) && (0, parser_utils_1.isNumericI7)(i7Data.aktstufe) && (0, parser_utils_1.convertToNumberI7)(i7Data.aktstufe) <= 0) {
2208
+ shunt.sections = 1;
2209
+ shunt.normalSections = shunt.sections;
2210
+ shunt.maximumSections = shunt.normalSections;
2211
+ }
2212
+ else {
2213
+ this.logger.error(`Kompensationskondensator mit GUID ${i7Data.guid} besitzt unerwartete $akstufe oder $maxstufe.`);
2214
+ }
2049
2215
  shunt.bPerSection = (0, utils_2.calculateBPerSection)(qr, shunt.nomU, shunt.maximumSections);
2050
2216
  shunt.gPerSection = (0, utils_2.calculateGPerSection)(pr, shunt.nomU, shunt.maximumSections);
2051
2217
  // RegulatingControl
@@ -2061,16 +2227,18 @@ class ConverterIntegral7 {
2061
2227
  regulatingControl = new RegulatingControl_1.RegulatingControl(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([shunt.getUUID().substring(0, 8), '_LSC']));
2062
2228
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
2063
2229
  regulatingControl.discrete = true; //default für ShuntCompensator ist true. s. CGMES Doku
2064
- regulatingControl.targetDeadband = i7Data.uband; //zulässiges Spannungsband
2230
+ regulatingControl.targetDeadband = (0, parser_utils_1.isNumericI7)(i7Data.uband) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uband) : undefined; //zulässiges Spannungsband
2065
2231
  /** Spannung in kilo*/
2066
2232
  regulatingControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
2067
- regulatingControl.enabled = inBetrieb;
2233
+ regulatingControl.enabled = true;
2068
2234
  if (knotenSpgGeregelt) {
2069
2235
  const cn_point = cimModel.objects.get(this.integralID2UUID.get(i7Data.anschluss));
2070
- let visited_set = [];
2071
2236
  const terminal = (0, util_graph2tree_1.getControlledNode)(cn_point, knotenSpgGeregelt);
2072
2237
  if (terminal) {
2073
2238
  const cn = terminal.getConnectivityNode();
2239
+ if (regulatingControl.targetDeadband === undefined) {
2240
+ regulatingControl.targetDeadband = cn.getBaseVoltageAsNumber() * 0.1;
2241
+ }
2074
2242
  regulatingControl.terminalUUID = terminal.getUUID();
2075
2243
  regulatingControl.name = (0, util_create_1.createNotation)([regulatingControl.name, '_', (_a = cn.getVoltageLevel()) === null || _a === void 0 ? void 0 : _a.getUUID().substring(0, 8), '_RC'], 32, true);
2076
2244
  const tV = targetVoltages.get(this.UUID2Integral7ID.get(cn.getUUID()).find(elem => elem));
@@ -2082,7 +2250,7 @@ class ConverterIntegral7 {
2082
2250
  }
2083
2251
  regulatingControl.addRegulatingCondEq(shunt);
2084
2252
  shunt.regulatingControlUUID = regulatingControl.mrid;
2085
- shunt.controlEnabled = inBetrieb;
2253
+ shunt.controlEnabled = regulatingControl === undefined ? false : regulatingControl.enabled;
2086
2254
  shunt.regulatingControl = regulatingControl;
2087
2255
  cimModel.addRegulatingControl(regulatingControl);
2088
2256
  const term = cimModel.terminals.get(regulatingControl.terminalUUID);
@@ -2093,13 +2261,19 @@ class ConverterIntegral7 {
2093
2261
  let stop = true;
2094
2262
  }
2095
2263
  }
2264
+ //SHC section
2265
+ const r0 = (0, parser_utils_1.isNumericI7)(i7Data.r0) ? i7Data.r0 : undefined;
2266
+ const x0 = (0, parser_utils_1.isNumericI7)(i7Data.x0) ? i7Data.x0 : undefined;
2267
+ shunt.b0PerSection = (0, utils_2.calculateB0PerSection)(/*r0,*/ Math.abs(x0));
2268
+ shunt.g0PerSection = (0, utils_2.calculateG0PerSection)(r0 /*,x0*/);
2269
+ this.setShuntGrounding(shunt, sternpunktKnotenMap.get(i7Data.knoten1p), r0, x0);
2096
2270
  this.setTopologyEnergySourceConsumerObject(cimModel, shunt, i7Data, shunt.regulatingControl, undefined, targetVoltages);
2097
2271
  cimModel.addLinearShuntCompensator(shunt);
2098
- this.addIdMapping(i7Data.id, shunt.mrid, integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL);
2272
+ this.addIdMapping(i7Data.id, shunt.mrid, integral_sql_1.Integral7TableNames.KOMPENSATIONSKONDENSATOR);
2099
2273
  }
2100
2274
  }
2101
2275
  else {
2102
- this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL} ist nicht vorhanden.`);
2276
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.KOMPENSATIONSKONDENSATOR} ist nicht vorhanden.`);
2103
2277
  }
2104
2278
  });
2105
2279
  }
@@ -2110,21 +2284,27 @@ class ConverterIntegral7 {
2110
2284
  for (const i7Data of result) {
2111
2285
  const statVarCom = new StaticVarCompensator_1.StaticVarCompensator((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_SVC']), i7Data.kurzname);
2112
2286
  const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
2113
- // TODO
2114
- /* statVarCom.capacitiveRating
2115
- statVarCom.inductiveRating
2116
- statVarCom.slope
2117
- regulatingControl.discrete = discrete;
2118
- regulatingControl.targetDeadband = targetDeadband;
2119
- */
2287
+ const ur = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : undefined;
2288
+ const uref = (0, parser_utils_1.isNumericI7)(i7Data.uref) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uref) : undefined;
2289
+ const mrez = (0, parser_utils_1.isNumericI7)(i7Data.mrez) ? (0, parser_utils_1.convertToNumberI7)(i7Data.mrez) : undefined;
2290
+ const qkapr = (0, parser_utils_1.isNumericI7)(i7Data.qkapr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.qkapr) : undefined;
2291
+ const qindr = (0, parser_utils_1.isNumericI7)(i7Data.qindr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.qindr) : undefined;
2292
+ /** EQ */
2293
+ statVarCom.capacitiveRating = (0, utils_2.calculateStatVarComRating)(uref, qkapr);
2294
+ statVarCom.inductiveRating = Math.abs((0, utils_2.calculateStatVarComRating)(uref, qindr)) * -1;
2295
+ statVarCom.slope = mrez !== 0 ? 1 / mrez : 0;
2296
+ statVarCom.sVCControlMode = SVCControlMode_1.SVCControlMode.voltage;
2297
+ statVarCom.aggregate = false;
2298
+ /** EQ-SC */
2299
+ /** SSH */
2300
+ statVarCom.q = (0, parser_utils_1.isNumericI7)(i7Data.q0svc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.q0svc) : undefined;
2301
+ /** SV */
2302
+ //statVarCom.svpowerflow
2120
2303
  /** Regelung */
2121
2304
  const regulatingControl = (0, utils_2.createRegulatingControl)(`RC_Statcom_${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
2122
2305
  this.setTopologyEnergySourceConsumerObject(cimModel, statVarCom, i7Data, regulatingControl);
2123
- const uref = (0, parser_utils_1.isNumericI7)(i7Data.uref) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uref) : undefined;
2124
- regulatingControl.targetValue = uref;
2125
- regulatingControl.enabled = inBetrieb;
2126
- statVarCom.voltageSetPoint = uref;
2127
- statVarCom.controlEnabled = inBetrieb;
2306
+ regulatingControl.enabled = true;
2307
+ statVarCom.controlEnabled = true;
2128
2308
  const flagOS = (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_os);
2129
2309
  /** die Regelung erfolgt auf die Oberspannungsseite des zugehörenden Transformators */
2130
2310
  if (flagOS && i7Data.trafo) {
@@ -2137,6 +2317,7 @@ class ConverterIntegral7 {
2137
2317
  const powerTransformerEnd = powerTransformer.powerTransformerEnd[bvNumbers.indexOf(maxBv)];
2138
2318
  regulatingControl.terminal = powerTransformerEnd.terminal;
2139
2319
  powerTransformerEnd.terminal.addRegulatingControl(regulatingControl);
2320
+ regulatingControl.targetValue = maxBv;
2140
2321
  }
2141
2322
  catch (e) {
2142
2323
  this.logger.debug(`Statcom Zuordnung zu Trafo fehlgeschlagen.`);
@@ -2146,6 +2327,8 @@ class ConverterIntegral7 {
2146
2327
  this.logger.debug(`Statcom RegulatingControl ${i7Data.id} konnte dem Trafo ${i7Data.trafo} nicht zugeordnet werden.`);
2147
2328
  }
2148
2329
  }
2330
+ /** EQ */
2331
+ statVarCom.voltageSetPoint = regulatingControl.targetValue ? regulatingControl.targetValue : ur;
2149
2332
  cimModel.addStaticVarCompensator(statVarCom);
2150
2333
  this.addIdMapping(i7Data.id, statVarCom.mrid, integral_sql_1.Integral7TableNames.STATCOM);
2151
2334
  }
@@ -2162,22 +2345,29 @@ class ConverterIntegral7 {
2162
2345
  for (const i7Data of result) {
2163
2346
  const statVarCom = new StaticVarCompensator_1.StaticVarCompensator((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_SVC']), i7Data.kurzname);
2164
2347
  const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
2165
- // TODO
2166
- /* statVarCom.capacitiveRating
2167
- statVarCom.inductiveRating
2168
- statVarCom.slope
2169
- regulatingControl.discrete = discrete;
2170
- regulatingControl.targetDeadband = targetDeadband;
2171
- */
2348
+ const ur = (0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : undefined;
2349
+ const uref = (0, parser_utils_1.isNumericI7)(i7Data.uref) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uref) : undefined;
2350
+ const mrez = (0, parser_utils_1.isNumericI7)(i7Data.mrez) ? (0, parser_utils_1.convertToNumberI7)(i7Data.mrez) : undefined;
2351
+ const qkapr = (0, parser_utils_1.isNumericI7)(i7Data.qkapr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.qkapr) : undefined;
2352
+ const qindr = (0, parser_utils_1.isNumericI7)(i7Data.qindr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.qindr) : undefined;
2353
+ /** EQ */
2354
+ statVarCom.capacitiveRating = (0, utils_2.calculateStatVarComRating)(uref, qkapr);
2355
+ statVarCom.inductiveRating = Math.abs((0, utils_2.calculateStatVarComRating)(uref, qindr)) * -1;
2356
+ statVarCom.slope = mrez !== 0 ? 1 / mrez : 0;
2357
+ statVarCom.sVCControlMode = SVCControlMode_1.SVCControlMode.voltage;
2358
+ statVarCom.aggregate = false;
2359
+ /** EQ-SC */
2360
+ /** SSH */
2361
+ statVarCom.q = (0, parser_utils_1.isNumericI7)(i7Data.q0svc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.q0svc) : undefined;
2362
+ /** SV */
2363
+ //statVarCom.svpowerflow
2172
2364
  /** Regelung */
2173
- const regulatingControl = (0, utils_2.createRegulatingControl)(`RC_SVC ${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
2365
+ const regulatingControl = (0, utils_2.createRegulatingControl)(`RC_Statcom_${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
2174
2366
  this.setTopologyEnergySourceConsumerObject(cimModel, statVarCom, i7Data, regulatingControl);
2175
- const uref = (0, parser_utils_1.isNumericI7)(i7Data.uref) ? (0, parser_utils_1.convertToNumberI7)(i7Data.uref) : undefined;
2176
- regulatingControl.targetValue = uref;
2177
- regulatingControl.enabled = inBetrieb;
2178
- statVarCom.voltageSetPoint = uref;
2179
- statVarCom.controlEnabled = inBetrieb;
2367
+ regulatingControl.enabled = true;
2368
+ statVarCom.controlEnabled = true;
2180
2369
  const flagOS = (0, parser_utils_1.convertToBooleanI7)(i7Data.flag_os);
2370
+ /** die Regelung erfolgt auf die Oberspannungsseite des zugehörenden Transformators */
2181
2371
  if (flagOS && i7Data.trafo) {
2182
2372
  const trafoUUID = this.integralID2UUID.get(i7Data.trafo);
2183
2373
  const powerTransformer = cimModel.getObject(trafoUUID);
@@ -2188,6 +2378,7 @@ class ConverterIntegral7 {
2188
2378
  const powerTransformerEnd = powerTransformer.powerTransformerEnd[bvNumbers.indexOf(maxBv)];
2189
2379
  regulatingControl.terminal = powerTransformerEnd.terminal;
2190
2380
  powerTransformerEnd.terminal.addRegulatingControl(regulatingControl);
2381
+ regulatingControl.targetValue = maxBv;
2191
2382
  }
2192
2383
  catch (e) {
2193
2384
  this.logger.debug(`Statcom Zuordnung zu Trafo fehlgeschlagen.`);
@@ -2197,9 +2388,10 @@ class ConverterIntegral7 {
2197
2388
  this.logger.debug(`Statcom RegulatingControl ${i7Data.id} konnte dem Trafo ${i7Data.trafo} nicht zugeordnet werden.`);
2198
2389
  }
2199
2390
  }
2391
+ /** EQ */
2392
+ statVarCom.voltageSetPoint = regulatingControl.targetValue ? regulatingControl.targetValue : ur;
2200
2393
  cimModel.addStaticVarCompensator(statVarCom);
2201
- cimModel.addRegulatingControl(regulatingControl);
2202
- this.addIdMapping(i7Data.id, statVarCom.mrid, integral_sql_1.Integral7TableNames.SVC);
2394
+ this.addIdMapping(i7Data.id, statVarCom.mrid, integral_sql_1.Integral7TableNames.STATCOM);
2203
2395
  }
2204
2396
  }
2205
2397
  else {
@@ -2213,7 +2405,10 @@ class ConverterIntegral7 {
2213
2405
  const result = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.HGUE_KOPFSTATION_KLASSISCH, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_KLASSISCH), knotenSfIDs));
2214
2406
  for (const i7Data of result) {
2215
2407
  /** Containment DC DCConverterUnit */
2216
- const dcConverterUnit = new DCConverterUnit_1.DCConverterUnit(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCCU']));
2408
+ const dcConverterUnit = new DCConverterUnit_1.INTEGRALDCConverterUnit((0, parser_utils_1.getUUID)(i7Data.guid_dcconverterp), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCCU']));
2409
+ dcConverterUnit.referencePriority = (0, parser_utils_1.isNumericI7)(i7Data.einspprio) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr) : undefined;
2410
+ dcConverterUnit.governorSCDAc = (0, parser_utils_1.isNumericI7)(i7Data.kr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr) : undefined;
2411
+ dcConverterUnit.governorSCDDc = (0, parser_utils_1.isNumericI7)(i7Data.kr_dc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr_dc) : undefined;
2217
2412
  // Topologie
2218
2413
  /* Anfang
2219
2414
  * 3 moegliche Anschluesse
@@ -2245,16 +2440,16 @@ class ConverterIntegral7 {
2245
2440
  /** Bemessungsleistung (Gleichstromseite) in MW
2246
2441
  * im CS-Fall S = P?
2247
2442
  * Abhängig vom */
2248
- csConverter.baseS = i7Data.pr;
2443
+ csConverter.baseS = (0, parser_utils_1.isNumericI7)(i7Data.pr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.pr) : undefined;
2249
2444
  /** Bemessungsspannung (Gleichstromseite) in kV*/
2250
- csConverter.ratedUdc = i7Data.ur;
2251
- /** spannungsabhängige Wirk-Verluste bei Leerlauf mit Bemessungsspannung in kV*/
2252
- csConverter.idleLoss = i7Data.p_leer / 1000;
2445
+ csConverter.ratedUdc = (0, parser_utils_1.isNumericI7)(i7Data.udc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.udc) : ((0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : undefined);
2446
+ /** spannungsabhängige Wirk-Verluste in kW bei Leerlauf mit Bemessungsspannung in kV*/
2447
+ csConverter.idleLoss = (0, parser_utils_1.isNumericI7)(i7Data.p_leer) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_leer) * Math.pow(10, -3) : undefined;
2253
2448
  csConverter.maxUdc = csConverter.ratedUdc * 1.05; // +5% * ratedUdc
2254
2449
  csConverter.minUdc = csConverter.ratedUdc * 0.95; // -5% * ratedUdc
2255
2450
  csConverter.resistiveLoss = 0;
2256
2451
  csConverter.switchingLoss = 0;
2257
- /* csConverter.numberOfValves
2452
+ /* csConverter.numberOfValves
2258
2453
  csConverter.valveU0*/
2259
2454
  /** Stromrichter */
2260
2455
  /** Zündwinkel bei Gleichrichterbetrieb (ins Drehstromnetz eingespeiste Wirkleistung < 0) - etwa 15 Grad */
@@ -2288,10 +2483,11 @@ class ConverterIntegral7 {
2288
2483
  this.logger.debug(`CsConverter ${i7Data.id} ${csConverter.mrid} besitzt keinen AC Anschluss.`);
2289
2484
  }
2290
2485
  /** Topologie DC Seite*/
2291
- const dcNode = new DCNode_1.DCNode(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCN']));
2486
+ const dcNode = new DCNode_1.DCNode((0, parser_utils_1.getUUID)(i7Data.guid_dcnodep), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCN']));
2292
2487
  dcNode.dcEquipmentContainer = dcConverterUnit;
2293
2488
  dcConverterUnit.dCNodes.set(dcNode.getUUID(), dcNode);
2294
- const acDCConverterDCTerminal = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_ACDCC-DCT']));
2489
+ const acDCConverterDCTerminal = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal((0, parser_utils_1.getUUID)(i7Data.guid_dcterminalp), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_ACDCC-DCT']));
2490
+ acDCConverterDCTerminal.polarity = DCPolarityKind_1.DCPolarityKind.positive;
2295
2491
  acDCConverterDCTerminal.dCConductingEquipment = csConverter;
2296
2492
  csConverter.dCTerminals.set(acDCConverterDCTerminal.getUUID(), acDCConverterDCTerminal);
2297
2493
  acDCConverterDCTerminal.dcNode = dcNode;
@@ -2304,6 +2500,7 @@ class ConverterIntegral7 {
2304
2500
  cimModel.addCSConverter(csConverter);
2305
2501
  cimModel.addDCNode(dcNode);
2306
2502
  cimModel.addACDCConverterDCTerminal(acDCConverterDCTerminal);
2503
+ integral7.integralHgueKopf.set(i7Data.id, i7Data);
2307
2504
  this.checkAnschlussIDs(i7Data.id, integral7);
2308
2505
  this.addIdMapping(i7Data.id, csConverter.mrid, integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_KLASSISCH);
2309
2506
  }
@@ -2311,13 +2508,16 @@ class ConverterIntegral7 {
2311
2508
  });
2312
2509
  }
2313
2510
  convertVsConverterDC(cimModel, integral7, knotenSfIDs) {
2314
- var _a;
2511
+ var _a, _b;
2315
2512
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2316
2513
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_VSC)) {
2317
2514
  const result = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.HGUE_KOPFSTATION_VSC, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_VSC), knotenSfIDs));
2318
2515
  for (const i7Data of result) {
2319
2516
  /** Containment DC DCConverterUnit */
2320
- const dcConverterUnit = new DCConverterUnit_1.DCConverterUnit(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCCU']));
2517
+ const dcConverterUnit = new DCConverterUnit_1.INTEGRALDCConverterUnit((0, parser_utils_1.getUUID)(i7Data.guid_dcconverterp), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCCU']));
2518
+ dcConverterUnit.referencePriority = (0, parser_utils_1.isNumericI7)(i7Data.einspprio) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr) : undefined;
2519
+ dcConverterUnit.governorSCDAc = (0, parser_utils_1.isNumericI7)(i7Data.kr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr) : undefined;
2520
+ dcConverterUnit.governorSCDDc = (0, parser_utils_1.isNumericI7)(i7Data.kr_dc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.kr_dc) : undefined;
2321
2521
  // Topologie
2322
2522
  /** Anfang
2323
2523
  * 3 moegliche Anschluesse
@@ -2339,6 +2539,9 @@ class ConverterIntegral7 {
2339
2539
  this.logger.debug(`DCConverterUnit ${i7Data.id} besitzt keinen ConnectivityNode.`);
2340
2540
  }
2341
2541
  const vsConverter = new VsConverter_1.VsConverter((0, parser_utils_1.getUUID)(i7Data.guid), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_VSC']), i7Data.kurzname);
2542
+ if (vsConverter.getUUID() === "1b2b2901-0bb9-4aa3-9117-06d68fbbc7cb") {
2543
+ let stop = true;
2544
+ }
2342
2545
  /** Wenn Leitungen konvertiert werden, wird das Attribut operationMode gesetzt. */
2343
2546
  vsConverter.equipmentContainer = dcConverterUnit;
2344
2547
  /** Bemessungsleistung (Gleichstromseite) in MW
@@ -2347,13 +2550,13 @@ class ConverterIntegral7 {
2347
2550
  vsConverter.baseS = i7Data.pr;
2348
2551
  /** Bemessungsspannung (Gleichstromseite) in kV*/
2349
2552
  //If udc is set in Integral data model set converter.ratedUdc as i7Data.udc else take the data value for i7Data.ur (Bemessungsspannung)
2350
- (0, parser_utils_1.isNumericI7)(i7Data.udc) ? vsConverter.ratedUdc = i7Data.udc : vsConverter.ratedUdc = i7Data.ur;
2553
+ vsConverter.ratedUdc = (0, parser_utils_1.isNumericI7)(i7Data.udc) ? (0, parser_utils_1.convertToNumberI7)(i7Data.udc) : ((0, parser_utils_1.isNumericI7)(i7Data.ur) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ur) : undefined);
2351
2554
  /** spannungsabhängige Wirk-Verluste bei Leerlauf mit Bemessungsspannung in kV*/
2352
- vsConverter.idleLoss = i7Data.p_leer / 1000;
2555
+ vsConverter.idleLoss = (0, parser_utils_1.isNumericI7)(i7Data.p_leer) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_leer) / 1000 : undefined;
2353
2556
  vsConverter.maxUdc = vsConverter.ratedUdc * 1.05; // +5% * ratedUdc
2354
2557
  vsConverter.minUdc = vsConverter.ratedUdc * 0.95; // -5% * ratedUdc
2355
- vsConverter.resistiveLoss = 0;
2356
- vsConverter.switchingLoss = 0;
2558
+ vsConverter.resistiveLoss = undefined;
2559
+ vsConverter.switchingLoss = undefined;
2357
2560
  /* csConverter.maxModulationIndex = ;
2358
2561
  csConverter.maxValveCurrent = */
2359
2562
  /** SSH export values */
@@ -2371,6 +2574,7 @@ class ConverterIntegral7 {
2371
2574
  vsConverter.pPccControl = VsPpccControlKind_1.VsPpccControlKind.pPcc;
2372
2575
  vsConverter.qPccControl = VsQpccControlKind_1.VsQpccControlKind.powerFactorPcc;
2373
2576
  vsConverter.targetPpcc = vsConverter.baseS * -1; //ActivePower
2577
+ vsConverter.targetUpcc = (_b = acConnectivityNode === null || acConnectivityNode === void 0 ? void 0 : acConnectivityNode.getVoltageLevel()) === null || _b === void 0 ? void 0 : _b.getBaseVoltageAsNumber();
2374
2578
  vsConverter.targetQpcc = 0; //ReactivePower
2375
2579
  }
2376
2580
  vsConverter.droop = 0; //pu
@@ -2386,20 +2590,43 @@ class ConverterIntegral7 {
2386
2590
  else {
2387
2591
  this.logger.debug(`VsConverter ${i7Data.id} ${vsConverter.mrid} besitzt keinen AC Anschluss.`);
2388
2592
  }
2389
- /** Topologie DC Seite*/
2390
- const dcNode = new DCNode_1.DCNode(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCN']));
2593
+ /** Topologie DC Seite mit DCGround*/
2594
+ const dcNode = new DCNode_1.DCNode((0, parser_utils_1.getUUID)(i7Data.guid_dcnodep), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCN']));
2391
2595
  dcNode.dcEquipmentContainer = dcConverterUnit;
2392
- const acDCConverterDCTerminal = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_ACDCC-DCT']));
2393
- acDCConverterDCTerminal.dCConductingEquipmentUUID = vsConverter.mrid;
2394
- acDCConverterDCTerminal.dcNode = dcNode;
2395
- // ist nicht nötig
2596
+ dcConverterUnit.dCNodes.set(dcNode.getUUID(), dcNode);
2597
+ const acDCConverterDCTerminal = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal((0, parser_utils_1.getUUID)(i7Data.guid_dcterminalp), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_ACDCC-DCT']));
2598
+ acDCConverterDCTerminal.polarity = DCPolarityKind_1.DCPolarityKind.positive;
2599
+ acDCConverterDCTerminal.dCConductingEquipment = vsConverter;
2396
2600
  vsConverter.dCTerminals.set(acDCConverterDCTerminal.getUUID(), acDCConverterDCTerminal);
2601
+ acDCConverterDCTerminal.dcNode = dcNode;
2397
2602
  dcNode.dcTerminals.set(acDCConverterDCTerminal.getUUID(), acDCConverterDCTerminal);
2603
+ const dcGround = new DCGround_1.DCGround((0, parser_utils_1.getUUID)(i7Data.guid_dcground), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCG'], 32, true));
2604
+ const dcTerminalG = new DCTerminal_1.DCTerminal((0, parser_utils_1.getUUID)(i7Data.guid_dcterminalg), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT']));
2605
+ const dcTerminalM1 = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal((0, parser_utils_1.getUUID)(i7Data.guid_dcterminalm1), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT']));
2606
+ const dcNodeG = new DCNode_1.DCNode((0, parser_utils_1.getUUID)(i7Data.guid_dcnodem1));
2607
+ dcTerminalG.dCConductingEquipment = dcGround;
2608
+ dcTerminalM1.dCConductingEquipment = vsConverter;
2609
+ dcTerminalM1.polarity = DCPolarityKind_1.DCPolarityKind.middle;
2610
+ dcTerminalG.dcNode = dcNodeG;
2611
+ dcTerminalM1.dcNode = dcNodeG;
2612
+ dcGround.equipmentContainer = dcConverterUnit;
2613
+ dcNodeG.dcEquipmentContainer = dcConverterUnit;
2614
+ dcNodeG.dcTerminals.set(dcTerminalG.getUUID(), dcTerminalG);
2615
+ dcNodeG.dcTerminals.set(dcTerminalM1.getUUID(), dcTerminalM1);
2616
+ vsConverter.dCTerminals.set(dcTerminalM1.getUUID(), dcTerminalM1);
2617
+ /** EQ-SC */
2618
+ dcGround.r = undefined;
2619
+ dcGround.inductance = undefined;
2398
2620
  /** DCNode speichern, um später DCLines anschließen zu können*/
2399
2621
  cimModel.addDCConverterUnit(dcConverterUnit);
2400
2622
  cimModel.addVSConverter(vsConverter);
2401
2623
  cimModel.addDCNode(dcNode);
2624
+ cimModel.addDCNode(dcNodeG);
2402
2625
  cimModel.addACDCConverterDCTerminal(acDCConverterDCTerminal);
2626
+ cimModel.addDCTerminal(dcTerminalG);
2627
+ cimModel.addDCGround(dcGround);
2628
+ cimModel.addACDCConverterDCTerminal(dcTerminalM1);
2629
+ integral7.integralHgueKopf.set(i7Data.id, i7Data);
2403
2630
  this.checkAnschlussIDs(i7Data.id, integral7);
2404
2631
  this.addIdMapping(i7Data.id, vsConverter.mrid, integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_VSC);
2405
2632
  }
@@ -2451,8 +2678,8 @@ class ConverterIntegral7 {
2451
2678
  regulatingControl.targetValue = usoll;
2452
2679
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
2453
2680
  regulatingControl.discrete = false;
2454
- regulatingControl.enabled = inBetrieb;
2455
- externalNetworkInjection.controlEnabled = inBetrieb;
2681
+ regulatingControl.enabled = true;
2682
+ externalNetworkInjection.controlEnabled = true;
2456
2683
  regulatingControl.addRegulatingCondEq(externalNetworkInjection);
2457
2684
  externalNetworkInjection.regulatingControl = regulatingControl;
2458
2685
  cimModel.addRegulatingControl(regulatingControl);
@@ -2511,10 +2738,6 @@ class ConverterIntegral7 {
2511
2738
  cimModel.addMultiplierFactor(mf);
2512
2739
  externalNetworkInjection.multiplierFactorUUID = mf.getUUID();
2513
2740
  }
2514
- /** TODO
2515
- * r, r0 und r2
2516
- * x, x0 und x2
2517
- * */
2518
2741
  /** Convert EQ-profile dataset. */
2519
2742
  const maxP = (0, parser_utils_1.isNumericI7)(i7Data.p_max) ? (0, parser_utils_1.convertToNumberI7)(i7Data.p_max) : undefined;
2520
2743
  externalNetworkInjection.maxP = maxP;
@@ -2563,8 +2786,8 @@ class ConverterIntegral7 {
2563
2786
  regulatingControl.targetValue = usoll;
2564
2787
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
2565
2788
  regulatingControl.discrete = false;
2566
- regulatingControl.enabled = inBetrieb;
2567
- externalNetworkInjection.controlEnabled = inBetrieb;
2789
+ regulatingControl.enabled = true;
2790
+ externalNetworkInjection.controlEnabled = true;
2568
2791
  regulatingControl.addRegulatingCondEq(externalNetworkInjection);
2569
2792
  externalNetworkInjection.regulatingControl = regulatingControl;
2570
2793
  cimModel.addRegulatingControl(regulatingControl);
@@ -2611,10 +2834,15 @@ class ConverterIntegral7 {
2611
2834
  const inBetrieb = (0, parser_utils_1.convertToBooleanI7)(i7Data.betrieb);
2612
2835
  condEquip.normallyInService = inBetrieb;
2613
2836
  const connectivityNode = cimModel.objects.get(this.integralID2UUID.get(i7Data.anschluss));
2837
+ let controlledTerm = undefined;
2614
2838
  if (connectivityNode) {
2615
2839
  const terminal = this.createConnection(cimModel, condEquip, connectivityNode, PhaseCode_1.PhaseCode.ABC, true);
2840
+ controlledTerm = terminal;
2616
2841
  if (regulatingControl) {
2617
2842
  if (regulatingControl.terminalUUID === undefined) {
2843
+ if (!(controlledTerm.conductingEquipment instanceof BusbarSection_1.BusbarSection)) {
2844
+ controlledTerm = (0, util_graph2tree_1.getControlledNode)(connectivityNode, undefined);
2845
+ }
2618
2846
  regulatingControl.terminalUUID = terminal.getUUID();
2619
2847
  regulatingControl.name = (0, util_create_1.createNotation)([regulatingControl.name, '_', (_a = connectivityNode.getVoltageLevel()) === null || _a === void 0 ? void 0 : _a.getUUID().substring(0, 8), '_RC'], 32, true);
2620
2848
  if (regulatingControl.targetValue === undefined) {
@@ -2893,35 +3121,30 @@ class ConverterIntegral7 {
2893
3121
  else {
2894
3122
  this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keinen Zielknoten.`);
2895
3123
  }
3124
+ const bdf = [];
3125
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten)));
3126
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.eknoten)));
2896
3127
  /** Spannungsebene */
2897
- const ur = (0, utils_2.getU)(i7Data.ur, defaultValuesConfig.DefaultVoltage);
2898
- const baseVoltage = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, ur, this.exportFramesBoundary);
2899
- // seriesCompensator.baseVoltage = baseVoltage;
2900
- /**
2901
- * Längsdrossel ist beschrieben durch:
2902
- Un = 10 kV = 10000 V
2903
- IrA = 2500
2904
- Ukr = 7% = 0,07
2905
- Pkr = 0
2906
-
2907
- S = Un(V) * IrA * Wurzel(3) => 43301270,2
2908
- Z = Ukr * un^2/IrA (umgerechnet) = 0,161
2909
- R = 0, da Pkr = 0
2910
- X = Z = 0,161
2911
- * */
2912
- /** elektrische Parameter */
2913
- const ir = (0, parser_utils_1.isNumericI7)(i7Data.ir) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ir) : defaultValuesConfig.SeriesCompensator.varistorRatedCurrent;
2914
- const ukr = (0, parser_utils_1.isNumericI7)(i7Data.ukr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ukr) : 0;
2915
- if (ir > 0 && ukr > 0) {
2916
- const voltage = baseVoltage.nominalVoltage.value * 1000;
2917
- const z = (ukr / 100) * Math.pow(voltage, 2) / (voltage * ir * Math.sqrt(3));
2918
- seriesCompensator.x = z;
2919
- }
2920
- seriesCompensator.varistorRatedCurrent = ir;
3128
+ const baseVoltages = (0, utils_2.getTerminalUn)(cimModel, bdf, seriesCompensator);
3129
+ seriesCompensator.baseVoltage = baseVoltages[0] ? baseVoltages[0] : baseVoltages[1];
3130
+ if (seriesCompensator.baseVoltage === undefined) {
3131
+ let stop = true;
3132
+ }
3133
+ /** EQ */
3134
+ const ur = (0, utils_2.getU)(i7Data.ur);
3135
+ const ir = (0, parser_utils_1.isNumericI7)(i7Data.ir) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ir) : undefined;
3136
+ const ukr = (0, parser_utils_1.isNumericI7)(i7Data.ukr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ukr) : undefined;
3137
+ const pkr = (0, parser_utils_1.isNumericI7)(i7Data.pkr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.pkr) : undefined;
3138
+ seriesCompensator.r = (0, utils_2.calculateRSeriesCompensator)(ir, pkr);
3139
+ seriesCompensator.x = (0, utils_2.calculateXSeriesCompensator)(ur, ukr, ir);
3140
+ seriesCompensator.varistorPresent = false;
3141
+ /** EQ-SC */
3142
+ seriesCompensator.r0 = seriesCompensator.r;
3143
+ seriesCompensator.x0 = seriesCompensator.x;
2921
3144
  /** CurrentLimit */
2922
3145
  const terminal = startTerminal;
2923
3146
  if (terminal) {
2924
- this.setConductingEquipmentCurrentLimit(cimModel, 'Rating ' + seriesCompensator.name, terminal.mrid, ir);
3147
+ this.setConductingEquipmentCurrentLimit(cimModel, 'Rating ' + seriesCompensator.name, terminal, ir);
2925
3148
  }
2926
3149
  else {
2927
3150
  this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keine Terminalinstanz.`);
@@ -2929,11 +3152,16 @@ class ConverterIntegral7 {
2929
3152
  if (!startTerminal.connectivityNode && terminal.connectivityNodeUUID) {
2930
3153
  startTerminal.connectivityNode = cimModel.getConnectivityNode(terminal.connectivityNodeUUID);
2931
3154
  }
3155
+ // Umspannanlage
3156
+ const substationUUID = this.integralID2UUID.get(i7Data.standort);
2932
3157
  /** VoltageLevel */
2933
- const vlObject = this.determineEquipmentContainer('VoltageLevel', cimModel, cimModel.getObject((_a = startTerminal.connectivityNode) === null || _a === void 0 ? void 0 : _a.getConnectivityNodeContainerUUID()));
3158
+ const vlObject = this.getVoltageLevelByVoltage((_a = (cimModel.getSubstation(substationUUID))) === null || _a === void 0 ? void 0 : _a.voltageLevels, seriesCompensator.baseVoltage.nominalVoltage.value);
3159
+ if (!vlObject) {
3160
+ this.logger.debug(`Längskondensator ${seriesCompensator === null || seriesCompensator === void 0 ? void 0 : seriesCompensator.mrid} hat kein EquipmentContainer`);
3161
+ }
2934
3162
  if (vlObject) {
2935
3163
  seriesCompensator.equipmentContainer = vlObject;
2936
- seriesCompensator.baseVoltage = baseVoltage;
3164
+ //seriesCompensator.baseVoltage = vlObject.baseVoltage;
2937
3165
  }
2938
3166
  else {
2939
3167
  this.logger.debug(`Längsdrossel ${i7Data.id} besitzt kein VoltageLevel Ur ${i7Data.ur}.`);
@@ -2982,35 +3210,27 @@ class ConverterIntegral7 {
2982
3210
  else {
2983
3211
  this.logger.debug(`Längskondensator ${i7Data.id} ${seriesCompensator.mrid} besitzt keinen Zielknoten.`);
2984
3212
  }
3213
+ const bdf = [];
3214
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten)));
3215
+ bdf.push(this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.eknoten)));
2985
3216
  /** Spannungsebene */
2986
- const ur = (0, utils_2.getU)(i7Data.ur, defaultValuesConfig.DefaultVoltage);
2987
- const baseVoltage = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, ur, this.exportFramesBoundary);
2988
- // seriesCompensator.baseVoltage = baseVoltage;
2989
- /**
2990
- * Längskondensator ist beschrieben durch:
2991
- Un = 10 kV = 10000 V
2992
- IrA = 2500
2993
- Ukr = 7% = 0,07
2994
- Pkr = 0
2995
-
2996
- S = Un(V) * IrA * Wurzel(3) => 43301270,2
2997
- Z = Ukr * un^2/IrA (umgerechnet) = 0,161
2998
- R = 0, da Pkr = 0
2999
- X = Z = 0,161
3000
- * */
3001
- /** elektrische Parameter */
3002
- const i = (0, parser_utils_1.isNumericI7)(i7Data.ir) ? -1 * (0, parser_utils_1.convertToNumberI7)(i7Data.ir) : undefined;
3217
+ const baseVoltages = (0, utils_2.getTerminalUn)(cimModel, bdf, seriesCompensator);
3218
+ seriesCompensator.baseVoltage = baseVoltages[0];
3219
+ /** EQ */
3220
+ const ur = (0, utils_2.getU)(i7Data.ur);
3221
+ const ir = (0, parser_utils_1.isNumericI7)(i7Data.ir) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ir) : undefined;
3003
3222
  const ukr = (0, parser_utils_1.isNumericI7)(i7Data.ukr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.ukr) : undefined;
3004
- if (i > 0 && ukr > 0) {
3005
- const voltage = baseVoltage.nominalVoltage.value * 1000;
3006
- const z = (ukr / 100) * Math.pow(voltage, 2) / (voltage * i * Math.sqrt(3));
3007
- seriesCompensator.x = z;
3008
- }
3009
- seriesCompensator.varistorRatedCurrent = i;
3223
+ const pkr = (0, parser_utils_1.isNumericI7)(i7Data.pkr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.pkr) : undefined;
3224
+ seriesCompensator.r = (0, utils_2.calculateRSeriesCompensator)(ir, pkr);
3225
+ seriesCompensator.x = (0, utils_2.calculateXSeriesCompensator)(ur, ukr, ir * -1);
3226
+ seriesCompensator.varistorPresent = false;
3227
+ /** EQ-SC */
3228
+ seriesCompensator.r0 = seriesCompensator.r;
3229
+ seriesCompensator.x0 = seriesCompensator.x;
3010
3230
  /** CurrentLimit */
3011
3231
  const terminal = startTerminal;
3012
3232
  if (terminal) {
3013
- this.setConductingEquipmentCurrentLimit(cimModel, 'Rating ' + seriesCompensator.name, terminal, i);
3233
+ this.setConductingEquipmentCurrentLimit(cimModel, 'Rating ' + seriesCompensator.name, terminal, ir);
3014
3234
  }
3015
3235
  else {
3016
3236
  this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keine Terminalinstanz.`);
@@ -3018,14 +3238,13 @@ class ConverterIntegral7 {
3018
3238
  // Umspannanlage
3019
3239
  const substationUUID = this.integralID2UUID.get(i7Data.standort);
3020
3240
  /** VoltageLevel */
3021
- const voltageLevel = this.getVoltageLevelByVoltage((_a = (cimModel.getSubstation(substationUUID))) === null || _a === void 0 ? void 0 : _a.voltageLevels, ur);
3241
+ const voltageLevel = this.getVoltageLevelByVoltage((_a = (cimModel.getSubstation(substationUUID))) === null || _a === void 0 ? void 0 : _a.voltageLevels, seriesCompensator.baseVoltage.nominalVoltage.value);
3022
3242
  if (!voltageLevel) {
3023
3243
  this.logger.debug(`Längskondensator ${seriesCompensator === null || seriesCompensator === void 0 ? void 0 : seriesCompensator.mrid} hat kein EquipmentContainer`);
3024
3244
  }
3025
- // const vlUUID = subVlData.find(elem => elem.un === i7Data.ur);
3026
3245
  if (voltageLevel) {
3027
3246
  seriesCompensator.equipmentContainer = voltageLevel;
3028
- seriesCompensator.baseVoltage = voltageLevel.baseVoltage;
3247
+ //seriesCompensator.baseVoltage = voltageLevel.baseVoltage;
3029
3248
  }
3030
3249
  else {
3031
3250
  this.logger.debug(`Längskondensator ${i7Data.id} besitzt kein VoltageLevel Ur ${i7Data.ur}.`);
@@ -3466,6 +3685,7 @@ class ConverterIntegral7 {
3466
3685
  });
3467
3686
  }
3468
3687
  convertDCLines(cimModel, integral7, defaultValuesConfig) {
3688
+ var _a;
3469
3689
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
3470
3690
  //Workaround: Prefill Integral 7 model hgueAnschlussKnotenIDs because of missing bays and schlaufen for dc objects this data structure keeps empty.
3471
3691
  //for(let dc_node of this.hgueAnschlussKnotenIDs){
@@ -3478,49 +3698,112 @@ class ConverterIntegral7 {
3478
3698
  //console.log(getUUID(i7Data.guid_dcline));
3479
3699
  integral7.integralHgueLeitungen.set(i7Data.id, i7Data);
3480
3700
  const dcLine = new DCLine_1.DCLine((0, parser_utils_1.getUUID)(i7Data.guid_dcline), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCL']));
3701
+ let dcLineNeg = undefined;
3481
3702
  const i7Schluessel = integral_prefix_1.HGUELEITUNG_PRAEFIX +
3482
3703
  (0, utils_2.ueberpruefeZeichenkette)(i7Data.bezeichner);
3483
3704
  /** operationMode der Anfangs- und Zielkopfstation setzen */
3484
- const bipol = (0, parser_utils_1.convertToBooleanI7)(i7Data.bipol);
3705
+ let converterStart = false;
3706
+ let converterStartNeg = false;
3707
+ let converterUnitStartSide = false;
3708
+ let converterTarget = false;
3709
+ let converterTargetNeg = false;
3710
+ let converterUnitTargetSide = false;
3711
+ let bipol = (0, parser_utils_1.convertToBooleanI7)(i7Data.bipol);
3712
+ bipol = (0, parser_utils_1.convertToBooleanI7)(false);
3485
3713
  //Parameter "guidp" is available for monopolar and bipolar dc systems. Thus create DCLineSegment with positive sign property in any case.
3486
3714
  const dcLineSegment = new DCLineSegment_1.DCLineSegment((0, parser_utils_1.getUUID)(i7Data.guidp), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCLS']), i7Data.kurzname, i7Schluessel);
3487
- /* TODO
3488
- dcLineSegment.length = keine Informationen vorhanden
3489
- dcLineSegment.capacitance = keine Informationen vorhanden
3490
- dcLineSegment.inductance = keine Informationen vorhanden
3491
- */
3492
- dcLineSegment.resistance = i7Data.rdc / 2;
3715
+ let dcLineSegmentNeg = undefined;
3716
+ if (dcLineSegment.getUUID() === "579b6a04-23c5-452f-b7ad-db283dad1cdb") {
3717
+ const stop = true;
3718
+ }
3719
+ /**EQ: not given directly by the INTEGRAL system model */
3720
+ dcLineSegment.length = undefined;
3721
+ dcLineSegment.capacitance = undefined;
3722
+ dcLineSegment.inductance = undefined;
3723
+ /**EQ: given directly by the INTEGRAL system model */
3724
+ dcLineSegment.resistance = (0, parser_utils_1.isNumericI7)(i7Data.rdc) ? (bipol ? (0, parser_utils_1.convertToNumberI7)(i7Data.rdc) / 2 : (0, parser_utils_1.convertToNumberI7)(i7Data.rdc)) : undefined;
3493
3725
  dcLineSegment.equipmentContainer = dcLine;
3726
+ //create second dcLineSegment in case this dcLine is a bipol.
3727
+ if (bipol) {
3728
+ dcLineNeg = new DCLine_1.DCLine(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_neg', '_DCL']));
3729
+ dcLineSegmentNeg = new DCLineSegment_1.DCLineSegment((0, parser_utils_1.getUUID)(i7Data.guidn), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_neg', '_DCLS'], 32, true), (0, util_create_1.createNotation)([i7Data.kurzname, '_neg'], 12, true), i7Schluessel);
3730
+ dcLineSegmentNeg.length = dcLineSegment.length;
3731
+ dcLineSegmentNeg.capacitance = undefined;
3732
+ dcLineSegmentNeg.inductance = undefined;
3733
+ dcLineSegmentNeg.resistance = (0, parser_utils_1.isNumericI7)(i7Data.rdc) ? (bipol ? (0, parser_utils_1.convertToNumberI7)(i7Data.rdc) / 2 : (0, parser_utils_1.convertToNumberI7)(i7Data.rdc)) : undefined;
3734
+ dcLineSegmentNeg.equipmentContainer = dcLineNeg;
3735
+ }
3494
3736
  const acDCConverterStart = cimModel.getObject(this.integralID2UUID.get(i7Data.anetzobjekt)) ? cimModel.getObject(this.integralID2UUID.get(i7Data.anetzobjekt)) : undefined;
3737
+ converterStart = (0, parser_utils_1.convertToBooleanI7)(acDCConverterStart !== undefined);
3738
+ let acDCConverterStartNeg = undefined;
3495
3739
  const acDCConverterTarget = cimModel.getObject(this.integralID2UUID.get(i7Data.enetzobjekt)) ? cimModel.getObject(this.integralID2UUID.get(i7Data.enetzobjekt)) : undefined;
3496
- // TODO BEGIN: Remove me after HGUE-Knoten (netz_hgueknoten) will be exported/converted
3497
- if (acDCConverterStart === undefined || acDCConverterTarget === undefined) {
3498
- continue;
3740
+ converterStart = (0, parser_utils_1.convertToBooleanI7)(acDCConverterTarget !== undefined);
3741
+ let acDCConverterTargetNeg = undefined;
3742
+ //Setting acDCConverterStartNeg and acDCConverterTargetNeg in case this DCLine is a bipol
3743
+ if (bipol) {
3744
+ const int7hguekopf = converterStart ? (_a = integral7.integralHgueKopf) === null || _a === void 0 ? void 0 : _a.get(this.UUID2Integral7ID.get(acDCConverterStart.getUUID()).find(elem => elem)) : undefined;
3745
+ acDCConverterStartNeg = converterStart && int7hguekopf !== undefined ? (0, util_create_1.createACDCConverterNeg)(cimModel, int7hguekopf, acDCConverterStart.constructor.name, acDCConverterStart) : undefined;
3746
+ converterStartNeg = (0, parser_utils_1.convertToBooleanI7)(acDCConverterStartNeg !== undefined);
3747
+ acDCConverterTargetNeg = converterTarget && int7hguekopf !== undefined ? (0, util_create_1.createACDCConverterNeg)(cimModel, int7hguekopf, acDCConverterTarget.constructor.name, acDCConverterTarget) : undefined;
3748
+ converterTargetNeg = (0, parser_utils_1.convertToBooleanI7)(acDCConverterTargetNeg !== undefined);
3749
+ }
3750
+ if (converterStart && !converterStartNeg) {
3751
+ createDCGround(acDCConverterStart);
3752
+ }
3753
+ else if (converterStart && converterStartNeg) {
3754
+ createDCGround(acDCConverterStart);
3755
+ connectDCGround(acDCConverterStartNeg);
3499
3756
  }
3500
- // TODO END: Remove me after HGUE-Knoten (netz_hgueknoten) will be exported/converted
3501
3757
  const converterUnitStart = acDCConverterStart.equipmentContainer ? acDCConverterStart.equipmentContainer : undefined;
3758
+ converterUnitStartSide = (0, parser_utils_1.convertToBooleanI7)(converterUnitStart !== undefined);
3502
3759
  const converterUnitTarget = acDCConverterTarget.equipmentContainer ? acDCConverterTarget.equipmentContainer : undefined;
3503
- if (converterUnitStart && converterUnitTarget) {
3504
- switch (bipol) {
3505
- case (true): {
3760
+ converterUnitTargetSide = (0, parser_utils_1.convertToBooleanI7)(converterUnitTarget !== undefined);
3761
+ switch (bipol) {
3762
+ case true: {
3763
+ if (converterUnitStartSide && !converterUnitTargetSide) {
3764
+ converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
3765
+ this.logger.error(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r DCConverterUnit am Leitungsende konnte nicht ermittelt werden.`);
3766
+ }
3767
+ else if (converterUnitStartSide && converterUnitTargetSide) {
3506
3768
  converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
3507
3769
  converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
3508
- break;
3770
+ if (converterTarget && !converterTargetNeg) {
3771
+ createDCGround(acDCConverterTarget);
3772
+ }
3773
+ else if (converterTarget && converterTargetNeg) {
3774
+ createDCGround(acDCConverterTarget);
3775
+ connectDCGround(acDCConverterTargetNeg);
3776
+ }
3777
+ else {
3778
+ this.logger.error(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r ACDCConverter konnte nicht ermittelt werden.`);
3779
+ }
3780
+ }
3781
+ else {
3782
+ this.logger.error(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r DCConverterUnit's konnten nicht ermittelt werden.`);
3509
3783
  }
3510
- default: {
3784
+ break;
3785
+ }
3786
+ case false: {
3787
+ if (converterUnitStartSide && !converterUnitTargetSide) {
3511
3788
  converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
3512
3789
  converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
3790
+ createNeutralGroundReturn(converterUnitStart, converterUnitTarget);
3791
+ this.logger.error(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r DCConverterUnit am Leitungsende konnte nicht ermittelt werden.`);
3792
+ }
3793
+ else if (converterUnitStartSide && converterUnitTargetSide) {
3794
+ converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
3513
3795
  }
3514
3796
  }
3515
- }
3516
- else {
3517
- this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r Konverter konnte nicht ermittelt werden.`);
3797
+ default: {
3798
+ this.logger.error(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: die bipol-Eigenschaft ist nicht gesetzt.`);
3799
+ }
3518
3800
  }
3519
3801
  // Topologie DC
3520
3802
  /* Anfang / Ende DCNodes*/
3521
3803
  const startDCNode = acDCConverterStart ? getDCNodeFromConverter(acDCConverterStart) : undefined;
3804
+ const startDCNodeNeg = acDCConverterStartNeg ? getDCNodeFromConverter(acDCConverterStartNeg) : undefined;
3522
3805
  if (startDCNode) {
3523
- const dcTerminal = new DCTerminal_1.DCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT']));
3806
+ const dcTerminal = new DCTerminal_1.DCTerminal((0, parser_utils_1.getUUID)('i7Data.guid_dcterminalp'), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT'], 32, true));
3524
3807
  dcTerminal.connected = true;
3525
3808
  dcTerminal.dCConductingEquipment = dcLineSegment;
3526
3809
  dcTerminal.dcNode = startDCNode;
@@ -3530,9 +3813,21 @@ class ConverterIntegral7 {
3530
3813
  else {
3531
3814
  this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid} besitzt keinen Anfangsknoten. ${i7Data.anetzobjekt} ${this.integralID2UUID.get(i7Data.anetzobjekt)}`);
3532
3815
  }
3816
+ if (startDCNodeNeg) {
3817
+ const dcTerminal = new DCTerminal_1.DCTerminal((0, parser_utils_1.getUUID)('i7Data.guid_dcterminaln'), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_neg', '_DCT'], 32, true));
3818
+ dcTerminal.connected = true;
3819
+ dcTerminal.dCConductingEquipment = dcLineSegmentNeg;
3820
+ dcTerminal.dcNode = startDCNodeNeg;
3821
+ startDCNodeNeg.dcTerminals.set(dcTerminal.getUUID(), dcTerminal);
3822
+ cimModel.addDCTerminal(dcTerminal);
3823
+ }
3824
+ else {
3825
+ this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid} besitzt keinen Anfangsknoten NEG. ${i7Data.anetzobjekt} ${this.integralID2UUID.get(i7Data.anetzobjekt)}`);
3826
+ }
3533
3827
  const targetDCNode = acDCConverterTarget ? getDCNodeFromConverter(acDCConverterTarget) : undefined;
3828
+ const targetDCNodeNeg = acDCConverterTargetNeg ? getDCNodeFromConverter(acDCConverterTargetNeg) : undefined;
3534
3829
  if (targetDCNode) {
3535
- const dcTerminal = new DCTerminal_1.DCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT']));
3830
+ const dcTerminal = new DCTerminal_1.DCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_DCT'], 32, true));
3536
3831
  dcTerminal.connected = true;
3537
3832
  dcTerminal.dCConductingEquipment = dcLineSegment;
3538
3833
  dcTerminal.dcNode = targetDCNode;
@@ -3542,8 +3837,23 @@ class ConverterIntegral7 {
3542
3837
  else {
3543
3838
  this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid} besitzt keinen Zielknoten. ${i7Data.enetzobjekt} ${this.integralID2UUID.get(i7Data.enetzobjekt)}`);
3544
3839
  }
3840
+ if (targetDCNodeNeg) {
3841
+ const dcTerminal = new DCTerminal_1.DCTerminal(common_utils_1.CommonUtils.generateUUID(), (0, util_create_1.createNotation)([(0, utils_2.getName)(i7Data), '_neg', '_DCT'], 32, true));
3842
+ dcTerminal.connected = true;
3843
+ dcTerminal.dCConductingEquipment = dcLineSegmentNeg;
3844
+ dcTerminal.dcNode = targetDCNodeNeg;
3845
+ targetDCNodeNeg.dcTerminals.set(dcTerminal.getUUID(), dcTerminal);
3846
+ cimModel.addDCTerminal(dcTerminal);
3847
+ }
3848
+ else {
3849
+ this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid} besitzt keinen Zielknoten NEG. ${i7Data.enetzobjekt} ${this.integralID2UUID.get(i7Data.enetzobjekt)}`);
3850
+ }
3545
3851
  cimModel.addDCLine(dcLine);
3546
3852
  cimModel.addDCLineSegment(dcLineSegment);
3853
+ if (bipol) {
3854
+ cimModel.addDCLine(dcLineNeg);
3855
+ cimModel.addDCLineSegment(dcLineSegmentNeg);
3856
+ }
3547
3857
  this.addIdMapping(i7Data.id, dcLineSegment.mrid, integral_sql_1.Integral7TableNames.HGUE_LEITUNG);
3548
3858
  }
3549
3859
  }
@@ -3564,7 +3874,7 @@ class ConverterIntegral7 {
3564
3874
  typTrafo.ukr12 = i7Data.ukr;
3565
3875
  typTrafo.pkr12 = i7Data.pkr;
3566
3876
  typTrafo.schaltgruppe = i7Data.schaltgr;
3567
- typTrafo.spezialRegelung = i7Data.trafo_spezial;
3877
+ typTrafo.spezialRegelung = (0, parser_utils_1.isNumericI7)(i7Data.trafo_spezial) ? (0, parser_utils_1.convertToNumberI7)(i7Data.trafo_spezial) : undefined;
3568
3878
  typTrafo.x00r1 = i7Data.x00r1;
3569
3879
  typTrafo.x00r2 = i7Data.x00r2;
3570
3880
  typTrafo.x0kr1 = i7Data.x0kr1;
@@ -3710,7 +4020,7 @@ class ConverterIntegral7 {
3710
4020
  sternpunktKnotenMap.set(elem, new Map());
3711
4021
  }
3712
4022
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN) && trafoIDs.length) {
3713
- const sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN), trafoIDs));
4023
+ const sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN_FILTERED, this.getAvailableColumnNames(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN), trafoIDs));
3714
4024
  for (const spKnoten of sternpunktKnotenResult) {
3715
4025
  (_a = sternpunktKnotenMap.get(spKnoten.netzobjekt)) === null || _a === void 0 ? void 0 : _a.set(spKnoten.id, spKnoten);
3716
4026
  }
@@ -3725,6 +4035,27 @@ class ConverterIntegral7 {
3725
4035
  else {
3726
4036
  this.logger.debug(`Trafo2W ${i7Data.id} besitzt keine Umspannanlage.`);
3727
4037
  }
4038
+ if (powerTransformer.getUUID() === '515508dc-5982-4686-ad26-08d39db91421') {
4039
+ let stop = true;
4040
+ } // kein Typ in D4
4041
+ if (powerTransformer.getUUID() === '012416f2d9584971baa93360fcf40be2') {
4042
+ let stop = true;
4043
+ } //Typ in D8
4044
+ if (powerTransformer.getUUID() === '00ebe00e-50fa-4fc0-9ed6-557528a9b460') {
4045
+ let stop = true;
4046
+ } //kein Typ in BE
4047
+ if (powerTransformer.getUUID() === '11e7be86-8bb7-41ba-898a-74cd5e8efbb9') {
4048
+ let stop = true;
4049
+ } //Typ in D7
4050
+ if (powerTransformer.getUUID() === '8eca3fedd32c49369f8946ac4ce70e17') { //Stufenstellerkonvertierung fehlgeschlagen
4051
+ let stop = true;
4052
+ }
4053
+ if (powerTransformer.getUUID() === 'b9d8bd48e1554af7b6153c1f7da052e1') {
4054
+ let stop = true;
4055
+ } //Phasenschieber zu falscher Winkel und falsches stepIncrement.
4056
+ if (powerTransformer.getUUID() === '2ACF34B9-9DC9-4607-9B8A-032EBC2C31A5') {
4057
+ let stop = true;
4058
+ } //Längsregeltransformator mit symmetrischem Phasenschieber.
3728
4059
  if (i7Data.nametyp) {
3729
4060
  const stop = true;
3730
4061
  }
@@ -3739,7 +4070,7 @@ class ConverterIntegral7 {
3739
4070
  }
3740
4071
  const schaltgruppe = ((_b = i7Data.schaltgr) === null || _b === void 0 ? void 0 : _b.length) ? i7Data.schaltgr : powerTransformerInfo === null || powerTransformerInfo === void 0 ? void 0 : powerTransformerInfo.schaltgruppe;
3741
4072
  // Wicklung 1
3742
- const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w1), `W1${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4073
+ const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w1), `W1-${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
3743
4074
  powerTransformerEnd1.endNumber = 1;
3744
4075
  const pkr = (0, utils_2.getPkrTrafo)(i7Data, powerTransformerInfo, '');
3745
4076
  const ukr = (0, utils_2.getUkrTrafo)(i7Data, powerTransformerInfo, '');
@@ -3747,15 +4078,14 @@ class ConverterIntegral7 {
3747
4078
  const ur = (0, utils_2.getUrTrafo)(i7Data, powerTransformerInfo, powerTransformerEnd1.endNumber);
3748
4079
  //const x0 = get
3749
4080
  // I rated
3750
- const ir1 = sr * 1000000 / (ur * 1000 * Math.sqrt(3));
4081
+ const ir1 = (0, utils_2.getTrafoIr)(ur, sr);
3751
4082
  // P0 Lastverluste im I7 Modell p_leer
3752
4083
  const pLeer = (0, utils_2.getTrafoPleer)(i7Data, powerTransformerInfo);
3753
4084
  // Leerlaufverluste
3754
4085
  const iLeer = (0, utils_2.getTrafoIleer)(i7Data, powerTransformerInfo);
3755
- //const zeroSequImpedanzWx = calculate;
3756
4086
  // Berechnung
3757
4087
  powerTransformerEnd1.r = (0, utils_2.calculateR)(ur, pkr, sr);
3758
- powerTransformerEnd1.x = (0, utils_2.calculateX)(ur, ukr, sr, powerTransformerEnd1.r);
4088
+ powerTransformerEnd1.x = (0, utils_2.calculateX)(ur, ukr, sr);
3759
4089
  // TODO was ist P0 in I7 Trafomodell
3760
4090
  // P0 Lastverluste abhängig von Last
3761
4091
  powerTransformerEnd1.g = (0, utils_2.calculateG)(ur, pLeer);
@@ -3763,8 +4093,10 @@ class ConverterIntegral7 {
3763
4093
  powerTransformerEnd1.ratedU = ur;
3764
4094
  powerTransformerEnd1.ratedS = sr;
3765
4095
  //Short-Circuit data export EQ-SC profile //TODO: Read data for enervancetransformertype object.
3766
- powerTransformerEnd1.x0 = (0, parser_utils_1.isNumericI7)(i7Data.x00r1) ? i7Data.x00r1 : 0;
3767
- powerTransformerEnd1.r0 = (0, parser_utils_1.isNumericI7)(i7Data.r00r1) ? i7Data.r00r1 : 0;
4096
+ const x00r1 = (0, parser_utils_1.isNumericI7)(i7Data.x00r1) ? i7Data.x00r1 : 0;
4097
+ const x0kr1 = (0, parser_utils_1.isNumericI7)(i7Data.x0kr1) ? i7Data.x0kr1 : 0;
4098
+ const x00r2 = (0, parser_utils_1.isNumericI7)(i7Data.x00r2) ? i7Data.x00r2 : 0;
4099
+ const r00r1 = (0, parser_utils_1.isNumericI7)(i7Data.r00r1) ? i7Data.r00r1 : 0;
3768
4100
  /** Topologie 3 moegliche Anschluesse
3769
4101
  * KontenSo -> Anschluesspunkt
3770
4102
  * KnotenSf -> Schaltfeldpunkt
@@ -3786,15 +4118,21 @@ class ConverterIntegral7 {
3786
4118
  }
3787
4119
  }
3788
4120
  // Wicklung 2
3789
- const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w2), `W2${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4121
+ const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w2), `W2-${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
3790
4122
  powerTransformerEnd2.endNumber = 2;
3791
4123
  const sr2 = (0, utils_2.getSrTrafo)(i7Data, powerTransformerInfo, powerTransformerEnd2.endNumber, false);
3792
4124
  const ur2 = (0, utils_2.getUrTrafo)(i7Data, powerTransformerInfo, powerTransformerEnd2.endNumber);
3793
4125
  // Berechnung
4126
+ // NullSystem Impedanzen (nur Reaktanzen)
4127
+ const zeroSequImpedanzWx = (0, utils_trafo3w_1.calculateZeroSequImpedanzenTrafo2W)(r00r1, x00r1, x0kr1, x00r2, ur, ur2);
3794
4128
  powerTransformerEnd2.r = 0;
3795
4129
  powerTransformerEnd2.x = 0;
3796
4130
  powerTransformerEnd2.ratedS = sr2;
3797
4131
  powerTransformerEnd2.ratedU = ur2;
4132
+ powerTransformerEnd1.x0 = zeroSequImpedanzWx.x01;
4133
+ powerTransformerEnd1.r0 = zeroSequImpedanzWx.r01;
4134
+ powerTransformerEnd2.x0 = zeroSequImpedanzWx.x02;
4135
+ powerTransformerEnd2.r0 = zeroSequImpedanzWx.r02;
3798
4136
  // I rated
3799
4137
  const ir2 = (sr * Math.pow(10, 6) / ur2 * 1000) / Math.sqrt(3);
3800
4138
  /* const ziel = cimModel.getObject(this.integralID2UUID.get(i7Data.eknoten));
@@ -3834,17 +4172,25 @@ class ConverterIntegral7 {
3834
4172
  * */
3835
4173
  const powerTransformerEnds = [powerTransformer.powerTransformerEnd[0], powerTransformer.powerTransformerEnd[1]];
3836
4174
  /** Id des spannungsgeregelten Kontens */
3837
- const spRegKnoten = yield this.getSpannungsbandTrafo2W(i7Data);
4175
+ const spRegKnoten = yield this.getSpannungsbandTrafo(i7Data, powerTransformerEnds);
3838
4176
  const spannungsband = integral7.targetVoltages.get(spRegKnoten.id);
4177
+ /*if(spRegKnoten.id > -1){
4178
+ spannungsband = integral7.targetVoltages.get(spRegKnoten.id);
4179
+ }*/
3839
4180
  const cnUUID = this.integralID2UUID.get(spRegKnoten.id);
3840
4181
  const connectivityNode = cimModel.getObject(cnUUID);
4182
+ /** Create TapChanger for PowerTransformerEnds */
3841
4183
  try {
4184
+ if (connectivityNode === undefined) {
4185
+ let stop = true;
4186
+ }
3842
4187
  this.convertTapChangers(i7Data, powerTransformerEnds, cimModel, powerTransformerInfo, connectivityNode, spannungsband);
3843
4188
  }
3844
4189
  catch (err) {
3845
- console.log('convertTapChangers');
3846
- console.log(err);
4190
+ this.logger.error(`Fehler aufgetreten. Konvertierung des Stufenstellers für Transformator mit UUID ${powerTransformer.getUUID()} fehlgeschlagen.`);
3847
4191
  }
4192
+ /** Transformator Anschlusspunkte nach Spannungsebene sortieren */
4193
+ this.sortTransformerEnd(powerTransformer, 'ratedU', 'desc');
3848
4194
  cimModel.addPowerTransformerEnd(powerTransformerEnd1);
3849
4195
  cimModel.addPowerTransformerEnd(powerTransformerEnd2);
3850
4196
  cimModel.addPowerTransformer(powerTransformer);
@@ -3879,7 +4225,7 @@ class ConverterIntegral7 {
3879
4225
  /** Sternpunktknoten */
3880
4226
  let sternpunktKnotenResult;
3881
4227
  if (this.isTableAvailable(tableNameStpKnoten) && trafoWicklungIDs.length > 0) {
3882
- sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, this.getAvailableColumnNames(tableNameStpKnoten), trafoWicklungIDs));
4228
+ sternpunktKnotenResult = yield this.mysqlController.execQuery((0, integral_sql_1.getI7Query)(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN_FILTERED, this.getAvailableColumnNames(tableNameStpKnoten), trafoWicklungIDs));
3883
4229
  }
3884
4230
  for (const i7Data of result) {
3885
4231
  const sternpunktKnotenMap = new Map();
@@ -3935,8 +4281,8 @@ class ConverterIntegral7 {
3935
4281
  const impedanzW2 = (0, utils_trafo3w_1.calculateImpedanzenTrafo3W)(2, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, 0, 0);
3936
4282
  const impedanzW3 = (0, utils_trafo3w_1.calculateImpedanzenTrafo3W)(3, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, 0, 0);
3937
4283
  // NullSystem Impedanzen (nur Reaktanzen)
3938
- const zeroSequImpedanzWx = (0, utils_trafo3w_1.calculateZeroSequImpedanzenTrafo3W)(r00r1, r0kr1, r00r2, x00r1, x0kr1, x00r2, ur1, ur2, sr1);
3939
- const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w1), `W1 ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4284
+ const zeroSequImpedanzWx = (0, utils_trafo3w_1.calculateZeroSequImpedanzenTrafo3W)(r00r1, r0kr1, r00r2, x00r1, x0kr1, x00r2, ur1, ur2, ur3);
4285
+ const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w1), `W1-${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
3940
4286
  powerTransformerEnd1.endNumber = 1;
3941
4287
  // Topologie
3942
4288
  /** Anfang
@@ -3975,6 +4321,7 @@ class ConverterIntegral7 {
3975
4321
  powerTransformerEnd1.g = impedanzW1.g;
3976
4322
  powerTransformerEnd1.b = impedanzW1.b;
3977
4323
  powerTransformerEnd1.x0 = zeroSequImpedanzWx.x01;
4324
+ powerTransformerEnd1.r0 = zeroSequImpedanzWx.r01;
3978
4325
  powerTransformerEnd1.ratedU = ur1;
3979
4326
  powerTransformerEnd1.ratedS = sr1;
3980
4327
  this.setPowerTransformerEndProperties(frame, powerTransformerEnd1, powerTransformer, terminal1, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig, trafoWicklungen);
@@ -4015,7 +4362,7 @@ class ConverterIntegral7 {
4015
4362
  const terminal2 = this.createBoundaryConnection(frame, powerTransformer, wicklung2.aknoten, PhaseCode_1.PhaseCode.ABC);
4016
4363
  if (!terminal2)
4017
4364
  this.logger.debug(`PowerTransformer3W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
4018
- const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w2), `W2 ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4365
+ const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w2), `W2-${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4019
4366
  powerTransformerEnd2.endNumber = 2;
4020
4367
  // Berechnung
4021
4368
  powerTransformerEnd2.r = impedanzW2.r;
@@ -4023,6 +4370,7 @@ class ConverterIntegral7 {
4023
4370
  powerTransformerEnd2.g = impedanzW2.g;
4024
4371
  powerTransformerEnd2.b = impedanzW2.b;
4025
4372
  powerTransformerEnd2.x0 = zeroSequImpedanzWx.x02;
4373
+ powerTransformerEnd2.r0 = zeroSequImpedanzWx.r02;
4026
4374
  powerTransformerEnd2.ratedS = sr2;
4027
4375
  powerTransformerEnd2.ratedU = ur2;
4028
4376
  powerTransformerEnd2.powerTransformer = powerTransformer;
@@ -4064,7 +4412,7 @@ class ConverterIntegral7 {
4064
4412
  const terminal3 = this.createBoundaryConnection(frame, powerTransformer, wicklung3.aknoten, PhaseCode_1.PhaseCode.ABC);
4065
4413
  if (!terminal3)
4066
4414
  this.logger.debug(`PowerTransformer3W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
4067
- const powerTransformerEnd3 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w3), `Wicklung 3 ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4415
+ const powerTransformerEnd3 = new PowerTransformerEnd_1.PowerTransformerEnd((0, parser_utils_1.getUUID)(i7Data.guid_w3), `W3-${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name}`);
4068
4416
  powerTransformerEnd3.endNumber = 3;
4069
4417
  // Berechnung
4070
4418
  powerTransformerEnd3.r = impedanzW3.r;
@@ -4072,6 +4420,7 @@ class ConverterIntegral7 {
4072
4420
  powerTransformerEnd3.g = impedanzW3.g;
4073
4421
  powerTransformerEnd3.b = impedanzW3.b;
4074
4422
  powerTransformerEnd3.x0 = zeroSequImpedanzWx.x03;
4423
+ powerTransformerEnd3.r0 = zeroSequImpedanzWx.r03;
4075
4424
  powerTransformerEnd3.ratedS = sr3;
4076
4425
  powerTransformerEnd3.ratedU = ur3;
4077
4426
  powerTransformerEnd3.powerTransformer = powerTransformer;
@@ -4113,10 +4462,13 @@ class ConverterIntegral7 {
4113
4462
  /** Normieren auf die Wicklungsnummer, da 0 obere Spannungsseite angibt */
4114
4463
  // const terminals = [terminal1, terminal2, terminal3];
4115
4464
  const powerTransformerEnds = [powerTransformerEnd1, powerTransformerEnd2, powerTransformerEnd3];
4116
- const spRegKnoten = yield this.getSpannungsbandTrafo2W(i7Data);
4465
+ const spRegKnoten = yield this.getSpannungsbandTrafo(i7Data, powerTransformerEnds);
4117
4466
  const spannungsband = integral7.targetVoltages.get(spRegKnoten.id);
4118
4467
  const cnUUID = this.integralID2UUID.get(spRegKnoten.id);
4119
4468
  const connectivityNode = cimModel.getObject(cnUUID);
4469
+ if (cnUUID !== undefined) {
4470
+ const stop = true;
4471
+ }
4120
4472
  try {
4121
4473
  this.convertTapChangers(i7Data, powerTransformerEnds, cimModel, powerTransformerInfo, connectivityNode, spannungsband);
4122
4474
  }
@@ -4149,15 +4501,15 @@ class ConverterIntegral7 {
4149
4501
  const winkel = `uzus_winkel_s${endNumber}`;
4150
4502
  const ur = `ur${endNumber}`;
4151
4503
  powerTransformerEndInfo.endNumber = endNumber;
4152
- powerTransformerEndInfo.ratedU = new Voltage_1.Voltage(data[ur], UnitMultiplier_1.UnitMultiplier.k, UnitSymbol_1.UnitSymbol.V);
4153
- powerTransformerEndInfo.gestufteSeite = (0, parser_utils_1.convertToNumberI7)(data[gestufteSeite]);
4504
+ powerTransformerEndInfo.ratedU = (0, parser_utils_1.isNumericI7)(data[ur]) ? new Voltage_1.Voltage(data[ur], UnitMultiplier_1.UnitMultiplier.k, UnitSymbol_1.UnitSymbol.V) : undefined;
4505
+ powerTransformerEndInfo.gestufteSeite = (0, parser_utils_1.isNumericI7)(data[gestufteSeite]) ? (0, parser_utils_1.convertToNumberI7)(data[gestufteSeite]) : undefined;
4154
4506
  const tapChangerInfo = new EVTapChangerInfo_1.EVTapChangerInfo(common_utils_1.CommonUtils.generateUUID(), `TapChangerInfo_${data['id']}`);
4155
- tapChangerInfo.highStep = (0, parser_utils_1.convertToNumberI7)(data[maxstufe]);
4156
- tapChangerInfo.lowStep = (0, parser_utils_1.convertToNumberI7)(data[minstufe]);
4157
- tapChangerInfo.neutralStep = (0, parser_utils_1.convertToNumberI7)(data[neutralstufe]);
4507
+ tapChangerInfo.highStep = (0, parser_utils_1.isNumericI7)(data[maxstufe]) ? (0, parser_utils_1.convertToNumberI7)(data[maxstufe]) : undefined;
4508
+ tapChangerInfo.lowStep = (0, parser_utils_1.isNumericI7)(data[minstufe]) ? (0, parser_utils_1.convertToNumberI7)(data[minstufe]) : undefined;
4509
+ tapChangerInfo.neutralStep = (0, parser_utils_1.isNumericI7)(data[neutralstufe]) ? (0, parser_utils_1.convertToNumberI7)(data[neutralstufe]) : undefined;
4158
4510
  tapChangerInfo.stepPhaseIncrement = (0, parser_utils_1.isNumericI7)(data[winkel]) ? new AngleDegrees_1.AngleDegrees(data[winkel], UnitMultiplier_1.UnitMultiplier.none, UnitSymbol_1.UnitSymbol.deg) : undefined;
4159
- tapChangerInfo.uMax = data[umax];
4160
- tapChangerInfo.uMin = data[umin];
4511
+ tapChangerInfo.uMax = (0, parser_utils_1.isNumericI7)(data[umax]) ? (0, parser_utils_1.convertToNumberI7)(data[umax]) : undefined;
4512
+ tapChangerInfo.uMin = (0, parser_utils_1.isNumericI7)(data[umin]) ? (0, parser_utils_1.convertToNumberI7)(data[umin]) : undefined;
4161
4513
  tapChangerInfo.setPowerTransfomerEndInfo(powerTransformerEndInfo);
4162
4514
  powerTransformerEndInfo.setTapChangerInfo(tapChangerInfo);
4163
4515
  }
@@ -4696,7 +5048,7 @@ class ConverterIntegral7 {
4696
5048
  }
4697
5049
  return ret_val;
4698
5050
  }
4699
- getSpannungsbandTrafo2W(i7Data) {
5051
+ getSpannungsbandTrafo(i7Data, powerTransformerEnds) {
4700
5052
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
4701
5053
  return new Promise((resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
4702
5054
  let minMaxSollResult;
@@ -4707,11 +5059,11 @@ class ConverterIntegral7 {
4707
5059
  * 2 - Niederspannungsseite (Anschluss 3)
4708
5060
  * 3 - Externer Knoten
4709
5061
  * */
4710
- /** Normieren auf die Wicklungsnummer, da 0 obere Spannungsseite angibt */
4711
- const spgKnotenId = i7Data.spgreg_knoten;
4712
- let tempKnotenId = i7Data.spgreg_anschluss === 0 ? i7Data.aknoten :
4713
- (i7Data.spgreg_anschluss === 1 ? i7Data.eknoten : undefined);
4714
- if (tempKnotenId !== undefined) { // Lokale Regelung
5062
+ let tempKnotenId = i7Data.spgreg_anschluss === 0 ? this.UUID2Integral7ID.get(powerTransformerEnds[0].getTerminal().getConnectivityNodeUUID())[0] : undefined;
5063
+ tempKnotenId = i7Data.spgreg_anschluss === 1 ? this.UUID2Integral7ID.get(powerTransformerEnds[1].getTerminal().getConnectivityNodeUUID())[0] : tempKnotenId;
5064
+ tempKnotenId = i7Data.spgreg_anschluss === 2 ? this.UUID2Integral7ID.get(powerTransformerEnds[2].getTerminal().getConnectivityNodeUUID())[0] : tempKnotenId;
5065
+ tempKnotenId = i7Data.spgreg_anschluss === 3 ? (i7Data.spgreg_knoten !== undefined ? i7Data.spgreg_knoten : undefined) : tempKnotenId;
5066
+ if (i7Data.spgreg_anschluss >= 0 && i7Data.spgreg_anschluss <= 2 && tempKnotenId !== undefined) { // Lokale Regelung
4715
5067
  // Falls tempKnotenId ausgeprägt ist, bestimme in welcher Tabelle der aKnoten bzw. eKnoten enthalten ist.
4716
5068
  // 3 Faelle:
4717
5069
  // 1. KnotenSf -> Schaltfeldpunkt
@@ -4764,25 +5116,25 @@ class ConverterIntegral7 {
4764
5116
  }
4765
5117
  }
4766
5118
  }
4767
- else if (spgKnotenId !== undefined) { // Reeleung am externen Knoten
5119
+ else if (i7Data.spgreg_anschluss === 3 && tempKnotenId !== undefined) { // Regelung am externen Knoten
4768
5120
  const tabName_NetzSo = integral_sql_1.Integral7TableNames[integral_sql_1.I7Objects.KNOTEN_SO];
4769
5121
  const tabName_NetzSSAB = integral_sql_1.Integral7TableNames[integral_sql_1.I7Objects.SAMMELSCHIENE];
4770
5122
  const query = ` SELECT Voltage.id, Voltage.umin, Voltage.umax, Voltage.usoll
4771
5123
  FROM (
4772
5124
  SELECT id, umin, umax, usoll
4773
5125
  FROM ${tabName_NetzSo}
4774
- WHERE ${tabName_NetzSo}.id = ${spgKnotenId}
5126
+ WHERE ${tabName_NetzSo}.id = ${tempKnotenId}
4775
5127
  UNION
4776
5128
  SELECT id, umin, umax, usoll
4777
5129
  FROM ${tabName_NetzSSAB}
4778
- WHERE ${tabName_NetzSSAB}.id = ${spgKnotenId}) as Voltage`;
5130
+ WHERE ${tabName_NetzSSAB}.id = ${tempKnotenId}) as Voltage`;
4779
5131
  minMaxSollResult = yield this.mysqlController.execQuery(query);
4780
5132
  }
4781
5133
  if (minMaxSollResult && minMaxSollResult.length) {
4782
5134
  resolve(minMaxSollResult[0]);
4783
5135
  }
4784
5136
  else {
4785
- resolve({ id: 0, usoll: 0, umin: 0, umax: 0 });
5137
+ resolve({ id: -1, usoll: 0, umin: 0, umax: 0 });
4786
5138
  }
4787
5139
  }));
4788
5140
  });
@@ -5031,13 +5383,13 @@ class ConverterIntegral7 {
5031
5383
  cimModel.addCoordinateSystem(coordinateSystem);
5032
5384
  }
5033
5385
  setPowerTransformerEndProperties(frame, powerTransformerEnd, powerTransformer, terminal, sternpunktKnotenMap, integral7, ir, i7Data, defaultValuesConfig, windings) {
5386
+ var _a, _b;
5034
5387
  const cimModel = frame.cimModel;
5035
5388
  if (terminal) {
5036
5389
  // Topologie
5037
5390
  powerTransformerEnd.terminal = terminal;
5038
5391
  // CurrentLimit
5039
5392
  this.setConductingEquipmentCurrentLimit(cimModel, `W${powerTransformerEnd.endNumber}` + (powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.name), terminal, ir);
5040
- let obj = i7Data;
5041
5393
  let isTrafo2w = i7Data.trafowicklung3w3 === undefined ? true : false;
5042
5394
  // Erdung / Sternpunkt
5043
5395
  if (sternpunktKnotenMap.has(i7Data.id) && isTrafo2w) {
@@ -5077,7 +5429,10 @@ class ConverterIntegral7 {
5077
5429
  this.logger.debug(`Wicklung2W ${i7Data.id} ${powerTransformerEnd.endNumber} ${powerTransformerEnd.mrid} keine Terminalinstanz.`);
5078
5430
  }
5079
5431
  // Spannungsebene
5080
- if (powerTransformerEnd.ratedU) {
5432
+ if ((_b = (_a = powerTransformerEnd === null || powerTransformerEnd === void 0 ? void 0 : powerTransformerEnd.terminal) === null || _a === void 0 ? void 0 : _a.connectivityNode) === null || _b === void 0 ? void 0 : _b.getBaseVoltage()) {
5433
+ powerTransformerEnd.baseVoltage = powerTransformerEnd.terminal.connectivityNode.getBaseVoltage();
5434
+ }
5435
+ else if (powerTransformerEnd.ratedU) {
5081
5436
  powerTransformerEnd.baseVoltage = (0, util_create_1.createBaseVoltageIfNotExists)(cimModel, powerTransformerEnd.ratedU, this.exportFramesBoundary);
5082
5437
  }
5083
5438
  else {
@@ -5087,53 +5442,119 @@ class ConverterIntegral7 {
5087
5442
  powerTransformer.addPowerTransformerEnd(powerTransformerEnd);
5088
5443
  }
5089
5444
  convertTapChangers(i7Data, transformerEnds, cimModel, transformerinfo, connectivityNode, spannungsband) {
5090
- var _a, _b, _c;
5445
+ var _a, _b, _c, _d, _e, _f, _g, _h;
5446
+ /*if(getUUID(i7Data.guid) === '11e7be86-8bb7-41ba-898a-74cd5e8efbb9'){ //Zeile50
5447
+ let stop = true; DONE
5448
+ }
5449
+ if(getUUID(i7Data.guid) === '1239F03C-ED5B-4FDF-9453-D97E611FCC36'){ //Zeile52 - Datenfehler: Transformatoren mit definierter Zusatzspannung und Stufungsbereich, jedoch 'Stufensteller nicht vorhanden'
5450
+ let stop = true; DONE
5451
+ }*/
5452
+ /*if(getUUID(i7Data.guid)=== 'CFDAA56A-A0DA-4C5B-92CC-21138B6D6D07'){ //Standard LR
5453
+ let stop = true;
5454
+ }*/
5455
+ if ((0, parser_utils_1.getUUID)(i7Data.guid) === '00ebe00e-50fa-4fc0-9ed6-557528a9b460') { //Zeile53 - Typ Meeden'
5456
+ let stop = true;
5457
+ }
5458
+ /*if(getUUID(i7Data.guid) === '012416f2d9584971baa93360fcf40be2'){ //Zeile55 - SR statt LR'
5459
+ let stop = true;
5460
+ }*/
5461
+ if ((0, parser_utils_1.getUUID)(i7Data.guid) === '515508dc-5982-4686-ad26-08d39db91421') { //Zeile81 - SR statt LR'
5462
+ let stop = true;
5463
+ }
5464
+ /*if(getUUID(i7Data.guid) === '5ec82d14-ee64-43b6-86ff-c7615d96f7ad'){ //Zeile58
5465
+ let stop = true;
5466
+ }*/
5467
+ let ratioPhaseTapChangerPresent = false;
5468
+ //Check if tap changer exists. (power transformer winding)
5469
+ let tapChangerNumberI7 = []; //Number of tap changer
5470
+ let tapChangerNumber = [];
5471
+ //let transformerEndInfo:EVPowerTransformerEndInfo[] = [];
5472
+ for (let tapChangerPos = 1; tapChangerPos <= 2; tapChangerPos++) {
5473
+ if ((0, parser_utils_1.isNumericI7)(i7Data[`gestufte_seite_s${tapChangerPos}`])) {
5474
+ tapChangerNumberI7.push(i7Data[`gestufte_seite_s${tapChangerPos}`]);
5475
+ tapChangerNumber.push(i7Data[`gestufte_seite_s${tapChangerPos}`]);
5476
+ }
5477
+ }
5478
+ //collect information about tap changers (type)
5479
+ if (tapChangerNumberI7.length === 0) {
5480
+ for (let endNumber = 1; endNumber <= transformerEnds.length; endNumber++) {
5481
+ if ((0, parser_utils_1.isNumericI7)((_a = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _a === void 0 ? void 0 : _a.find(elem => elem.endNumber === endNumber).gestufteSeite)) {
5482
+ tapChangerNumberI7.push((_b = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _b === void 0 ? void 0 : _b.find(elem => elem.endNumber === endNumber).gestufteSeite);
5483
+ tapChangerNumber.push((_c = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _c === void 0 ? void 0 : _c.find(elem => elem.endNumber === endNumber).gestufteSeite);
5484
+ }
5485
+ }
5486
+ }
5487
+ //If there is a phase tap changer and a ratio tap changer reorder the tap changers to process ratio tap changer first.
5488
+ let index = undefined;
5489
+ if (tapChangerNumberI7.length > 1) {
5490
+ for (let entry of tapChangerNumberI7) {
5491
+ const spezialRegelung = (0, parser_utils_1.isNumericI7)(i7Data.trafo_spezial) ? i7Data.trafo_spezial : transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.spezialRegelung;
5492
+ const transformerEndInfo = (_d = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _d === void 0 ? void 0 : _d.find(elem => elem.endNumber === entry);
5493
+ const tapChangerInfo = transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.tapChangerInfo;
5494
+ const angle = (0, parser_utils_1.isNumericI7)(i7Data[`uzus_winkel_s${entry}`])
5495
+ ? (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${entry}`])
5496
+ : (_e = tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.stepPhaseIncrement) === null || _e === void 0 ? void 0 : _e.value;
5497
+ if (!((0, parser_utils_1.isNumericI7)(angle) && (0, parser_utils_1.convertToNumberI7)(angle) != 0 || spezialRegelung) && tapChangerNumberI7.indexOf(entry) > 0) {
5498
+ index = tapChangerNumberI7.indexOf(entry);
5499
+ ratioPhaseTapChangerPresent = true;
5500
+ }
5501
+ }
5502
+ }
5503
+ if (index > 0) {
5504
+ tapChangerNumber[0] = tapChangerNumberI7[index];
5505
+ tapChangerNumber[1] = tapChangerNumberI7[0];
5506
+ }
5091
5507
  /** I7 Modell max. 2 Stufenschalter */
5092
- for (let tapChangerNumber = 1; tapChangerNumber <= 2; tapChangerNumber++) {
5508
+ for (let entry of tapChangerNumber) {
5093
5509
  /**
5094
- * 0 - obere Spannungsseite (Anschluss 1)
5095
- * 1 - obere Spannungsseite (Anschluss 1)
5096
- * 2 - mittlere Spannungsseite (Anschluss 1)
5097
- * 3 - Niederspannungsseite (Anschluss 2)
5098
- * ? - Externer Knoten (Anschluss 3)
5099
- * */
5100
- // gestufte Wicklung
5101
- const transformerEndInfo = (_a = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _a === void 0 ? void 0 : _a.find(elem => elem.endNumber === tapChangerNumber);
5102
- const transformerEnd = transformerEnds.find(elem => elem.endNumber === tapChangerNumber);
5103
- let gestufteSeite = (0, parser_utils_1.isNumericI7)(i7Data[`gestufte_seite_s${tapChangerNumber}`])
5104
- ? i7Data[`gestufte_seite_s${tapChangerNumber}`]
5105
- : transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.gestufteSeite;
5106
- if ((0, parser_utils_1.isNumericI7)(gestufteSeite))
5107
- gestufteSeite = gestufteSeite === 0 ? 1 : gestufteSeite;
5510
+ * 0 Oberspannungsseite
5511
+ * 1 Seite 1
5512
+ * 2 Seite 2
5513
+ * - Stufenschalter nicht vorhanden
5514
+ */
5515
+ let entryI7 = tapChangerNumberI7.indexOf(entry) + 1;
5516
+ let gestufteSeite = tapChangerNumberI7[entryI7 - 1];
5517
+ const transformerEndInfo = (_f = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _f === void 0 ? void 0 : _f.find(elem => elem.endNumber === entryI7);
5518
+ const transformerEnd = transformerEnds.find(elem => elem.endNumber === entryI7);
5519
+ if ((0, parser_utils_1.isNumericI7)(gestufteSeite)) {
5520
+ if (gestufteSeite === 0) { //'Oberspannungsseite'
5521
+ gestufteSeite = transformerEnds.sort(function (w1, w2) {
5522
+ return w2['desc'] - w1['desc'];
5523
+ })[0].endNumber;
5524
+ ;
5525
+ }
5526
+ }
5108
5527
  if (!transformerEnd) {
5109
5528
  this.logger.error(`Trafo ${i7Data.id}: Zum Stufenschalter ${gestufteSeite} keine Wicklung gefunden.`);
5110
5529
  continue;
5111
5530
  }
5112
5531
  else if (!gestufteSeite) {
5113
- this.logger.error(`Trafo ${i7Data.id}: Kein Stufenschalter ${gestufteSeite} zur Wicklung ${transformerEnd.getUUID()} an Transformator ${(_b = transformerEnd.powerTransformer) === null || _b === void 0 ? void 0 : _b.getUUID()} gefunden.`);
5532
+ this.logger.error(`Trafo ${i7Data.id}: Kein Stufenschalter ${gestufteSeite} zur Wicklung ${transformerEnd.getUUID()} an Transformator ${(_g = transformerEnd.powerTransformer) === null || _g === void 0 ? void 0 : _g.getUUID()} gefunden.`);
5114
5533
  continue;
5115
5534
  }
5116
5535
  const tapChangerInfo = transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.tapChangerInfo;
5117
- const angle = (0, parser_utils_1.isNumericI7)(i7Data[`uzus_winkel_s${tapChangerNumber}`])
5118
- ? (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${tapChangerNumber}`])
5119
- : (_c = tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.stepPhaseIncrement) === null || _c === void 0 ? void 0 : _c.value;
5120
- const neutralU = transformerEnd.ratedU;
5121
- let tapChanger;
5122
- if (isFinite(angle) && angle !== 0) {
5536
+ const angle = (0, parser_utils_1.isNumericI7)(i7Data[`uzus_winkel_s${entryI7}`])
5537
+ ? (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${entryI7}`])
5538
+ : (_h = tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.stepPhaseIncrement) === null || _h === void 0 ? void 0 : _h.value;
5539
+ const spezialRegelung = (0, parser_utils_1.isNumericI7)(i7Data.trafo_spezial) ? i7Data.trafo_spezial : transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.spezialRegelung;
5540
+ //const neutralU = transformerEnd.ratedU;
5541
+ let tapChanger = undefined;
5542
+ if ((0, parser_utils_1.isNumericI7)(angle) && (0, parser_utils_1.convertToNumberI7)(angle) % 180 !== 0 || spezialRegelung) {
5123
5543
  // Winkel ist definiert =>PST/Queregler/PhaseTapChanger
5124
- tapChanger = this.createPhaseTapChanger(i7Data, transformerEnds, cimModel, tapChangerNumber, transformerinfo);
5544
+ tapChanger = this.createPhaseTapChanger(i7Data, transformerEnds, cimModel, gestufteSeite, entryI7, transformerinfo);
5125
5545
  }
5126
5546
  else {
5127
5547
  // Winkel ist nicht definiert => Längsregler/RatioTapChanger
5128
- tapChanger = this.createRatioTapChanger(i7Data, transformerEnd, cimModel, connectivityNode, tapChangerNumber, spannungsband, transformerinfo);
5548
+ tapChanger = this.createRatioTapChanger(i7Data, transformerEnds, cimModel, connectivityNode, gestufteSeite, entryI7, spannungsband, transformerinfo);
5129
5549
  }
5130
5550
  // Stufen
5131
- this.setTapChangerVoltageProperties(i7Data, cimModel, tapChanger, tapChangerNumber, tapChangerInfo);
5132
- tapChanger.transformerEnd = transformerEnd;
5133
- tapChanger.neutralU = neutralU;
5551
+ this.setTapChangerVoltageProperties(i7Data, cimModel, tapChanger, entryI7, ratioPhaseTapChangerPresent, tapChangerInfo);
5552
+ let stop = true;
5134
5553
  }
5554
+ let stop = true;
5135
5555
  }
5136
- setTapChangerVoltageProperties(i7Data, cimModel, tapChanger, tapChangerNumber, tapChangerInfo) {
5556
+ setTapChangerVoltageProperties(i7Data, cimModel, tapChanger, tapChangerNumber, ratioPhaseTapChangerPresent, tapChangerInfo) {
5557
+ var _a;
5137
5558
  let lowStep = (0, parser_utils_1.isNumericI7)(i7Data[`minstufe_s${tapChangerNumber}`])
5138
5559
  ? i7Data[`minstufe_s${tapChangerNumber}`]
5139
5560
  : tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.lowStep;
@@ -5146,40 +5567,44 @@ class ConverterIntegral7 {
5146
5567
  let currentStep = (0, parser_utils_1.isNumericI7)(i7Data[`aktstufe_s${tapChangerNumber}`])
5147
5568
  ? i7Data[`aktstufe_s${tapChangerNumber}`]
5148
5569
  : neutralStep;
5570
+ const angle = (0, parser_utils_1.isNumericI7)(i7Data[`uzus_winkel_s${tapChangerNumber}`])
5571
+ ? (0, parser_utils_1.convertToNumberI7)(i7Data[`uzus_winkel_s${tapChangerNumber}`])
5572
+ : (_a = tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.stepPhaseIncrement) === null || _a === void 0 ? void 0 : _a.value;
5149
5573
  const i7TapArray = (0, utils_2.getTapChangerStepArray)(lowStep, highStep);
5150
5574
  /* const tapStepCount = i7TapArray.length;
5151
5575
  const neutralStepIndex = i7TapArray.indexOf(neutralStep);*/
5152
5576
  const lowerVoltageStepCount = (0, utils_2.getTapChangerStepCount)(lowStep, neutralStep);
5153
- const increaseVoltageStepCount = (0, utils_2.getTapChangerStepCount)(neutralStep, highStep);
5577
+ const upperVoltageStepCount = (0, utils_2.getTapChangerStepCount)(neutralStep, highStep);
5154
5578
  const uMin = (0, parser_utils_1.isNumericI7)(i7Data[`umin_s${tapChangerNumber}`])
5155
5579
  ? i7Data[`umin_s${tapChangerNumber}`]
5156
5580
  : tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.uMin;
5157
5581
  const uMax = (0, parser_utils_1.isNumericI7)(i7Data[`umax_s${tapChangerNumber}`])
5158
5582
  ? i7Data[`umax_s${tapChangerNumber}`]
5159
5583
  : tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.uMax;
5160
- const lowerVoltageStepIncrement = Math.abs(uMin) / lowerVoltageStepCount * -1; // -0.01778 => -1.78%
5161
- let increaseVoltageStepIncrement = Math.abs(uMax) / increaseVoltageStepCount; // 0.01778 => 1.78%
5162
- increaseVoltageStepIncrement = isNaN(increaseVoltageStepIncrement) ? 1 : increaseVoltageStepIncrement;
5584
+ let lowerVoltageStepIncrement = Math.abs(uMin / lowerVoltageStepCount);
5585
+ let upperVoltageStepIncrement = Math.abs(uMax / upperVoltageStepCount);
5586
+ let increaseVoltageStepIncrement = (0, parser_utils_1.isNumericI7)(upperVoltageStepIncrement) ? upperVoltageStepIncrement : 0;
5163
5587
  if (tapChanger instanceof RatioTapChanger_1.RatioTapChanger) {
5164
5588
  const ratioTapChanger = tapChanger;
5165
5589
  // Min/Max Zusatzspannung sind nicht symmetrisch
5166
- if (Math.abs(lowerVoltageStepIncrement) !== Math.abs(increaseVoltageStepIncrement)) {
5590
+ if (Math.abs(lowerVoltageStepIncrement) !== Math.abs(upperVoltageStepIncrement) || uMax < uMin || ratioPhaseTapChangerPresent) {
5167
5591
  const ratioTapChangerTable = new RatioTapChangerTable_1.RatioTapChangerTable(common_utils_1.CommonUtils.generateUUID(), `${i7Data.bezeichner} W_${tapChangerNumber}`);
5592
+ let step_tmp = 0;
5593
+ let start_step_tmp = step_tmp;
5168
5594
  // Spannung verringern
5169
- for (let i = 0; i < lowerVoltageStepCount; i++) {
5170
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, i + 1, (lowerVoltageStepIncrement * (lowerVoltageStepCount - i)));
5595
+ for (let i = 0; i < Math.abs(lowerVoltageStepCount); i++) {
5596
+ (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, i7TapArray[i], (1 - ((lowerVoltageStepIncrement * Math.abs(lowerVoltageStepCount - i)) / 100)));
5597
+ step_tmp = i;
5171
5598
  }
5172
5599
  // neutral Step
5173
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, lowerVoltageStepCount + 1, 1);
5600
+ step_tmp++;
5601
+ (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, i7TapArray[step_tmp], 1);
5602
+ step_tmp++;
5603
+ start_step_tmp = step_tmp;
5174
5604
  // Spannung erhoehen
5175
- for (let i = 0; i < increaseVoltageStepCount; i++) {
5176
- const step = (lowerVoltageStepCount + 1) + (i + 1);
5177
- (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, step, (increaseVoltageStepIncrement * (i + 1)));
5178
- }
5179
- lowStep = 1;
5180
- highStep = ratioTapChangerTable.ratioTapChangerTablePoints.length;
5181
- neutralStep = i7TapArray.indexOf(neutralStep) + 1;
5182
- currentStep = neutralStep;
5605
+ for (let i = start_step_tmp; i < start_step_tmp + Math.abs(upperVoltageStepCount); i++) {
5606
+ (0, util_create_1.createRatioTapChangerTablePoint)(ratioTapChangerTable, i7TapArray[i], (1 + ((upperVoltageStepIncrement * (i - start_step_tmp + 1)) / 100)));
5607
+ }
5183
5608
  tapChanger.ratioTapChangerTable = ratioTapChangerTable;
5184
5609
  ratioTapChangerTable.ratioTapChanger = tapChanger;
5185
5610
  // Durchschnitt
@@ -5188,21 +5613,25 @@ class ConverterIntegral7 {
5188
5613
  }
5189
5614
  ratioTapChanger.stepVoltageIncrement = increaseVoltageStepIncrement;
5190
5615
  }
5191
- if (tapChanger instanceof PhaseTapChangerNonLinear_1.PhaseTapChangerNonLinear)
5616
+ if (tapChanger instanceof PhaseTapChangerNonLinear_1.PhaseTapChangerNonLinear) {
5192
5617
  tapChanger.voltageStepIncrement = increaseVoltageStepIncrement;
5618
+ }
5619
+ else if (tapChanger instanceof PhaseTapChangerLinear_1.PhaseTapChangerLinear) {
5620
+ tapChanger.stepPhaseShiftIncrement = angle / upperVoltageStepCount; //upperVoltageStepCount is equal to lowerVoltageStepCount
5621
+ }
5193
5622
  tapChanger.lowStep = lowStep;
5194
5623
  tapChanger.highStep = highStep;
5195
5624
  tapChanger.neutralStep = neutralStep;
5196
- tapChanger.normalStep = neutralStep;
5625
+ tapChanger.normalStep = currentStep;
5197
5626
  tapChanger.step = currentStep;
5198
5627
  if (Math.abs(lowerVoltageStepIncrement) !== Math.abs(increaseVoltageStepIncrement)) {
5199
- this.logger.error(`Trafo ${i7Data.id}: Zusatzspannung Min/Max sind nicht symmetrisch MIN ${lowerVoltageStepIncrement} MAX ${increaseVoltageStepIncrement}. Das Attribut voltageStepIncrement i.H.v ${increaseVoltageStepIncrement} könnte inkorrekt sein.`);
5628
+ this.logger.info(`Trafo ${i7Data.id}: Zusatzspannung Min/Max sind nicht symmetrisch MIN ${lowerVoltageStepIncrement} MAX ${increaseVoltageStepIncrement}. Das Attribut voltageStepIncrement i.H.v ${increaseVoltageStepIncrement} könnte inkorrekt sein.`);
5200
5629
  }
5201
5630
  }
5202
- createRatioTapChanger(i7Data, transformerEnd, cimModel, regulatingConnectivityNode, tapChangerNumber, spannungsband, transformerinfo) {
5203
- var _a, _b, _c;
5204
- const transformerEndInfo = (_a = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _a === void 0 ? void 0 : _a.find(elem => elem.endNumber === tapChangerNumber);
5205
- const tapChangerInfo = transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.tapChangerInfo;
5631
+ createRatioTapChanger(i7Data, transformerEnds, cimModel, regulatingConnectivityNode, gestufteSeite, tapChangerNumber, spannungsband, transformerinfo) {
5632
+ var _a, _b;
5633
+ const transformerEnd = transformerEnds[gestufteSeite - 1];
5634
+ // const tapChangerInfo = transformerEndInfo?.tapChangerInfo;
5206
5635
  // ist ein Stufenschalter vorhanden?
5207
5636
  /**
5208
5637
  * 0 - obere Spannungsseite (Anschluss 1)
@@ -5212,42 +5641,40 @@ class ConverterIntegral7 {
5212
5641
  * ? - Externer Knoten (Anschluss 3)
5213
5642
  * */
5214
5643
  /** Regelung */
5215
- /** Normieren auf die Wicklungsnummer, da 0 obere Spannungsseite ist */
5216
- let gestufteSeite = (0, parser_utils_1.isNumericI7)(i7Data[`gestufte_seite_s${tapChangerNumber}`])
5217
- ? i7Data[`gestufte_seite_s${tapChangerNumber}`]
5218
- : transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.gestufteSeite;
5219
- // Normieren
5220
- gestufteSeite = gestufteSeite === 0 ? 1 : gestufteSeite;
5221
- const ratioTapChanger = new RatioTapChanger_1.RatioTapChanger(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5222
- ratioTapChanger.ltcFlag = false;
5644
+ const ratioTapChanger = new RatioTapChanger_1.RatioTapChanger((0, parser_utils_1.getUUID)(eval(`i7Data.guid_tch${tapChangerNumber}`)), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5645
+ ratioTapChanger.ltcFlag = (0, parser_utils_1.isNumericI7)(`i7Data.unter_last_nicht_verstellbar_s${gestufteSeite}`) ? !(0, parser_utils_1.convertToBooleanI7)(`i7Data.unter_last_nicht_verstellbar_s${gestufteSeite}`) : false;
5223
5646
  ratioTapChanger.transformerEnd = transformerEnd;
5224
- transformerEnd.ratioTapChanger = ratioTapChanger;
5647
+ //transformerEnd.ratioTapChanger = ratioTapChanger;
5225
5648
  ratioTapChanger.neutralU = transformerEnd.ratedU;
5226
5649
  ratioTapChanger.tculControlMode = TransformerControlMode_1.TransformerControlMode.volt;
5227
- const regelung = +i7Data[`regelung_s${gestufteSeite}`];
5228
- // TODO
5229
- const regulatingTerminal = ((_b = regulatingConnectivityNode === null || regulatingConnectivityNode === void 0 ? void 0 : regulatingConnectivityNode.terminals) === null || _b === void 0 ? void 0 : _b.size) ? [...(_c = regulatingConnectivityNode === null || regulatingConnectivityNode === void 0 ? void 0 : regulatingConnectivityNode.terminals) === null || _c === void 0 ? void 0 : _c.values()].find(elem => elem.connected) : undefined;
5650
+ const regelung = (0, parser_utils_1.isNumericI7)(i7Data[`regelung_s${tapChangerNumber}`]) ? (0, parser_utils_1.convertToNumberI7)(i7Data[`regelung_s${tapChangerNumber}`]) : undefined;
5651
+ const regulatingTerminal = ((_a = regulatingConnectivityNode === null || regulatingConnectivityNode === void 0 ? void 0 : regulatingConnectivityNode.terminals) === null || _a === void 0 ? void 0 : _a.size) ? [...(_b = regulatingConnectivityNode === null || regulatingConnectivityNode === void 0 ? void 0 : regulatingConnectivityNode.terminals) === null || _b === void 0 ? void 0 : _b.values()].find(elem => elem.connected) : undefined;
5230
5652
  if (isFinite(spannungsband === null || spannungsband === void 0 ? void 0 : spannungsband.usoll) && regulatingTerminal) {
5231
5653
  /** Ausprägungen
5232
5654
  * 0 -> keine automatische Stufung
5233
5655
  * 1 -> Spannungsbetragsregelung
5234
5656
  * 2 -> Wirkflussvorgabe
5235
5657
  * 3 -> Stromkompoundierung -> stromabhängige Spannungsregelung
5236
- * 4 -> Blindleitungsbilazierung
5658
+ * 4 -> Blindleistungsbilazierung
5237
5659
  * */
5238
- /**
5239
- * Spezieller Fall:
5240
- * Trafo3W mit Winkelangabe und kein Typ Helmstedt angegeben => mappe auf den asymetrischen PST
5241
- * Default-Werte aus der Config für Typ Helmsted verwenden.
5660
+ /** Regelung */
5661
+ /** Spezialregelung - trafo_spezial
5662
+ * 0 - keine Spezialitäten
5663
+ * Winkel == 0 Grad => Längsregler => RatioTapChanger
5664
+ * Querregler Winkel != 0 => Querregler => PhaseTapChanger => PhaseTapChangerLinear | PhaseTapChangerTabular
5665
+ * 1 - Typ Meeden
5666
+ * Symmetrischer Querregler => PhaseTapChangerSymmetrical
5667
+ * 2 - Typ Helmstedt
5668
+ * Asymmetrischer Querregler => PhaseTapChangerAsymmetrical
5242
5669
  * */
5243
- const tapChangerControl = new TapChangerControl_1.TapChangerControl(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5670
+ const tapChangerControl = new TapChangerControl_1.TapChangerControl((0, parser_utils_1.getUUID)(i7Data.guid_rc_v), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5244
5671
  tapChangerControl.discrete = true;
5245
- const regulatingControlEnabled = regelung === 0 ? false : true;
5672
+ const regulatingControlEnabled = regelung === 1 ? true : false;
5246
5673
  tapChangerControl.enabled = regulatingControlEnabled;
5247
5674
  ratioTapChanger.controlEnabled = regulatingControlEnabled;
5248
5675
  tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
5249
5676
  tapChangerControl.targetValue = spannungsband.usoll;
5250
- tapChangerControl.targetDeadband = spannungsband.umax - spannungsband.usoll;
5677
+ tapChangerControl.targetDeadband = spannungsband.umax ? spannungsband.umax - spannungsband.usoll : (spannungsband.umin ? spannungsband.usoll - spannungsband.umin : spannungsband.usoll - (spannungsband.usoll * 0.95));
5251
5678
  tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
5252
5679
  // Assoziationen
5253
5680
  ratioTapChanger.tapChangerControl = tapChangerControl;
@@ -5261,39 +5688,19 @@ class ConverterIntegral7 {
5261
5688
  cimModel.addRatioTapChanger(ratioTapChanger);
5262
5689
  return ratioTapChanger;
5263
5690
  }
5264
- createPhaseTapChanger(i7Data, transformerEnds, cimModel, tapChangerNumber, transformerinfo) {
5691
+ createPhaseTapChanger(i7Data, transformerEnds, cimModel, gestufteSeite, tapChangerNumber, transformerinfo) {
5265
5692
  var _a;
5266
5693
  const transformerEndInfo = (_a = transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.transformerEndInfos) === null || _a === void 0 ? void 0 : _a.find(elem => elem.endNumber === tapChangerNumber);
5267
5694
  const tapChangerInfo = transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.tapChangerInfo;
5268
- let gestufteSeite = (0, parser_utils_1.isNumericI7)(i7Data[`gestufte_seite_s${tapChangerNumber}`])
5269
- ? i7Data[`gestufte_seite_s${tapChangerNumber}`]
5270
- : transformerEndInfo === null || transformerEndInfo === void 0 ? void 0 : transformerEndInfo.gestufteSeite;
5271
- // Normieren
5272
- gestufteSeite = gestufteSeite === 0 ? 1 : gestufteSeite;
5273
- /**
5274
- * 0 - obere Spannungsseite (Anschluss 1)
5275
- * 1 - obere Spannungsseite (Anschluss 1)
5276
- * 2 - mittlere Spannungsseite (Anschluss 1)
5277
- * 3 - Niederspannungsseite (Anschluss 2)
5278
- * ? - Externer Knoten (Anschluss 3)
5279
- * */
5280
5695
  const transformerEnd = transformerEnds.find(elem => elem.endNumber === gestufteSeite);
5281
- const is3WTransformer = transformerEnds.length > 2 ? true : false;
5282
- // ist ein Stufenschalter vorhanden?
5283
- /**
5284
- * 1 obere Spannungsseite
5285
- * 2 mittlere Spannungsseite
5286
- * 3 Niederspannungsseite
5287
- * */
5288
5696
  /** Regelung */
5289
5697
  /** Spezialregelung - trafo_spezial
5290
5698
  * 0 - keine Spezialitäten
5291
- * Winkel == 0 Grad => Längsregler => RatioTapChanger
5292
- * Querregler Winkel != 0 => Querregler => PhaseTapChanger => PhaseTapChangerLinear | PhaseTapChangerTabular
5699
+ * Winkel != 0 => Querregler => PhaseTapChanger => PhaseTapChangerLinear | PhaseTapChangerTabular
5293
5700
  * 1 - Typ Meeden
5294
- * Symetrischer Querregler => PhaseTapChangerSymmetrical
5701
+ * Symmetrischer Querregler => PhaseTapChangerSymmetrical
5295
5702
  * 2 - Typ Helmstedt
5296
- * Asymetrischer Querregler => PhaseTapChangerAsymmetrical
5703
+ * Asymmetrischer Querregler => PhaseTapChangerAsymmetrical
5297
5704
  * */
5298
5705
  let phaseTapChanger;
5299
5706
  /**
@@ -5302,48 +5709,45 @@ class ConverterIntegral7 {
5302
5709
  * Defaul-Werte aus der Config für Typ Helmsted verwenden.
5303
5710
  * */
5304
5711
  let spezialregelung = (0, parser_utils_1.isNumericI7)(i7Data.trafo_spezial) ? i7Data.trafo_spezial : transformerinfo === null || transformerinfo === void 0 ? void 0 : transformerinfo.spezialRegelung;
5305
- spezialregelung = spezialregelung ? spezialregelung : (is3WTransformer ? 2 : undefined);
5712
+ spezialregelung = (0, parser_utils_1.isNumericI7)(spezialregelung) ? (0, parser_utils_1.convertToNumberI7)(spezialregelung) : undefined;
5306
5713
  const winkel = (0, parser_utils_1.isNumericI7)(i7Data[`uzus_winkel_s${tapChangerNumber}`])
5307
5714
  ? i7Data[`uzus_winkel_s${tapChangerNumber}`]
5308
5715
  : tapChangerInfo === null || tapChangerInfo === void 0 ? void 0 : tapChangerInfo.stepPhaseIncrement;
5309
5716
  switch (spezialregelung) {
5310
5717
  case (1): {
5311
5718
  // 1 - Typ Meeden
5312
- const phaseTapChangerSync = new PhaseTapChangerSymmetrical_1.PhaseTapChangerSymmetrical(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5313
- // TODO uzus_winkel_s s. CIM CGMES Doku
5314
- // phaseTapChangerSync.windingConnectionAngle = convertToNumberI7(i7Data[`uzus_winkel_s${transformerEnd.endNumber}`]);
5315
- phaseTapChanger = phaseTapChangerSync;
5316
- cimModel.addPhaseTapChangerSymmetrical(phaseTapChangerSync);
5719
+ const phaseTapChangerSym = new PhaseTapChangerSymmetrical_1.PhaseTapChangerSymmetrical((0, parser_utils_1.getUUID)(eval(`i7Data.guid_tch${tapChangerNumber}`)), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5720
+ phaseTapChanger = phaseTapChangerSym;
5721
+ cimModel.addPhaseTapChangerSymmetrical(phaseTapChangerSym);
5317
5722
  break;
5318
5723
  }
5319
5724
  case (2): {
5320
5725
  // 2 - Typ Helmstedt
5321
- const phaseTapChangerAsync = new PhaseTapChangerAsymmetrical_1.PhaseTapChangerAsymmetrical(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5322
- phaseTapChangerAsync.windingConnectionAngle = winkel;
5323
- phaseTapChanger = phaseTapChangerAsync;
5324
- cimModel.addPhaseTapChangerAsymmetrical(phaseTapChangerAsync);
5726
+ const phaseTapChangerAsym = new PhaseTapChangerAsymmetrical_1.PhaseTapChangerAsymmetrical((0, parser_utils_1.getUUID)(eval(`i7Data.guid_tch${tapChangerNumber}`)), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5727
+ phaseTapChangerAsym.windingConnectionAngle = winkel;
5728
+ phaseTapChanger = phaseTapChangerAsym;
5729
+ cimModel.addPhaseTapChangerAsymmetrical(phaseTapChangerAsym);
5325
5730
  break;
5326
5731
  }
5327
5732
  default: {
5328
- // 2 - Typ Helmstedt
5329
- const phaseTapChangerAsync = new PhaseTapChangerAsymmetrical_1.PhaseTapChangerAsymmetrical(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5330
- phaseTapChangerAsync.windingConnectionAngle = winkel;
5331
- phaseTapChanger = phaseTapChangerAsync;
5332
- cimModel.addPhaseTapChangerAsymmetrical(phaseTapChangerAsync);
5733
+ // There is no information given about special tapchanger control, thus create PhaseTapChangerLinear
5734
+ const phaseTapChangerLin = new PhaseTapChangerLinear_1.PhaseTapChangerLinear((0, parser_utils_1.getUUID)(eval(`i7Data.guid_tch${tapChangerNumber}`)), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5735
+ phaseTapChanger = phaseTapChangerLin;
5736
+ cimModel.addPhaseTapChangerLinear(phaseTapChangerLin);
5333
5737
  break;
5334
5738
  }
5335
5739
  }
5336
5740
  // Attribute
5337
- phaseTapChanger.ltcFlag = false;
5338
- transformerEnd.phaseTapChanger = phaseTapChanger;
5741
+ phaseTapChanger.ltcFlag = (0, parser_utils_1.isNumericI7)(`i7Data.unter_last_nicht_verstellbar_s${tapChangerNumber}`) ? (0, parser_utils_1.convertToBooleanI7)(`i7Data.unter_last_nicht_verstellbar_s${tapChangerNumber}`) : false;
5742
+ phaseTapChanger.transformerEnd = transformerEnd;
5743
+ //transformerEnd.phaseTapChanger = phaseTapChanger;
5339
5744
  // Wirkleistungsregelung Anschluss
5340
- const pRegulationFromNode = i7Data.von_a_nr;
5341
- const pRegulationToNode = i7Data.nach_a_nr;
5745
+ const pRegulationToNode = (0, parser_utils_1.isNumericI7)(i7Data.nach_a_nr) ? (0, parser_utils_1.convertToNumberI7)(i7Data.nach_a_nr) : undefined;
5342
5746
  const regulatingTransformerEnd = transformerEnds.find(elem => elem.endNumber === pRegulationToNode);
5343
5747
  // Regelung
5344
- let pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe`]) ? +i7Data[`p_vorgabe`] : undefined; // PST Trafo
5345
- if (is3WTransformer && tapChangerNumber > 1) {
5346
- pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe_2`]) ? +i7Data[`p_vorgabe_2`] : undefined; // PST Trafo
5748
+ let pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe`]) ? (0, parser_utils_1.convertToNumberI7)(+i7Data[`p_vorgabe`]) : undefined; // PST Trafo
5749
+ if (pVorgabe === undefined) {
5750
+ pVorgabe = (0, parser_utils_1.isNumericI7)(i7Data[`p_vorgabe_2`]) ? (0, parser_utils_1.convertToNumberI7)(+i7Data[`p_vorgabe_2`]) : undefined; // PST Trafo
5347
5751
  }
5348
5752
  // Wirkflussvorgabe
5349
5753
  if (isFinite(pVorgabe) && regulatingTransformerEnd) {
@@ -5358,18 +5762,16 @@ class ConverterIntegral7 {
5358
5762
  * 3 -> Stromkompoundierung -> stromabhängige Spannungsregelung
5359
5763
  * 4 -> Blindleitungsbilazierung
5360
5764
  * */
5361
- const tapChangerControl = new TapChangerControl_1.TapChangerControl(common_utils_1.CommonUtils.generateUUID(), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5765
+ const tapChangerControl = new TapChangerControl_1.TapChangerControl((0, parser_utils_1.getUUID)(i7Data.guid_rc_p), `${transformerEnd.name} W_${transformerEnd.endNumber}`);
5362
5766
  tapChangerControl.discrete = true;
5363
- const regulatingControlEnabled = regelung === 0 ? false : true;
5767
+ const regulatingControlEnabled = regelung === 2 ? true : false;
5364
5768
  tapChangerControl.enabled = regulatingControlEnabled;
5365
5769
  phaseTapChanger.controlEnabled = regulatingControlEnabled;
5366
5770
  tapChangerControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.activePower;
5367
5771
  tapChangerControl.targetValue = pVorgabe;
5368
- // TODO targetDeadband
5369
- tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M;
5772
+ tapChangerControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.M; //ist das wirklich Bestandteil des CGMES?
5370
5773
  // Assoziationen
5371
5774
  phaseTapChanger.tapChangerControl = tapChangerControl;
5372
- phaseTapChanger.transformerEnd = transformerEnd;
5373
5775
  this.setTapChangerControl(phaseTapChanger, regulatingTerminal);
5374
5776
  tapChangerControl.addTapChanger(phaseTapChanger);
5375
5777
  cimModel.addTapChangerControl(tapChangerControl);
@@ -5451,6 +5853,25 @@ class ConverterIntegral7 {
5451
5853
  }
5452
5854
  }
5453
5855
  }
5856
+ /** Equipment grounding
5857
+ * @param shnt ShuntCompensator object
5858
+ * @param stpKnoten Map mit den Sterpunktknoten aus der I7 Datenbank
5859
+ * */
5860
+ setShuntGrounding(shnt, stpKnoten, r0, x0) {
5861
+ if (stpKnoten) {
5862
+ shnt.grounded = (0, parser_utils_1.isBooleanI7)(stpKnoten.geerdet) ? (0, parser_utils_1.convertToBooleanI7)(stpKnoten.geerdet) : false;
5863
+ }
5864
+ else {
5865
+ //equipment is not grounded
5866
+ shnt.grounded = false;
5867
+ }
5868
+ if (r0 === undefined && x0 === undefined) {
5869
+ shnt.grounded = false;
5870
+ }
5871
+ else {
5872
+ shnt.grounded = true;
5873
+ }
5874
+ }
5454
5875
  /** AnschlussIDs von Leitungen für Topologie abfragen */
5455
5876
  queryLeitungsAnschlussIDs() {
5456
5877
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -5693,4 +6114,17 @@ function logExecutionTime(logger, startTime, text) {
5693
6114
  logger.debug(`${text} ${(perf_hooks.performance.now() - startTime) / 1000} seconds`);
5694
6115
  console.log(`${text} ${(perf_hooks.performance.now() - startTime) / 1000} seconds`);
5695
6116
  }
6117
+ function createDCGround(acdcConverter) {
6118
+ // TODO
6119
+ return new DCGround_1.DCGround();
6120
+ }
6121
+ exports.createDCGround = createDCGround;
6122
+ function createNeutralGroundReturn(dcConverterUnit1, dcConverterUnit12) {
6123
+ // TODO
6124
+ }
6125
+ exports.createNeutralGroundReturn = createNeutralGroundReturn;
6126
+ function connectDCGround(acdcConverter) {
6127
+ // TODO
6128
+ }
6129
+ exports.connectDCGround = connectDCGround;
5696
6130
  //# sourceMappingURL=converter.integral7.js.map