@enervance/insight-cim-model 0.0.30 → 0.0.32

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 (186) hide show
  1. package/dist/analysis/analysis-neplan/digi-ons.d.ts +48 -1
  2. package/dist/analysis/analysis-neplan/digi-ons.js +268 -70
  3. package/dist/analysis/analysis-neplan/digi-ons.js.map +1 -1
  4. package/dist/constants/cim-class-definition.js +25 -0
  5. package/dist/constants/cim-class-definition.js.map +1 -1
  6. package/dist/constants/cim-class-names.d.ts +13 -0
  7. package/dist/constants/cim-class-names.js +13 -0
  8. package/dist/constants/cim-class-names.js.map +1 -1
  9. package/dist/constants/rdf-xml.d.ts +2 -2
  10. package/dist/constants/rdf-xml.js +2 -2
  11. package/dist/converter/integral7/ConverterIntegral7.d.ts +54 -56
  12. package/dist/converter/integral7/ConverterIntegral7.js +2470 -1837
  13. package/dist/converter/integral7/ConverterIntegral7.js.map +1 -1
  14. package/dist/converter/integral7/config/integral-prefix.d.ts +6 -1
  15. package/dist/converter/integral7/config/integral-prefix.js +7 -2
  16. package/dist/converter/integral7/config/integral-prefix.js.map +1 -1
  17. package/dist/converter/integral7/converter-i7.d.ts +29 -61
  18. package/dist/converter/integral7/converter-i7.js +1231 -545
  19. package/dist/converter/integral7/converter-i7.js.map +1 -1
  20. package/dist/converter/integral7/interface-i7/IDefaultValuesConfig.d.ts +22 -0
  21. package/dist/converter/integral7/interface-i7/IObjectMappingConfig.d.ts +3 -0
  22. package/dist/converter/integral7/interface-i7/data-structures-i7.d.ts +62 -5
  23. package/dist/converter/integral7/interface-i7/data-structures-i7.js +6 -0
  24. package/dist/converter/integral7/interface-i7/data-structures-i7.js.map +1 -1
  25. package/dist/converter/integral7/interface-i7/export-frame-i7.d.ts +52 -4
  26. package/dist/converter/integral7/interface-i7/export-frame-i7.js +117 -14
  27. package/dist/converter/integral7/interface-i7/export-frame-i7.js.map +1 -1
  28. package/dist/converter/integral7/model/interfaces.d.ts +14 -0
  29. package/dist/converter/integral7/sql/integral.sql.d.ts +8 -0
  30. package/dist/converter/integral7/sql/integral.sql.js +41 -4
  31. package/dist/converter/integral7/sql/integral.sql.js.map +1 -1
  32. package/dist/converter/integral7/utils-cgmes-export.js +17 -3
  33. package/dist/converter/integral7/utils-cgmes-export.js.map +1 -1
  34. package/dist/converter/integral7/utils-trafo3w.js +51 -21
  35. package/dist/converter/integral7/utils-trafo3w.js.map +1 -1
  36. package/dist/converter/integral7/utils.d.ts +5 -3
  37. package/dist/converter/integral7/utils.js +194 -106
  38. package/dist/converter/integral7/utils.js.map +1 -1
  39. package/dist/index.d.ts +21 -1
  40. package/dist/index.js +42 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interfaces/model/core/IPowerSystemResource.d.ts +2 -0
  43. package/dist/interfaces/model/core/ITerminal.d.ts +2 -0
  44. package/dist/model/assetinfo/SwitchInfo.d.ts +10 -0
  45. package/dist/model/assetinfo/SwitchInfo.js +51 -0
  46. package/dist/model/assetinfo/SwitchInfo.js.map +1 -0
  47. package/dist/model/assets/Asset.js +4 -2
  48. package/dist/model/assets/Asset.js.map +1 -1
  49. package/dist/model/common/Location.js +22 -22
  50. package/dist/model/core/ConductingEquipment.d.ts +2 -0
  51. package/dist/model/core/ConductingEquipment.js +9 -0
  52. package/dist/model/core/ConductingEquipment.js.map +1 -1
  53. package/dist/model/core/ConnectivityNode.d.ts +7 -2
  54. package/dist/model/core/ConnectivityNode.js +71 -0
  55. package/dist/model/core/ConnectivityNode.js.map +1 -1
  56. package/dist/model/core/GeographicalRegion.d.ts +1 -0
  57. package/dist/model/core/GeographicalRegion.js +5 -0
  58. package/dist/model/core/GeographicalRegion.js.map +1 -1
  59. package/dist/model/core/IdentifiedObject.js +13 -9
  60. package/dist/model/core/IdentifiedObject.js.map +1 -1
  61. package/dist/model/core/PowerSystemResource.d.ts +1 -0
  62. package/dist/model/core/PowerSystemResource.js +7 -0
  63. package/dist/model/core/PowerSystemResource.js.map +1 -1
  64. package/dist/model/core/Substation.js +1 -0
  65. package/dist/model/core/Substation.js.map +1 -1
  66. package/dist/model/core/Terminal.d.ts +1 -1
  67. package/dist/model/core/Terminal.js +50 -33
  68. package/dist/model/core/Terminal.js.map +1 -1
  69. package/dist/model/dc/ACDCConverter.js +1 -2
  70. package/dist/model/dc/ACDCConverter.js.map +1 -1
  71. package/dist/model/dc/DCConductingEquipment.d.ts +2 -2
  72. package/dist/model/dc/DCConductingEquipment.js +2 -2
  73. package/dist/model/dc/DCConductingEquipment.js.map +1 -1
  74. package/dist/model/dc/DCEquipmentContainer.js.map +1 -1
  75. package/dist/model/extensions/amprion/assets/AMPRIONAssetCommunicationEquipment.d.ts +8 -0
  76. package/dist/model/extensions/amprion/assets/AMPRIONAssetCommunicationEquipment.js +48 -0
  77. package/dist/model/extensions/amprion/assets/AMPRIONAssetCommunicationEquipment.js.map +1 -0
  78. package/dist/model/extensions/amprion/assets/AMPRIONAssetConstructionMaintenance.d.ts +8 -0
  79. package/dist/model/extensions/amprion/assets/AMPRIONAssetConstructionMaintenance.js +48 -0
  80. package/dist/model/extensions/amprion/assets/AMPRIONAssetConstructionMaintenance.js.map +1 -0
  81. package/dist/model/extensions/amprion/assets/AMPRIONAssetPrimaryEquipment.d.ts +8 -0
  82. package/dist/model/extensions/amprion/assets/AMPRIONAssetPrimaryEquipment.js +48 -0
  83. package/dist/model/extensions/amprion/assets/AMPRIONAssetPrimaryEquipment.js.map +1 -0
  84. package/dist/model/extensions/amprion/assets/AMPRIONAssetSecondaryEquipment.d.ts +8 -0
  85. package/dist/model/extensions/amprion/assets/AMPRIONAssetSecondaryEquipment.js +48 -0
  86. package/dist/model/extensions/amprion/assets/AMPRIONAssetSecondaryEquipment.js.map +1 -0
  87. package/dist/model/extensions/amprion/assets/AMPRIONContractingAuthority.d.ts +8 -0
  88. package/dist/model/extensions/amprion/assets/AMPRIONContractingAuthority.js +48 -0
  89. package/dist/model/extensions/amprion/assets/AMPRIONContractingAuthority.js.map +1 -0
  90. package/dist/model/extensions/amprion/assets/AMPRIONCountry.d.ts +11 -0
  91. package/dist/model/extensions/amprion/assets/AMPRIONCountry.js +49 -0
  92. package/dist/model/extensions/amprion/assets/AMPRIONCountry.js.map +1 -0
  93. package/dist/model/extensions/amprion/assets/AMPRIONFacility.d.ts +3 -0
  94. package/dist/model/extensions/amprion/assets/AMPRIONFacility.js +16 -4
  95. package/dist/model/extensions/amprion/assets/AMPRIONFacility.js.map +1 -1
  96. package/dist/model/extensions/amprion/assets/AMPRIONLeaseholder.d.ts +8 -0
  97. package/dist/model/extensions/amprion/assets/AMPRIONLeaseholder.js +48 -0
  98. package/dist/model/extensions/amprion/assets/AMPRIONLeaseholder.js.map +1 -0
  99. package/dist/model/extensions/amprion/assets/AMPRIONLineDistrict.d.ts +8 -0
  100. package/dist/model/extensions/amprion/assets/AMPRIONLineDistrict.js +48 -0
  101. package/dist/model/extensions/amprion/assets/AMPRIONLineDistrict.js.map +1 -0
  102. package/dist/model/extensions/amprion/assets/AMPRIONServiceProvider.d.ts +8 -0
  103. package/dist/model/extensions/amprion/assets/AMPRIONServiceProvider.js +48 -0
  104. package/dist/model/extensions/amprion/assets/AMPRIONServiceProvider.js.map +1 -0
  105. package/dist/model/extensions/amprion/assets/AMPRIONState.d.ts +13 -0
  106. package/dist/model/extensions/amprion/assets/AMPRIONState.js +58 -0
  107. package/dist/model/extensions/amprion/assets/AMPRIONState.js.map +1 -0
  108. package/dist/model/extensions/amprion/core/AMPRIONBay.d.ts +3 -2
  109. package/dist/model/extensions/amprion/core/AMPRIONBay.js +7 -4
  110. package/dist/model/extensions/amprion/core/AMPRIONBay.js.map +1 -1
  111. package/dist/model/extensions/amprion/core/AMPRIONLine.d.ts +8 -1
  112. package/dist/model/extensions/amprion/core/AMPRIONLine.js +38 -1
  113. package/dist/model/extensions/amprion/core/AMPRIONLine.js.map +1 -1
  114. package/dist/model/extensions/amprion/core/AMPRIONSubstation.d.ts +5 -2
  115. package/dist/model/extensions/amprion/core/AMPRIONSubstation.js +18 -12
  116. package/dist/model/extensions/amprion/core/AMPRIONSubstation.js.map +1 -1
  117. package/dist/model/extensions/amprion/model/AMPRIONModel.d.ts +31 -0
  118. package/dist/model/extensions/amprion/model/AMPRIONModel.js +65 -3
  119. package/dist/model/extensions/amprion/model/AMPRIONModel.js.map +1 -1
  120. package/dist/model/extensions/neplan-westnetz/core/WNConnectivityNode.js.map +1 -1
  121. package/dist/model/meas/Analog.d.ts +7 -0
  122. package/dist/model/meas/Analog.js +8 -0
  123. package/dist/model/meas/Analog.js.map +1 -0
  124. package/dist/model/meas/Measurement.d.ts +8 -0
  125. package/dist/model/meas/Measurement.js +8 -0
  126. package/dist/model/meas/Measurement.js.map +1 -0
  127. package/dist/model/model/Model.d.ts +11 -1
  128. package/dist/model/model/Model.js +23 -6
  129. package/dist/model/model/Model.js.map +1 -1
  130. package/dist/model/operationallimits/CurrentLimit.d.ts +2 -1
  131. package/dist/model/operationallimits/CurrentLimit.js +13 -0
  132. package/dist/model/operationallimits/CurrentLimit.js.map +1 -1
  133. package/dist/model/operationallimits/OperationalLimit.js +1 -1
  134. package/dist/model/operationallimits/OperationalLimit.js.map +1 -1
  135. package/dist/model/operations/ControlArea.d.ts +9 -0
  136. package/dist/model/operations/ControlArea.js +37 -0
  137. package/dist/model/operations/ControlArea.js.map +1 -0
  138. package/dist/model/operations/ControlAreaTypeKind.d.ts +5 -0
  139. package/dist/model/operations/ControlAreaTypeKind.js +10 -0
  140. package/dist/model/operations/ControlAreaTypeKind.js.map +1 -0
  141. package/dist/model/wires/ACLineSegment.js +1 -1
  142. package/dist/model/wires/Breaker.js +4 -2
  143. package/dist/model/wires/Breaker.js.map +1 -1
  144. package/dist/model/wires/EnergyConnection.d.ts +7 -0
  145. package/dist/model/wires/EnergyConnection.js +20 -0
  146. package/dist/model/wires/EnergyConnection.js.map +1 -0
  147. package/dist/model/wires/EnergyConsumer.d.ts +4 -4
  148. package/dist/model/wires/EnergyConsumer.js +5 -5
  149. package/dist/model/wires/EnergyConsumer.js.map +1 -1
  150. package/dist/model/wires/EnergySource.d.ts +5 -2
  151. package/dist/model/wires/EnergySource.js +26 -4
  152. package/dist/model/wires/EnergySource.js.map +1 -1
  153. package/dist/model/wires/Line.js +2 -6
  154. package/dist/model/wires/Line.js.map +1 -1
  155. package/dist/model/wires/PhaseTapChanger.js.map +1 -1
  156. package/dist/model/wires/PowerTransformer.js +1 -1
  157. package/dist/model/wires/PowerTransformer.js.map +1 -1
  158. package/dist/model/wires/RotatingMachine.d.ts +2 -0
  159. package/dist/model/wires/RotatingMachine.js +6 -0
  160. package/dist/model/wires/RotatingMachine.js.map +1 -1
  161. package/dist/model/wires/TapChanger.d.ts +2 -0
  162. package/dist/model/wires/TapChanger.js +36 -8
  163. package/dist/model/wires/TapChanger.js.map +1 -1
  164. package/dist/util/collection/util-excel.js +35 -19
  165. package/dist/util/collection/util-excel.js.map +1 -1
  166. package/dist/util/collection/util-graph.d.ts +8 -1
  167. package/dist/util/collection/util-graph.js +8 -2
  168. package/dist/util/collection/util-graph.js.map +1 -1
  169. package/dist/util/collection/util-graph2tree.js +69 -1
  170. package/dist/util/collection/util-graph2tree.js.map +1 -1
  171. package/dist/util/collection/util-tree.d.ts +0 -34
  172. package/dist/util/collection/util-tree.js +1 -179
  173. package/dist/util/collection/util-tree.js.map +1 -1
  174. package/dist/util/util-create.d.ts +3 -1
  175. package/dist/util/util-create.js +51 -8
  176. package/dist/util/util-create.js.map +1 -1
  177. package/dist/util/utils.d.ts +10 -0
  178. package/dist/util/utils.js +17 -1
  179. package/dist/util/utils.js.map +1 -1
  180. package/dist/util/xml/xml.serializer.d.ts +1 -0
  181. package/dist/util/xml/xml.serializer.js +9 -9
  182. package/dist/util/xml/xml.serializer.js.map +1 -1
  183. package/package.json +2 -1
  184. package/dist/converter/integral7/interface-i7/IUkzExportConfig.d.ts +0 -5
  185. package/dist/converter/integral7/interface-i7/IUkzExportConfig.js +0 -3
  186. package/dist/converter/integral7/interface-i7/IUkzExportConfig.js.map +0 -1
@@ -4,6 +4,7 @@ exports.ConverterI7 = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const Model_1 = require("../../model/model/Model");
6
6
  const export_frame_i7_1 = require("./interface-i7/export-frame-i7");
7
+ const data_structures_i7_1 = require("./interface-i7/data-structures-i7");
7
8
  const mysql_controller_1 = require("../../util/database/mysql-controller");
8
9
  const rdf_xml_1 = require("../../constants/rdf-xml");
9
10
  const utils_1 = require("../../util/utils");
@@ -104,16 +105,23 @@ const DCLineSegment_1 = require("../../model/dc/DCLineSegment");
104
105
  const DCConverterOperatingModeKind_1 = require("../../model/dc/DCConverterOperatingModeKind");
105
106
  const DCTerminal_1 = require("../../model/dc/DCTerminal");
106
107
  const AMPRIONSeriesCompensator_1 = require("../../model/extensions/amprion/wires/AMPRIONSeriesCompensator");
108
+ const jszip_1 = tslib_1.__importDefault(require("jszip"));
109
+ const path_1 = tslib_1.__importDefault(require("path"));
110
+ const fs_1 = tslib_1.__importDefault(require("fs"));
111
+ const AsynchronousMachine_1 = require("../../model/wires/AsynchronousMachine");
112
+ const EquivalentBranch_1 = require("../../model/equivalents/EquivalentBranch");
113
+ const AMPRIONLine_1 = require("../../model/extensions/amprion/core/AMPRIONLine");
114
+ const ControlArea_1 = require("../../model/operations/ControlArea");
107
115
  class ConverterI7 {
108
116
  constructor() {
109
117
  this.exportFrames = new Map();
118
+ this.exportFramesBoundary = new Map();
110
119
  this.cimModelDefault = new Model_1.Model();
111
120
  this.availableTableNames = [];
112
121
  this.integralID2Type = new Map();
113
122
  this.coordinateSystem = 'EPSG:4326';
114
123
  this.integralID2UUID = new Map();
115
124
  this.UUID2Integral7ID = new Map();
116
- this.integral7Modells = new Map();
117
125
  this.kdrosseltypen = new Map();
118
126
  this.leitungAnschlussKnotenIDs = new Set();
119
127
  this.trafo2wAnschlussKnotenIDs = new Set();
@@ -122,18 +130,15 @@ class ConverterI7 {
122
130
  this.lDrosselAnschlussKnotenIDs = new Set();
123
131
  this.lKondensatorAnschlussKnotenIDs = new Set();
124
132
  this.ersatzZweigAnschlussKnotenIDs = new Set();
133
+ this.blocktransformatoren = [];
125
134
  }
126
- convert(objectMappingConfig, defaultValuesConfig, energyTypesConfig, ukzExportConfig, tempDirPath) {
135
+ convert(objectMappingConfig, defaultValuesConfig, energyTypesConfig, exportConfig, tempDirPath) {
127
136
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
128
137
  return new Promise((resolve, reject) => tslib_1.__awaiter(this, void 0, void 0, function* () {
138
+ var _a, _b;
129
139
  try {
130
140
  yield this.createColumnIndex();
131
- const ukz2GeoregionMapping = yield this.mysqlController.execQuery(`
132
- SELECT gr.id AS georegion_id, sgr.id AS subgeoregion_id, group_concat(DISTINCT standort.ukz) AS ukzCSV
133
- FROM netz_subgeoregion sgr
134
- LEFT OUTER JOIN netz_georegion gr ON sgr.georegion = gr.id
135
- LEFT OUTER JOIN netz_standort standort ON sgr.id = standort.subgeoregion
136
- GROUP BY georegion_id; `);
141
+ yield this.configExportFrames(exportConfig, defaultValuesConfig, tempDirPath);
137
142
  yield this.convertBetriebsmitteltypenKdrossel();
138
143
  yield this.convertBetriebsmitteltypenLeitung();
139
144
  yield this.convertBetriebsmitteltypenTrafo();
@@ -143,257 +148,258 @@ class ConverterI7 {
143
148
  yield this.queryLDroselAnschlussIDs();
144
149
  yield this.queryErsatzLaengsAnschlussIDs();
145
150
  yield this.queryLkondensatorAnschlussIDs();
146
- ukz2GeoregionMapping.map(elem => elem.ukzArray = elem.ukzCSV.split(','));
147
- const allGeoRegions = yield this.convertGeoRegionen();
148
- const allSubGeoRegions = yield this.convertSubGeoRegionen(allGeoRegions, defaultValuesConfig);
149
- const boundaryGeoRegionSet = new Set();
150
- const internalGeoRegionSet = new Set();
151
- for (const ukzRegionMap of ukz2GeoregionMapping) {
152
- for (const bdUkz of ukzExportConfig.boundaryUkz) {
153
- const geoRegionUUID = this.integralID2UUID.get(ukzRegionMap.georegion_id);
154
- const geoRegion = allGeoRegions.find(elem => elem.mrid === geoRegionUUID);
155
- if (!geoRegion)
156
- continue;
157
- if (ukzRegionMap.ukzArray.indexOf(bdUkz.name) > -1) {
158
- if (!boundaryGeoRegionSet.has(geoRegion)) {
159
- boundaryGeoRegionSet.add(geoRegion);
160
- }
161
- }
162
- else {
163
- internalGeoRegionSet.add(geoRegion);
164
- }
165
- }
166
- }
167
- const boundaryGeoRegions = Array.from(boundaryGeoRegionSet);
168
- const profileGeoRegions = Array.from(internalGeoRegionSet);
169
- this.logger.debug(`BoundaryGeoRegions ${boundaryGeoRegions.map(elem => elem.name).join()}`);
170
- this.logger.debug(`ProfileGeoRegions ${profileGeoRegions.map(elem => elem.name).join()}`);
171
- const bdExportFrame = new export_frame_i7_1.I7ExportFrame('Boundary', [rdf_xml_1.RDF_XML.PROFILE_EQ, rdf_xml_1.RDF_XML.PROFILE_SSH, rdf_xml_1.RDF_XML.PROFILE_GL, rdf_xml_1.RDF_XML.PROFILE_EQ_BD], tempDirPath, new Map());
172
- for (const bdRegion of boundaryGeoRegions) {
173
- bdExportFrame.cimModel.addGeographicalRegion(bdRegion);
174
- for (const subGeoRegion of bdRegion.regions) {
175
- bdExportFrame.cimModel.addSubGeographicalRegion(subGeoRegion);
176
- }
177
- this.addDefaultObjectsGeo(bdExportFrame.cimModel, defaultValuesConfig);
178
- this.exportFrames.set(bdRegion.mrid, bdExportFrame);
179
- }
180
- const cgmesExportProfiles = [rdf_xml_1.RDF_XML.PROFILE_EQ, rdf_xml_1.RDF_XML.PROFILE_SSH, rdf_xml_1.RDF_XML.PROFILE_SV, rdf_xml_1.RDF_XML.PROFILE_DL, rdf_xml_1.RDF_XML.PROFILE_GL, rdf_xml_1.RDF_XML.PROFILE_AMPI7];
181
- const dependentOnModels = new Map();
182
- dependentOnModels.set(rdf_xml_1.RDF_XML.PROFILE_EQ_BD, [bdExportFrame.getModelUUID(rdf_xml_1.RDF_XML.PROFILE_EQ_BD)]);
183
- for (const pRegion of profileGeoRegions) {
184
- if (!ukzExportConfig.exportGeoRegion.find(elem => elem.name === pRegion.name))
151
+ for (const entry of this.exportFramesBoundary.entries()) {
152
+ const geoRegionUUID = entry[0];
153
+ const frame = entry[1];
154
+ const geoRegion = frame.cimModel.getGeographicalRegion(geoRegionUUID);
155
+ if (!geoRegion)
185
156
  continue;
186
- const exportFrame = new export_frame_i7_1.I7ExportFrame(pRegion.name, cgmesExportProfiles, tempDirPath, dependentOnModels);
187
- exportFrame.cimModel.addGeographicalRegion(pRegion);
188
- for (const subGeoRegion of pRegion.regions) {
189
- exportFrame.cimModel.addSubGeographicalRegion(subGeoRegion);
190
- }
191
- this.addDefaultObjectsLoadModel(exportFrame.cimModel, defaultValuesConfig);
192
- this.addDefaultObjectsGeo(exportFrame.cimModel, defaultValuesConfig);
193
- this.exportFrames.set(pRegion.mrid, exportFrame);
157
+ yield this.convertFrame(frame, geoRegion, objectMappingConfig, energyTypesConfig, defaultValuesConfig);
194
158
  }
195
159
  for (const entry of this.exportFrames.entries()) {
196
160
  const geoRegionUUID = entry[0];
197
161
  const frame = entry[1];
198
- const cimModel = frame.cimModel;
199
- const geoRegion = cimModel.getGeographicalRegion(geoRegionUUID);
162
+ const geoRegion = frame.cimModel.getGeographicalRegion(geoRegionUUID);
200
163
  if (!geoRegion)
201
164
  continue;
202
- const integral7Modell = {
203
- integralStandorte: new Map(),
204
- integralSchaltanlagen: new Map(),
205
- integralSchaltanlagenAbschnitte: new Map(),
206
- integralSchaltfelder: new Map(),
207
- integralKnotenSo: new Map(),
208
- integralLeitungen: new Map(),
209
- knotenSfIDs: [],
210
- kontenZwIDs: [],
211
- querkupplungIDs: [],
212
- laengskupplungIDs: [],
213
- leitungsAnschlussIDs: [],
214
- trafo2wAnschlussKnotenIDs: [],
215
- trafo3wAnschlussKnotenIDs: [],
216
- hgueAnschlussKnotenIDs: [],
217
- lDrosselAnschlussKnotenIDs: [],
218
- lKondensatorAnschlussKnotenIDs: [],
219
- ersatzZweigAnschlussKnotenIDs: [],
220
- targetVoltages: new Map(),
221
- sternPunktImpModel: {
222
- stpSchieneJunctionUUIDs: new Map(),
223
- stpSchieneTerminal: new Map(),
224
- junctionUUIDstpImp: new Map(),
225
- petersenCoils: new Map(),
226
- junctions: new Map(),
227
- groundingImpedances: new Map(),
228
- connectivityNodes: new Map(),
229
- },
230
- };
231
- this.integral7Modells.set(geoRegionUUID, integral7Modell);
232
- const subGeoRegionsUUIDs = geoRegion.regions.map(elem => elem.mrid);
233
- const subGeoRegionsI7IDs = [];
234
- for (const uuid of subGeoRegionsUUIDs) {
235
- subGeoRegionsI7IDs.push(...this.UUID2Integral7ID.get(uuid));
236
- }
237
- let startTime = perf_hooks_1.performance.now();
238
- yield this.convertStandorte(cimModel, integral7Modell, subGeoRegionsI7IDs, defaultValuesConfig);
239
- logExecutionTime(this.logger, startTime, `convertStandorte(${cimModel.substations.size + cimModel.lines.size})`);
240
- startTime = perf_hooks_1.performance.now();
241
- const standortIDs = [...integral7Modell.integralStandorte.keys()];
242
- if (standortIDs.length)
243
- yield this.covertSchaltanlagen(cimModel, integral7Modell, standortIDs, defaultValuesConfig);
244
- logExecutionTime(this.logger, startTime, `covertSchaltanlagen(${standortIDs.length})`);
245
- startTime = perf_hooks_1.performance.now();
246
- const schaltanlagenIDs = [...integral7Modell.integralSchaltanlagen.keys()];
247
- if (schaltanlagenIDs.length)
248
- yield this.convertSchaltanlagenAbschnitte(cimModel, integral7Modell, schaltanlagenIDs);
249
- logExecutionTime(this.logger, startTime, `convertSchaltanlagenAbschnitte(${schaltanlagenIDs.length})`);
250
- startTime = perf_hooks_1.performance.now();
251
- const schaltanlagenAbschnittIDs = [...integral7Modell.integralSchaltanlagenAbschnitte.keys()];
252
- if (schaltanlagenAbschnittIDs.length > 0)
253
- yield this.convertSchaltfelder(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
254
- logExecutionTime(this.logger, startTime, `convertSchaltfelder()`);
255
- startTime = perf_hooks_1.performance.now();
256
- if (schaltanlagenAbschnittIDs.length > 0) {
257
- yield this.convertQuerkupplungen(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
258
- yield this.convertLaegskupplungen(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
259
- }
260
- logExecutionTime(this.logger, startTime, `convertKupplungen()`);
261
- startTime = perf_hooks_1.performance.now();
262
- if (standortIDs.length)
263
- yield this.convertKnotenSo(cimModel, integral7Modell, standortIDs, defaultValuesConfig);
264
- logExecutionTime(this.logger, startTime, `convertKupplungen()`);
265
- const knotenSoIDs = [...integral7Modell.integralKnotenSo.keys()];
266
- startTime = perf_hooks_1.performance.now();
267
- const schaltfeldIDs = [...integral7Modell.integralSchaltfelder.keys()];
268
- if (knotenSoIDs.length)
269
- yield this.convertKnotenSf(cimModel, integral7Modell, schaltfeldIDs);
270
- logExecutionTime(this.logger, startTime, `convertKnotenSf()`);
271
- startTime = perf_hooks_1.performance.now();
272
- if (integral7Modell.querkupplungIDs.length > 0) {
273
- yield this.convertKnotenKf(cimModel, integral7Modell.querkupplungIDs);
274
- }
275
- logExecutionTime(this.logger, startTime, `convertKnotenKf()`);
276
- startTime = perf_hooks_1.performance.now();
277
- if (integral7Modell.laengskupplungIDs.length > 0) {
278
- yield this.convertKnotenLk(cimModel, integral7Modell.laengskupplungIDs);
279
- }
280
- logExecutionTime(this.logger, startTime, `convertKnotenLk()`);
281
- startTime = perf_hooks_1.performance.now();
282
- if (knotenSoIDs.length > 0)
283
- yield this.convertSchlaufen(cimModel, integral7Modell, knotenSoIDs);
284
- logExecutionTime(this.logger, startTime, `convertSchlaufen()`);
285
- startTime = perf_hooks_1.performance.now();
286
- if (schaltanlagenAbschnittIDs.length > 0)
287
- yield this.convertSammelschienenAbschnitte(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
288
- logExecutionTime(this.logger, startTime, `convertSammelschienenAbschnitte(${cimModel.busbarSections.size})`);
289
- startTime = perf_hooks_1.performance.now();
290
- const eqiupmentContainerIDs = [...schaltfeldIDs, ...integral7Modell.querkupplungIDs, ...integral7Modell.laengskupplungIDs];
291
- if (eqiupmentContainerIDs.length > 0) {
292
- yield this.convertStarreVerbindungen(cimModel, eqiupmentContainerIDs);
293
- }
294
- logExecutionTime(this.logger, startTime, `convertStarreVerbindungen(${cimModel.junctions.size})`);
295
- const soSfKonoten = [...knotenSoIDs, ...integral7Modell.knotenSfIDs];
296
- startTime = perf_hooks_1.performance.now();
297
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
298
- yield this.convertBelastungen(cimModel, soSfKonoten, defaultValuesConfig, objectMappingConfig.Belastung.class);
299
- }
300
- logExecutionTime(this.logger, startTime, `convertBelastungen()`);
301
- startTime = perf_hooks_1.performance.now();
302
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
303
- yield this.convertEinspeisungen(cimModel, soSfKonoten, objectMappingConfig.Einspeisung.class);
304
- }
305
- logExecutionTime(this.logger, startTime, `convertEinspeisungen()`);
306
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
307
- yield this.convertGeneratoren(cimModel, soSfKonoten, energyTypesConfig);
308
- }
309
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
310
- yield this.convertKraftwerksbloecke(cimModel, soSfKonoten, energyTypesConfig);
311
- }
312
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
313
- yield this.convertErsatzQuerZweige(cimModel, soSfKonoten);
314
- }
315
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
316
- yield this.convertBoundaryInjections(cimModel, soSfKonoten);
317
- }
318
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
319
- yield this.convertKompensationsdrossel(cimModel, soSfKonoten);
320
- }
321
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
322
- yield this.convertKompensationskondensatoren(cimModel, soSfKonoten);
323
- }
324
- startTime = perf_hooks_1.performance.now();
325
- if (eqiupmentContainerIDs.length > 0) {
326
- yield this.convertTrenner3f(cimModel, eqiupmentContainerIDs);
327
- }
328
- logExecutionTime(this.logger, startTime, `convertTrenner3f()`);
329
- startTime = perf_hooks_1.performance.now();
330
- if (eqiupmentContainerIDs.length > 0) {
331
- yield this.convertTrennerFi3f(cimModel, eqiupmentContainerIDs);
332
- }
333
- logExecutionTime(this.logger, startTime, `convertTrennerFi3f(`);
334
- startTime = perf_hooks_1.performance.now();
335
- if (eqiupmentContainerIDs.length > 0) {
336
- yield this.convertLeistungsschalter(cimModel, eqiupmentContainerIDs);
337
- }
338
- logExecutionTime(this.logger, startTime, `convertLeistungsschalter(${cimModel.breakers.size})`);
339
- if (standortIDs.length > 0) {
340
- startTime = perf_hooks_1.performance.now();
341
- const stpSchieneID = yield this.convertSternpunktSchienen(cimModel, integral7Modell, standortIDs);
342
- yield this.convertKdrossel(cimModel, integral7Modell, stpSchieneID);
343
- yield this.convertStpSchaltelemente(integral7Modell, stpSchieneID);
344
- logExecutionTime(this.logger, startTime, `convertSternpunktImp-Modell()`);
345
- }
346
- if (standortIDs.length > 0) {
347
- startTime = perf_hooks_1.performance.now();
348
- yield this.convertTrafo2W(cimModel, integral7Modell, defaultValuesConfig, standortIDs);
349
- logExecutionTime(this.logger, startTime, `convertTrafo2W-Modell`);
350
- }
351
- if (standortIDs.length > 0) {
352
- startTime = perf_hooks_1.performance.now();
353
- yield this.convertTrafo3W(cimModel, integral7Modell, defaultValuesConfig, standortIDs);
354
- logExecutionTime(this.logger, startTime, `convertTrafo3W-Modell`);
355
- }
356
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
357
- yield this.convertStatcom(cimModel, soSfKonoten);
358
- }
359
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
360
- yield this.convertSVC(cimModel, soSfKonoten);
361
- }
362
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
363
- yield this.convertCsConverterDC(cimModel, soSfKonoten);
364
- }
365
- if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
366
- yield this.convertVsConverterDC(cimModel, soSfKonoten);
367
- }
368
- if (bdExportFrame !== frame) {
369
- startTime = perf_hooks_1.performance.now();
370
- yield this.convertLeitungen(cimModel, integral7Modell, defaultValuesConfig);
371
- logExecutionTime(this.logger, startTime, `convertLeitungen`);
372
- }
373
- yield this.convertDCLines(cimModel, integral7Modell, defaultValuesConfig);
374
- yield this.convertLaengskondensatoren(cimModel, integral7Modell, defaultValuesConfig);
375
- if (boundaryGeoRegions.indexOf(geoRegion) > -1) {
376
- yield this.transformBoundaryModel(frame.cimModel, defaultValuesConfig);
377
- }
378
- startTime = perf_hooks_1.performance.now();
165
+ frame.addDependentModel(rdf_xml_1.RDF_XML.PROFILE_EQ_BD, (_a = this.exportFramesBoundary.entries().next()) === null || _a === void 0 ? void 0 : _a.value[1].getModelUUID(rdf_xml_1.RDF_XML.PROFILE_EQ_BD));
166
+ yield this.convertFrame(frame, geoRegion, objectMappingConfig, energyTypesConfig, defaultValuesConfig);
167
+ frame.validateCIMModel();
168
+ const startTime = perf_hooks_1.performance.now();
169
+ frame.openXMLModel();
170
+ frame.serializeModel(defaultValuesConfig);
171
+ yield frame.closeXMLModel();
172
+ let endTime = perf_hooks_1.performance.now();
173
+ frame.cimModel.purgeData();
174
+ console.log(`\nSerializeModel ${geoRegion.name} ${(endTime - startTime) / 1000} seconds\n`);
175
+ }
176
+ for (const entry of this.exportFramesBoundary.entries()) {
177
+ const geoRegionUUID = entry[0];
178
+ const frame = entry[1];
179
+ const geoRegion = frame.cimModel.getGeographicalRegion(geoRegionUUID);
180
+ if (!geoRegion)
181
+ continue;
182
+ yield this.transformBoundaryModel(frame, (_b = this.exportFrames.entries().next()) === null || _b === void 0 ? void 0 : _b.value[1]);
183
+ frame.validateCIMModel();
184
+ const startTime = perf_hooks_1.performance.now();
379
185
  frame.openXMLModel();
380
186
  frame.serializeModel(defaultValuesConfig);
381
187
  yield frame.closeXMLModel();
382
188
  let endTime = perf_hooks_1.performance.now();
383
- console.log(`\tSerializeModel ${geoRegion.name} ${(endTime - startTime) / 1000} seconds`);
189
+ console.log(`\nSerializeModel ${geoRegion.name} ${(endTime - startTime) / 1000} seconds\n`);
384
190
  }
191
+ const zip = new jszip_1.default();
192
+ const gridFrames = [...this.exportFrames.values(), ...this.exportFramesBoundary.values()]
193
+ .filter((value, index, self) => self.indexOf(value) === index);
194
+ for (const frame of gridFrames) {
195
+ for (const xmlSerializer of frame.profileXmlSerializers.values()) {
196
+ const readStreamEq = fs_1.default.createReadStream(xmlSerializer.filePath);
197
+ zip.file(`${xmlSerializer.fileName}`, readStreamEq);
198
+ }
199
+ }
200
+ resolve(yield utils_2.generateNodeStream(zip));
385
201
  }
386
202
  catch (e) {
387
203
  this.logger.error(e);
388
204
  console.error("ERROR:" + e);
205
+ reject({ status: 'error', message: e.toString() });
389
206
  }
390
207
  finally {
391
208
  yield this.dropColumnIndex();
392
- resolve();
393
209
  }
394
210
  }));
395
211
  });
396
212
  }
213
+ convertFrame(frame, geoRegion, objectMappingConfig, energyTypesConfig, defaultValuesConfig) {
214
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
215
+ const integral7Modell = frame.getI7Model();
216
+ const cimModel = frame.cimModel;
217
+ const subGeoRegionsUUIDs = geoRegion.regions.map(elem => elem.mrid);
218
+ const subGeoRegionsI7IDs = [];
219
+ for (const uuid of subGeoRegionsUUIDs) {
220
+ subGeoRegionsI7IDs.push(...this.UUID2Integral7ID.get(uuid));
221
+ }
222
+ let startTime = perf_hooks_1.performance.now();
223
+ logExecutionTime(this.logger, startTime, `convertRegelzone(${cimModel.controlArea.size})`);
224
+ startTime = perf_hooks_1.performance.now();
225
+ yield this.convertStandorte(cimModel, integral7Modell, subGeoRegionsI7IDs, defaultValuesConfig);
226
+ logExecutionTime(this.logger, startTime, `convertStandorte(${cimModel.substations.size + cimModel.lines.size})`);
227
+ startTime = perf_hooks_1.performance.now();
228
+ const standortIDs = [...integral7Modell.integralStandorte.keys()];
229
+ if (standortIDs.length)
230
+ yield this.covertSchaltanlagen(cimModel, integral7Modell, standortIDs, defaultValuesConfig);
231
+ logExecutionTime(this.logger, startTime, `covertSchaltanlagen(${standortIDs.length})`);
232
+ startTime = perf_hooks_1.performance.now();
233
+ const schaltanlagenIDs = [...integral7Modell.integralSchaltanlagen.keys()];
234
+ if (schaltanlagenIDs.length)
235
+ yield this.convertSchaltanlagenAbschnitte(cimModel, integral7Modell, schaltanlagenIDs);
236
+ logExecutionTime(this.logger, startTime, `convertSchaltanlagenAbschnitte(${schaltanlagenIDs.length})`);
237
+ startTime = perf_hooks_1.performance.now();
238
+ const schaltanlagenAbschnittIDs = [...integral7Modell.integralSchaltanlagenAbschnitte.keys()];
239
+ if (schaltanlagenAbschnittIDs.length > 0)
240
+ yield this.convertSchaltfelder(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
241
+ logExecutionTime(this.logger, startTime, `convertSchaltfelder()`);
242
+ if (schaltanlagenAbschnittIDs.length > 0) {
243
+ startTime = perf_hooks_1.performance.now();
244
+ yield this.convertQuerkupplungen(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
245
+ logExecutionTime(this.logger, startTime, `convertQuerkupplungen()`);
246
+ }
247
+ if (schaltanlagenIDs.length > 0) {
248
+ startTime = perf_hooks_1.performance.now();
249
+ yield this.convertLaengskupplungen(cimModel, integral7Modell, schaltanlagenIDs);
250
+ logExecutionTime(this.logger, startTime, `convertLaengskupplungen()`);
251
+ }
252
+ startTime = perf_hooks_1.performance.now();
253
+ if (standortIDs.length)
254
+ yield this.convertKnotenSo(frame, integral7Modell, standortIDs, defaultValuesConfig);
255
+ logExecutionTime(this.logger, startTime, `convertKnotenSO()`);
256
+ const knotenSoIDs = [...integral7Modell.integralKnotenSo.keys()];
257
+ startTime = perf_hooks_1.performance.now();
258
+ const schaltfeldIDs = [...integral7Modell.integralSchaltfelder.keys()];
259
+ if (schaltfeldIDs.length)
260
+ yield this.convertKnotenSf(cimModel, integral7Modell, schaltfeldIDs);
261
+ logExecutionTime(this.logger, startTime, `convertKnotenSf()`);
262
+ if (integral7Modell.querkupplungIDs.length > 0) {
263
+ startTime = perf_hooks_1.performance.now();
264
+ yield this.convertKnotenKf(cimModel, integral7Modell.querkupplungIDs);
265
+ logExecutionTime(this.logger, startTime, `convertKnotenKf`);
266
+ }
267
+ if (integral7Modell.laengskupplungIDs.length > 0) {
268
+ startTime = perf_hooks_1.performance.now();
269
+ yield this.convertKnotenLk(cimModel, integral7Modell.laengskupplungIDs);
270
+ logExecutionTime(this.logger, startTime, `convertKnotenLk`);
271
+ }
272
+ startTime = perf_hooks_1.performance.now();
273
+ if (knotenSoIDs.length > 0)
274
+ yield this.convertSchlaufen(cimModel, integral7Modell, knotenSoIDs);
275
+ logExecutionTime(this.logger, startTime, `convertSchlaufen()`);
276
+ startTime = perf_hooks_1.performance.now();
277
+ if (schaltanlagenAbschnittIDs.length > 0)
278
+ yield this.convertSammelschienenAbschnitte(cimModel, integral7Modell, schaltanlagenAbschnittIDs);
279
+ logExecutionTime(this.logger, startTime, `convertSammelschienenAbschnitte(${cimModel.busbarSections.size})`);
280
+ const eqiupmentContainerIDs = [...schaltfeldIDs, ...integral7Modell.querkupplungIDs, ...integral7Modell.laengskupplungIDs];
281
+ if (eqiupmentContainerIDs.length > 0) {
282
+ startTime = perf_hooks_1.performance.now();
283
+ yield this.convertStarreVerbindungen(cimModel, eqiupmentContainerIDs);
284
+ logExecutionTime(this.logger, startTime, `convertStarreVerbindungen(${cimModel.junctions.size})`);
285
+ }
286
+ const soSfKnoten = [...knotenSoIDs, ...integral7Modell.knotenSfIDs];
287
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
288
+ startTime = perf_hooks_1.performance.now();
289
+ yield this.convertBelastungen(cimModel, soSfKnoten, defaultValuesConfig, objectMappingConfig.Belastung.class);
290
+ logExecutionTime(this.logger, startTime, `convertBelastungen()`);
291
+ }
292
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
293
+ startTime = perf_hooks_1.performance.now();
294
+ yield this.convertAsynchronmotor(cimModel, soSfKnoten, defaultValuesConfig);
295
+ logExecutionTime(this.logger, startTime, `convertAsynchronmotor`);
296
+ }
297
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
298
+ startTime = perf_hooks_1.performance.now();
299
+ yield this.convertEinspeisungen(cimModel, soSfKnoten, objectMappingConfig.Einspeisung.class);
300
+ logExecutionTime(this.logger, startTime, `convertEinspeisungen`);
301
+ }
302
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
303
+ startTime = perf_hooks_1.performance.now();
304
+ yield this.convertGeneratoren(cimModel, soSfKnoten, energyTypesConfig);
305
+ logExecutionTime(this.logger, startTime, `convertGeneratoren`);
306
+ }
307
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
308
+ startTime = perf_hooks_1.performance.now();
309
+ yield this.convertKraftwerksbloecke(cimModel, soSfKnoten, energyTypesConfig);
310
+ logExecutionTime(this.logger, startTime, `convertKraftwerksbloecke`);
311
+ }
312
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
313
+ startTime = perf_hooks_1.performance.now();
314
+ yield this.convertErsatzQuerZweige(cimModel, soSfKnoten);
315
+ logExecutionTime(this.logger, startTime, `convertErsatzQuerZweige`);
316
+ }
317
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
318
+ startTime = perf_hooks_1.performance.now();
319
+ yield this.convertBoundaryInjections(cimModel, soSfKnoten, objectMappingConfig.Randnetzeinspeisung.class);
320
+ logExecutionTime(this.logger, startTime, `convertBoundaryInjections`);
321
+ }
322
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
323
+ startTime = perf_hooks_1.performance.now();
324
+ yield this.convertKompensationsdrossel(cimModel, soSfKnoten);
325
+ logExecutionTime(this.logger, startTime, `convertKompensationsdrossel`);
326
+ }
327
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
328
+ startTime = perf_hooks_1.performance.now();
329
+ yield this.convertKompensationskondensatoren(cimModel, soSfKnoten);
330
+ logExecutionTime(this.logger, startTime, `convertKompensationskondensatoren`);
331
+ }
332
+ if (eqiupmentContainerIDs.length > 0) {
333
+ startTime = perf_hooks_1.performance.now();
334
+ yield this.convertTrenner3f(cimModel, eqiupmentContainerIDs);
335
+ logExecutionTime(this.logger, startTime, `convertTrenner3f()`);
336
+ }
337
+ if (eqiupmentContainerIDs.length > 0) {
338
+ startTime = perf_hooks_1.performance.now();
339
+ yield this.convertTrennerFi3f(cimModel, eqiupmentContainerIDs);
340
+ logExecutionTime(this.logger, startTime, `convertTrennerFi3f`);
341
+ }
342
+ if (eqiupmentContainerIDs.length > 0) {
343
+ startTime = perf_hooks_1.performance.now();
344
+ yield this.convertLeistungsschalter(cimModel, eqiupmentContainerIDs);
345
+ logExecutionTime(this.logger, startTime, `convertLeistungsschalter(${cimModel.breakers.size})`);
346
+ }
347
+ if (standortIDs.length > 0) {
348
+ startTime = perf_hooks_1.performance.now();
349
+ const stpSchieneID = yield this.convertSternpunktSchienen(cimModel, integral7Modell, standortIDs);
350
+ yield this.convertKdrossel(cimModel, integral7Modell, stpSchieneID);
351
+ yield this.convertStpSchaltelemente(integral7Modell, stpSchieneID);
352
+ logExecutionTime(this.logger, startTime, `convertSternpunkte`);
353
+ }
354
+ if (standortIDs.length > 0) {
355
+ startTime = perf_hooks_1.performance.now();
356
+ yield this.convertTrafo2W(frame, integral7Modell, defaultValuesConfig, standortIDs);
357
+ logExecutionTime(this.logger, startTime, `convertTrafo2W`);
358
+ }
359
+ if (standortIDs.length > 0) {
360
+ startTime = perf_hooks_1.performance.now();
361
+ yield this.convertTrafo3W(frame, integral7Modell, defaultValuesConfig, standortIDs);
362
+ logExecutionTime(this.logger, startTime, `convertTrafo3W`);
363
+ }
364
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
365
+ startTime = perf_hooks_1.performance.now();
366
+ yield this.convertStatcom(cimModel, soSfKnoten);
367
+ logExecutionTime(this.logger, startTime, `convertStatcom`);
368
+ }
369
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
370
+ startTime = perf_hooks_1.performance.now();
371
+ yield this.convertSVC(cimModel, soSfKnoten);
372
+ logExecutionTime(this.logger, startTime, `convertSVC`);
373
+ }
374
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
375
+ startTime = perf_hooks_1.performance.now();
376
+ yield this.convertCsConverterDC(cimModel, integral7Modell, soSfKnoten);
377
+ logExecutionTime(this.logger, startTime, `convertCsConverterDC`);
378
+ }
379
+ if (knotenSoIDs.length > 0 || integral7Modell.knotenSfIDs.length > 0) {
380
+ startTime = perf_hooks_1.performance.now();
381
+ yield this.convertVsConverterDC(cimModel, integral7Modell, soSfKnoten);
382
+ logExecutionTime(this.logger, startTime, `convertVsConverterDC`);
383
+ }
384
+ if (!frame.boundary) {
385
+ startTime = perf_hooks_1.performance.now();
386
+ yield this.convertLeitungen(frame, integral7Modell, defaultValuesConfig);
387
+ logExecutionTime(this.logger, startTime, `convertLeitungen`);
388
+ startTime = perf_hooks_1.performance.now();
389
+ yield this.convertErsatzLaengszweige(cimModel, integral7Modell, defaultValuesConfig);
390
+ logExecutionTime(this.logger, startTime, `convertErsatzlaengszweige`);
391
+ }
392
+ startTime = perf_hooks_1.performance.now();
393
+ yield this.convertDCLines(cimModel, integral7Modell, defaultValuesConfig);
394
+ logExecutionTime(this.logger, startTime, `convertDCLines`);
395
+ startTime = perf_hooks_1.performance.now();
396
+ yield this.convertLaengsdrosseln(cimModel, integral7Modell, defaultValuesConfig);
397
+ logExecutionTime(this.logger, startTime, `convertLaengsdrosseln`);
398
+ startTime = perf_hooks_1.performance.now();
399
+ yield this.convertLaengskondensatoren(cimModel, integral7Modell, defaultValuesConfig);
400
+ logExecutionTime(this.logger, startTime, `convertLaengskondensatoren`);
401
+ });
402
+ }
397
403
  convertGeoRegionen() {
398
404
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
399
405
  return new Promise((resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -402,7 +408,8 @@ class ConverterI7 {
402
408
  this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.REGION, 0, 0, []))
403
409
  .then((result) => {
404
410
  for (const i7Data of result) {
405
- const region = new GeographicalRegion_1.GeographicalRegion(utils_1.getUUID(i7Data.guid), i7Data.bezeichner, i7Data.kurzname);
411
+ const i7Schluesel = integral_prefix_1.GEOREGION_PRAEFIX + utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
412
+ const region = new GeographicalRegion_1.GeographicalRegion(utils_1.getUUID(i7Data.guid), utils_2.ueberpruefeZeichenkette(i7Data.bezeichner), utils_2.ueberpruefeZeichenkette(i7Data.kurzname), i7Schluesel);
406
413
  this.addIdMapping(i7Data.id, region.mrid, integral_sql_1.Integral7TableNames.REGION);
407
414
  regions.push(region);
408
415
  }
@@ -421,6 +428,22 @@ class ConverterI7 {
421
428
  }));
422
429
  });
423
430
  }
431
+ convertRegelzone(cimModel, defaultValuesConfig) {
432
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
433
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.REGELZONE)) {
434
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.REGELZONE, 0, 0, []));
435
+ for (const i7Data of result) {
436
+ const i7Schluesel = integral_prefix_1.REGELZONE_PRAEFIX + utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
437
+ const ctrlarea = new ControlArea_1.ControlArea(utils_1.getUUID(i7Data.guid), 'RZ_' + utils_2.ueberpruefeZeichenkette(i7Data.bezeichner), utils_2.ueberpruefeZeichenkette(i7Data.kurzname), i7Schluesel);
438
+ cimModel.addControlArea(ctrlarea);
439
+ this.addIdMapping(i7Data.id, ctrlarea.mrid, integral_sql_1.Integral7TableNames.REGELZONE);
440
+ }
441
+ }
442
+ else {
443
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.REGELZONE} ist nicht vorhanden.`);
444
+ }
445
+ });
446
+ }
424
447
  convertSubGeoRegionen(regions, defaultValuesConfig) {
425
448
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
426
449
  return new Promise((resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -429,7 +452,8 @@ class ConverterI7 {
429
452
  this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.SUBREGION, 0, 0, []))
430
453
  .then((result) => {
431
454
  for (const i7Data of result) {
432
- const subregion = new SubGeographicalRegion_1.SubGeographicalRegion(utils_1.getUUID(i7Data.guid), i7Data.bezeichner, i7Data.kurzname);
455
+ const i7Schluesel = integral_prefix_1.SUBGEOREGION_PRAEFIX + utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
456
+ const subregion = new SubGeographicalRegion_1.SubGeographicalRegion(utils_1.getUUID(i7Data.guid), utils_2.ueberpruefeZeichenkette(i7Data.bezeichner), utils_2.ueberpruefeZeichenkette(i7Data.kurzname), i7Schluesel);
433
457
  const regionUUID = this.integralID2UUID.get(i7Data.georegion);
434
458
  let region = regions.find(elem => elem.mrid === regionUUID);
435
459
  if (!region) {
@@ -465,7 +489,8 @@ class ConverterI7 {
465
489
  utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
466
490
  integral_prefix_1.MITTIGER_PUNKT +
467
491
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
468
- const substation = new AMPRIONSubstation_1.AMPRIONSubstation(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.id + '', i7Schluessel, i7Data.stationsnummer);
492
+ const i7name = util_create_1.createNotation([utils_2.getName(i7Data), utils_2.ueberpruefeZeichenkette(i7Data.ukz)], 32);
493
+ const substation = new AMPRIONSubstation_1.AMPRIONSubstation(utils_1.getUUID(i7Data.guid), i7name, i7Data.id + '', i7Schluessel, i7Data.stationsnummer, i7Data.ukz);
469
494
  let subregion = cimModel.getSubGeographicalRegion(this.integralID2UUID.get(i7Data.subgeoregion));
470
495
  if (!subregion) {
471
496
  const region = utils_1.createIfNotExitsGeoregionByName(cimModel, defaultValuesConfig.GeographicalRegion.name);
@@ -518,7 +543,7 @@ class ConverterI7 {
518
543
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
519
544
  const vl = new VoltageLevel_1.VoltageLevel(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, i7Schluessel);
520
545
  const un = utils_2.getU(i7Data.un, defaultValuesConfig.DefaultVoltage);
521
- const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, un);
546
+ const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, un, this.exportFramesBoundary);
522
547
  vl.baseVoltage = baseVoltage;
523
548
  cimModel.addVoltageLevel(vl);
524
549
  this.addIdMapping(i7Data.id, vl.mrid, integral_sql_1.Integral7TableNames.SCHALTANLAGE);
@@ -569,7 +594,7 @@ class ConverterI7 {
569
594
  integral_prefix_1.SCHALTFELD_PRAEFIX +
570
595
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
571
596
  const bay = new AMPRIONBay_1.AMPRIONBay(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, i7Schluessel);
572
- bay.number = i7Data.feldnummer;
597
+ bay.number = i7Data.feldnummer + '';
573
598
  bay.locationID = i7Data.ips_folder_id;
574
599
  bay.voltageLevel = voltageLevel;
575
600
  voltageLevel.addBay(bay);
@@ -588,19 +613,23 @@ class ConverterI7 {
588
613
  }
589
614
  });
590
615
  }
591
- convertKnotenSo(cimModel, integral7, standortIDs, defaultValuesConfig) {
616
+ convertKnotenSo(frame, integral7, standortIDs, defaultValuesConfig) {
592
617
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
618
+ const cimModel = frame.cimModel;
593
619
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KNOTEN_SO)) {
594
620
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.KNOTEN_SO, standortIDs));
595
621
  for (const i7Data of result) {
596
622
  const substation = cimModel.getSubstation(this.integralID2UUID.get(i7Data.standort));
597
- const vl = new VoltageLevel_1.VoltageLevel(utils_1.getUUID(i7Data.guid), substation.name + "/" + utils_2.getName(i7Data), i7Data.kurzname);
598
- const connectivityNode = new AMPRIONConnectivityNode_1.AMPRIONConnectivityNode(utils_1.generateUUID(), 'Abzweig', String(i7Data.id));
599
- connectivityNode.connectivityNodeContainer = vl;
600
- connectivityNode.nodeNumber = i7Data.id_psse_cape;
623
+ const vl = new VoltageLevel_1.VoltageLevel(utils_1.generateUUID(), substation.name + "/" + utils_2.getName(i7Data), i7Data.kurzname);
624
+ const connectivityNode = new AMPRIONConnectivityNode_1.AMPRIONConnectivityNode(utils_1.getUUID(i7Data.guid), 'Abzweig', String(i7Data.id));
625
+ connectivityNode.setConnectivityNodeContainer(vl);
601
626
  vl.addConnectivityNode(connectivityNode);
627
+ connectivityNode.nodeNumber = i7Data.id_psse_cape;
628
+ if (frame.boundary) {
629
+ connectivityNode.boundaryPoint = true;
630
+ }
602
631
  const un = utils_2.getU(i7Data.un, defaultValuesConfig.DefaultVoltage);
603
- const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, un);
632
+ const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, un, this.exportFramesBoundary);
604
633
  integral7.targetVoltages.set(i7Data.id, { usoll: i7Data.usoll, umin: i7Data.umin, umax: i7Data.umax });
605
634
  vl.baseVoltage = baseVoltage;
606
635
  if (substation) {
@@ -624,6 +653,7 @@ class ConverterI7 {
624
653
  object.standort = integral7.integralStandorte.get(object.standortid);
625
654
  cimModel.addVoltageLevel(vl);
626
655
  cimModel.addConnectivityNode(connectivityNode);
656
+ this.checkAnschlussIDs(i7Data.id, integral7);
627
657
  this.addIdMapping(i7Data.id, connectivityNode.mrid, integral_sql_1.Integral7TableNames.KNOTEN_SO);
628
658
  }
629
659
  }
@@ -637,12 +667,13 @@ class ConverterI7 {
637
667
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.SAMMELSCHIENE)) {
638
668
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.SAMMELSCHIENE, schaltanlagenAbschnittIDs));
639
669
  for (const i7Data of result) {
640
- const busbarSection = new BusbarSection_1.BusbarSection(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
670
+ const i7Schaltanlagenabschnitt = integral7.integralSchaltanlagenAbschnitte.get(i7Data.saabschnitt);
671
+ const busbarSection = new BusbarSection_1.BusbarSection(utils_1.generateUUID(), utils_2.getName(i7Schaltanlagenabschnitt), i7Schaltanlagenabschnitt.kurzname);
641
672
  busbarSection.ipMax = i7Data.limit_ip;
642
673
  busbarSection.aggregate = false;
643
- const connectivityNode = new AMPRIONConnectivityNode_1.AMPRIONConnectivityNode(utils_1.generateUUID(), 'ssab cn');
674
+ const connectivityNode = new AMPRIONConnectivityNode_1.AMPRIONConnectivityNode(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
644
675
  const terminal = this.createConnection(cimModel, busbarSection, connectivityNode, PhaseCode_1.PhaseCode.ABC, true, 1);
645
- const voltageLevel = cimModel.getVoltageLevel(this.integralID2UUID.get(i7Data.saabschnitt));
676
+ const voltageLevel = cimModel.getVoltageLevel(this.integralID2UUID.get(i7Schaltanlagenabschnitt.id));
646
677
  connectivityNode.nodeNumber = i7Data.id_psse_cape;
647
678
  if (voltageLevel) {
648
679
  busbarSection.equipmentContainer = voltageLevel;
@@ -761,7 +792,7 @@ class ConverterI7 {
761
792
  const connectivityNode = cimModel.getConnectivityNode(this.integralID2UUID.get(i7Data.eknoten));
762
793
  if (connectivityNode) {
763
794
  connectivityNode.addTerminal(terminal);
764
- terminal.connectivityNode = connectivityNode;
795
+ terminal.setConnectivityNode(connectivityNode);
765
796
  }
766
797
  else {
767
798
  this.logger.debug(`Schlaufe ${i7Data.id} besitzt keinen anschluss.`);
@@ -827,8 +858,24 @@ class ConverterI7 {
827
858
  const synchronousMachine = new SynchronousMachine_1.SynchronousMachine(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, i7Data.nameprimaertyp);
828
859
  synchronousMachine.type = SynchronousMachineKind_1.SynchronousMachineKind.generator;
829
860
  synchronousMachine.operatingMode = SynchronousMachineOperatingMode_1.SynchronousMachineOperatingMode.generator;
861
+ if (utils_2.convertToNumberI7(i7Data.blocktrafo_1)) {
862
+ this.blocktransformatoren.push(utils_2.convertToNumberI7(i7Data.blocktrafo_1));
863
+ }
864
+ if (utils_2.convertToNumberI7(i7Data.blocktrafo_2)) {
865
+ this.blocktransformatoren.push(utils_2.convertToNumberI7(i7Data.blocktrafo_2));
866
+ }
867
+ if (utils_2.convertToNumberI7(i7Data.blocktrafo_3)) {
868
+ this.blocktransformatoren.push(utils_2.convertToNumberI7(i7Data.blocktrafo_3));
869
+ }
870
+ if (utils_2.convertToNumberI7(i7Data.blocktrafo_4)) {
871
+ this.blocktransformatoren.push(utils_2.convertToNumberI7(i7Data.blocktrafo_4));
872
+ }
873
+ if (utils_2.convertToNumberI7(i7Data.blocktrafo_5)) {
874
+ this.blocktransformatoren.push(utils_2.convertToNumberI7(i7Data.blocktrafo_5));
875
+ }
830
876
  synchronousMachine.referencePriority = utils_2.isNumericI7(i7Data.einspprio) ? utils_2.convertToNumberI7(i7Data.einspprio) : undefined;
831
877
  const maxP = utils_2.isNumericI7(i7Data.p_max) ? utils_2.convertToNumberI7(i7Data.p_max) : 0;
878
+ const minP = utils_2.isNumericI7(i7Data.p_min) ? utils_2.convertToNumberI7(i7Data.p_min) : 0;
832
879
  const maxQ = utils_2.isNumericI7(i7Data.q_max) ? utils_2.convertToNumberI7(i7Data.q_max) : undefined;
833
880
  const minQ = utils_2.isNumericI7(i7Data.q_min) ? utils_2.convertToNumberI7(i7Data.q_min) : undefined;
834
881
  const maxQvonPmax = utils_2.isNumericI7(i7Data.qmax_von_pmax) ? utils_2.convertToNumberI7(i7Data.qmax_von_pmax) : undefined;
@@ -838,8 +885,8 @@ class ConverterI7 {
838
885
  const powerData = utils_2.getActiveReactivePower(i7Data);
839
886
  const p = powerData[0];
840
887
  const q = powerData[1];
841
- synchronousMachine.p = p;
842
- synchronousMachine.q = q;
888
+ synchronousMachine.setActivePower(p * -1);
889
+ synchronousMachine.setReactivePower(q * -1);
843
890
  const sr = utils_2.isNumericI7(i7Data.sr) ? utils_2.convertToNumberI7(i7Data.sr) : undefined;
844
891
  if (sr && sr >= 0) {
845
892
  synchronousMachine.ratedS = sr;
@@ -847,9 +894,6 @@ class ConverterI7 {
847
894
  else {
848
895
  synchronousMachine.ratedS = Math.sqrt(Math.pow(maxP, 2) + Math.pow(maxQvonPmax, 2));
849
896
  }
850
- if (!utils_2.isNumericI7(synchronousMachine.ratedS)) {
851
- console.log();
852
- }
853
897
  const ur = utils_2.isNumericI7(i7Data.ur) ? utils_2.convertToNumberI7(i7Data.ur) : undefined;
854
898
  const usoll = utils_2.isNumericI7(i7Data.usoll) ? utils_2.convertToNumberI7(i7Data.usoll) : undefined;
855
899
  synchronousMachine.ratedU = usoll ? usoll : ur;
@@ -876,18 +920,25 @@ class ConverterI7 {
876
920
  cimModel.addReactiveCapabilityCurve(reactiveCapabilityCurve);
877
921
  synchronousMachine.initialReactiveCapabilityCurveUUID = reactiveCapabilityCurve.mrid;
878
922
  const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
879
- const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RG_Gen_${i7Data.id}`);
923
+ const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RC_Gen_${i7Data.id}`);
880
924
  regulatingControl.enabled = inBetrieb;
881
925
  regulatingControl.targetValue = usoll;
882
926
  switch (i7Data.spannungsgeregelt) {
883
927
  case 1: {
884
928
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
929
+ regulatingControl.discrete = false;
930
+ regulatingControl.enabled = inBetrieb;
931
+ synchronousMachine.controlEnabled = inBetrieb;
885
932
  break;
886
933
  }
887
934
  default: {
888
935
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
936
+ regulatingControl.discrete = false;
937
+ regulatingControl.enabled = inBetrieb;
938
+ synchronousMachine.controlEnabled = inBetrieb;
889
939
  }
890
940
  }
941
+ regulatingControl.addRegulatingCondEq(synchronousMachine);
891
942
  synchronousMachine.regulatingControlUUID = regulatingControl.mrid;
892
943
  const generatingUnitConfig = energyTypesConfig[i7Data.nameprimaertyp];
893
944
  let generatingUnit;
@@ -936,7 +987,6 @@ class ConverterI7 {
936
987
  if (!generatingUnit) {
937
988
  generatingUnit = new GeneratingUnit_1.GeneratingUnit(utils_1.getUUID(''), 'Generator_' + i7Data.bezeichner, i7Data.kurzname);
938
989
  }
939
- generatingUnit.genControlSource = GeneratorControlSource_1.GeneratorControlSource.unavailable;
940
990
  generatingUnit.initialP = utils_2.isNumericI7(i7Data.p0) ? utils_2.convertToNumberI7(i7Data.p0) : undefined;
941
991
  generatingUnit.maxOperatingP = utils_2.isNumericI7(i7Data.p_max) ? utils_2.convertToNumberI7(i7Data.p_max) : undefined;
942
992
  generatingUnit.minOperatingP = utils_2.isNumericI7(i7Data.p_min) ? utils_2.convertToNumberI7(i7Data.p_min) : undefined;
@@ -971,6 +1021,47 @@ class ConverterI7 {
971
1021
  }
972
1022
  });
973
1023
  }
1024
+ convertAsynchronmotor(cimModel, knotenSfIDs, defaultValuesConfig) {
1025
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
1026
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.ASYNCHRONMOTOR)) {
1027
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.ASYNCHRONMOTOR, 0, 0, knotenSfIDs));
1028
+ for (const i7Data of result) {
1029
+ const asynchronousMachine = new AsynchronousMachine_1.AsynchronousMachine(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, 'SO-' + i7Data.ukz + integral_prefix_1.MITTIGER_PUNKT + i7Data.bezeichner);
1030
+ asynchronousMachine.efficiency = i7Data.wirkungsgrad * 100;
1031
+ asynchronousMachine.iaIrRatio = i7Data.ilr_ir;
1032
+ asynchronousMachine.polePairNumber = i7Data.polpaarz;
1033
+ asynchronousMachine.ratedMechanicalPower = i7Data.p_mech;
1034
+ asynchronousMachine.ratedPowerFactor = i7Data.cos_phir;
1035
+ asynchronousMachine.ratedS = i7Data.sr;
1036
+ asynchronousMachine.ratedU = i7Data.ur;
1037
+ asynchronousMachine.setActivePower(i7Data.p0 * -1);
1038
+ asynchronousMachine.setReactivePower((i7Data.flag_ind === 1 ? i7Data.q0_ind : i7Data.q0_kap) * -1);
1039
+ asynchronousMachine.controlEnabled = false;
1040
+ const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1041
+ util_create_1.createSvStatus(cimModel, inBetrieb, asynchronousMachine);
1042
+ const connectivityNode = cimModel.objects.get(this.integralID2UUID.get(i7Data.anschluss));
1043
+ if (connectivityNode) {
1044
+ util_create_1.createConnection(cimModel, asynchronousMachine, connectivityNode, PhaseCode_1.PhaseCode.ABC);
1045
+ const equipmentContainer = this.determineEquipmentContainer('VoltageLevel', cimModel, cimModel.getObject(connectivityNode.getConnectivityNodeContainerUUID()));
1046
+ if (equipmentContainer) {
1047
+ asynchronousMachine.equipmentContainerUUID = equipmentContainer === null || equipmentContainer === void 0 ? void 0 : equipmentContainer.mrid;
1048
+ cimModel.addAsynchronousMachine(asynchronousMachine);
1049
+ this.addIdMapping(i7Data.id, asynchronousMachine.mrid, integral_sql_1.Integral7TableNames.ASYNCHRONMOTOR);
1050
+ }
1051
+ else {
1052
+ this.logger.debug(`AsynchronousMachine ${i7Data.id} besitzt keinen EquipmentContainer.`);
1053
+ }
1054
+ }
1055
+ else {
1056
+ this.logger.debug(`AsynchronousMachine ${i7Data.id} besitzt keinen ConnectivityNode.`);
1057
+ }
1058
+ }
1059
+ }
1060
+ else {
1061
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.ASYNCHRONMOTOR} ist nicht vorhanden.`);
1062
+ }
1063
+ });
1064
+ }
974
1065
  convertKraftwerksbloecke(cimModel, knotenSfIDs, energyTypesConfig) {
975
1066
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
976
1067
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KWBLOCK)) {
@@ -990,7 +1081,7 @@ class ConverterI7 {
990
1081
  const ur = utils_2.isNumericI7(i7Data.urg) ? utils_2.convertToNumberI7(i7Data.urg) : undefined;
991
1082
  synchronousMachine.ratedU = ur;
992
1083
  synchronousMachine.aggregate = true;
993
- const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RG_KWBlock ${i7Data.id}`);
1084
+ const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RC_KWBlock ${i7Data.id}`);
994
1085
  switch (i7Data.spannungsgeregelt) {
995
1086
  case 1: {
996
1087
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
@@ -1086,34 +1177,109 @@ class ConverterI7 {
1086
1177
  }
1087
1178
  });
1088
1179
  }
1089
- convertBoundaryInjections(cimModel, knotenSfIDs) {
1180
+ convertBoundaryInjections(cimModel, knotenSfIDs, targetClass) {
1090
1181
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1091
1182
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.BOUNDARYINJECTION)) {
1092
1183
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.BOUNDARYINJECTION, knotenSfIDs));
1184
+ switch (targetClass) {
1185
+ case cim_class_names_1.CIM_CLASS_NAMES.EquivalentInjection: {
1186
+ yield this.convertBoundaryInjections2EquivalentInjection(cimModel, result);
1187
+ break;
1188
+ }
1189
+ case cim_class_names_1.CIM_CLASS_NAMES.ExternalNetworkInjection: {
1190
+ yield this.convertEinspeisungen2ExternalNetworkInjection(cimModel, result);
1191
+ break;
1192
+ }
1193
+ default: {
1194
+ yield this.convertBoundaryInjections2EquivalentInjection(cimModel, result);
1195
+ }
1196
+ }
1197
+ }
1198
+ else {
1199
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.BOUNDARYINJECTION} ist nicht vorhanden.`);
1200
+ }
1201
+ });
1202
+ }
1203
+ convertBoundaryInjections2EquivalentInjection(cimModel, result) {
1204
+ for (const i7Data of result) {
1205
+ const equivalentInjection = new EquivalentInjection_1.EquivalentInjection(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1206
+ const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1207
+ const einspeisePrio = utils_2.convertToNumberI7(i7Data.einspprio);
1208
+ equivalentInjection.p = utils_2.convertToNumberI7(i7Data.p_ersatznetz) + utils_2.convertToNumberI7(i7Data.p_restnetz);
1209
+ equivalentInjection.q = utils_2.convertToNumberI7(i7Data.q_ersatznetz) + utils_2.convertToNumberI7(i7Data.q_restnetz);
1210
+ const kr = 0;
1211
+ this.setTopologyEnergySourceConsumerObject(cimModel, equivalentInjection, i7Data);
1212
+ cimModel.addEquivalentInjection(equivalentInjection);
1213
+ this.addIdMapping(i7Data.id, equivalentInjection.mrid, integral_sql_1.Integral7TableNames.BOUNDARYINJECTION);
1214
+ }
1215
+ }
1216
+ convertBoundaryInjections2ExternalNetworkInjection(cimModel, result) {
1217
+ for (const i7Data of result) {
1218
+ const externalNetworkInjection = new ExternalNetworkInjection_1.ExternalNetworkInjection(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1219
+ const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1220
+ const einspeisePrio = utils_2.convertToNumberI7(i7Data.einspprio);
1221
+ externalNetworkInjection.p = utils_2.convertToNumberI7(i7Data.p_ersatznetz) + utils_2.convertToNumberI7(i7Data.p_restnetz);
1222
+ externalNetworkInjection.q = utils_2.convertToNumberI7(i7Data.q_ersatznetz) + utils_2.convertToNumberI7(i7Data.q_restnetz);
1223
+ const kr = 0;
1224
+ externalNetworkInjection.governorSCD = kr;
1225
+ externalNetworkInjection.referencePriority = einspeisePrio;
1226
+ externalNetworkInjection.maxZ0ToZ1Ratio = utils_2.convertToNumberI7(i7Data.z0_z1);
1227
+ const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RC_BI_${i7Data.id}`);
1228
+ regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1229
+ regulatingControl.discrete = true;
1230
+ regulatingControl.enabled = inBetrieb;
1231
+ regulatingControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
1232
+ externalNetworkInjection.regulatingControl = regulatingControl;
1233
+ this.setTopologyEnergySourceConsumerObject(cimModel, externalNetworkInjection, i7Data, regulatingControl);
1234
+ cimModel.addExternalNetworkInjection(externalNetworkInjection);
1235
+ cimModel.addRegulatingControl(regulatingControl);
1236
+ this.addIdMapping(i7Data.id, externalNetworkInjection.mrid, integral_sql_1.Integral7TableNames.BOUNDARYINJECTION);
1237
+ }
1238
+ }
1239
+ convertErsatzLaengszweige(cimModel, knotenSfIDs, defaultValuesConfig) {
1240
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
1241
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.ERSATZLAENGSZWEIG)) {
1242
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.ERSATZLAENGSZWEIG, 0, 0, []));
1093
1243
  for (const i7Data of result) {
1094
- const externalNetworkInjection = new ExternalNetworkInjection_1.ExternalNetworkInjection(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1095
- const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1096
- const einspeisePrio = utils_2.convertToNumberI7(i7Data.einspprio);
1097
- externalNetworkInjection.p = utils_2.convertToNumberI7(i7Data.p_ersatznetz) + utils_2.convertToNumberI7(i7Data.p_restnetz);
1098
- externalNetworkInjection.q = utils_2.convertToNumberI7(i7Data.q_ersatznetz) + utils_2.convertToNumberI7(i7Data.q_restnetz);
1099
- const kr = 0;
1100
- externalNetworkInjection.governorSCD = kr;
1101
- externalNetworkInjection.referencePriority = einspeisePrio;
1102
- externalNetworkInjection.maxZ0ToZ1Ratio = utils_2.convertToNumberI7(i7Data.z0_z1);
1103
- const regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RG_BI_${i7Data.id}`);
1104
- regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1105
- regulatingControl.discrete = true;
1106
- regulatingControl.enabled = inBetrieb;
1107
- regulatingControl.targetValueUnitMultiplier = UnitMultiplier_1.UnitMultiplier.k;
1108
- externalNetworkInjection.regulatingControl = regulatingControl;
1109
- this.setTopologyEnergySourceConsumerObject(cimModel, externalNetworkInjection, i7Data, regulatingControl);
1110
- cimModel.addExternalNetworkInjection(externalNetworkInjection);
1111
- cimModel.addRegulatingControl(regulatingControl);
1112
- this.addIdMapping(i7Data.id, externalNetworkInjection.mrid, integral_sql_1.Integral7TableNames.BOUNDARYINJECTION);
1244
+ const i7Schluessel = integral_prefix_1.ERSATZLAENGSZWEIG_PRAEFIX +
1245
+ utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
1246
+ integral_prefix_1.MITTIGER_PUNKT +
1247
+ utils_2.ueberpruefeZeichenkette(i7Data.kurzname) +
1248
+ integral_prefix_1.MITTIGER_PUNKT +
1249
+ utils_2.ueberpruefeZeichenkette(i7Data.bezeichner) +
1250
+ integral_prefix_1.MITTIGER_PUNKT +
1251
+ utils_2.ueberpruefeZeichenkette(i7Data.stkabname);
1252
+ const equivalentBranch = new EquivalentBranch_1.EquivalentBranch(utils_1.getUUID(i7Data.guid), i7Data.bezeichner, i7Data.kurzname, i7Schluessel);
1253
+ const ur1 = utils_2.getU(i7Data.ur1, defaultValuesConfig.DefaultVoltage);
1254
+ const ur2 = utils_2.getU(i7Data.ur2, defaultValuesConfig.DefaultVoltage);
1255
+ const baseVoltageUr1 = util_create_1.createBaseVoltageIfNotExists(cimModel, ur1, this.exportFramesBoundary);
1256
+ const baseVoltageUr2 = util_create_1.createBaseVoltageIfNotExists(cimModel, ur2, this.exportFramesBoundary);
1257
+ if (baseVoltageUr1) {
1258
+ equivalentBranch.baseVoltage = baseVoltageUr1;
1259
+ }
1260
+ else if (baseVoltageUr2) {
1261
+ equivalentBranch.baseVoltage = baseVoltageUr2;
1262
+ }
1263
+ const start = cimModel.objects.get(this.integralID2UUID.get(i7Data.aknoten));
1264
+ if (start) {
1265
+ util_create_1.createConnection(cimModel, equivalentBranch, start, PhaseCode_1.PhaseCode.ABC, 1);
1266
+ }
1267
+ else {
1268
+ this.logger.debug(`Leitung ${i7Data.id} ${equivalentBranch.mrid} besitzt keinen Anfangsknoten. ${i7Data.aknoten} ${this.integralID2UUID.get(i7Data.aknoten)}`);
1269
+ }
1270
+ const target = cimModel.objects.get(this.integralID2UUID.get(i7Data.eknoten));
1271
+ if (target) {
1272
+ util_create_1.createConnection(cimModel, equivalentBranch, target, PhaseCode_1.PhaseCode.ABC, 2);
1273
+ }
1274
+ else {
1275
+ this.logger.debug(`Leitung ${i7Data.id} ${equivalentBranch.mrid} besitzt keinen Zielknoten.`);
1276
+ }
1277
+ cimModel.addEquivalentBranch(equivalentBranch);
1278
+ this.addIdMapping(i7Data.id, equivalentBranch.mrid, integral_sql_1.Integral7TableNames.ERSATZLAENGSZWEIG);
1113
1279
  }
1114
1280
  }
1115
1281
  else {
1116
- this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.EINSPEISUNG} ist nicht vorhanden.`);
1282
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.ERSATZLAENGSZWEIG} ist nicht vorhanden.`);
1117
1283
  }
1118
1284
  });
1119
1285
  }
@@ -1122,7 +1288,7 @@ class ConverterI7 {
1122
1288
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KOMPENSATIONSDROSSEL)) {
1123
1289
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.KOMPENSATIONSDROSSEL, knotenSfIDs));
1124
1290
  for (const i7Data of result) {
1125
- const shunt = new LinearShuntCompensator_1.LinearShuntCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, i7Data.kommentar);
1291
+ const shunt = new LinearShuntCompensator_1.LinearShuntCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1126
1292
  shunt.normalSections = i7Data.aktstufe;
1127
1293
  shunt.maximumSections = i7Data.maxstufe;
1128
1294
  shunt.nomU = i7Data.ur;
@@ -1132,7 +1298,7 @@ class ConverterI7 {
1132
1298
  const spannungsregelungRemote = utils_2.isBooleanI7(i7Data.rpv_geregelt) ? utils_2.convertToBooleanI7(i7Data.rpv_geregelt) : false;
1133
1299
  let regulatingControl;
1134
1300
  if (spannungsregelungLokal || spannungsregelungRemote) {
1135
- regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RG_Kompdrossel ${i7Data.id}`);
1301
+ regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RC_Kompdrossel ${i7Data.id}`);
1136
1302
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1137
1303
  regulatingControl.discrete = true;
1138
1304
  regulatingControl.targetDeadband = i7Data.uband;
@@ -1156,7 +1322,7 @@ class ConverterI7 {
1156
1322
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.KOMPENSATIONSKONDENSATOR)) {
1157
1323
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.KOMPENSATIONSKONDENSATOR, knotenSfIDs));
1158
1324
  for (const i7Data of result) {
1159
- const shunt = new LinearShuntCompensator_1.LinearShuntCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, i7Data.kommentar);
1325
+ const shunt = new LinearShuntCompensator_1.LinearShuntCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1160
1326
  shunt.normalSections = i7Data.aktstufe;
1161
1327
  shunt.maximumSections = i7Data.maxstufe;
1162
1328
  shunt.nomU = i7Data.ur;
@@ -1166,7 +1332,7 @@ class ConverterI7 {
1166
1332
  const spannungsregelungRemote = utils_2.isBooleanI7(i7Data.rpv_geregelt) ? utils_2.convertToBooleanI7(i7Data.rpv_geregelt) : false;
1167
1333
  let regulatingControl;
1168
1334
  if (spannungsregelungLokal || spannungsregelungRemote) {
1169
- regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RG_Kompkond ${i7Data.id}`);
1335
+ regulatingControl = new RegulatingControl_1.RegulatingControl(utils_1.generateUUID(), `RC_${i7Data.bezeichner}`);
1170
1336
  regulatingControl.mode = RegulatingControlModeKind_1.RegulatingControlModeKind.voltage;
1171
1337
  regulatingControl.discrete = true;
1172
1338
  regulatingControl.enabled = inBetrieb;
@@ -1192,7 +1358,7 @@ class ConverterI7 {
1192
1358
  for (const i7Data of result) {
1193
1359
  const statVarCom = new StaticVarCompensator_1.StaticVarCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1194
1360
  const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1195
- const regulatingControl = utils_2.createRegulatingControl(`RG_Statcom ${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
1361
+ const regulatingControl = utils_2.createRegulatingControl(`RC_Statcom ${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
1196
1362
  this.setTopologyEnergySourceConsumerObject(cimModel, statVarCom, i7Data, regulatingControl);
1197
1363
  const uref = utils_2.isNumericI7(i7Data.uref) ? utils_2.convertToNumberI7(i7Data.uref) : undefined;
1198
1364
  regulatingControl.targetValue = uref;
@@ -1232,7 +1398,7 @@ class ConverterI7 {
1232
1398
  for (const i7Data of result) {
1233
1399
  const statVarCom = new StaticVarCompensator_1.StaticVarCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1234
1400
  const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1235
- const regulatingControl = utils_2.createRegulatingControl(`RG_SVC ${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
1401
+ const regulatingControl = utils_2.createRegulatingControl(`RC_SVC ${i7Data.id}`, inBetrieb, UnitMultiplier_1.UnitMultiplier.k, RegulatingControlModeKind_1.RegulatingControlModeKind.voltage, cimModel, statVarCom);
1236
1402
  this.setTopologyEnergySourceConsumerObject(cimModel, statVarCom, i7Data, regulatingControl);
1237
1403
  const uref = utils_2.isNumericI7(i7Data.uref) ? utils_2.convertToNumberI7(i7Data.uref) : undefined;
1238
1404
  regulatingControl.targetValue = uref;
@@ -1265,7 +1431,7 @@ class ConverterI7 {
1265
1431
  }
1266
1432
  });
1267
1433
  }
1268
- convertCsConverterDC(cimModel, knotenSfIDs) {
1434
+ convertCsConverterDC(cimModel, integral7, knotenSfIDs) {
1269
1435
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1270
1436
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_KLASSISCH)) {
1271
1437
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.HGUE_KOPFSTATION_KLASSISCH, knotenSfIDs));
@@ -1309,7 +1475,7 @@ class ConverterI7 {
1309
1475
  const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1310
1476
  util_create_1.createSvStatus(cimModel, inBetrieb, csConverter);
1311
1477
  if (acConnectivityNode) {
1312
- this.createConnection(cimModel, csConverter, acConnectivityNode, PhaseCode_1.PhaseCode.ABC, true, 1);
1478
+ csConverter.pccTerminal = this.createConnection(cimModel, csConverter, acConnectivityNode, PhaseCode_1.PhaseCode.ABC, true, 1);
1313
1479
  }
1314
1480
  else {
1315
1481
  this.logger.debug(`CsConverter ${i7Data.id} ${csConverter.mrid} besitzt keinen AC Anschluss.`);
@@ -1327,12 +1493,13 @@ class ConverterI7 {
1327
1493
  cimModel.addCSConverter(csConverter);
1328
1494
  cimModel.addDCNode(dcNode);
1329
1495
  cimModel.addACDCConverterDCTerminal(acDCConverterDCTerminal);
1496
+ this.checkAnschlussIDs(i7Data.id, integral7);
1330
1497
  this.addIdMapping(i7Data.id, csConverter.mrid, integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_KLASSISCH);
1331
1498
  }
1332
1499
  }
1333
1500
  });
1334
1501
  }
1335
- convertVsConverterDC(cimModel, knotenSfIDs) {
1502
+ convertVsConverterDC(cimModel, integral7, knotenSfIDs) {
1336
1503
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1337
1504
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_VSC)) {
1338
1505
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.HGUE_KOPFSTATION_VSC, knotenSfIDs));
@@ -1355,7 +1522,7 @@ class ConverterI7 {
1355
1522
  const vsConverter = new VsConverter_1.VsConverter(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname);
1356
1523
  vsConverter.equipmentContainer = dcConverterUnit;
1357
1524
  vsConverter.baseS = i7Data.pr;
1358
- vsConverter.ratedUdc = i7Data.ur;
1525
+ utils_2.isNumericI7(i7Data.udc) ? vsConverter.ratedUdc = i7Data.udc : vsConverter.ratedUdc = i7Data.ur;
1359
1526
  vsConverter.idleLoss = i7Data.p_leer;
1360
1527
  vsConverter.maxUdc = vsConverter.ratedUdc * 1.05;
1361
1528
  vsConverter.minUdc = vsConverter.ratedUdc * 0.95;
@@ -1379,7 +1546,7 @@ class ConverterI7 {
1379
1546
  const inBetrieb = utils_2.convertToBooleanI7(i7Data.betrieb);
1380
1547
  util_create_1.createSvStatus(cimModel, inBetrieb, vsConverter);
1381
1548
  if (acConnectivityNode) {
1382
- util_create_1.createConnection(cimModel, vsConverter, acConnectivityNode, PhaseCode_1.PhaseCode.ABC, 1);
1549
+ vsConverter.pccTerminal = util_create_1.createConnection(cimModel, vsConverter, acConnectivityNode, PhaseCode_1.PhaseCode.ABC, 1);
1383
1550
  }
1384
1551
  else {
1385
1552
  this.logger.debug(`VsConverter ${i7Data.id} ${vsConverter.mrid} besitzt keinen AC Anschluss.`);
@@ -1389,11 +1556,14 @@ class ConverterI7 {
1389
1556
  const acDCConverterDCTerminal = new ACDCConverterDCTerminal_1.ACDCConverterDCTerminal(utils_1.generateUUID(), 'ACDCConvTerminal');
1390
1557
  acDCConverterDCTerminal.sequenceNumber = 1;
1391
1558
  acDCConverterDCTerminal.dCConductingEquipmentUUID = vsConverter.mrid;
1392
- acDCConverterDCTerminal.dcNodeUUID = dcNode.mrid;
1559
+ acDCConverterDCTerminal.dcNode = dcNode;
1560
+ vsConverter.dCTerminals.set(acDCConverterDCTerminal.getUUID(), acDCConverterDCTerminal);
1561
+ dcNode.dcTerminals.set(acDCConverterDCTerminal.getUUID(), acDCConverterDCTerminal);
1393
1562
  cimModel.addDCConverterUnit(dcConverterUnit);
1394
1563
  cimModel.addVSConverter(vsConverter);
1395
1564
  cimModel.addDCNode(dcNode);
1396
1565
  cimModel.addACDCConverterDCTerminal(acDCConverterDCTerminal);
1566
+ this.checkAnschlussIDs(i7Data.id, integral7);
1397
1567
  this.addIdMapping(i7Data.id, vsConverter.mrid, integral_sql_1.Integral7TableNames.HGUE_KOPFSTATION_VSC);
1398
1568
  }
1399
1569
  }
@@ -1453,6 +1623,7 @@ class ConverterI7 {
1453
1623
  const powerData = utils_2.getActiveReactivePower(i7Data);
1454
1624
  externalNetworkInjection.p = powerData[0];
1455
1625
  externalNetworkInjection.q = powerData[1];
1626
+ externalNetworkInjection.controlEnabled = false;
1456
1627
  this.setTopologyEnergySourceConsumerObject(cimModel, externalNetworkInjection, i7Data);
1457
1628
  cimModel.addExternalNetworkInjection(externalNetworkInjection);
1458
1629
  this.addIdMapping(i7Data.id, externalNetworkInjection.mrid, integral_sql_1.I7Objects.EINSPEISUNG);
@@ -1498,7 +1669,7 @@ class ConverterI7 {
1498
1669
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.QUERKUPPLUNG, schaltanlagenAbschnittIDs));
1499
1670
  for (const i7Data of result) {
1500
1671
  const bay = new AMPRIONBay_1.AMPRIONBay(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), 'Querkupplung');
1501
- bay.number = i7Data.feldnummer;
1672
+ bay.number = i7Data.feldnummer + '';
1502
1673
  bay.locationID = i7Data.ips_folder_id;
1503
1674
  const voltageLevel = cimModel.getVoltageLevel(this.integralID2UUID.get(i7Data.saabschnitt));
1504
1675
  if (voltageLevel) {
@@ -1529,7 +1700,7 @@ class ConverterI7 {
1529
1700
  for (const i7Data of result) {
1530
1701
  const bay = new AMPRIONBay_1.AMPRIONBay(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, 'Laengskupplung');
1531
1702
  const voltageLevel = cimModel.getVoltageLevel(this.integralID2UUID.get(i7Data.schaltanlage));
1532
- bay.number = i7Data.feldnummer;
1703
+ bay.number = i7Data.feldnummer + '';
1533
1704
  bay.locationID = i7Data.ips_folder_id;
1534
1705
  if (voltageLevel) {
1535
1706
  bay.voltageLevel = voltageLevel;
@@ -1605,7 +1776,7 @@ class ConverterI7 {
1605
1776
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.TRENNERFI_3P)) {
1606
1777
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.TRENNERFI_3P, containerIDs));
1607
1778
  for (const i7Data of result) {
1608
- const disconnector = new Disconnector_1.Disconnector(utils_1.generateUUID(), i7Data.bezeichner);
1779
+ const disconnector = new Disconnector_1.Disconnector(utils_1.getUUID(i7Data.guid), i7Data.bezeichner);
1609
1780
  yield this.convertSwitch(disconnector, cimModel, i7Data);
1610
1781
  cimModel.addDisconnector(disconnector);
1611
1782
  this.addIdMapping(i7Data.id, disconnector.mrid, integral_sql_1.Integral7TableNames.TRENNERFI_3P);
@@ -1637,7 +1808,7 @@ class ConverterI7 {
1637
1808
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.LEISTUNGSSCHALTER)) {
1638
1809
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.LEISTUNGSSCHALTER, containerIDs));
1639
1810
  for (const i7Data of result) {
1640
- const breaker = new Breaker_1.Breaker(utils_1.generateUUID(), i7Data.bezeichner);
1811
+ const breaker = new Breaker_1.Breaker(utils_1.getUUID(i7Data.guid), i7Data.bezeichner);
1641
1812
  yield this.convertSwitch(breaker, cimModel, i7Data);
1642
1813
  cimModel.addBreaker(breaker);
1643
1814
  this.addIdMapping(i7Data.id, breaker.mrid, integral_sql_1.Integral7TableNames.LEISTUNGSSCHALTER);
@@ -1685,6 +1856,64 @@ class ConverterI7 {
1685
1856
  }
1686
1857
  });
1687
1858
  }
1859
+ convertLaengsdrosseln(cimModel, knotenSfIDs, defaultValuesConfig) {
1860
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
1861
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.LAENGSDROSSEL)) {
1862
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getNetzQuery(integral_sql_1.I7Objects.LAENGSDROSSEL, 0, 0, []));
1863
+ for (const i7Data of result) {
1864
+ const seriesCompensator = new AMPRIONSeriesCompensator_1.AMPRIONSeriesCompensator(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.id + '', 'LD-' + i7Data.bezeichner);
1865
+ const start = cimModel.objects.get(this.integralID2UUID.get(i7Data.aknoten));
1866
+ let startTerminal;
1867
+ if (start) {
1868
+ startTerminal = util_create_1.createConnection(cimModel, seriesCompensator, start, PhaseCode_1.PhaseCode.ABC, 1);
1869
+ }
1870
+ else {
1871
+ this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keinen Anfangsknoten.`);
1872
+ }
1873
+ const target = cimModel.objects.get(this.integralID2UUID.get(i7Data.eknoten));
1874
+ let targetTerminal;
1875
+ if (target) {
1876
+ targetTerminal = util_create_1.createConnection(cimModel, seriesCompensator, target, PhaseCode_1.PhaseCode.ABC, 2);
1877
+ }
1878
+ else {
1879
+ this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keinen Zielknoten.`);
1880
+ }
1881
+ const ur = utils_2.getU(i7Data.ur, defaultValuesConfig.DefaultVoltage);
1882
+ const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, ur, this.exportFramesBoundary);
1883
+ const i = utils_2.isNumericI7(i7Data.ir) ? utils_2.convertToNumberI7(i7Data.ir) : defaultValuesConfig.SeriesCompensator.varistorRatedCurrent;
1884
+ const ukr = utils_2.isNumericI7(i7Data.ukr) ? utils_2.convertToNumberI7(i7Data.ukr) : 0;
1885
+ if (i > 0 && ukr > 0) {
1886
+ const voltage = baseVoltage.nominalVoltage.value * 1000;
1887
+ const z = (ukr / 100) * Math.pow(voltage, 2) / (voltage * i * Math.sqrt(3));
1888
+ seriesCompensator.x = z;
1889
+ }
1890
+ seriesCompensator.varistorRatedCurrent = i;
1891
+ const terminal = startTerminal;
1892
+ if (terminal) {
1893
+ this.setConductingEquipmentCurrentLimit(cimModel, 'Rating ' + seriesCompensator.name, terminal.mrid, i);
1894
+ }
1895
+ else {
1896
+ this.logger.debug(`Längsdrossel ${i7Data.id} ${seriesCompensator.mrid} besitzt keine Terminalinstanz.`);
1897
+ }
1898
+ const vlObject = this.determineEquipmentContainer('VoltageLevel', cimModel, cimModel.getObject(startTerminal.connectivityNode.getConnectivityNodeContainerUUID()));
1899
+ if (vlObject) {
1900
+ seriesCompensator.equipmentContainer = vlObject;
1901
+ seriesCompensator.baseVoltage = baseVoltage;
1902
+ }
1903
+ else {
1904
+ this.logger.debug(`Längsdrossel ${i7Data.id} besitzt kein VoltageLevel Ur ${i7Data.ur}.`);
1905
+ }
1906
+ const psrType = utils_1.createIfNotExitsPSRType(cimModel, 'Längsdrossel');
1907
+ seriesCompensator.psrTypeUUID = psrType.mrid;
1908
+ cimModel.addSeriesCompensator(seriesCompensator);
1909
+ this.addIdMapping(i7Data.id, seriesCompensator.mrid, integral_sql_1.Integral7TableNames.LAENGSDROSSEL);
1910
+ }
1911
+ }
1912
+ else {
1913
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.LAENGSDROSSEL} ist nicht vorhanden.`);
1914
+ }
1915
+ });
1916
+ }
1688
1917
  convertBetriebsmitteltypenKdrossel() {
1689
1918
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1690
1919
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.TYP_KDROSSEL)) {
@@ -1709,6 +1938,14 @@ class ConverterI7 {
1709
1938
  stpSchieneIDs.push(i7DataSchiene.id);
1710
1939
  const connectivityNode = new ConnectivityNode_1.ConnectivityNode(utils_1.generateUUID(), utils_2.getName(i7DataSchiene), `StpSchiene_${i7DataSchiene.id}`);
1711
1940
  const junction = new Junction_1.Junction(utils_1.generateUUID(), `StpSchiene/${i7DataSchiene.id}`, `${i7DataSchiene.bezeichner}`);
1941
+ const equipmentContainer = this.determineEquipmentContainer('VoltageLevel', cimModel, cimModel.getObject(this.integralID2UUID.get(i7DataSchiene.id)));
1942
+ if (equipmentContainer) {
1943
+ equipmentContainer.addEquipment(junction);
1944
+ junction.equipmentContainer = equipmentContainer;
1945
+ }
1946
+ else {
1947
+ this.logger.debug(`Sternpunktschiene ${i7DataSchiene.id} besitzt keinen EquipmentContainer.`);
1948
+ }
1712
1949
  const terminal = this.createConnection(cimModel, junction, connectivityNode, PhaseCode_1.PhaseCode.N, true);
1713
1950
  integral7.sternPunktImpModel.connectivityNodes.set(connectivityNode.mrid, connectivityNode);
1714
1951
  integral7.sternPunktImpModel.junctions.set(junction.mrid, junction);
@@ -1780,13 +2017,13 @@ class ConverterI7 {
1780
2017
  }));
1781
2018
  });
1782
2019
  }
1783
- convertStpSchaltelemente(integral7, stpScheinenID) {
2020
+ convertStpSchaltelemente(integral7, stpSchienenID) {
1784
2021
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1785
2022
  return new Promise((resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
1786
2023
  try {
1787
2024
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_SCHALTER)) {
1788
- if (stpScheinenID.length) {
1789
- const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.STERNPUNKT_SCHALTER, stpScheinenID));
2025
+ if (stpSchienenID.length) {
2026
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.STERNPUNKT_SCHALTER, stpSchienenID));
1790
2027
  for (const i7Data of result) {
1791
2028
  const terminal = integral7.sternPunktImpModel.stpSchieneTerminal.get(i7Data.eknoten);
1792
2029
  if (terminal) {
@@ -1813,6 +2050,36 @@ class ConverterI7 {
1813
2050
  }));
1814
2051
  });
1815
2052
  }
2053
+ convertLaengskupplungen(cimModel, integral7, schaltanlagenIDs) {
2054
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
2055
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.LAENGSKUPPLUNG)) {
2056
+ const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.LAENGSKUPPLUNG, schaltanlagenIDs));
2057
+ for (const i7Data of result) {
2058
+ const bay = new AMPRIONBay_1.AMPRIONBay(utils_1.getUUID(i7Data.guid), utils_2.getName(i7Data), i7Data.kurzname, 'Laengskupplung');
2059
+ const voltageLevel = cimModel.getVoltageLevel(this.integralID2UUID.get(i7Data.schaltanlage));
2060
+ bay.number = i7Data.feldnummer + '';
2061
+ bay.locationID = i7Data.ips_folder_id;
2062
+ if (voltageLevel) {
2063
+ bay.voltageLevel = voltageLevel;
2064
+ voltageLevel.addBay(bay);
2065
+ const i7Schluessel = voltageLevel.description +
2066
+ '/LK-' +
2067
+ utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
2068
+ bay.description = i7Schluessel;
2069
+ }
2070
+ else {
2071
+ this.logger.debug(`Laengskupplung ${i7Data.id} besitzt keine Anlage.`);
2072
+ }
2073
+ integral7.laengskupplungIDs.push(i7Data.id);
2074
+ this.addIdMapping(i7Data.id, bay.mrid, integral_sql_1.Integral7TableNames.LAENGSKUPPLUNG);
2075
+ cimModel.addBay(bay);
2076
+ }
2077
+ }
2078
+ else {
2079
+ this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.LAENGSKUPPLUNG} ist nicht vorhanden.`);
2080
+ }
2081
+ });
2082
+ }
1816
2083
  convertBetriebsmitteltypenLeitung() {
1817
2084
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1818
2085
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.TYP_FREILEITUNG)) {
@@ -1851,21 +2118,33 @@ class ConverterI7 {
1851
2118
  object.c0 = +data.c0;
1852
2119
  object.ratedCurrent = +data.ir;
1853
2120
  }
1854
- convertLeitungen(cimModel, integral7, defaultValuesConfig) {
1855
- var _a, _b;
2121
+ convertLeitungen(frame, integral7, defaultValuesConfig) {
2122
+ var _a, _b, _c;
1856
2123
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1857
2124
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.LEITUNG) && integral7.leitungsAnschlussIDs.length) {
1858
- const limit = 3000;
2125
+ const cimModel = frame.cimModel;
1859
2126
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.LEITUNG, integral7.leitungsAnschlussIDs));
1860
2127
  const leitungIDs = result.map(elem => elem.id);
1861
- const leitungStromkreisabschnitt = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.STROMKREISABSCHNITT, leitungIDs));
2128
+ const cableAvailable = this.isTableAvailable(integral_sql_1.Integral7TableNames.KABEL);
2129
+ const overheadAvailable = this.isTableAvailable(integral_sql_1.Integral7TableNames.FREILEITUNG);
2130
+ let type = integral_sql_1.I7Objects.STROMKREISABSCHNITT;
2131
+ if (cableAvailable && overheadAvailable) {
2132
+ type = integral_sql_1.I7Objects.STROMKREISABSCHNITT_KABEL_FREILEITUNG;
2133
+ }
2134
+ else if (cableAvailable) {
2135
+ type = integral_sql_1.I7Objects.STROMKREISABSCHNITT_KABEL;
2136
+ }
2137
+ else if (overheadAvailable) {
2138
+ type = integral_sql_1.I7Objects.STROMKREISABSCHNITT_FREILEITUNG;
2139
+ }
2140
+ const leitungStromkreisabschnitt = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(type, leitungIDs));
1862
2141
  for (const i7Data of result) {
1863
2142
  const stromkreisabschnitte = leitungStromkreisabschnitt.filter(elem => elem.leitung === i7Data.id);
1864
2143
  if (!(stromkreisabschnitte === null || stromkreisabschnitte === void 0 ? void 0 : stromkreisabschnitte.length))
1865
2144
  continue;
1866
2145
  const leitung = new Leitung_1.LeitungImpl(i7Data);
1867
2146
  integral7.integralLeitungen.set(i7Data.id, leitung);
1868
- const i7Schluessel = integral_prefix_1.LEITUNG_PRAEFIX +
2147
+ let i7Schluessel = integral_prefix_1.LEITUNG_PRAEFIX +
1869
2148
  utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
1870
2149
  integral_prefix_1.MITTIGER_PUNKT +
1871
2150
  utils_2.ueberpruefeZeichenkette(i7Data.kurzname) +
@@ -1873,81 +2152,135 @@ class ConverterI7 {
1873
2152
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner) +
1874
2153
  integral_prefix_1.MITTIGER_PUNKT +
1875
2154
  utils_2.ueberpruefeZeichenkette(i7Data.stkabname);
1876
- const name = integral_prefix_1.LEITUNG_PRAEFIX +
2155
+ let name = integral_prefix_1.LEITUNG_PRAEFIX +
1877
2156
  utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
1878
- integral_prefix_1.MITTIGER_PUNKT +
2157
+ '-' +
1879
2158
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner) +
1880
- integral_prefix_1.MITTIGER_PUNKT +
2159
+ '-' +
1881
2160
  utils_2.ueberpruefeZeichenkette(i7Data.stkabname);
1882
- const line = new Line_1.Line(utils_1.getUUID(i7Data.guid), i7Data.name);
1883
- const acLineSegments = [];
2161
+ const line = new AMPRIONLine_1.AMPRIONLine(utils_1.getUUID(i7Data.guid), name, i7Data.stkabname, i7Schluessel);
2162
+ line.ukz = i7Data.ukz;
2163
+ let acLineSegments = [];
1884
2164
  for (const stk of stromkreisabschnitte) {
2165
+ i7Schluessel += integral_prefix_1.LEITUNGSABSCHNITT_PRAEFIX + utils_2.ueberpruefeZeichenkette(stk.bezeichner);
2166
+ name = utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
2167
+ '-' +
2168
+ utils_2.ueberpruefeZeichenkette(i7Data.bezeichner) +
2169
+ '-' +
2170
+ utils_2.ueberpruefeZeichenkette(stk.bezeichner);
1885
2171
  const acLineSegment = new ACLineSegment_1.ACLineSegment(utils_1.generateUUID(), name, i7Data.stkabname, i7Schluessel);
1886
- this.setACLineSegmentProperties(cimModel, acLineSegment, stk, defaultValuesConfig);
1887
- acLineSegment.description = stk.nametyp;
1888
2172
  acLineSegment.equipmentContainer = line;
1889
2173
  line.addEquipment(acLineSegment);
1890
2174
  acLineSegments.push(acLineSegment);
1891
2175
  this.addIdMapping(stk.id, acLineSegment.mrid, integral_sql_1.Integral7TableNames.LEITUNG);
1892
- cimModel.addACLineSegment(acLineSegment);
1893
2176
  }
1894
- cimModel.addLine(line);
2177
+ let tmp_sequence_number = 1;
2178
+ const acLineSegmentStart = acLineSegments[0];
2179
+ const startTerminal = this.createBoundaryConnection(frame, acLineSegmentStart, i7Data.aknoten, PhaseCode_1.PhaseCode.ABC, tmp_sequence_number);
2180
+ let equivalentInjection = undefined;
2181
+ if (startTerminal) {
2182
+ this.setACLineSegmentCurrentLimt(cimModel, acLineSegmentStart, acLineSegmentStart.description, startTerminal);
2183
+ tmp_sequence_number++;
2184
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten));
2185
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(startTerminal.getConnectivityNodeUUID());
2186
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2187
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2188
+ }
2189
+ if (!acLineSegmentStart.baseVoltage) {
2190
+ if (startTerminal.getConnectedNode())
2191
+ acLineSegmentStart.baseVoltage = (_a = startTerminal.getConnectivityNode()) === null || _a === void 0 ? void 0 : _a.getBaseVoltage();
2192
+ if (!acLineSegmentStart.baseVoltage) {
2193
+ this.logger.debug(`(acLineSegmentStart) Anschlussknoten ${i7Data.aknoten} ${this.integralID2UUID.get(i7Data.aknoten)} besitzt keine Spannungsangabe in Knotenspannungen Map.`);
2194
+ }
2195
+ }
2196
+ }
2197
+ else {
2198
+ this.logger.debug(`Leitung ${i7Data.id} ${acLineSegmentStart.mrid} besitzt keinen Anfangsknoten. ${i7Data.aknoten} ${this.integralID2UUID.get(i7Data.aknoten)}`);
2199
+ }
2200
+ cimModel.addACLineSegment(acLineSegmentStart);
1895
2201
  const anzahl = acLineSegments.length;
2202
+ let tmp_terminal = undefined;
1896
2203
  for (let i = 0; i < anzahl - 1; i++) {
1897
2204
  const cn = new ConnectivityNode_1.ConnectivityNode(utils_1.generateUUID(), 'CN_Lt');
1898
2205
  const acLineSegment1 = acLineSegments[i];
1899
- const t1 = this.createConnection(cimModel, acLineSegment1, cn, PhaseCode_1.PhaseCode.ABC, true);
1900
- this.setACLineSegmentCurrentLimt(cimModel, acLineSegment1, acLineSegment1.description, t1);
2206
+ tmp_terminal = this.createConnection(cimModel, acLineSegment1, cn, PhaseCode_1.PhaseCode.ABC, true, tmp_sequence_number);
2207
+ this.setACLineSegmentCurrentLimt(cimModel, acLineSegment1, acLineSegment1.description, tmp_terminal);
2208
+ cimModel.addACLineSegment(acLineSegment1);
2209
+ if (tmp_terminal) {
2210
+ tmp_sequence_number++;
2211
+ tmp_terminal = undefined;
2212
+ }
2213
+ this.setACLineSegmentProperties(cimModel, acLineSegments[i], stromkreisabschnitte[i], defaultValuesConfig);
1901
2214
  const acLineSegment2 = acLineSegments[i + 1];
1902
- const t2 = this.createConnection(cimModel, acLineSegment2, cn, PhaseCode_1.PhaseCode.ABC, true);
1903
- this.setACLineSegmentCurrentLimt(cimModel, acLineSegment2, acLineSegment2.description, t2);
2215
+ tmp_terminal = this.createConnection(cimModel, acLineSegment2, cn, PhaseCode_1.PhaseCode.ABC, true, tmp_sequence_number);
2216
+ this.setACLineSegmentCurrentLimt(cimModel, acLineSegment2, acLineSegment2.description, tmp_terminal);
2217
+ cimModel.addACLineSegment(acLineSegment1);
2218
+ if (tmp_terminal) {
2219
+ tmp_sequence_number++;
2220
+ tmp_terminal = undefined;
2221
+ }
1904
2222
  cn.connectivityNodeContainer = acLineSegment1.equipmentContainer;
1905
2223
  cimModel.addConnectivityNode(cn);
1906
2224
  }
1907
- const start = cimModel.getObject(this.integralID2UUID.get(i7Data.aknoten));
1908
- const acLineSegmentStart = acLineSegments[0];
1909
- if (start) {
1910
- const terminal = this.createConnection(cimModel, acLineSegmentStart, start, PhaseCode_1.PhaseCode.ABC, acLineSegmentStart.terminalsUUIDs.length + 1);
1911
- this.setACLineSegmentCurrentLimt(cimModel, acLineSegmentStart, acLineSegmentStart.description, terminal);
1912
- if (!acLineSegmentStart.baseVoltage) {
1913
- acLineSegmentStart.baseVoltage = (_a = terminal === null || terminal === void 0 ? void 0 : terminal.connectivityNode) === null || _a === void 0 ? void 0 : _a.getBaseVoltage();
1914
- ;
1915
- }
1916
- }
1917
- else {
1918
- this.logger.debug(`Leitung ${i7Data.id} ${acLineSegmentStart.mrid} besitzt keinen Anfangsknoten. ${i7Data.aknoten} ${this.integralID2UUID.get(i7Data.aknoten)}`);
1919
- }
1920
- const target = cimModel.getObject(this.integralID2UUID.get(i7Data.eknoten));
1921
2225
  const acLineSegmentZiel = acLineSegments[anzahl - 1];
1922
- if (target) {
1923
- const terminal = this.createConnection(cimModel, acLineSegmentZiel, target, PhaseCode_1.PhaseCode.ABC, acLineSegmentStart.terminalsUUIDs.length + 2);
1924
- this.setACLineSegmentCurrentLimt(cimModel, acLineSegmentZiel, acLineSegmentZiel.description, terminal);
2226
+ const targetTerminal = this.createBoundaryConnection(frame, acLineSegmentZiel, i7Data.eknoten, PhaseCode_1.PhaseCode.ABC, tmp_sequence_number);
2227
+ if (targetTerminal) {
2228
+ this.setACLineSegmentCurrentLimt(cimModel, acLineSegmentZiel, acLineSegmentZiel.description, targetTerminal);
2229
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.eknoten));
2230
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(targetTerminal.getConnectivityNodeUUID());
2231
+ if (tmp_cn && 'boundaryPoint' in tmp_cn && tmp_cn.boundaryPoint) {
2232
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2233
+ }
1925
2234
  if (!acLineSegmentZiel.baseVoltage) {
1926
- acLineSegmentZiel.baseVoltage = (_b = terminal === null || terminal === void 0 ? void 0 : terminal.connectivityNode) === null || _b === void 0 ? void 0 : _b.getBaseVoltage();
2235
+ acLineSegmentZiel.baseVoltage = (_b = targetTerminal.getConnectivityNode()) === null || _b === void 0 ? void 0 : _b.getBaseVoltage();
2236
+ if (!acLineSegmentZiel.baseVoltage) {
2237
+ this.logger.debug(`(acLineSegmentZiel) Anschlussknoten ${i7Data.aknoten} ${this.integralID2UUID.get(i7Data.aknoten)} besitzt keine Spannungsangabe in Knotenspannungen Map.`);
2238
+ }
1927
2239
  }
1928
2240
  }
1929
2241
  else {
1930
2242
  this.logger.debug(`Leitung ${i7Data.id} ${acLineSegmentZiel.mrid} besitzt keinen Zielknoten.`);
1931
2243
  }
2244
+ cimModel.addACLineSegment(acLineSegmentZiel);
1932
2245
  const stkBaseVoltage = acLineSegments.find(elem => elem.baseVoltage !== undefined);
1933
2246
  if (!stkBaseVoltage) {
1934
- this.logger.error(`Leitung ${i7Data.id}: Spannung konnte nicht bestimmt werden.`);
1935
- continue;
2247
+ this.logger.error(`Leitung ${i7Data.id} ${acLineSegmentStart.mrid}: Spannung konnte nicht bestimmt werden.`);
1936
2248
  }
1937
- for (const acLineSegment of acLineSegments) {
1938
- acLineSegment.baseVoltage = stkBaseVoltage.baseVoltage;
1939
- for (const terminal of acLineSegment.terminals.values()) {
1940
- }
1941
- const terminals = [...acLineSegment.terminals.values()];
1942
- for (let i = 0; i < terminals.length; i++) {
1943
- let terminal = terminals[i];
1944
- if (terminal)
1945
- terminal.sequenceNumber = i + 1;
2249
+ else {
2250
+ for (const acLineSegment of acLineSegments) {
2251
+ acLineSegment.baseVoltage = stkBaseVoltage.baseVoltage;
2252
+ }
2253
+ if (equivalentInjection) {
2254
+ equivalentInjection.baseVoltage = stkBaseVoltage.baseVoltage;
2255
+ }
2256
+ }
2257
+ let idx = 0;
2258
+ while (idx < acLineSegments.length && !(line.subGeographicalRegion)) {
2259
+ let jdx = 0;
2260
+ let values = acLineSegments[idx].terminals.values();
2261
+ let tmp_terminal = values.next();
2262
+ while (tmp_terminal.value && !(line.subGeographicalRegion)) {
2263
+ let terminal = tmp_terminal.value;
2264
+ const connectivityNodeContainer = (_c = terminal.connectivityNode) === null || _c === void 0 ? void 0 : _c.connectivityNodeContainer;
2265
+ if (connectivityNodeContainer && !(connectivityNodeContainer instanceof Line_1.Line)) {
2266
+ const substation = this.determineEquipmentContainer('Substation', cimModel, connectivityNodeContainer);
2267
+ if (substation) {
2268
+ line.subGeographicalRegion = substation.subGeographicalRegion;
2269
+ substation.subGeographicalRegion.addLine(line);
2270
+ }
2271
+ }
2272
+ else {
2273
+ this.logger.error(`Leitung ${line.getUUID()} with Terminal ${terminal.getUUID()}: ConnectivityNode konnte nicht bestimmt werden.`);
2274
+ }
2275
+ tmp_terminal = values.next();
1946
2276
  }
2277
+ idx++;
2278
+ }
2279
+ cimModel.addLine(line);
2280
+ this.addIdMapping(i7Data.id, line.getUUID(), integral_sql_1.Integral7TableNames.LEITUNG);
2281
+ if (!line.subGeographicalRegion) {
2282
+ this.logger.error(`Leitung ${i7Data.id} ${acLineSegmentStart.mrid}: SubGeographicalRegion konnte nicht bestimmt werden.`);
1947
2283
  }
1948
- const region = utils_1.createIfNotExitsGeoregionByName(cimModel, defaultValuesConfig.GeographicalRegion.name);
1949
- const subregion = utils_1.createIfNotExitsSubGeoregionByName(cimModel, defaultValuesConfig.SubGeographicalRegion.name, region);
1950
- line.subGeographicalRegion = subregion;
1951
2284
  }
1952
2285
  }
1953
2286
  else {
@@ -1979,7 +2312,7 @@ class ConverterI7 {
1979
2312
  this.logger.debug(`Längskondensator ${i7Data.id} ${seriesCompensator.mrid} besitzt keinen Zielknoten.`);
1980
2313
  }
1981
2314
  const ur = utils_2.getU(i7Data.ur, defaultValuesConfig.DefaultVoltage);
1982
- const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, ur);
2315
+ const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, ur, this.exportFramesBoundary);
1983
2316
  const i = utils_2.isNumericI7(i7Data.ir) ? utils_2.convertToNumberI7(i7Data.ir) : undefined;
1984
2317
  const ukr = utils_2.isNumericI7(i7Data.ukr) ? utils_2.convertToNumberI7(i7Data.ukr) : undefined;
1985
2318
  if (i > 0 && ukr > 0) {
@@ -2024,14 +2357,10 @@ class ConverterI7 {
2024
2357
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.HGUE_LEITUNG) && integral7.hgueAnschlussKnotenIDs.length) {
2025
2358
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.HGUE_LEITUNG, integral7.hgueAnschlussKnotenIDs));
2026
2359
  for (const i7Data of result) {
2027
- const dcLine = new DCLine_1.DCLine(utils_1.getUUID(i7Data['guid_dcline']), 'DCLine');
2028
- const i7Schluessel = integral_prefix_1.LEITUNG_PRAEFIX +
2029
- utils_2.ueberpruefeZeichenkette(i7Data.ukz) +
2030
- integral_prefix_1.MITTIGER_PUNKT +
2031
- utils_2.ueberpruefeZeichenkette(i7Data.kurzname) +
2032
- integral_prefix_1.MITTIGER_PUNKT +
2360
+ const dcLine = new DCLine_1.DCLine(utils_1.getUUID(i7Data['guid_dcline']), i7Data.bezeichner);
2361
+ const i7Schluessel = integral_prefix_1.HGUELEITUNG_PRAEFIX +
2033
2362
  utils_2.ueberpruefeZeichenkette(i7Data.bezeichner);
2034
- const dcLineSegment = new DCLineSegment_1.DCLineSegment(utils_1.getUUID(i7Data.guid), i7Data.bezeichner, i7Data.kurzname, i7Schluessel);
2363
+ const dcLineSegment = new DCLineSegment_1.DCLineSegment(utils_1.generateUUID(), i7Data.bezeichner, i7Data.id.toString(), i7Schluessel);
2035
2364
  dcLineSegment.resistance = i7Data.rdc;
2036
2365
  dcLineSegment.equipmentContainer = dcLine;
2037
2366
  const bipol = utils_2.convertToBooleanI7(i7Data.bipol);
@@ -2039,16 +2368,22 @@ class ConverterI7 {
2039
2368
  const acDCConverterTarget = cimModel.getObject(this.integralID2UUID.get(i7Data.enetzobjekt));
2040
2369
  const converterUnitStart = (_a = acDCConverterStart) === null || _a === void 0 ? void 0 : _a.equipmentContainer;
2041
2370
  const converterUnitTarget = (_b = acDCConverterTarget) === null || _b === void 0 ? void 0 : _b.equipmentContainer;
2042
- switch (bipol) {
2043
- case (true): {
2044
- converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
2045
- converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
2046
- }
2047
- default: {
2048
- converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
2049
- converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
2371
+ if (converterUnitStart && converterUnitTarget) {
2372
+ switch (bipol) {
2373
+ case (true): {
2374
+ converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
2375
+ converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.bipolar;
2376
+ break;
2377
+ }
2378
+ default: {
2379
+ converterUnitStart.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
2380
+ converterUnitTarget.operationMode = DCConverterOperatingModeKind_1.DCConverterOperatingModeKind.monopolarGroundReturn;
2381
+ }
2050
2382
  }
2051
2383
  }
2384
+ else {
2385
+ this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid}: zugehörende/r Konverter konnte nicht ermittelt werden.`);
2386
+ }
2052
2387
  const startDCNode = getDCNodeFromConverter(acDCConverterStart);
2053
2388
  if (startDCNode) {
2054
2389
  const dcTerminal = new DCTerminal_1.DCTerminal(utils_1.generateUUID(), 'DCTerminal_HGÜ_Leitung');
@@ -2056,18 +2391,20 @@ class ConverterI7 {
2056
2391
  dcTerminal.sequenceNumber = 1;
2057
2392
  dcTerminal.dCConductingEquipment = dcLineSegment;
2058
2393
  dcTerminal.dcNode = startDCNode;
2394
+ startDCNode.dcTerminals.set(dcTerminal.getUUID(), dcTerminal);
2059
2395
  cimModel.addDCTerminal(dcTerminal);
2060
2396
  }
2061
2397
  else {
2062
2398
  this.logger.debug(`HGÜ-Leitung ${i7Data.id} ${dcLineSegment.mrid} besitzt keinen Anfangsknoten. ${i7Data.anetzobjekt} ${this.integralID2UUID.get(i7Data.anetzobjekt)}`);
2063
2399
  }
2064
- const tartgetDCNode = getDCNodeFromConverter(acDCConverterTarget);
2065
- if (tartgetDCNode) {
2400
+ const targetDCNode = getDCNodeFromConverter(acDCConverterTarget);
2401
+ if (targetDCNode) {
2066
2402
  const dcTerminal = new DCTerminal_1.DCTerminal(utils_1.generateUUID(), 'DCTerminal_HGÜ_Leitung');
2067
2403
  dcTerminal.connected = true;
2068
2404
  dcTerminal.sequenceNumber = 2;
2069
2405
  dcTerminal.dCConductingEquipment = dcLineSegment;
2070
- dcTerminal.dcNode = tartgetDCNode;
2406
+ dcTerminal.dcNode = targetDCNode;
2407
+ targetDCNode.dcTerminals.set(dcTerminal.getUUID(), dcTerminal);
2071
2408
  cimModel.addDCTerminal(dcTerminal);
2072
2409
  }
2073
2410
  else {
@@ -2149,10 +2486,11 @@ class ConverterI7 {
2149
2486
  }
2150
2487
  });
2151
2488
  }
2152
- convertTrafo2W(cimModel, integral7, defaultValuesConfig, standortIDs) {
2489
+ convertTrafo2W(frame, integral7, defaultValuesConfig, standortIDs) {
2153
2490
  var _a;
2154
2491
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2155
2492
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.TRAFO2W)) {
2493
+ const cimModel = frame.cimModel;
2156
2494
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.TRAFO2W, standortIDs));
2157
2495
  const trafoIDs = result.map(obj => obj['id']);
2158
2496
  const sternpunktKnotenMap = new Map();
@@ -2175,6 +2513,13 @@ class ConverterI7 {
2175
2513
  this.logger.debug(`Trafo2W ${i7Data.id} besitzt keine Umspannanlage.`);
2176
2514
  }
2177
2515
  const powerTransformerInfo = this.cimModelDefault.getPowerTransformerInfoByName(i7Data.nametyp);
2516
+ if (this.blocktransformatoren.includes(utils_2.convertToNumberI7(i7Data.id))) {
2517
+ powerTransformer.isPartOfGeneratorUnit = true;
2518
+ }
2519
+ else {
2520
+ powerTransformer.isPartOfGeneratorUnit = false;
2521
+ }
2522
+ const schaltgruppe = i7Data.schaltgr;
2178
2523
  const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd(utils_1.getUUID(i7Data.guid_w1), `W1${powerTransformer.name}`);
2179
2524
  powerTransformerEnd1.endNumber = 1;
2180
2525
  const pkr = utils_2.getPkrTrafo(i7Data, powerTransformerInfo, '');
@@ -2186,16 +2531,24 @@ class ConverterI7 {
2186
2531
  const iLeer = utils_2.isNumericI7(i7Data.i_leer) ? utils_2.convertToNumberI7(i7Data.i_leer) : 0;
2187
2532
  powerTransformerEnd1.r = utils_2.calculateR(ur, pkr, sr);
2188
2533
  powerTransformerEnd1.x = utils_2.calculateX(ur, ukr, sr, powerTransformerEnd1.r);
2189
- powerTransformerEnd1.g = utils_2.calculateG(ur, p0) * 1000000;
2190
- powerTransformerEnd1.b = utils_2.calculateB(ur, sr, iLeer, p0) * 1000000;
2534
+ powerTransformerEnd1.g = utils_2.calculateG(ur, p0);
2535
+ powerTransformerEnd1.b = utils_2.calculateB(ur, sr, iLeer, p0);
2191
2536
  powerTransformerEnd1.ratedU = ur;
2192
2537
  powerTransformerEnd1.ratedS = sr;
2193
- const start = cimModel.getObject(this.integralID2UUID.get(i7Data.aknoten));
2194
- const startTerminal = start ? this.createConnection(cimModel, powerTransformer, start, PhaseCode_1.PhaseCode.ABC, true, 1) : undefined;
2538
+ const startTerminal = this.createBoundaryConnection(frame, powerTransformer, i7Data.aknoten, PhaseCode_1.PhaseCode.ABC, 1);
2195
2539
  if (!startTerminal)
2196
2540
  this.logger.debug(`PowerTransformer2W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
2197
- this.setPowerTransformerEndProperties(cimModel, powerTransformerEnd1, powerTransformer, startTerminal, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig);
2198
- const schaltgruppe = i7Data.schaltgr;
2541
+ this.setPowerTransformerEndProperties(frame, powerTransformerEnd1, powerTransformer, startTerminal, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig);
2542
+ let equivalentInjection = undefined;
2543
+ if (startTerminal) {
2544
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten));
2545
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(startTerminal.getConnectivityNodeUUID());
2546
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2547
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2548
+ let baseVoltage = powerTransformerEnd1.getBaseVoltage();
2549
+ equivalentInjection.baseVoltage = baseVoltage;
2550
+ }
2551
+ }
2199
2552
  const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd(utils_1.getUUID(i7Data.guid_w2), `W2${powerTransformer.name}`);
2200
2553
  powerTransformerEnd2.endNumber = 2;
2201
2554
  const sr2 = utils_2.getSrTrafo(i7Data, powerTransformerInfo, powerTransformerEnd2.endNumber, false);
@@ -2204,16 +2557,24 @@ class ConverterI7 {
2204
2557
  powerTransformerEnd2.x = 0;
2205
2558
  powerTransformerEnd2.ratedS = sr2;
2206
2559
  powerTransformerEnd2.ratedU = ur2;
2207
- const ir2 = (sr * Math.pow(10, 6) / ur * 1000) / Math.sqrt(3);
2208
- const ziel = cimModel.getObject(this.integralID2UUID.get(i7Data.eknoten));
2209
- const zielTerminal = ziel ? this.createConnection(cimModel, powerTransformer, ziel, PhaseCode_1.PhaseCode.ABC, true, 2) : undefined;
2560
+ const ir2 = (sr * Math.pow(10, 6) / ur2 * 1000) / Math.sqrt(3);
2561
+ const zielTerminal = this.createBoundaryConnection(frame, powerTransformer, i7Data.eknoten, PhaseCode_1.PhaseCode.ABC, 2);
2210
2562
  if (!zielTerminal)
2211
2563
  this.logger.debug(`PowerTransformer2W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Zielknoten.`);
2212
- this.setPowerTransformerEndProperties(cimModel, powerTransformerEnd2, powerTransformer, zielTerminal, sternpunktKnotenMap, integral7, ir2, i7Data, defaultValuesConfig);
2213
- powerTransformerEnd1.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU]);
2214
- powerTransformerEnd1.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU]);
2215
- powerTransformerEnd2.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU]);
2216
- powerTransformerEnd2.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU]);
2564
+ this.setPowerTransformerEndProperties(frame, powerTransformerEnd2, powerTransformer, zielTerminal, sternpunktKnotenMap, integral7, ir2, i7Data, defaultValuesConfig);
2565
+ if (zielTerminal) {
2566
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(i7Data.aknoten));
2567
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(zielTerminal.getConnectivityNodeUUID());
2568
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2569
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2570
+ let baseVoltage = powerTransformerEnd2.getBaseVoltage();
2571
+ equivalentInjection.baseVoltage = baseVoltage;
2572
+ }
2573
+ }
2574
+ powerTransformerEnd1.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, powerTransformerEnd1.grounded);
2575
+ powerTransformerEnd1.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber);
2576
+ powerTransformerEnd2.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd2.endNumber, powerTransformerEnd2.grounded);
2577
+ powerTransformerEnd2.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd2.endNumber);
2217
2578
  powerTransformer.sortTransformerEnd('ratedU', 'desc');
2218
2579
  const powerTransformerEnds = [powerTransformerEnd1, powerTransformerEnd2];
2219
2580
  const terminals = [startTerminal, zielTerminal];
@@ -2243,9 +2604,8 @@ class ConverterI7 {
2243
2604
  }
2244
2605
  }
2245
2606
  }
2246
- for (let i = 0; i < powerTransformer.powerTransformerEnds.length; i++) {
2247
- const powerTransformerEnd = powerTransformer.powerTransformerEnds[i];
2248
- powerTransformerEnd.endNumber = i + 1;
2607
+ for (let i = 1; i <= powerTransformer.powerTransformerEnds.length; i++) {
2608
+ powerTransformer.powerTransformerEnds[i - 1].endNumber = i;
2249
2609
  }
2250
2610
  cimModel.addPowerTransformerEnd(powerTransformerEnd1);
2251
2611
  cimModel.addPowerTransformerEnd(powerTransformerEnd2);
@@ -2258,9 +2618,11 @@ class ConverterI7 {
2258
2618
  }
2259
2619
  });
2260
2620
  }
2261
- convertTrafo3W(cimModel, integral7, defaultValuesConfig, standortIDs) {
2621
+ convertTrafo3W(frame, integral7, defaultValuesConfig, standortIDs) {
2622
+ var _a;
2262
2623
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2263
2624
  if (this.isTableAvailable(integral_sql_1.Integral7TableNames.TRAFO3W)) {
2625
+ const cimModel = frame.cimModel;
2264
2626
  const result = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.TRAFO3W, standortIDs));
2265
2627
  const trafoIDs = result.map(obj => obj['id']);
2266
2628
  const trafoWicklungen = new Map();
@@ -2276,10 +2638,13 @@ class ConverterI7 {
2276
2638
  this.logger.debug(`Tabelle ${integral_sql_1.Integral7TableNames.TRAFO3_WICKLUNG} ist nicht vorhanden.`);
2277
2639
  }
2278
2640
  const sternpunktKnotenMap = new Map();
2279
- if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN) && trafoWicklungIDs.length) {
2280
- const sternpunktKnotenResult = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, trafoWicklungIDs));
2641
+ for (const elem of trafoIDs) {
2642
+ sternpunktKnotenMap.set(elem, new Map());
2643
+ }
2644
+ if (this.isTableAvailable(integral_sql_1.Integral7TableNames.STERNPUNKT_KNOTEN) && trafoIDs.length) {
2645
+ const sternpunktKnotenResult = yield this.mysqlController.execQuery(integral_sql_1.getI7Query(integral_sql_1.I7Objects.STERNPUNKT_KNOTEN, trafoIDs));
2281
2646
  for (const spKnoten of sternpunktKnotenResult) {
2282
- sternpunktKnotenMap.set(spKnoten.netzobjekt, spKnoten);
2647
+ (_a = sternpunktKnotenMap.get(spKnoten.netzobjekt)) === null || _a === void 0 ? void 0 : _a.set(spKnoten.id, spKnoten);
2283
2648
  }
2284
2649
  }
2285
2650
  for (const i7Data of result) {
@@ -2292,6 +2657,13 @@ class ConverterI7 {
2292
2657
  this.logger.debug(`Trafo3W ${i7Data.id} besitzt keine Umspannanlage.`);
2293
2658
  }
2294
2659
  const powerTransformerInfo = this.cimModelDefault.getPowerTransformerInfoByName(i7Data.nametyp);
2660
+ const schaltgruppe = i7Data.schaltgr;
2661
+ if (this.blocktransformatoren.includes(utils_2.convertToNumberI7(i7Data.id))) {
2662
+ powerTransformer.isPartOfGeneratorUnit = true;
2663
+ }
2664
+ else {
2665
+ powerTransformer.isPartOfGeneratorUnit = false;
2666
+ }
2295
2667
  const pkr12 = utils_2.getPkrTrafo(i7Data, powerTransformerInfo, '12');
2296
2668
  const pkr13 = utils_2.getPkrTrafo(i7Data, powerTransformerInfo, '13');
2297
2669
  const pkr23 = utils_2.getPkrTrafo(i7Data, powerTransformerInfo, '23');
@@ -2304,100 +2676,91 @@ class ConverterI7 {
2304
2676
  const ur1 = utils_2.getUrTrafo(i7Data, powerTransformerInfo, 1);
2305
2677
  const ur2 = utils_2.getUrTrafo(i7Data, powerTransformerInfo, 2);
2306
2678
  const ur3 = utils_2.getUrTrafo(i7Data, powerTransformerInfo, 3);
2307
- const ir1 = sr1 * 1000000 / ((ur1 * 1000) * Math.sqrt(3));
2308
- const ir2 = sr2 * 1000000 / ((ur2 * 1000) * Math.sqrt(3));
2309
- const ir3 = sr3 * 1000000 / ((ur3 * 1000) * Math.sqrt(3));
2679
+ const ir1 = sr1 * Math.pow(10, 6) / ((ur1 * Math.pow(10, 3)) * Math.sqrt(3));
2680
+ const ir2 = sr2 * Math.pow(10, 6) / ((ur2 * Math.pow(10, 3)) * Math.sqrt(3));
2681
+ const ir3 = sr3 * Math.pow(10, 6) / ((ur3 * Math.pow(10, 3)) * Math.sqrt(3));
2310
2682
  const pLeer = utils_2.getTrafoPleer(i7Data, powerTransformerInfo);
2311
2683
  const iLeer = utils_2.getTrafoIleer(i7Data, powerTransformerInfo);
2312
2684
  const impedanzW1 = utils_trafo3w_1.calculateImpedanzenTrafo3W(1, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, pLeer, iLeer);
2313
- const impedanzW2 = utils_trafo3w_1.calculateImpedanzenTrafo3W(2, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, pLeer, iLeer);
2314
- const impedanzW3 = utils_trafo3w_1.calculateImpedanzenTrafo3W(3, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, pLeer, iLeer);
2315
- const schaltgruppe = i7Data.schaltgr;
2685
+ const impedanzW2 = utils_trafo3w_1.calculateImpedanzenTrafo3W(2, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, 0, 0);
2686
+ const impedanzW3 = utils_trafo3w_1.calculateImpedanzenTrafo3W(3, ur1, ur2, ur3, sr1, sr2, sr3, pkr12, pkr13, pkr23, ukr12, ukr13, ukr23, 0, 0);
2316
2687
  const powerTransformerEnd1 = new PowerTransformerEnd_1.PowerTransformerEnd(utils_1.getUUID(i7Data.guid_w1), `W1 ${powerTransformer.name}`);
2317
2688
  powerTransformerEnd1.endNumber = 1;
2318
2689
  const wicklung1 = trafoWicklungen.get(i7Data.trafowicklung3w1);
2319
- const knotenUUID = this.integralID2UUID.get(wicklung1.aknoten);
2320
- const start = cimModel.getObject(knotenUUID);
2321
- const terminal1 = start ? this.createConnection(cimModel, powerTransformer, start, PhaseCode_1.PhaseCode.ABC, true, 1) : undefined;
2690
+ const terminal1 = this.createBoundaryConnection(frame, powerTransformer, wicklung1.aknoten, PhaseCode_1.PhaseCode.ABC, 1);
2322
2691
  if (!terminal1)
2323
2692
  this.logger.debug(`PowerTransformer3W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
2324
2693
  powerTransformerEnd1.r = impedanzW1.r;
2325
2694
  powerTransformerEnd1.x = impedanzW1.x;
2326
- powerTransformerEnd1.g = impedanzW1.g * 1000000;
2327
- powerTransformerEnd1.b = impedanzW1.b * 1000000;
2695
+ powerTransformerEnd1.g = impedanzW1.g;
2696
+ powerTransformerEnd1.b = impedanzW1.b;
2328
2697
  powerTransformerEnd1.ratedU = ur1;
2329
2698
  powerTransformerEnd1.ratedS = sr1;
2330
- this.setBaseVoltagePowerTransformerEnd(cimModel, powerTransformerEnd1);
2331
- powerTransformerEnd1.powerTransformer = powerTransformer;
2332
- powerTransformer.addPowerTransformerEnd(powerTransformerEnd1);
2699
+ this.setPowerTransformerEndProperties(frame, powerTransformerEnd1, powerTransformer, terminal1, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig);
2700
+ let equivalentInjection = undefined;
2333
2701
  if (terminal1) {
2334
- powerTransformerEnd1.terminal = terminal1;
2335
- this.setConductingEquipmentCurrentLimit(cimModel, 'W1 ' + powerTransformer.name, terminal1, ir1);
2336
- if (sternpunktKnotenMap.has(wicklung1.id)) {
2337
- this.convertTrafoGrounding(cimModel, powerTransformer, powerTransformerEnd1, integral7, sternpunktKnotenMap.get(wicklung1.id), defaultValuesConfig);
2702
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(wicklung1.aknoten));
2703
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(terminal1.getConnectivityNodeUUID());
2704
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2705
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2706
+ let baseVoltage = powerTransformerEnd1.getBaseVoltage();
2707
+ equivalentInjection.baseVoltage = baseVoltage;
2338
2708
  }
2339
2709
  }
2340
- else {
2341
- this.logger.debug(`Wicklung3W ${i7Data.id} ${powerTransformerEnd1.endNumber} ${powerTransformerEnd1.mrid} besitzt keine Terminalinstanz.`);
2342
- }
2710
+ powerTransformerEnd1.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, powerTransformerEnd1.grounded);
2711
+ powerTransformerEnd1.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber);
2343
2712
  const wicklung2 = trafoWicklungen.get(i7Data.trafowicklung3w2);
2344
- const start2 = cimModel.getObject(this.integralID2UUID.get(wicklung2.aknoten));
2345
- const terminal2 = start ? this.createConnection(cimModel, powerTransformer, start2, PhaseCode_1.PhaseCode.ABC, true, 2) : undefined;
2713
+ const terminal2 = this.createBoundaryConnection(frame, powerTransformer, wicklung2.aknoten, PhaseCode_1.PhaseCode.ABC, 2);
2346
2714
  if (!terminal2)
2347
2715
  this.logger.debug(`PowerTransformer3W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
2348
2716
  const powerTransformerEnd2 = new PowerTransformerEnd_1.PowerTransformerEnd(utils_1.getUUID(i7Data.guid_w2), `W2 ${powerTransformer.name}`);
2349
2717
  powerTransformerEnd2.endNumber = 2;
2350
2718
  powerTransformerEnd2.r = impedanzW2.r;
2351
2719
  powerTransformerEnd2.x = impedanzW2.x;
2352
- powerTransformerEnd2.g = impedanzW2.g * 1000000;
2353
- powerTransformerEnd2.b = impedanzW2.b * 1000000;
2720
+ powerTransformerEnd2.g = impedanzW2.g;
2721
+ powerTransformerEnd2.b = impedanzW2.b;
2354
2722
  powerTransformerEnd2.ratedS = sr2;
2355
2723
  powerTransformerEnd2.ratedU = ur2;
2356
- this.setBaseVoltagePowerTransformerEnd(cimModel, powerTransformerEnd2);
2357
2724
  powerTransformerEnd2.powerTransformer = powerTransformer;
2358
- powerTransformer.addPowerTransformerEnd(powerTransformerEnd2);
2725
+ this.setPowerTransformerEndProperties(frame, powerTransformerEnd2, powerTransformer, terminal2, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig);
2726
+ equivalentInjection = undefined;
2359
2727
  if (terminal2) {
2360
- powerTransformerEnd2.terminal = terminal2;
2361
- this.setConductingEquipmentCurrentLimit(cimModel, 'W1 ' + powerTransformer.name, terminal2, ir2);
2362
- if (sternpunktKnotenMap.has(wicklung2.id)) {
2363
- this.convertTrafoGrounding(cimModel, powerTransformer, powerTransformerEnd2, integral7, sternpunktKnotenMap.get(wicklung2.id), defaultValuesConfig);
2728
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(wicklung2.aknoten));
2729
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(terminal2.getConnectivityNodeUUID());
2730
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2731
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2732
+ let baseVoltage = powerTransformerEnd2.getBaseVoltage();
2733
+ equivalentInjection.baseVoltage = baseVoltage;
2364
2734
  }
2365
2735
  }
2366
- else {
2367
- this.logger.debug(`Wicklung3W ${i7Data.id} ${powerTransformerEnd2.endNumber} ${powerTransformerEnd2.mrid} besitzt keine Terminalinstanz.`);
2368
- }
2736
+ powerTransformerEnd2.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd2.endNumber, powerTransformerEnd2.grounded);
2737
+ powerTransformerEnd2.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd2.endNumber);
2369
2738
  const wicklung3 = trafoWicklungen.get(i7Data.trafowicklung3w3);
2370
- const start3 = cimModel.getObject(this.integralID2UUID.get(wicklung2.aknoten));
2371
- const terminal3 = start ? this.createConnection(cimModel, powerTransformer, start3, PhaseCode_1.PhaseCode.ABC, true, 3) : undefined;
2739
+ const terminal3 = this.createBoundaryConnection(frame, powerTransformer, wicklung3.aknoten, PhaseCode_1.PhaseCode.ABC, 3);
2372
2740
  if (!terminal3)
2373
2741
  this.logger.debug(`PowerTransformer3W ${i7Data.id} ${powerTransformer.mrid} besitzt keinen Anfangsknoten.`);
2374
2742
  const powerTransformerEnd3 = new PowerTransformerEnd_1.PowerTransformerEnd(utils_1.getUUID(i7Data.guid_w3), `Wicklung 3 ${powerTransformer.name}`);
2375
2743
  powerTransformerEnd3.endNumber = 3;
2376
2744
  powerTransformerEnd3.r = impedanzW3.r;
2377
2745
  powerTransformerEnd3.x = impedanzW3.x;
2378
- powerTransformerEnd3.g = impedanzW3.g * 1000000;
2379
- powerTransformerEnd3.b = impedanzW3.b * 1000000;
2746
+ powerTransformerEnd3.g = impedanzW3.g;
2747
+ powerTransformerEnd3.b = impedanzW3.b;
2380
2748
  powerTransformerEnd3.ratedS = sr3;
2381
2749
  powerTransformerEnd3.ratedU = ur3;
2382
- this.setBaseVoltagePowerTransformerEnd(cimModel, powerTransformerEnd3);
2383
2750
  powerTransformerEnd3.powerTransformer = powerTransformer;
2384
- powerTransformer.addPowerTransformerEnd(powerTransformerEnd3);
2751
+ this.setPowerTransformerEndProperties(frame, powerTransformerEnd3, powerTransformer, terminal3, sternpunktKnotenMap, integral7, ir1, i7Data, defaultValuesConfig);
2752
+ equivalentInjection = undefined;
2385
2753
  if (terminal3) {
2386
- powerTransformerEnd3.terminal = terminal3;
2387
- this.setConductingEquipmentCurrentLimit(cimModel, 'W1 ' + powerTransformer.name, terminal3, ir3);
2388
- if (sternpunktKnotenMap.has(wicklung3.id)) {
2389
- this.convertTrafoGrounding(cimModel, powerTransformer, powerTransformerEnd3, integral7, sternpunktKnotenMap.get(wicklung3.id), defaultValuesConfig);
2754
+ let bdf = this.getConnectedBoundaryModel(this.integralID2UUID.get(wicklung3.aknoten));
2755
+ let tmp_cn = bdf === null || bdf === void 0 ? void 0 : bdf.cimModel.getConnectivityNode(terminal3.getConnectivityNodeUUID());
2756
+ if (tmp_cn && tmp_cn.boundaryPoint) {
2757
+ equivalentInjection = this.createBoundaryEquivalentInjection(frame, tmp_cn);
2758
+ let baseVoltage = powerTransformerEnd3.getBaseVoltage();
2759
+ equivalentInjection.baseVoltage = baseVoltage;
2390
2760
  }
2391
2761
  }
2392
- else {
2393
- this.logger.debug(`Wicklung3W ${i7Data.id} ${powerTransformerEnd3.endNumber} ${powerTransformerEnd3.mrid} besitzt keine Terminalinstanz.`);
2394
- }
2395
- powerTransformerEnd1.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2396
- powerTransformerEnd1.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2397
- powerTransformerEnd2.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2398
- powerTransformerEnd2.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2399
- powerTransformerEnd3.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2400
- powerTransformerEnd3.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd1.endNumber, [powerTransformerEnd1.ratedU, powerTransformerEnd2.ratedU, powerTransformerEnd3.ratedU]);
2762
+ powerTransformerEnd3.connectionKind = utils_2.getSchaltgruppe(schaltgruppe, powerTransformerEnd3.endNumber, powerTransformerEnd3.grounded);
2763
+ powerTransformerEnd3.phaseAngleClock = utils_2.getSchaltgruppeAngleClock(schaltgruppe, powerTransformerEnd3.endNumber);
2401
2764
  powerTransformer.sortTransformerEnd('ratedU', 'desc');
2402
2765
  const terminals = [terminal1, terminal2, terminal3];
2403
2766
  const powerTransformerEnds = [powerTransformerEnd1, powerTransformerEnd2, powerTransformerEnd3];
@@ -2427,8 +2790,8 @@ class ConverterI7 {
2427
2790
  }
2428
2791
  }
2429
2792
  }
2430
- for (let i = 0; i < powerTransformer.powerTransformerEnds.length; i++) {
2431
- powerTransformer.powerTransformerEnds[i].endNumber = i + 1;
2793
+ for (let i = 1; i <= powerTransformer.powerTransformerEnds.length; i++) {
2794
+ powerTransformer.powerTransformerEnds[i - 1].endNumber = i;
2432
2795
  }
2433
2796
  cimModel.addPowerTransformer(powerTransformer);
2434
2797
  cimModel.addPowerTransformerEnd(powerTransformerEnd1);
@@ -2444,7 +2807,7 @@ class ConverterI7 {
2444
2807
  }
2445
2808
  setTransformerEndInfoProperties(wicklung, data, endNumber) {
2446
2809
  const minstufe = `minstufe_s${endNumber}`;
2447
- const mittelstufe = `mittelstufe_s${endNumber}`;
2810
+ const neutralstufe = `mittelstufe_s${endNumber}`;
2448
2811
  const maxstufe = `maxstufe_s${endNumber}`;
2449
2812
  const umax = `umax_s${endNumber}`;
2450
2813
  const umin = `umin_s${endNumber}`;
@@ -2454,14 +2817,15 @@ class ConverterI7 {
2454
2817
  wicklung.ratedU = new Voltage_1.Voltage(data[ur], UnitMultiplier_1.UnitMultiplier.k, UnitSymbol_1.UnitSymbol.V);
2455
2818
  wicklung.tapActive = utils_2.convertToBooleanI7(data[gestufte_seite]);
2456
2819
  const tapChangerInfo = new TapChangerInfo_1.TapChangerInfo(utils_1.generateUUID(), `TapChangerInfo_${data['id']}`);
2457
- tapChangerInfo.highStep = data[maxstufe];
2458
- tapChangerInfo.lowStep = data[minstufe];
2459
- tapChangerInfo.neutralStep = data[mittelstufe];
2820
+ tapChangerInfo.highStep = utils_2.convertToNumberI7(data[maxstufe]);
2821
+ tapChangerInfo.lowStep = utils_2.convertToNumberI7(data[minstufe]);
2822
+ tapChangerInfo.neutralStep = utils_2.convertToNumberI7(data[neutralstufe]);
2460
2823
  wicklung.uMax = data[umax];
2461
2824
  wicklung.uMin = data[umin];
2462
2825
  }
2463
- transformBoundaryModel(cimModel, defaultValuesConfig) {
2826
+ transformBoundaryModel(frame, masFrame) {
2464
2827
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2828
+ const cimModel = frame.cimModel;
2465
2829
  const substations = Array.from(cimModel.substations.values());
2466
2830
  for (const substation of substations) {
2467
2831
  const line = new Line_1.Line(substation.mrid, substation.name, substation.shortName, substation.description);
@@ -2503,84 +2867,149 @@ class ConverterI7 {
2503
2867
  equipment.equipmentContainer = undefined;
2504
2868
  cimModel.removeObject(equipment);
2505
2869
  }
2870
+ let cnt = 1;
2506
2871
  for (const connectivityNode of connectivityNodes) {
2507
2872
  connectivityNode.connectivityNodeContainer = line;
2508
2873
  line.addConnectivityNode(connectivityNode);
2874
+ const junction = new Junction_1.Junction(utils_1.generateUUID(), `${line.name} BD_Junc`, `Junction`, 'Junction for Geo');
2875
+ junction.equipmentContainer = line;
2876
+ const terminal = new Terminal_1.Terminal(utils_1.generateUUID(), 'boundary_junction_label', 'bd_jct_lab', 'terminal to connect junction to associated boundary ConnectivityNode', 1);
2877
+ terminal.conductingEquipment = junction;
2878
+ terminal.connectivityNode = connectivityNode;
2879
+ junction.terminals.set(terminal.getUUID(), terminal);
2880
+ line.addEquipment(junction);
2881
+ const location = substation.location;
2882
+ if (location) {
2883
+ const clonedLocation = new Location_1.Location(utils_1.generateUUID(), `Location ${cnt}`);
2884
+ clonedLocation.addPowerSystemResource(junction);
2885
+ clonedLocation.coordinateSystem = location.coordinateSystem;
2886
+ const clonedPositionPoint = new PositionPoint_1.PositionPoint(utils_1.generateUUID(), `PositionPoint ${cnt}`);
2887
+ clonedPositionPoint.xPosition = location.positionPoints[0].xPosition;
2888
+ clonedPositionPoint.yPosition = location.positionPoints[0].yPosition;
2889
+ clonedPositionPoint.location = clonedLocation;
2890
+ clonedLocation.addPositionPoint(clonedPositionPoint);
2891
+ masFrame.cimModel.addLocation(clonedLocation);
2892
+ }
2893
+ if (location && location.powerSystemResources.size && location.powerSystemResources.get(substation.mrid) !== undefined) {
2894
+ location.addPowerSystemResource(junction);
2895
+ junction.location = location;
2896
+ masFrame.addDependentModel(rdf_xml_1.RDF_XML.PROFILE_EQ_BD, frame.getModelUUID(rdf_xml_1.RDF_XML.PROFILE_EQ_BD));
2897
+ location.powerSystemResources.delete(substation.mrid);
2898
+ substation.location = undefined;
2899
+ cimModel.locations.delete(location.mrid);
2900
+ cimModel.removeObject(location);
2901
+ for (const positionPoint of location.positionPoints) {
2902
+ const idx = frame.cimModel.positionPoints.indexOf(positionPoint);
2903
+ if (idx > -1) {
2904
+ frame.cimModel.positionPoints.splice(idx, 1);
2905
+ }
2906
+ }
2907
+ masFrame.cimModel.addLocation(location);
2908
+ }
2909
+ else if (location) {
2910
+ const additionalLocation = new Location_1.Location(utils_1.generateUUID(), `Location ${cnt}`);
2911
+ additionalLocation.addPowerSystemResource(junction);
2912
+ additionalLocation.coordinateSystem = location.coordinateSystem;
2913
+ const additionalPositionPoint = new PositionPoint_1.PositionPoint(utils_1.generateUUID(), `PositionPoint ${cnt}`);
2914
+ additionalPositionPoint.xPosition = location.positionPoints[0].xPosition;
2915
+ additionalPositionPoint.yPosition = location.positionPoints[0].yPosition;
2916
+ additionalPositionPoint.location = additionalLocation;
2917
+ additionalLocation.addPositionPoint(additionalPositionPoint);
2918
+ masFrame.cimModel.addLocation(additionalLocation);
2919
+ }
2920
+ cimModel.addJunction(junction);
2921
+ cnt++;
2509
2922
  }
2510
2923
  cimModel.substations.delete(substation.mrid);
2511
2924
  cimModel.removeObject(substation);
2512
- const junction = new Junction_1.Junction(utils_1.generateUUID(), `BD_Junc/`, `Junction`, 'Junction for Geo');
2513
- junction.equipmentContainer = line;
2514
- line.addEquipment(junction);
2515
- const location = substation.location;
2516
- if (!location)
2517
- continue;
2518
- location.powerSystemResources.delete(substation.mrid);
2519
- location.addPowerSystemResource(junction);
2520
- junction.location = location;
2521
- cimModel.addJunction(junction);
2522
2925
  cimModel.addLine(line);
2523
2926
  }
2524
2927
  });
2525
2928
  }
2526
2929
  setACLineSegmentProperties(cimModel, acLineSegment, data, defaultValuesConfig) {
2527
- const assetType = this.cimModelDefault.getWireInfoByName(data.nametyp);
2528
- let voltage = defaultValuesConfig.DefaultVoltage;
2529
- if (!acLineSegment.baseVoltage) {
2530
- if (data.un && data.un > 0) {
2531
- voltage = data.un;
2532
- }
2533
- else if (assetType === null || assetType === void 0 ? void 0 : assetType.voltage) {
2534
- voltage = assetType.voltage;
2535
- }
2536
- const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, voltage);
2537
- acLineSegment.baseVoltage = baseVoltage;
2930
+ if (utils_2.isNumericI7(data.laenge) && data.laenge <= 0) {
2931
+ data.flag_impedanzlos = 1;
2538
2932
  }
2539
- if (data.laenge) {
2933
+ if (utils_2.isNumericI7(data.laenge) && data.laenge > 0 && !data.flag_impedanzlos) {
2540
2934
  acLineSegment.length = data.laenge;
2541
2935
  }
2542
- if (data.r0 && data.r0 !== 0) {
2543
- acLineSegment.r0 = data.laenge <= 0 ? data.r0 : data.r0;
2936
+ else {
2937
+ acLineSegment.length = 1;
2938
+ }
2939
+ const assetType = cimModel.getWireInfoByName(data.nametyp);
2940
+ if (utils_2.isNumericI7(data.r0) && data.r0 > 0 && !data.flag_impedanzlos) {
2941
+ acLineSegment.r0 = data.r0;
2942
+ }
2943
+ else if (assetType && !data.flag_impedanzlos) {
2944
+ acLineSegment.r0 = assetType.r0 * acLineSegment.length;
2544
2945
  }
2545
2946
  else {
2546
- if (assetType) {
2547
- acLineSegment.r0 = assetType.r0 * acLineSegment.length;
2548
- }
2947
+ acLineSegment.r0 = 0;
2549
2948
  }
2550
- if (data.x0 && data.x0 !== 0) {
2551
- acLineSegment.x0 = data.laenge <= 0 ? data.x0 : data.x0;
2949
+ if (utils_2.isNumericI7(data.x0) && data.x0 > 0 && !data.flag_impedanzlos) {
2950
+ acLineSegment.x0 = data.x0;
2951
+ }
2952
+ else if (assetType && !data.flag_impedanzlos) {
2953
+ acLineSegment.x0 = assetType.x0 * acLineSegment.length;
2552
2954
  }
2553
2955
  else {
2554
- if (assetType) {
2555
- acLineSegment.x0 = assetType.x0 * acLineSegment.length;
2556
- }
2956
+ acLineSegment.x0 = 0;
2957
+ }
2958
+ if (utils_2.isNumericI7(data.c0) && data.c0 > 0 && !data.flag_impedanzlos) {
2959
+ acLineSegment.b0ch = utils_2.calculateBC(data.c0, 50);
2557
2960
  }
2558
- if (data.r1 && data.r1 !== 0) {
2559
- acLineSegment.r = data.laenge <= 0 ? data.r1 : data.r1;
2961
+ else if (assetType && !data.flag_impedanzlos) {
2962
+ acLineSegment.b0ch = utils_2.calculateBC(assetType.c0, 50) * data.laenge;
2560
2963
  }
2561
2964
  else {
2562
- if (assetType) {
2563
- acLineSegment.r = assetType.r1 * data.laenge;
2564
- }
2965
+ acLineSegment.b0ch = 0;
2966
+ }
2967
+ if (utils_2.isNumericI7(data.c0) && data.c0 > 0 && !data.flag_impedanzlos) {
2968
+ acLineSegment.g0ch = utils_2.calculateG0ch(data.r0);
2565
2969
  }
2566
- if (data.x1 && data.x1 !== 0) {
2567
- acLineSegment.x = data.laenge <= 0 ? data.x1 : data.x1;
2970
+ else if (assetType && !data.flag_impedanzlos) {
2971
+ acLineSegment.g0ch = utils_2.calculateG0ch(assetType.r0) * data.laenge;
2568
2972
  }
2569
2973
  else {
2570
- if (assetType) {
2571
- acLineSegment.x = assetType.x1 * data.laenge;
2572
- }
2974
+ acLineSegment.g0ch = 0;
2975
+ }
2976
+ if (utils_2.isNumericI7(data.r1) && data.r1 > 0 && !data.flag_impedanzlos) {
2977
+ acLineSegment.r = data.r1;
2978
+ }
2979
+ else if (assetType && !data.flag_impedanzlos) {
2980
+ acLineSegment.r = assetType.r1 * data.laenge;
2981
+ }
2982
+ else {
2983
+ acLineSegment.r = 0;
2984
+ }
2985
+ if (utils_2.isNumericI7(data.x1) && data.x1 > 0 && !data.flag_impedanzlos) {
2986
+ acLineSegment.x = data.x1;
2987
+ }
2988
+ else if (assetType && !data.flag_impedanzlos) {
2989
+ acLineSegment.x = assetType.x1 * data.laenge;
2990
+ }
2991
+ else {
2992
+ acLineSegment.x = 0;
2993
+ }
2994
+ if (utils_2.isNumericI7(data.c1) && data.c1 > 0 && !data.flag_impedanzlos) {
2995
+ acLineSegment.bch = utils_2.calculateBC(data.c1, 50);
2573
2996
  }
2574
- for (const terminal of acLineSegment.terminals.values()) {
2575
- if (data.ir && data.ir !== 0) {
2576
- this.setConductingEquipmentCurrentLimit(cimModel, acLineSegment.name, terminal, data.ir);
2997
+ else if (assetType && !data.flag_impedanzlos) {
2998
+ acLineSegment.bch = utils_2.calculateBC(assetType.c1, 50) * data.laenge;
2999
+ }
3000
+ else {
3001
+ acLineSegment.bch = 0;
3002
+ }
3003
+ for (const terminalUUID of acLineSegment.terminalsUUIDs) {
3004
+ if (utils_2.isNumericI7(data.ir) && data.ir > 0) {
3005
+ this.setConductingEquipmentCurrentLimit(cimModel, acLineSegment.name, cimModel.terminals.get(terminalUUID), data.ir);
2577
3006
  }
2578
3007
  else if (assetType && assetType.ratedCurrent && assetType.ratedCurrent !== 0) {
2579
- this.setConductingEquipmentCurrentLimit(cimModel, acLineSegment.name, terminal, assetType.ratedCurrent);
3008
+ this.setConductingEquipmentCurrentLimit(cimModel, acLineSegment.name, cimModel.terminals.get(terminalUUID), assetType.ratedCurrent);
2580
3009
  }
3010
+ const psrType = utils_1.createIfNotExitsPSRType(cimModel, data.typ);
3011
+ acLineSegment.psrTypeUUID = psrType.mrid;
2581
3012
  }
2582
- const psrType = utils_1.createIfNotExitsPSRType(cimModel, data.typ);
2583
- acLineSegment.psrTypeUUID = psrType.mrid;
2584
3013
  }
2585
3014
  setConductingEquipmentCurrentLimit(cimModel, name, terminal, ir) {
2586
3015
  const currentLimit = new CurrentLimit_1.CurrentLimit(utils_1.generateUUID(), `${name}`);
@@ -2629,7 +3058,7 @@ class ConverterI7 {
2629
3058
  if (object instanceof ConnectivityNode_1.ConnectivityNode) {
2630
3059
  const cn = object;
2631
3060
  terminal = new Terminal_1.Terminal(utils_1.generateUUID(), 'T');
2632
- terminal.connectivityNode = cn;
3061
+ terminal.setConnectivityNode(cn);
2633
3062
  cn.addTerminal(terminal);
2634
3063
  cimModel.addTerminal(terminal);
2635
3064
  }
@@ -2645,37 +3074,137 @@ class ConverterI7 {
2645
3074
  }
2646
3075
  return terminal;
2647
3076
  }
3077
+ createBoundaryConnection(frame, conductingEquipment, i7ObjectID, phase, sequenceNumber) {
3078
+ const cimModel = frame.cimModel;
3079
+ const anschlussUUID = this.integralID2UUID.get(i7ObjectID);
3080
+ let terminal;
3081
+ if (cimModel.objects.has(anschlussUUID)) {
3082
+ terminal = this.createConnection(cimModel, conductingEquipment, cimModel.getObject(anschlussUUID), phase, true, sequenceNumber);
3083
+ }
3084
+ else {
3085
+ const frameBD = this.getConnectedBoundaryModel(anschlussUUID);
3086
+ if (frameBD) {
3087
+ const cimModelBD = frameBD.cimModel;
3088
+ const object = cimModelBD.getObject(anschlussUUID);
3089
+ let cn;
3090
+ if (object instanceof ConnectivityNode_1.ConnectivityNode) {
3091
+ cn = object;
3092
+ terminal = new Terminal_1.Terminal(utils_1.generateUUID(), 'T');
3093
+ terminal.connectivityNodeUUID = cn.mrid;
3094
+ terminal.phases = phase;
3095
+ terminal.connected = true;
3096
+ terminal.sequenceNumber = sequenceNumber ? sequenceNumber : 1;
3097
+ cimModel.addTerminal(terminal);
3098
+ }
3099
+ else if (object instanceof Terminal_1.Terminal) {
3100
+ terminal = object;
3101
+ cn = terminal.connectivityNode;
3102
+ cn === null || cn === void 0 ? void 0 : cn.terminals.delete(terminal.mrid);
3103
+ terminal.setConnectivityNode(undefined);
3104
+ terminal.setConnectivityNodeUUID(cn.getUUID());
3105
+ cimModelBD.terminals.delete(terminal.mrid);
3106
+ cimModel.addTerminal(terminal);
3107
+ }
3108
+ if (cn) {
3109
+ this.annotateBoundaryNode(frame.name, frame.isoCode, frame.tsoName, cn);
3110
+ }
3111
+ else {
3112
+ this.logger.error(`Für das Objekt ${conductingEquipment.constructor.name} ${conductingEquipment.getUUID()} konnte am I7-Objekt ${i7ObjectID} kein Grenz ConnenctivityNode bestimmt werden`);
3113
+ }
3114
+ if (terminal) {
3115
+ terminal.conductingEquipment = conductingEquipment;
3116
+ conductingEquipment.addTerminal(terminal);
3117
+ }
3118
+ }
3119
+ else {
3120
+ this.logger.error(`Für das Objekt ${conductingEquipment.constructor.name} ${conductingEquipment.getUUID()} konnte am I7-Objekt ${i7ObjectID} kein Grenzknoten bestimmt werden`);
3121
+ }
3122
+ }
3123
+ return terminal;
3124
+ }
3125
+ getConnectedBoundaryModel(anschlussUUID) {
3126
+ for (const frame of this.exportFramesBoundary.values()) {
3127
+ if (frame.cimModel.objects.has(anschlussUUID)) {
3128
+ return frame;
3129
+ }
3130
+ }
3131
+ return undefined;
3132
+ }
3133
+ createBoundaryEquivalentInjection(frame, cn) {
3134
+ let equivinj_exists = false;
3135
+ let equivalentInjection = undefined;
3136
+ frame.cimModel.equivalentInjections.forEach((equivinj, uuid) => {
3137
+ var _a;
3138
+ if (equivinj.name.match(frame.tsoName).length > 0 && ((_a = equivinj.terminals.values()) === null || _a === void 0 ? void 0 : _a.next().value.getConnectivityNodeUUID()) === cn.getUUID()) {
3139
+ equivinj_exists = true;
3140
+ }
3141
+ });
3142
+ if (!equivinj_exists) {
3143
+ let tmp_terminal = new Terminal_1.Terminal(utils_1.generateUUID(), 'T');
3144
+ tmp_terminal.setConnectivityNodeUUID(cn.mrid);
3145
+ tmp_terminal.phases = PhaseCode_1.PhaseCode.ABC;
3146
+ tmp_terminal.connected = true;
3147
+ tmp_terminal.sequenceNumber = 1;
3148
+ equivalentInjection = new EquivalentInjection_1.EquivalentInjection(utils_1.generateUUID(), `BDInj_${frame.tsoName}`);
3149
+ equivalentInjection.p = 0;
3150
+ equivalentInjection.q = 0;
3151
+ equivalentInjection.regulationStatus = false;
3152
+ equivalentInjection.addTerminal(tmp_terminal);
3153
+ tmp_terminal.setConductingEquipment(equivalentInjection);
3154
+ cn.addTerminal(tmp_terminal);
3155
+ frame.cimModel.addEquivalentInjection(equivalentInjection);
3156
+ if (tmp_terminal.getConductingEquipmentUUID() !== undefined) {
3157
+ frame.cimModel.addTerminal(tmp_terminal);
3158
+ }
3159
+ else {
3160
+ let stop = true;
3161
+ }
3162
+ }
3163
+ return equivalentInjection;
3164
+ }
2648
3165
  determineEquipmentContainer(equipmentContainerType, cimModel, equipmentContainer) {
3166
+ let ret_val;
2649
3167
  switch (equipmentContainerType) {
2650
3168
  case ('Bay'): {
2651
- return equipmentContainer;
3169
+ if (equipmentContainer instanceof Bay_1.Bay) {
3170
+ ret_val = equipmentContainer;
3171
+ }
3172
+ else {
3173
+ ret_val = undefined;
3174
+ }
3175
+ break;
2652
3176
  }
2653
3177
  case ('VoltageLevel'): {
2654
3178
  if (equipmentContainer instanceof Bay_1.Bay) {
2655
- return equipmentContainer.getVoltageLevel();
3179
+ ret_val = equipmentContainer.getVoltageLevel();
3180
+ }
3181
+ else if (equipmentContainer instanceof VoltageLevel_1.VoltageLevel) {
3182
+ ret_val = equipmentContainer;
2656
3183
  }
2657
- return equipmentContainer;
3184
+ else {
3185
+ ret_val = undefined;
3186
+ }
3187
+ break;
2658
3188
  }
2659
3189
  case ('Substation'): {
2660
3190
  if (equipmentContainer instanceof Bay_1.Bay) {
2661
3191
  const voltageLevel = equipmentContainer.getVoltageLevel();
2662
- return voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.substation;
3192
+ const subst_uuid = voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.getSubstationUUID();
3193
+ ret_val = cimModel.getObject(subst_uuid);
2663
3194
  }
2664
3195
  else if (equipmentContainer instanceof VoltageLevel_1.VoltageLevel) {
2665
- return equipmentContainer.getSubstation();
3196
+ ret_val = cimModel.getObject(equipmentContainer.getSubstationUUID());
2666
3197
  }
2667
3198
  else {
2668
- return equipmentContainer;
3199
+ ret_val = equipmentContainer;
2669
3200
  }
3201
+ break;
2670
3202
  }
2671
3203
  default: {
2672
- return equipmentContainer;
3204
+ ret_val = undefined;
2673
3205
  }
2674
3206
  }
2675
- if (equipmentContainer instanceof Bay_1.Bay) {
2676
- return cimModel.getObject(equipmentContainer.voltageLevelUUID);
2677
- }
2678
- return equipmentContainer;
3207
+ return ret_val;
2679
3208
  }
2680
3209
  getSpannungsbandTrafo2W(i7Data) {
2681
3210
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
@@ -2766,6 +3295,83 @@ class ConverterI7 {
2766
3295
  resolve(status);
2767
3296
  }));
2768
3297
  }
3298
+ configExportFrames(exportConfig, defaultValuesConfig, tempDirPath) {
3299
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
3300
+ const geoRegions = yield this.convertGeoRegionen();
3301
+ const allSubGeoRegions = yield this.convertSubGeoRegionen(geoRegions, defaultValuesConfig);
3302
+ const boundaryExports = exportConfig.filter(elem => elem.boundary === true);
3303
+ const gridExports = exportConfig.filter(elem => elem.boundary === false);
3304
+ const boundaryFrames = this.initExportFrames(boundaryExports, geoRegions, allSubGeoRegions);
3305
+ for (const frame of boundaryFrames) {
3306
+ this.addDefaultObjectsLoadModel(frame.cimModel, defaultValuesConfig);
3307
+ this.addDefaultObjectsGeo(frame.cimModel, defaultValuesConfig);
3308
+ frame.initProfileXmlSerializers([rdf_xml_1.RDF_XML.PROFILE_GL, rdf_xml_1.RDF_XML.PROFILE_EQ_BD], tempDirPath);
3309
+ }
3310
+ this.exportFramesBoundary = this.associateGeoRegionsToExportFrames(boundaryFrames);
3311
+ const gridFrames = this.initExportFrames(gridExports, geoRegions, allSubGeoRegions);
3312
+ for (const frame of gridFrames) {
3313
+ this.addDefaultObjectsLoadModel(frame.cimModel, defaultValuesConfig);
3314
+ this.addDefaultObjectsGeo(frame.cimModel, defaultValuesConfig);
3315
+ frame.initProfileXmlSerializers([rdf_xml_1.RDF_XML.PROFILE_EQ, rdf_xml_1.RDF_XML.PROFILE_SSH, rdf_xml_1.RDF_XML.PROFILE_GL, rdf_xml_1.RDF_XML.PROFILE_AMPI7, rdf_xml_1.RDF_XML.PROFILE_DY], tempDirPath);
3316
+ }
3317
+ this.exportFrames = this.associateGeoRegionsToExportFrames(gridFrames);
3318
+ });
3319
+ }
3320
+ initExportFrames(exportConfig, geoRegions, subGeoRegions) {
3321
+ const frames = [];
3322
+ for (const exportEntry of exportConfig) {
3323
+ const exportFrame = new export_frame_i7_1.I7ExportFrame(exportEntry.name);
3324
+ exportFrame.tsoName = exportEntry.tsoName;
3325
+ exportFrame.isoCode = exportEntry.isoCode;
3326
+ exportFrame.boundary = exportEntry.boundary;
3327
+ for (const exportObject of exportEntry.objects) {
3328
+ switch (exportEntry.objectType) {
3329
+ case data_structures_i7_1.ExportObjectType.georegion: {
3330
+ const geoRegion = geoRegions.find(elem => elem.name === exportObject.name);
3331
+ if (!geoRegion) {
3332
+ this.logger.error(`Kein ${exportEntry.objectType} mit dem Namen ${exportObject.name} gefunden.`);
3333
+ continue;
3334
+ }
3335
+ exportFrame.cimModel.addGeographicalRegion(geoRegion);
3336
+ for (const subGeoRegion of geoRegion.regions) {
3337
+ exportFrame.cimModel.addSubGeographicalRegion(subGeoRegion);
3338
+ }
3339
+ break;
3340
+ }
3341
+ case data_structures_i7_1.ExportObjectType.subgeoregion: {
3342
+ const subGeoRegion = subGeoRegions.find(elem => elem.name === exportObject.name);
3343
+ if (!subGeoRegion) {
3344
+ this.logger.error(`Kein ${exportEntry.objectType} mit dem Namen ${exportObject.name} gefunden.`);
3345
+ continue;
3346
+ }
3347
+ const geoRegionNew = util_create_1.createGeoregion(utils_1.generateUUID(), exportObject.name, exportObject.name, 'Default GeographicalRegion');
3348
+ subGeoRegion.region.removeSubGeographicalRegion(subGeoRegion);
3349
+ geoRegionNew.addSubGeographicalRegion(subGeoRegion);
3350
+ subGeoRegion.region = geoRegionNew;
3351
+ exportFrame.cimModel.addGeographicalRegion(geoRegionNew);
3352
+ exportFrame.cimModel.addSubGeographicalRegion(subGeoRegion);
3353
+ break;
3354
+ }
3355
+ }
3356
+ }
3357
+ if (exportFrame.cimModel.subgeographicalRegions.size > 0) {
3358
+ frames.push(exportFrame);
3359
+ }
3360
+ else {
3361
+ this.logger.error(`Kein Export für ${exportEntry.name} möglich, da keine I7 ${exportEntry.objectType}-Objekte für ${exportEntry.objects.map(elem => elem.name).join(', ')} gefunden werden konnten`);
3362
+ }
3363
+ }
3364
+ return frames;
3365
+ }
3366
+ associateGeoRegionsToExportFrames(frames) {
3367
+ const exportFrames = new Map();
3368
+ for (const frame of frames) {
3369
+ for (const geoRegion of frame.cimModel.geographicalRegions.values()) {
3370
+ exportFrames.set(geoRegion.getUUID(), frame);
3371
+ }
3372
+ }
3373
+ return exportFrames;
3374
+ }
2769
3375
  queryDataInChuncks(objectName, ids) {
2770
3376
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
2771
3377
  const limit = 500;
@@ -2865,31 +3471,46 @@ class ConverterI7 {
2865
3471
  coordinateSystem.crsUrn = crsUrn;
2866
3472
  cimModel.addCoordinateSystem(coordinateSystem);
2867
3473
  }
2868
- setPowerTransformerEndProperties(cimModel, powerTransformerEnd, powerTransformer, terminal, sternpunktKnotenMap, integral7, ir, i7Data, defaultValuesConfig) {
3474
+ setPowerTransformerEndProperties(frame, powerTransformerEnd, powerTransformer, terminal, sternpunktKnotenMap, integral7, ir, i7Data, defaultValuesConfig, windings) {
3475
+ const cimModel = frame.cimModel;
2869
3476
  if (terminal) {
2870
3477
  powerTransformerEnd.terminal = terminal;
2871
3478
  this.setConductingEquipmentCurrentLimit(cimModel, 'W1 ' + powerTransformer.name, terminal, ir);
2872
- if (sternpunktKnotenMap.has(i7Data.id)) {
3479
+ if (sternpunktKnotenMap.has(i7Data.id) && i7Data) {
2873
3480
  if (sternpunktKnotenMap.get(i7Data.id).has(i7Data.aknknoten1p)) {
2874
- this.convertTrafoGrounding(cimModel, powerTransformer, powerTransformerEnd, integral7, sternpunktKnotenMap.get(i7Data.id).get(i7Data.aknknoten1p), defaultValuesConfig);
3481
+ this.convertTrafoGrounding(frame, powerTransformer, powerTransformerEnd, integral7, sternpunktKnotenMap.get(i7Data.id).get(i7Data.aknknoten1p), defaultValuesConfig);
3482
+ }
3483
+ }
3484
+ else if (sternpunktKnotenMap.has(i7Data.id) && i7Data) {
3485
+ let winding = undefined;
3486
+ if (powerTransformerEnd.endNumber === 1) {
3487
+ winding = windings.get(i7Data.trafowicklung3w1);
3488
+ }
3489
+ else if (powerTransformerEnd.endNumber === 2) {
3490
+ winding = windings.get(i7Data.trafowicklung3w2);
3491
+ }
3492
+ else if (powerTransformerEnd.endNumber === 3) {
3493
+ winding = windings.get(i7Data.trafowicklung3w3);
3494
+ }
3495
+ if (sternpunktKnotenMap.get(i7Data.id).has(winding)) {
3496
+ this.convertTrafoGrounding(frame, powerTransformer, powerTransformerEnd, integral7, sternpunktKnotenMap.get(i7Data.id).get(winding.id), defaultValuesConfig);
2875
3497
  }
2876
3498
  }
3499
+ else {
3500
+ this.logger.debug(`Transformator ${i7Data.id} ${powerTransformer.mrid} hat eine unerwartete Wicklungszahl.`);
3501
+ }
2877
3502
  }
2878
3503
  else {
2879
3504
  this.logger.debug(`Wicklung2W ${i7Data.id} ${powerTransformerEnd.endNumber} ${powerTransformerEnd.mrid} keine Terminalinstanz.`);
2880
3505
  }
2881
- this.setBaseVoltagePowerTransformerEnd(cimModel, powerTransformerEnd);
2882
- powerTransformerEnd.powerTransformer = powerTransformer;
2883
- powerTransformer.addPowerTransformerEnd(powerTransformerEnd);
2884
- }
2885
- setBaseVoltagePowerTransformerEnd(cimModel, powerTransformerEnd) {
2886
3506
  if (powerTransformerEnd.ratedU) {
2887
- const baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, powerTransformerEnd.ratedU);
2888
- powerTransformerEnd.baseVoltage = baseVoltage;
3507
+ powerTransformerEnd.baseVoltage = util_create_1.createBaseVoltageIfNotExists(cimModel, powerTransformerEnd.ratedU, this.exportFramesBoundary);
2889
3508
  }
2890
3509
  else {
2891
3510
  this.logger.debug(`Wicklung ${powerTransformerEnd.mrid} Nr. ${powerTransformerEnd.endNumber} keine Spannungsangabe.`);
2892
3511
  }
3512
+ powerTransformerEnd.powerTransformer = powerTransformer;
3513
+ powerTransformer.addPowerTransformerEnd(powerTransformerEnd);
2893
3514
  }
2894
3515
  createPhaseTapChanger(i7Data, transformerEnd, cimModel, neutralU, connectivityNode, spannungsband) {
2895
3516
  var _a, _b;
@@ -2914,11 +3535,11 @@ class ConverterI7 {
2914
3535
  }
2915
3536
  }
2916
3537
  phaseTapChanger.ltcFlag = false;
2917
- phaseTapChanger.lowStep = i7Data[`minstufe_s${transformerEnd.endNumber}`];
2918
- phaseTapChanger.highStep = i7Data[`maxstufe_s${transformerEnd.endNumber}`];
2919
- phaseTapChanger.neutralStep = i7Data[`mittelstufe_s${transformerEnd.endNumber}`];
2920
- phaseTapChanger.normalStep = phaseTapChanger.neutralStep;
2921
- phaseTapChanger.step = i7Data[`aktstufe_s${transformerEnd.endNumber}`];
3538
+ phaseTapChanger.lowStep = utils_2.convertToNumberI7(i7Data[`minstufe_s${transformerEnd.endNumber}`]);
3539
+ phaseTapChanger.highStep = utils_2.convertToNumberI7(i7Data[`maxstufe_s${transformerEnd.endNumber}`]);
3540
+ phaseTapChanger.neutralStep = utils_2.convertToNumberI7(i7Data[`mittelstufe_s${transformerEnd.endNumber}`]);
3541
+ phaseTapChanger.normalStep = utils_2.convertToNumberI7(phaseTapChanger.neutralStep);
3542
+ phaseTapChanger.step = utils_2.convertToNumberI7(i7Data[`aktstufe_s${transformerEnd.endNumber}`]);
2922
3543
  phaseTapChanger.neutralU = neutralU;
2923
3544
  transformerEnd.phaseTapChanger = phaseTapChanger;
2924
3545
  phaseTapChanger.transformerEndUUID = transformerEnd.mrid;
@@ -2988,38 +3609,54 @@ class ConverterI7 {
2988
3609
  tapChanger.tapChangerControl.terminal = terminal;
2989
3610
  }
2990
3611
  }
2991
- convertTrafoGrounding(cimModel, powerTransformer, powerTransformerEnd, i7Modell, stpKnoten, defaultValuesConfig) {
2992
- var _a, _b;
3612
+ convertTrafoGrounding(frame, powerTransformer, powerTransformerEnd, i7Modell, stpKnoten, defaultValuesConfig) {
3613
+ var _a, _b, _c, _d, _e, _f;
3614
+ const cimModel = frame.cimModel;
2993
3615
  if (stpKnoten) {
2994
3616
  const junctionUUID = i7Modell.sternPunktImpModel.stpSchieneJunctionUUIDs.get(stpKnoten.schaltelement1pelem);
2995
3617
  const junction = i7Modell.sternPunktImpModel.junctions.get(junctionUUID);
2996
3618
  powerTransformerEnd.grounded = true;
2997
3619
  powerTransformerEnd.rground = defaultValuesConfig.TransformerEnd.rground;
2998
3620
  if (!junctionUUID) {
3621
+ powerTransformerEnd.xground = defaultValuesConfig.TransformerEnd.xground;
2999
3622
  }
3000
3623
  else {
3001
- const terminal = this.createConnection(cimModel, junction, (_a = powerTransformerEnd.terminal) === null || _a === void 0 ? void 0 : _a.connectivityNode, PhaseCode_1.PhaseCode.ABC, true, 1);
3002
- terminal.name = 't_stp_trafo';
3003
- if (junction)
3004
- junction.name = (junction === null || junction === void 0 ? void 0 : junction.name) + '/Trafo';
3005
- const pSpuleGroundImpedance = i7Modell.sternPunktImpModel.junctionUUIDstpImp.get(junctionUUID);
3006
- const voltageLevel = this.getVoltageLevelByVoltage((_b = powerTransformer.equipmentContainer) === null || _b === void 0 ? void 0 : _b.voltageLevels, powerTransformerEnd.ratedU);
3007
- if (!voltageLevel) {
3008
- this.logger.debug(`Trafo ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat kein EquipmentContainer`);
3009
- }
3010
- if (junction && voltageLevel) {
3011
- junction.baseVoltage = (voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage) ? voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage : powerTransformerEnd.baseVoltage;
3012
- junction.equipmentContainer = voltageLevel;
3624
+ let terminal;
3625
+ if (!((_a = powerTransformerEnd.terminal) === null || _a === void 0 ? void 0 : _a.connectivityNode) && this.UUID2Integral7ID.has((_b = powerTransformerEnd.terminal) === null || _b === void 0 ? void 0 : _b.connectivityNodeUUID)) {
3626
+ const i7ObjectID = (_d = this.UUID2Integral7ID.get((_c = powerTransformerEnd.terminal) === null || _c === void 0 ? void 0 : _c.connectivityNodeUUID)) === null || _d === void 0 ? void 0 : _d.find(elem => elem);
3627
+ terminal = this.createBoundaryConnection(frame, junction, i7ObjectID, PhaseCode_1.PhaseCode.ABC, 1);
3013
3628
  }
3014
3629
  else {
3015
- this.logger.debug(`TrafoObjektID ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat keine Junction ${junctionUUID} oder VoltageLevel`);
3016
- }
3017
- if (pSpuleGroundImpedance) {
3018
- pSpuleGroundImpedance.baseVoltage = (voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage) ? voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage : powerTransformerEnd.baseVoltage;
3019
- pSpuleGroundImpedance.equipmentContainer = voltageLevel;
3630
+ terminal = this.createConnection(cimModel, junction, (_e = powerTransformerEnd.terminal) === null || _e === void 0 ? void 0 : _e.connectivityNode, PhaseCode_1.PhaseCode.ABC, true, 1);
3631
+ }
3632
+ if (terminal) {
3633
+ terminal.name = 't_stp_trafo';
3634
+ if (junction)
3635
+ junction.name = (junction === null || junction === void 0 ? void 0 : junction.name) + '/Trafo';
3636
+ const pSpuleGroundImpedance = i7Modell.sternPunktImpModel.junctionUUIDstpImp.get(junctionUUID);
3637
+ const voltageLevel = this.getVoltageLevelByVoltage((_f = powerTransformer.equipmentContainer) === null || _f === void 0 ? void 0 : _f.voltageLevels, powerTransformerEnd.ratedU);
3638
+ if (!voltageLevel) {
3639
+ this.logger.debug(`Trafo ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat kein EquipmentContainer`);
3640
+ }
3641
+ if (junction && voltageLevel) {
3642
+ junction.baseVoltage = (voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage) ? voltageLevel.baseVoltage : powerTransformerEnd.baseVoltage;
3643
+ junction.equipmentContainer = voltageLevel;
3644
+ cimModel.addJunction(junction);
3645
+ }
3646
+ else {
3647
+ this.logger.debug(`TrafoObjektID ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat keine Junction ${junctionUUID} oder VoltageLevel`);
3648
+ }
3649
+ if (pSpuleGroundImpedance) {
3650
+ pSpuleGroundImpedance.baseVoltage = (voltageLevel === null || voltageLevel === void 0 ? void 0 : voltageLevel.baseVoltage) ? voltageLevel.baseVoltage : powerTransformerEnd.baseVoltage;
3651
+ pSpuleGroundImpedance.equipmentContainer = voltageLevel;
3652
+ cimModel.addGroundingImpedance(pSpuleGroundImpedance);
3653
+ }
3654
+ else {
3655
+ this.logger.debug(`TrafoObjektID ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat keine pSpuleGroundImpedance.`);
3656
+ }
3020
3657
  }
3021
3658
  else {
3022
- this.logger.debug(`TrafoObjektID ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} hat keine pSpuleGroundImpedance`);
3659
+ this.logger.error(`Die Erdnung TrafoObjekts ID ${powerTransformer === null || powerTransformer === void 0 ? void 0 : powerTransformer.mrid} konnte nicht abgebildet werden, da der Anschluss nicht bestimmt werden konnte.`);
3023
3660
  }
3024
3661
  }
3025
3662
  }
@@ -3158,6 +3795,55 @@ class ConverterI7 {
3158
3795
  this.UUID2Integral7ID.set(uuid, [i7ID]);
3159
3796
  }
3160
3797
  }
3798
+ annotateBoundaryNode(name, isoCode, tsoName, connectivityNode) {
3799
+ if (connectivityNode.fromEndName === undefined) {
3800
+ connectivityNode.boundaryPoint = true;
3801
+ connectivityNode.fromEndName = name;
3802
+ connectivityNode.fromEndIsoCode = isoCode;
3803
+ connectivityNode.fromEndNameTso = tsoName;
3804
+ }
3805
+ else if (connectivityNode.toEndName === undefined) {
3806
+ connectivityNode.boundaryPoint = true;
3807
+ connectivityNode.toEndName = name;
3808
+ connectivityNode.toEndIsoCode = isoCode;
3809
+ connectivityNode.toEndNameTso = tsoName;
3810
+ }
3811
+ else {
3812
+ this.logger.error(`Grenzknoten ${connectivityNode.name} mit der UUID ${connectivityNode.mrid} ist bereits belegt:
3813
+ fromEndName ${connectivityNode.fromEndName}
3814
+ fromEndIsoCode ${connectivityNode.fromEndIsoCode}
3815
+ fromEndNameTso ${connectivityNode.fromEndNameTso}
3816
+ toEndName ${connectivityNode.toEndName}
3817
+ toEndIsoCode ${connectivityNode.toEndIsoCode}
3818
+ toEndNameTso ${connectivityNode.toEndNameTso}
3819
+ name ${name}
3820
+ isoCode ${isoCode}
3821
+ tsoName ${tsoName}`);
3822
+ }
3823
+ }
3824
+ release(tempDirPath) {
3825
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
3826
+ return new Promise((resolve, reject) => tslib_1.__awaiter(this, void 0, void 0, function* () {
3827
+ try {
3828
+ this.mysqlController.closeConnection();
3829
+ this.cimModelDefault.purgeData();
3830
+ if (tempDirPath) {
3831
+ try {
3832
+ fs_1.default.rmdirSync(tempDirPath, { recursive: true });
3833
+ this.logger.debug(`${path_1.default} is deleted!`);
3834
+ }
3835
+ catch (err) {
3836
+ console.error(`Error while deleting ${path_1.default}.`);
3837
+ }
3838
+ }
3839
+ resolve({ status: 'successful', message: 'ok' });
3840
+ }
3841
+ catch (e) {
3842
+ reject({ status: 'error', message: JSON.stringify(e) });
3843
+ }
3844
+ }));
3845
+ });
3846
+ }
3161
3847
  }
3162
3848
  exports.ConverterI7 = ConverterI7;
3163
3849
  function getDCNodeFromConverter(acDcConverter) {