@enervance/insight-cim-model 0.0.1 → 0.0.3

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 (262) hide show
  1. package/dist/config/westnetz-neplan/neplan-load.config.js +0 -1
  2. package/dist/config/westnetz-neplan/neplan-load.config.js.map +1 -1
  3. package/dist/constants/cim-class-definition.js +6 -0
  4. package/dist/constants/cim-class-definition.js.map +1 -1
  5. package/dist/constants/cim-class-names.d.ts +6 -0
  6. package/dist/constants/cim-class-names.js +6 -0
  7. package/dist/constants/cim-class-names.js.map +1 -1
  8. package/dist/converter/integral7/ConverterIntegral7.d.ts +17 -4
  9. package/dist/converter/integral7/ConverterIntegral7.js +530 -39
  10. package/dist/converter/integral7/ConverterIntegral7.js.map +1 -1
  11. package/dist/converter/integral7/config/db-config.d.ts +3 -1
  12. package/dist/converter/integral7/model/integral/Hgueleitung.d.ts +9 -0
  13. package/dist/converter/integral7/model/integral/Hgueleitung.js +3 -0
  14. package/dist/converter/integral7/model/integral/Hgueleitung.js.map +1 -0
  15. package/dist/converter/integral7/model/integral/Kopfstation.d.ts +31 -0
  16. package/dist/converter/integral7/model/integral/Kopfstation.js +3 -0
  17. package/dist/converter/integral7/model/integral/Kopfstation.js.map +1 -0
  18. package/dist/converter/integral7/model/interfaces.d.ts +8 -0
  19. package/dist/converter/integral7/sql/integral.sql.d.ts +8 -0
  20. package/dist/converter/integral7/sql/integral.sql.js +22 -1
  21. package/dist/converter/integral7/sql/integral.sql.js.map +1 -1
  22. package/dist/converter/integral7/utils.d.ts +4 -1
  23. package/dist/converter/integral7/utils.js +26 -8
  24. package/dist/converter/integral7/utils.js.map +1 -1
  25. package/dist/etl-neplan/etl-neplan-contingency-analysis.js +22 -7
  26. package/dist/etl-neplan/etl-neplan-contingency-analysis.js.map +1 -1
  27. package/dist/etl-neplan/etl-neplan-feederline.d.ts +3 -1
  28. package/dist/etl-neplan/etl-neplan-feederline.js +73 -15
  29. package/dist/etl-neplan/etl-neplan-feederline.js.map +1 -1
  30. package/dist/etl-neplan/etl-neplan.js.map +1 -1
  31. package/dist/etl-neplan/neplan-contingency-analysis.d.ts +14 -0
  32. package/dist/etl-neplan/neplan-contingency-analysis.js +337 -0
  33. package/dist/etl-neplan/neplan-contingency-analysis.js.map +1 -0
  34. package/dist/graph/Types.d.ts +5 -0
  35. package/dist/graph/Types.js +10 -0
  36. package/dist/graph/Types.js.map +1 -0
  37. package/dist/graph/connections/connection.d.ts +11 -0
  38. package/dist/graph/connections/connection.js +17 -0
  39. package/dist/graph/connections/connection.js.map +1 -0
  40. package/dist/graph/edges/edge.d.ts +8 -0
  41. package/dist/graph/edges/edge.js +16 -0
  42. package/dist/graph/edges/edge.js.map +1 -0
  43. package/dist/graph/graph-interfaces.d.ts +15 -0
  44. package/dist/graph/graph-interfaces.js +3 -0
  45. package/dist/graph/graph-interfaces.js.map +1 -0
  46. package/dist/graph/graph-util.d.ts +13 -0
  47. package/dist/graph/graph-util.js +114 -0
  48. package/dist/graph/graph-util.js.map +1 -0
  49. package/dist/graph/graph.d.ts +15 -0
  50. package/dist/graph/graph.js +75 -0
  51. package/dist/graph/graph.js.map +1 -0
  52. package/dist/graph/nodes/node.d.ts +14 -0
  53. package/dist/graph/nodes/node.js +28 -0
  54. package/dist/graph/nodes/node.js.map +1 -0
  55. package/dist/index.d.ts +6 -0
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/model/core/ACDCTerminal.js +2 -2
  59. package/dist/model/core/ACDCTerminal.js.map +1 -1
  60. package/dist/model/core/ConnectivityNode.js +3 -2
  61. package/dist/model/core/ConnectivityNode.js.map +1 -1
  62. package/dist/model/core/PSRType.d.ts +0 -1
  63. package/dist/model/core/PSRType.js +3 -6
  64. package/dist/model/core/PSRType.js.map +1 -1
  65. package/dist/model/core/PowerSystemResource.js +3 -8
  66. package/dist/model/core/PowerSystemResource.js.map +1 -1
  67. package/dist/model/core/Substation.d.ts +3 -0
  68. package/dist/model/core/Substation.js +4 -0
  69. package/dist/model/core/Substation.js.map +1 -1
  70. package/dist/model/core/Terminal.d.ts +2 -0
  71. package/dist/model/core/Terminal.js +2 -2
  72. package/dist/model/core/Terminal.js.map +1 -1
  73. package/dist/model/core/VoltageLevel.js +0 -1
  74. package/dist/model/core/VoltageLevel.js.map +1 -1
  75. package/dist/model/dc/ACDCConverter.d.ts +23 -0
  76. package/dist/model/dc/ACDCConverter.js +33 -0
  77. package/dist/model/dc/ACDCConverter.js.map +1 -0
  78. package/dist/model/dc/ACDCConverterDCTerminal.d.ts +13 -0
  79. package/dist/model/dc/ACDCConverterDCTerminal.js +54 -0
  80. package/dist/model/dc/ACDCConverterDCTerminal.js.map +1 -0
  81. package/dist/model/dc/CsConverter.d.ts +21 -0
  82. package/dist/model/dc/CsConverter.js +43 -0
  83. package/dist/model/dc/CsConverter.js.map +1 -0
  84. package/dist/model/dc/CsOperatingModeKind.d.ts +4 -0
  85. package/dist/model/dc/CsOperatingModeKind.js +9 -0
  86. package/dist/model/dc/CsOperatingModeKind.js.map +1 -0
  87. package/dist/model/dc/CsPpccControlKind.d.ts +5 -0
  88. package/dist/model/dc/CsPpccControlKind.js +10 -0
  89. package/dist/model/dc/CsPpccControlKind.js.map +1 -0
  90. package/dist/model/dc/DCBaseTerminal.d.ts +8 -0
  91. package/dist/model/dc/DCBaseTerminal.js +30 -0
  92. package/dist/model/dc/DCBaseTerminal.js.map +1 -0
  93. package/dist/model/dc/DCConductingEquipment.d.ts +5 -0
  94. package/dist/model/dc/DCConductingEquipment.js +12 -0
  95. package/dist/model/dc/DCConductingEquipment.js.map +1 -0
  96. package/dist/model/dc/DCConverterOperatingModeKind.d.ts +5 -0
  97. package/dist/model/dc/DCConverterOperatingModeKind.js +10 -0
  98. package/dist/model/dc/DCConverterOperatingModeKind.js.map +1 -0
  99. package/dist/model/dc/DCConverterUnit.d.ts +14 -0
  100. package/dist/model/dc/DCConverterUnit.js +54 -0
  101. package/dist/model/dc/DCConverterUnit.js.map +1 -0
  102. package/dist/model/dc/DCEquipmentContainer.d.ts +5 -0
  103. package/dist/model/dc/DCEquipmentContainer.js +12 -0
  104. package/dist/model/dc/DCEquipmentContainer.js.map +1 -0
  105. package/dist/model/dc/DCLine.d.ts +11 -0
  106. package/dist/model/dc/DCLine.js +48 -0
  107. package/dist/model/dc/DCLine.js.map +1 -0
  108. package/dist/model/dc/DCLineSegment.d.ts +13 -0
  109. package/dist/model/dc/DCLineSegment.js +69 -0
  110. package/dist/model/dc/DCLineSegment.js.map +1 -0
  111. package/dist/model/dc/DCNode.d.ts +12 -0
  112. package/dist/model/dc/DCNode.js +41 -0
  113. package/dist/model/dc/DCNode.js.map +1 -0
  114. package/dist/model/dc/DCPolarityKind.d.ts +5 -0
  115. package/dist/model/dc/DCPolarityKind.js +10 -0
  116. package/dist/model/dc/DCPolarityKind.js.map +1 -0
  117. package/dist/model/dc/DCTerminal.d.ts +10 -0
  118. package/dist/model/dc/DCTerminal.js +38 -0
  119. package/dist/model/dc/DCTerminal.js.map +1 -0
  120. package/dist/model/dc/VsConverter.d.ts +18 -0
  121. package/dist/model/dc/VsConverter.js +33 -0
  122. package/dist/model/dc/VsConverter.js.map +1 -0
  123. package/dist/model/dc/VsPpccControlKind.d.ts +7 -0
  124. package/dist/model/dc/VsPpccControlKind.js +12 -0
  125. package/dist/model/dc/VsPpccControlKind.js.map +1 -0
  126. package/dist/model/dc/VsQpccControlKind.d.ts +5 -0
  127. package/dist/model/dc/VsQpccControlKind.js +10 -0
  128. package/dist/model/dc/VsQpccControlKind.js.map +1 -0
  129. package/dist/model/domain/UnitMultiplier.js.map +1 -1
  130. package/dist/model/extensions/amprion/model/AmprionModell.d.ts +25 -0
  131. package/dist/model/extensions/amprion/model/AmprionModell.js +64 -0
  132. package/dist/model/extensions/amprion/model/AmprionModell.js.map +1 -0
  133. package/dist/model/extensions/amprion/project/AMPRIONConstructionProject.d.ts +34 -0
  134. package/dist/model/extensions/amprion/project/AMPRIONConstructionProject.js +134 -0
  135. package/dist/model/extensions/amprion/project/AMPRIONConstructionProject.js.map +1 -0
  136. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectBundle.d.ts +17 -0
  137. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectBundle.js +77 -0
  138. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectBundle.js.map +1 -0
  139. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectPlan.d.ts +14 -0
  140. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectPlan.js +57 -0
  141. package/dist/model/extensions/amprion/project/AMPRIONConstructionProjectPlan.js.map +1 -0
  142. package/dist/model/extensions/amprion/project/AMPRIONErpProject.d.ts +7 -0
  143. package/dist/model/extensions/amprion/project/AMPRIONErpProject.js +17 -0
  144. package/dist/model/extensions/amprion/project/AMPRIONErpProject.js.map +1 -0
  145. package/dist/model/extensions/amprion/project/AMPRIONErpProjectPhase.d.ts +19 -0
  146. package/dist/model/extensions/amprion/project/AMPRIONErpProjectPhase.js +74 -0
  147. package/dist/model/extensions/amprion/project/AMPRIONErpProjectPhase.js.map +1 -0
  148. package/dist/model/extensions/amprion/project/AMPRIONErpProjectStructure.d.ts +15 -0
  149. package/dist/model/extensions/amprion/project/AMPRIONErpProjectStructure.js +26 -0
  150. package/dist/model/extensions/amprion/project/AMPRIONErpProjectStructure.js.map +1 -0
  151. package/dist/model/extensions/amprion/project/AMPRIONProjectPriorityKind.d.ts +5 -0
  152. package/dist/model/extensions/amprion/project/AMPRIONProjectPriorityKind.js +10 -0
  153. package/dist/model/extensions/amprion/project/AMPRIONProjectPriorityKind.js.map +1 -0
  154. package/dist/model/extensions/amprion/wires/AMPRIONSeriesCompensator.d.ts +9 -0
  155. package/dist/model/extensions/amprion/wires/AMPRIONSeriesCompensator.js +46 -0
  156. package/dist/model/extensions/amprion/wires/AMPRIONSeriesCompensator.js.map +1 -0
  157. package/dist/model/extensions/enervance/operations/EVTerminalAction.js.map +1 -1
  158. package/dist/model/extensions/neplan-westnetz/assets/WNFacility.js.map +1 -1
  159. package/dist/model/generation/WindGeneratingUnit.d.ts +5 -0
  160. package/dist/model/generation/WindGeneratingUnit.js +66 -0
  161. package/dist/model/generation/WindGeneratingUnit.js.map +1 -1
  162. package/dist/model/model/Model.d.ts +39 -1
  163. package/dist/model/model/Model.js +91 -1
  164. package/dist/model/model/Model.js.map +1 -1
  165. package/dist/model/wires/ACLineSegment.d.ts +1 -0
  166. package/dist/model/wires/ACLineSegment.js +15 -2
  167. package/dist/model/wires/ACLineSegment.js.map +1 -1
  168. package/dist/model/wires/AsynchronousMachine.d.ts +1 -0
  169. package/dist/model/wires/AsynchronousMachine.js +37 -1
  170. package/dist/model/wires/AsynchronousMachine.js.map +1 -1
  171. package/dist/model/wires/Disconnector.js +1 -1
  172. package/dist/model/wires/EnergySource.d.ts +2 -0
  173. package/dist/model/wires/EnergySource.js +28 -2
  174. package/dist/model/wires/EnergySource.js.map +1 -1
  175. package/dist/model/wires/SeriesCompensator.d.ts +18 -2
  176. package/dist/model/wires/SeriesCompensator.js +108 -5
  177. package/dist/model/wires/SeriesCompensator.js.map +1 -1
  178. package/dist/util/util-create.js.map +1 -1
  179. package/dist/util/util-topology.d.ts +2 -2
  180. package/dist/util/util-topology.js +14 -6
  181. package/dist/util/util-topology.js.map +1 -1
  182. package/package.json +1 -1
  183. package/src/config/westnetz-neplan/neplan-load.config.ts +1 -1
  184. package/src/constants/cim-class-definition.ts +20 -1
  185. package/src/constants/cim-class-names.ts +9 -0
  186. package/src/converter/integral7/ConverterIntegral7.ts +753 -345
  187. package/src/converter/integral7/config/db-config.ts +3 -2
  188. package/src/converter/integral7/model/integral/Hgueleitung.ts +12 -0
  189. package/src/converter/integral7/model/integral/Kopfstation.ts +46 -0
  190. package/src/converter/integral7/model/interfaces.ts +23 -16
  191. package/src/converter/integral7/sql/integral.sql.ts +27 -1
  192. package/src/converter/integral7/utils.ts +43 -11
  193. package/src/etl-neplan/etl-neplan-contingency-analysis.ts +30 -12
  194. package/src/etl-neplan/etl-neplan-feederline.ts +100 -17
  195. package/src/etl-neplan/etl-neplan.ts +1 -0
  196. package/src/etl-neplan/neplan-contingency-analysis.ts +572 -0
  197. package/src/graph/Types.ts +7 -0
  198. package/src/graph/connections/connection.ts +29 -0
  199. package/src/graph/edges/edge.ts +27 -0
  200. package/src/graph/graph-interfaces.ts +21 -0
  201. package/src/graph/graph-util.ts +158 -0
  202. package/src/graph/graph.ts +84 -0
  203. package/src/graph/nodes/node.ts +43 -0
  204. package/src/index.ts +8 -0
  205. package/src/model/core/ACDCTerminal.ts +2 -2
  206. package/src/model/core/ConnectivityNode.ts +2 -2
  207. package/src/model/core/PSRType.ts +3 -6
  208. package/src/model/core/PowerSystemResource.ts +3 -7
  209. package/src/model/core/Substation.ts +6 -0
  210. package/src/model/core/Terminal.ts +15 -6
  211. package/src/model/core/VoltageLevel.ts +0 -1
  212. package/src/model/dc/ACDCConverter.ts +66 -0
  213. package/src/model/dc/ACDCConverterDCTerminal.ts +64 -0
  214. package/src/model/dc/CsConverter.ts +68 -0
  215. package/src/model/dc/CsOperatingModeKind.ts +4 -0
  216. package/src/model/dc/CsPpccControlKind.ts +5 -0
  217. package/src/model/dc/DCBaseTerminal.ts +30 -0
  218. package/src/model/dc/DCConductingEquipment.ts +8 -0
  219. package/src/model/dc/DCConverterOperatingModeKind.ts +6 -0
  220. package/src/model/dc/DCConverterUnit.ts +60 -0
  221. package/src/model/dc/DCEquipmentContainer.ts +8 -0
  222. package/src/model/dc/DCLine.ts +56 -0
  223. package/src/model/dc/DCLineSegment.ts +81 -0
  224. package/src/model/dc/DCNode.ts +49 -0
  225. package/src/model/dc/DCPolarityKind.ts +5 -0
  226. package/src/model/dc/DCTerminal.ts +45 -0
  227. package/src/model/dc/VsConverter.ts +48 -0
  228. package/src/model/dc/VsPpccControlKind.ts +7 -0
  229. package/src/model/dc/VsQpccControlKind.ts +5 -0
  230. package/src/model/domain/UnitMultiplier.ts +12 -12
  231. package/src/model/equivalents/EquivalentBranch.ts +10 -10
  232. package/src/model/extensions/amprion/model/AmprionModell.ts +92 -0
  233. package/src/model/extensions/amprion/project/AMPRIONConstructionProject.ts +174 -0
  234. package/src/model/extensions/amprion/project/AMPRIONConstructionProjectBundle.ts +89 -0
  235. package/src/model/extensions/amprion/project/AMPRIONConstructionProjectPlan.ts +64 -0
  236. package/src/model/extensions/amprion/project/AMPRIONErpProject.ts +21 -0
  237. package/src/model/extensions/amprion/project/AMPRIONErpProjectPhase.ts +89 -0
  238. package/src/model/extensions/amprion/project/AMPRIONErpProjectStructure.ts +36 -0
  239. package/src/model/extensions/amprion/project/AMPRIONProjectPriorityKind.ts +5 -0
  240. package/src/model/extensions/amprion/wires/AMPRIONSeriesCompensator.ts +53 -0
  241. package/src/model/extensions/enervance/core/EVTerminal.ts +1 -1
  242. package/src/model/extensions/enervance/operations/EVTerminalAction.ts +0 -1
  243. package/src/model/extensions/neplan-westnetz/assets/WNFacility.ts +0 -1
  244. package/src/model/generation/WindGeneratingUnit.ts +73 -0
  245. package/src/model/model/Model.ts +131 -7
  246. package/src/model/wires/ACLineSegment.ts +244 -228
  247. package/src/model/wires/AsynchronousMachine.ts +38 -1
  248. package/src/model/wires/Disconnector.ts +1 -1
  249. package/src/model/wires/EnergySource.ts +256 -222
  250. package/src/model/wires/SeriesCompensator.ts +145 -19
  251. package/src/util/util-create.ts +2 -0
  252. package/src/util/util-topology.ts +18 -7
  253. package/test/apache-jena-fuseki-interface/{apache-jena-fuseki-neplan.tests.spec.ts → apache-jena-fuseki-neplan-1.tests.sp-ec.ts} +0 -26
  254. package/test/apache-jena-fuseki-interface/apache-jena-fuseki-neplan-2.tests.spec.ts +255 -0
  255. package/test/apache-jena-fuseki-interface/data/xml/finnentrop/Finnentrop_Rootnet_Area 1_EQ_V1.xml +20867 -0
  256. package/test/apache-jena-fuseki-interface/data/xml/finnentrop/Finnentrop_Rootnet_Area 1_SSH_V1.xml +3784 -0
  257. package/test/apache-jena-fuseki-interface/data/xml/ruhrau-katharina/Ruhrau_Katharina_Rootnet_Area 1_EQ_V1.xml +42546 -0
  258. package/test/apache-jena-fuseki-interface/data/xml/ruhrau-katharina/Ruhrau_Katharina_Rootnet_Area 1_SSH_V1.xml +10101 -0
  259. package/test/apache-jena-fuseki-interface/data/xml/ruhrau-katharina/Ruhrau_Katharina_Rootnet_Area 1_SV_V1.xml +6229 -0
  260. package/test/integral7-converter/integral7-converter.tests.spec.ts +12 -3
  261. package/test/power-system-data-model-converter/power-system-data-model-converter.tests.spec.ts +1 -1
  262. package/test/apache-jena-fuseki-interface/data/apache-jena-fuseki-3.12.0/run/system/tdb.lock +0 -1
@@ -8,5 +8,6 @@
8
8
  }
9
9
  export interface Status {
10
10
  status: 'successful' | 'error';
11
- message: any;
12
- }
11
+ message: string;
12
+ data?: NodeJS.ReadableStream;
13
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseClass } from '../interfaces';
2
+
3
+
4
+ export interface Hgueleitung extends BaseClass {
5
+ anetzobjekt: number;
6
+ enetzobjekt: number;
7
+ bipol: number;
8
+ rdc: number;
9
+ pr: number;
10
+ ur: number;
11
+
12
+ }
@@ -0,0 +1,46 @@
1
+ import { BaseClass } from '../interfaces';
2
+
3
+ export interface Kopfstation extends BaseClass {
4
+ anschluss: number;
5
+ betrieb: number;
6
+
7
+ u_geregelt: number;
8
+ p_geregelt: number;
9
+ grad_geregelt: number;
10
+
11
+ alpha: number;
12
+ gamma: number;
13
+ rix: number;
14
+
15
+ kr: number;
16
+ kr_dc: number;
17
+
18
+ ranking_dc: number;
19
+ ranking_nr: number;
20
+
21
+
22
+ winkel_1: number;
23
+ winkel_2: number;
24
+
25
+ nachbar_ng: number;
26
+
27
+ pr: number;
28
+ ur: number;
29
+
30
+ pges: number;
31
+ uges: number;
32
+
33
+ udc: number;
34
+
35
+ p_min: number;
36
+ p_max: number;
37
+ q_min: number;
38
+ q_max: number;
39
+ p_leer: number;
40
+ pkr: number;
41
+
42
+ pgrad: number;
43
+ usoll: number;
44
+
45
+
46
+ }
@@ -37,32 +37,32 @@ export interface Standort extends BaseClass {
37
37
 
38
38
  }
39
39
 
40
- export interface Anlage extends BaseClass{
40
+ export interface Anlage extends BaseClass {
41
41
  standort: number,
42
42
  un: number;
43
43
  }
44
44
 
45
45
 
46
- export interface AnlagenAbschnitt extends BaseClass{
46
+ export interface AnlagenAbschnitt extends BaseClass {
47
47
  schaltanlage: number,
48
48
  pos: number;
49
49
  }
50
50
 
51
- export interface Abzweig extends BaseClass{
51
+ export interface Abzweig extends BaseClass {
52
52
  standort: number,
53
53
  un: number;
54
54
  netzgruppe: number;
55
55
  id_psse_cape: number;
56
56
  }
57
57
 
58
- export interface Schaltfeld extends BaseClass{
58
+ export interface Schaltfeld extends BaseClass {
59
59
  seltyp: number,
60
60
  saabschnitt: number;
61
61
  feldnummer: number;
62
62
  ips_folder_id: string;
63
63
  }
64
64
 
65
- export interface NsgSchaltfeld extends SchemaObject{
65
+ export interface NsgSchaltfeld extends SchemaObject {
66
66
  deltaausrichtung: number,
67
67
  hoehe: number;
68
68
  nsgsaa: number,
@@ -71,9 +71,7 @@ export interface NsgSchaltfeld extends SchemaObject{
71
71
  }
72
72
 
73
73
 
74
-
75
-
76
- export interface SchaltfeldKnoten extends BaseClass{
74
+ export interface SchaltfeldKnoten extends BaseClass {
77
75
  schaltfeld: number,
78
76
 
79
77
  }
@@ -121,7 +119,7 @@ export interface NsgLeitungsPunkt extends SchemaObject {
121
119
  abstand_rel_anchor_m: number;
122
120
  }
123
121
 
124
- export interface Stk extends BaseClass{
122
+ export interface Stk extends BaseClass {
125
123
  leitung: number;
126
124
  laenge: number;
127
125
  un: number;
@@ -136,6 +134,15 @@ export interface Stk extends BaseClass{
136
134
  tend: number;
137
135
  }
138
136
 
137
+ export interface Ldrossel extends BaseClass, Connection {
138
+ standort: number,
139
+ ur: number;
140
+ ir: number;
141
+ ukr: number;
142
+ pkr: number;
143
+ id_psse_cape: number;
144
+ }
145
+
139
146
  export interface StkTyp {
140
147
  id: number;
141
148
  name: string
@@ -234,8 +241,8 @@ export interface Wicklung {
234
241
  guid_w3: string,
235
242
 
236
243
 
237
-
238
244
  }
245
+
239
246
  export interface Trafo2w extends BaseClass, Connection, Wicklung {
240
247
  standort: number;
241
248
  name: string;
@@ -245,8 +252,6 @@ export interface Trafo2w extends BaseClass, Connection, Wicklung {
245
252
  }
246
253
 
247
254
 
248
-
249
-
250
255
  export interface Trafo3w extends BaseClass, Connection, Wicklung {
251
256
  standort: number;
252
257
  name: string;
@@ -311,6 +316,7 @@ export interface Belastung extends BaseClass {
311
316
  flag_ind: number;
312
317
  multfaktor: number;
313
318
  }
319
+
314
320
  export interface Einspeisung extends Belastung {
315
321
  einspprio: number;
316
322
  kr: number;
@@ -412,6 +418,7 @@ export interface NsgSAAB extends SchemaObject {
412
418
  saabschnitt: number;
413
419
  nsgsa: number;
414
420
  }
421
+
415
422
  export interface NsgLeitung extends SchemaObject {
416
423
  leitung: number;
417
424
  anschlussanf: number;
@@ -435,9 +442,9 @@ export interface NsgLeitungsPunkt extends SchemaObject {
435
442
  }
436
443
 
437
444
  export interface Impedanz {
438
- r: number;
439
- x: number;
440
- g: number;
441
- b: number;
445
+ r: number;
446
+ x: number;
447
+ g: number;
448
+ b: number;
442
449
  }
443
450
 
@@ -21,6 +21,7 @@ export class Integral7TableNames {
21
21
  public static ERSATZLAENGSZWEIG = "netz_ersatzlaengszweig";
22
22
  public static TRAFO2W = "netz_trafo2w";
23
23
  public static TRAFO3W = "netz_trafo3w";
24
+ public static LAENGSDROSSEL = "netz_ldrossel";
24
25
  public static TRAFO3_WICKLUNG = "netz_trafowicklung3w";
25
26
  public static TRAFO3W_KNOTEN = "netz_knotent3w";
26
27
 
@@ -37,6 +38,9 @@ export class Integral7TableNames {
37
38
  public static ASYNCHRONMOTOR = "netz_asynchronmotor";
38
39
  public static BOUNDARYINJECTION = "netz_boundaryinjection";
39
40
 
41
+ public static HGUE_LEITUNG = "netz_hgueleitung";
42
+ public static HGUE_KOPFSTATION_KLASSISCH = "netz_hguekopfklassisch";
43
+ public static HGUE_KOPFSTATION_VSC = "netz_hguekopfvsc";
40
44
  public static TYP_FREILEITUNG = "typen_freileitungabschnitt";
41
45
  public static TYP_KABEL = "typen_kabelabschnitt";
42
46
  public static TYP_DROSSEL = "typen_kdrossel";
@@ -86,6 +90,7 @@ export class I7Objects {
86
90
  public static ERSATZLAENGSZWEIG = "ERSATZLAENGSZWEIG";
87
91
  public static TRAFO2W = "TRAFO2W";
88
92
  public static TRAFO3W = "TRAFO3W";
93
+ public static LAENGSDROSSEL = "LAENGSDROSSEL";
89
94
  public static TRAFO3_WICKLUNG = "TRAFO3_WICKLUNG";
90
95
  public static TRAFO3W_KNOTEN = "TRAFO3W_KNOTEN";
91
96
 
@@ -102,6 +107,10 @@ export class I7Objects {
102
107
  public static ASYNCHRONMOTOR = "ASYNCHRONMOTOR";
103
108
  public static BOUNDARYINJECTION = "BOUNDARYINJECTION";
104
109
 
110
+ public static HGUE_LEITUNG = "HGUE_LEITUNG";
111
+ public static HGUE_KOPFSTATION_KLASSISCH = "HGUE_KOPFSTATION_KLASSISCH";
112
+ public static HGUE_KOPFSTATION_VSC = "HGUE_KOPFSTATION_VSC";
113
+
105
114
  public static TYP_FREILEITUNG = "TYP_FREILEITUNG";
106
115
  public static TYP_KABEL = "TYP_KABEL";
107
116
  public static TYP_DROSSEL = "TYP_DROSSEL";
@@ -201,9 +210,26 @@ export function getNetzQuery(objectName: I7Objects, limit: number, offset: numbe
201
210
  case I7Objects.KABEL: {
202
211
  return `SELECT * FROM ${Integral7TableNames[I7Objects.KABEL]} WHERE ${getWhereIDs('leitung', whereIDs).join(' OR ')};`;
203
212
  }
213
+ case I7Objects.LAENGSDROSSEL: {
214
+ console.log(`SELECT * FROM ${Integral7TableNames[I7Objects.LAENGSDROSSEL]} LIMIT ${limit} OFFSET ${offset};`);
215
+ return `SELECT * FROM ${Integral7TableNames[I7Objects.LAENGSDROSSEL]} LIMIT ${limit} OFFSET ${offset};`;
216
+ }
204
217
  case I7Objects.ERSATZLAENGSZWEIG: {
205
218
  return `SELECT * FROM ${Integral7TableNames[I7Objects.ERSATZLAENGSZWEIG]} LIMIT ${limit} OFFSET ${offset};`;
206
219
  }
220
+
221
+ case I7Objects.HGUE_LEITUNG: {
222
+ return `SELECT * FROM ${Integral7TableNames[I7Objects.HGUE_LEITUNG]} LIMIT ${limit} OFFSET ${offset};`;
223
+ }
224
+
225
+ case I7Objects.HGUE_KOPFSTATION_KLASSISCH: {
226
+ return `SELECT * FROM ${Integral7TableNames[I7Objects.HGUE_KOPFSTATION_KLASSISCH]} WHERE ${getWhereIDs('anschluss', whereIDs).join(' OR ')};`;
227
+ }
228
+
229
+ case I7Objects.HGUE_KOPFSTATION_VSC: {
230
+ return `SELECT * FROM ${Integral7TableNames[I7Objects.HGUE_KOPFSTATION_VSC]} WHERE ${getWhereIDs('anschluss', whereIDs).join(' OR ')};`;
231
+ }
232
+
207
233
  case I7Objects.TRAFO2W: {
208
234
  // return `SELECT * FROM ${Integral7TableNames[I7Objects.TRAFO2W]} WHERE ${getWhereIDs('standort', whereIDs).join(' OR ')};`;
209
235
  return `SELECT * FROM ${Integral7TableNames[I7Objects.TRAFO2W]} LIMIT ${limit} OFFSET ${offset};`;
@@ -262,7 +288,7 @@ export function getNetzQuery(objectName: I7Objects, limit: number, offset: numbe
262
288
  return `SELECT * FROM ${Integral7TableNames[I7Objects.GENERATOR]} WHERE ${getWhereIDs('anschluss', whereIDs).join(' OR ')};`;
263
289
  }
264
290
  case I7Objects.ASYNCHRONMOTOR: {
265
- return `SELECT * FROM ${Integral7TableNames[I7Objects.ASYNCHRONMOTOR]} LIMIT ${limit} OFFSET ${offset};`;
291
+ return `SELECT * FROM ${Integral7TableNames[I7Objects.ASYNCHRONMOTOR]} WHERE ${getWhereIDs('anschluss', whereIDs).join(' OR ')};`;
266
292
  }
267
293
  case I7Objects.BOUNDARYINJECTION: {
268
294
  return `SELECT * FROM ${Integral7TableNames[I7Objects.BOUNDARYINJECTION]} LIMIT ${limit} OFFSET ${offset};`;
@@ -2,7 +2,7 @@ import { BaseClass, Belastung, Wicklung } from './model/interfaces';
2
2
  import {
3
3
  BaseVoltage,
4
4
  Bay,
5
- ConductingEquipment, ConnectivityNode,
5
+ ConductingEquipment, ConnectivityNode, createBaseVoltageIfNotExists,
6
6
  createRatioTapChangerTablePoint,
7
7
  EquipmentContainer,
8
8
  FossilFuel,
@@ -79,6 +79,10 @@ export function getLine(cimModel: Model, bezeichner: string, kurzname: string):
79
79
  return;
80
80
  }
81
81
 
82
+ export function getU(un: any, deafultUn: number): number {
83
+ return (isNaN(un) || un === null) ? deafultUn : +un;
84
+ }
85
+
82
86
  /** Wenn die Objektreferenzen nicht vorhanden sind, wird das BV-Objekt über die UUID bestimmt. */
83
87
  export function getTerminalUn(cimModel: Model, ce: ConductingEquipment): BaseVoltage | undefined {
84
88
  const terminals = ce.terminals.size > 0 ? [...ce.terminals.keys()] : ce.terminalsUUIDs;
@@ -545,20 +549,48 @@ export function writeFile(filePath: string, data: any) {
545
549
  });
546
550
  }
547
551
 
548
-
549
- export function writeZipFile(zip: JSZip, path: string): Promise<any> {
552
+ export function generateNodeStream(zip: JSZip): Promise<Status> {
550
553
  return new Promise((resolve, reject) => {
554
+ try {
555
+ resolve({status: 'successful', message: 'ok', data: zip.generateNodeStream({type: 'nodebuffer', streamFiles: true})});
556
+ } catch (e) {
557
+ reject({status: 'error', message: e.toString()});
558
+ }
559
+ });
560
+ }
551
561
 
552
- zip
553
- .generateNodeStream({type: 'nodebuffer', streamFiles: true})
554
- .pipe(fs.createWriteStream(path))
555
- .on('finish', function () {
556
- // JSZip generates a readable stream with a "end" event,
557
- // but is piped here in a writable stream which emits a "finish" event.
558
- resolve();
559
- });
562
+ export function writeZipFile(data: NodeJS.ReadableStream, path: string): Promise<any> {
563
+ return new Promise((resolve, reject) => {
564
+ try {
565
+ data.pipe(fs.createWriteStream(path))
566
+ .on('finish', function () {
567
+ // JSZip generates a readable stream with a "end" event,
568
+ // but is piped here in a writable stream which emits a "finish" event.
569
+ resolve({status: 'successful', message: 'ok'});
570
+ });
571
+ } catch (e) {
572
+ reject({status: 'error', message: e.toString()});
573
+ }
560
574
  });
561
575
  }
576
+
577
+ /*export function writeZipFile(zip: JSZip, path: string): Promise<any> {
578
+ return new Promise((resolve, reject) => {
579
+ try {
580
+ zip
581
+ .generateNodeStream({type: 'nodebuffer', streamFiles: true})
582
+ .pipe(fs.createWriteStream(path))
583
+ .on('finish', function () {
584
+ // JSZip generates a readable stream with a "end" event,
585
+ // but is piped here in a writable stream which emits a "finish" event.
586
+ resolve();
587
+ });
588
+ } catch (e) {
589
+
590
+ }
591
+
592
+ });
593
+ }*/
562
594
  /** Integral 7 Exporter */
563
595
  export function determineEquipmentContainer(equipmentContainerType: string, cimModel: Model, equipmentContainer: EquipmentContainer): EquipmentContainer | undefined {
564
596
  switch (equipmentContainerType) {
@@ -1,6 +1,5 @@
1
1
  import { Model } from '../model/model/Model';
2
2
  import { WNFeeder } from '../model/extensions/neplan-westnetz/core/WNFeeder';
3
- import { Equipment } from '../model/core/Equipment';
4
3
  import { WNConnectivityNode } from '../model/extensions/neplan-westnetz/core/WNConnectivityNode';
5
4
  import { ConductingEquipment } from '../model/core/ConductingEquipment';
6
5
  import { Switch } from '../model/wires/Switch';
@@ -12,7 +11,7 @@ import { SwitchingPlan } from '../model/operations/SwitchingPlan';
12
11
  import { EVTerminalAction } from '../model/extensions/enervance/operations/EVTerminalAction';
13
12
  import { SwitchActionKind } from '../model/operations/SwitchActionKind';
14
13
  import { IOutage } from '../interfaces/model/operations/IOutage';
15
- import { ITerminal } from '../interfaces/model/core/ITerminal';
14
+ import { Graph } from '../graph/graph';
16
15
 
17
16
  export function performContingencyAnalysis(cimModel: Model): string[] {
18
17
 
@@ -21,21 +20,32 @@ export function performContingencyAnalysis(cimModel: Model): string[] {
21
20
  /** 2 Erstelle für jedes nicht verbundenes Element, das zu einem anderen Abgang gehört, eine Schaltmaßname. */
22
21
 
23
22
  const insertSPARQL = [];
23
+ const graph = new Graph();
24
+
24
25
  for (const feeder of cimModel.feeders.values()) {
25
26
  const wnFeeder = feeder as WNFeeder;
26
- const disconnectedTerminalCNs = []; // nicht verbundene Knoten
27
- const disconnectedSwitches = []; // nicht verbundene Schaltelemente
27
+ const disconnectedTerminalCNs = []; // nicht verbundene Knoten zu anderen Abgängen
28
28
  const disconnectedTerminalCEs = []; // nicht verbundene leitende Equipments
29
29
 
30
+ const disconnectedSwitches = []; // nicht verbundene Schaltelemente
31
+ const disconnectedTerminal = []; // nicht verbundene Knoten zum gleichen Abgang
32
+
30
33
  /** 1.1 / 1.2) nicht verbundene Knoten und Switches bestimmen */
31
34
  for (const equip of wnFeeder.additionalGroupedEquipment.values()) {
32
35
  if (equip instanceof ConductingEquipment) {
33
36
  const ce = equip as ConductingEquipment;
34
37
  // Bestimme nicht verbundene CNs
35
38
  for (const terminal of ce.terminals.values()) {
36
- if (!terminal.isClosed() && !wnFeeder.normalEnergizedConnectivityNodes.has(terminal.connectivityNode.mrid)) {
37
- if (terminal.connectivityNode && (terminal.connectivityNode as WNConnectivityNode).additionalConnectivityNodeContainer) {
38
- disconnectedTerminalCNs.push(terminal);
39
+
40
+ if (!terminal.isClosed()) {
41
+ /** verbindungen zu anderen Angängen */
42
+ if(!wnFeeder.normalEnergizedConnectivityNodes.has(terminal.connectivityNode.mrid)) {
43
+ if (terminal.connectivityNode && (terminal.connectivityNode as WNConnectivityNode).additionalConnectivityNodeContainer) {
44
+ disconnectedTerminalCNs.push(terminal);
45
+ }
46
+ } else if (wnFeeder.normalEnergizedConnectivityNodes.has(terminal.connectivityNode.mrid)) {
47
+ /** offene Verbindungen zu sich selbst */
48
+ if (!disconnectedTerminal.includes(terminal)) disconnectedTerminal.push(terminal);
39
49
  }
40
50
  }
41
51
  }
@@ -50,15 +60,20 @@ export function performContingencyAnalysis(cimModel: Model): string[] {
50
60
  }
51
61
  }
52
62
 
53
-
54
63
  /** 1.1 / 1.2) nicht verbundene leitende Elemente bestimmen */
55
64
  for (const cn of wnFeeder.normalEnergizedConnectivityNodes.values()) {
56
65
  // Bestimme nicht verbundene CNs
57
66
  for (const terminal of cn.terminals.values()) {
58
- /** ist offen und gehört zu einem anderen Abgang */
59
- if (!terminal.isClosed() && !wnFeeder.additionalGroupedEquipment.has(terminal.conductingEquipment.mrid)) {
60
- if (terminal.conductingEquipment.additionalEquipmentContainer.size) {
61
- disconnectedTerminalCEs.push(terminal);
67
+
68
+ if (!terminal.isClosed()) {
69
+ /** ist offen und gehört zu einem anderen Abgang */
70
+ if (!wnFeeder.additionalGroupedEquipment.has(terminal.conductingEquipment.mrid)) {
71
+ if (terminal.conductingEquipment.additionalEquipmentContainer.size) {
72
+ disconnectedTerminalCEs.push(terminal);
73
+ }
74
+ } else if (wnFeeder.additionalGroupedEquipment.has(terminal.conductingEquipment.mrid)) {
75
+ /** offene Verbindungen zu sich selbst */
76
+ if (!disconnectedTerminal.includes(terminal)) disconnectedTerminal.push(terminal);
62
77
  }
63
78
  }
64
79
  }
@@ -86,6 +101,9 @@ export function performContingencyAnalysis(cimModel: Model): string[] {
86
101
  console.log('\twnFeeder.additionalGroupedEquipment ' + wnFeeder.additionalGroupedEquipment.size);
87
102
  console.log('\twnFeeder.normalEnergizedConnectivityNodes + ' + wnFeeder.normalEnergizedConnectivityNodes.size);*/
88
103
 
104
+ // Stationen mit mehr als einem Anbgang ausfallen lassen.
105
+
106
+ // Head TerminalAusfälle
89
107
  for (const headTerminal of feeder.normalHeadTerminals.values()) {
90
108
  //Lege einen N-1 Fall an, wenn es Schaltmaßnahmen exisitieren
91
109
 
@@ -9,12 +9,15 @@ import { Model } from '../model/model/Model';
9
9
  import { WNFeeder } from '../model/extensions/neplan-westnetz/core/WNFeeder';
10
10
  import { IConnectivityNode } from '../interfaces/model/core/IConnectivityNode';
11
11
  import { ACLineSegment } from '../model/wires/ACLineSegment';
12
- import { generateUUID } from '../util/utils';
12
+ import { generateUUID, isInArray } from '../util/utils';
13
13
  import { Equipment } from '../model/core/Equipment';
14
14
  import { WNConnectivityNode } from '../model/extensions/neplan-westnetz/core/WNConnectivityNode';
15
15
  import { EVTerminal } from '../model/extensions/enervance/core/EVTerminal';
16
16
  import { ITerminal } from '../interfaces/model/core/ITerminal';
17
17
  import { ConductingEquipment } from '../model/core/ConductingEquipment';
18
+ import { VoltageLevel } from '../model/core/VoltageLevel';
19
+ import { Bay } from '../model/core/Bay';
20
+ import { ExternalNetworkInjection } from '../model/wires/ExternalNetworkInjection';
18
21
 
19
22
  /**
20
23
  * Erzeugung von Abgängen
@@ -34,20 +37,34 @@ export function createFeederLines(cimModel: Model, basiIRI: string): string [] {
34
37
  const computableGridsSlackElements: IIdentifiedObject[][] = determineNetworksSlackElements(cimModel, computableGrids);
35
38
 
36
39
  /** KRUECKE Anlagen mit mehr als 10 Switchelementen und Slacks werden als Umspannanlagen markiert. */
37
- const substationElements = determineSubstations(cimModel);
38
- computableGridsSlackElements.push(substationElements);
40
+ const substationElements = determineSubstations(cimModel, computableGridsSlackElements);
41
+
42
+ const computableGridsSlackElementsForFeeder = [...computableGridsSlackElements, substationElements]
43
+
44
+ //_9fafa042-b9d1-4052-ace2-9bfbefeb0134
45
+ //_59f7d40a-36c9-4b39-95e4-657976e50b12
46
+ const cn1 = cimModel.getConnectivityNode('9fafa042-b9d1-4052-ace2-9bfbefeb0134');
47
+ const cn2 = cimModel.getConnectivityNode('59f7d40a-36c9-4b39-95e4-657976e50b12');
48
+ for (const s of computableGridsSlackElementsForFeeder) {
49
+ if (s.indexOf(cn1) !== -1) console.log('9fafa042-b9d1-4052-ace2-9bfbefeb0134')
50
+ if (s.indexOf(cn2) !== -1) console.log('59f7d40a-36c9-4b39-95e4-657976e50b12')
51
+ }
39
52
 
40
53
  const insertObjectSPARQL = [];
41
54
  /** bestimmt ALLE elektrisch zusammenhängende Abgänge (eine Art Stromkreis für Mittelspannungsnetze) */
42
55
  for (const grid of computableGrids) {
43
56
  /** Für das Netz die elektrisch zusammenhängenden Abgänge bestimmen (bestehend aus allen Elementen ) */
44
- const networkFeederElements: IIdentifiedObject[][] = determineFeederLinesElements(cimModel, grid, computableGridsSlackElements);
45
-
57
+ const networkFeederElements: IIdentifiedObject[][] = determineFeederLinesElements(cimModel, grid, computableGridsSlackElementsForFeeder);
46
58
 
47
59
  /** Erstellen der FeederLine Objekte */
48
60
  for (const feederObjects of networkFeederElements) {
49
- const headTerminal = determineHeadTerminal(feederObjects);
61
+
62
+ const headTerminals = determineHeadTerminals(feederObjects, computableGridsSlackElements, substationElements);
63
+
64
+ const headTerminal = determineStartHeadTerminals(headTerminals, substationElements);
65
+
50
66
  const startCN = headTerminal?.connectivityNode;
67
+ console.log(startCN.name);
51
68
  const substation = startCN?.getVoltageLevel()?.getSubstation();
52
69
 
53
70
  if (substation && startCN) {
@@ -80,6 +97,7 @@ export function createFeederLines(cimModel: Model, basiIRI: string): string [] {
80
97
  insertObjectSPARQL.push(headTerminal.setNormalHeadFeeder(feeder));
81
98
 
82
99
  cimModel.addFeeder(feeder);
100
+
83
101
  } else {
84
102
  console.log(`Der StartConnNode oder die Substion für Feeder konnte nicht bestimmt werden`);
85
103
  console.log(substation + ' ' + startCN);
@@ -96,7 +114,8 @@ export function createFeederLines(cimModel: Model, basiIRI: string): string [] {
96
114
  * ???Trafos gehören immer zu einer Umspannanlage und können nicht zu einem Angang gehören???.
97
115
  depricated Hinweis: der Algorythmus setzt varaus, dass Slackelemente vorher bestimmt wurden.
98
116
  D.h. sie sind als 'visited' markiert. */
99
- export function determineFeederLinesElements(cimModel: Model, grid: IIdentifiedObject[], slackSubstationElements: IIdentifiedObject[][]): IIdentifiedObject[][] {
117
+ export function determineFeederLinesElements(cimModel: Model, grid: IIdentifiedObject[],
118
+ slackSubstationElements: IIdentifiedObject[][]): IIdentifiedObject[][] {
100
119
 
101
120
  const networkFeederLineElements: IIdentifiedObject[][] = [];
102
121
  for (let i = 0; i < grid.length; i++) {
@@ -120,19 +139,83 @@ export function determineFeederLinesElements(cimModel: Model, grid: IIdentifiedO
120
139
  * Gesucht ist ein ConnectivityNode der nicht Teil des Abgangs ist.
121
140
  * Die Bedingung ist erfüllt, wenn der ConnectivityNode nicht
122
141
  * im Array gridElements enthalten ist. */
123
- export function determineHeadTerminal(gridElements: IIdentifiedObject[]): ITerminal {
142
+ export function determineHeadTerminals(gridElements: IIdentifiedObject[],
143
+ slackSubstationElements: IIdentifiedObject[][],
144
+ additionalslackSubstationElements: IIdentifiedObject[]): ITerminal[] {
145
+ const headTerminals = [];
124
146
  for (const object of gridElements) {
125
- if (object.constructor.name.includes('ACLineSegment')) {
126
- const acLineSegment = object as unknown as ACLineSegment;
147
+ /*if (object.constructor.name.includes('ACLineSegment')) {*/
148
+ if (object instanceof ConductingEquipment) {
149
+ const ce = object as unknown as ConductingEquipment;
150
+ if (ce.mrid === '6d21f61c-e0cc-44f7-9382-026b7663bf9f' ||
151
+ ce.mrid === '6ad74c2d-4194-4537-9d0a-96b27bea096c' ||
152
+ ce.mrid === '871c91f0-9abb-49e5-9d38-fcbc58633ddb' ||
153
+ ce.mrid === 'a9b2f23b-c799-4edf-9972-8f594d67446b') {
154
+ console.log();
155
+ }
156
+ //_9fafa042-b9d1-4052-ace2-9bfbefeb0134
157
+ //_59f7d40a-36c9-4b39-95e4-657976e50b12
158
+ for (const terminal of ce.terminals.values()) {
159
+ if (terminal.connectivityNode.mrid === '9fafa042-b9d1-4052-ace2-9bfbefeb0134' ||
160
+ terminal.connectivityNode.mrid === '59f7d40a-36c9-4b39-95e4-657976e50b12' ||
161
+ terminal.connectivityNode.mrid === '871c91f0-9abb-49e5-9d38-fcbc58633ddb' ||
162
+ terminal.connectivityNode.mrid === 'a9b2f23b-c799-4edf-9972-8f594d67446b') {
163
+ console.log();
164
+ }
127
165
 
128
- for (const terminal of acLineSegment.terminals.values()) {
129
- if (terminal.isClosed()) { /** ist elektrisch angeschlossen. */
130
- if (gridElements.indexOf(terminal.connectivityNode) === -1) { /** ist CN Teil des Abgabgs und ist mit einem ConductEquip verbunden? */
131
- return terminal;
132
- }
166
+ if (isInArray(terminal.connectivityNode, slackSubstationElements)) { /** gehört der CN zur Substation mit Slack */
167
+ headTerminals.push(terminal);
168
+ } else if (additionalslackSubstationElements.indexOf(terminal.connectivityNode) != null) { /** gehört der CN zur (Schwerpunkt-)Substation ohne Slack */
169
+ headTerminals.push(terminal);
133
170
  }
171
+ /* if (terminal.isClosed()) { /!** ist elektrisch angeschlossen. *!/
172
+ if (gridElements.indexOf(terminal.connectivityNode) === -1) { /!** ist CN Teil des Abgabgs und ist mit einem ConductEquip verbunden? *!/
173
+ headTerminals.push(terminal);
174
+ }
175
+ }*/
134
176
  }
135
177
  }
136
178
  }
137
- return;
138
- }
179
+ return headTerminals;
180
+ }
181
+
182
+ /** HeadTerminal bestimmen
183
+ * HeadTerminal gehört zu der Station mit dem Slack
184
+ * falls der 2 Headterminals mit je einem Slack existieren, wird das erste Element als Head festgelegt*/
185
+ export function determineStartHeadTerminals(terminals: ITerminal[], additionalslackSubstationElements: IIdentifiedObject[]): ITerminal {
186
+ for (const terminal of terminals) {
187
+ const cnc = terminal.connectivityNode.connectivityNodeContainer;
188
+ let voltageLevel;
189
+ if (cnc instanceof VoltageLevel) {
190
+ voltageLevel = cnc as VoltageLevel;
191
+ } else if (cnc instanceof Bay) {
192
+ voltageLevel = (cnc as Bay).voltageLevel;
193
+ }
194
+ for (const equip of voltageLevel?.equipments) {
195
+ if (equip instanceof ExternalNetworkInjection) {
196
+ return terminal;
197
+ }
198
+ }
199
+ }
200
+
201
+ /** Wenn keine Kriterien erfüllt werden,
202
+ * dann überprüfe additionalslackSubstationElements */
203
+ const trm = determineStartHeadTerminalsTemporary(terminals, additionalslackSubstationElements);
204
+ if(trm) return trm;
205
+ /** Wenn keine Kriterien erfüllt werden,
206
+ * dann nehme den ersten Terminal*/
207
+ return terminals[0];
208
+ }
209
+
210
+ /** Übergangslösung, Schwerpunktstationen ohne Slack */
211
+ export function determineStartHeadTerminalsTemporary(terminals: ITerminal[], additionalslackSubstationElements: IIdentifiedObject[]): ITerminal {
212
+ for (const terminal of terminals) {
213
+ if (additionalslackSubstationElements.indexOf(terminal.connectivityNode) !==-1) {
214
+ return terminal;
215
+ }
216
+ }
217
+ /** Wenn keine Kriterien erfüllt werden,
218
+ * dann nehme den ersten Terminal*/
219
+ return terminals[0];
220
+ }
221
+
@@ -328,6 +328,7 @@ export async function loadFusekiData(fusekiURI: string, graphURI: string,
328
328
  return await Promise.all(loadConfig.map(async (className) => {
329
329
  const sparqlQuery = neplanClassDefinitions.get(className).getQuerySPARQL(graphURI);
330
330
  const dataResponse = await fetch(`${fusekiURI}?query=${encodeURIComponent(sparqlQuery)}&format=json`);
331
+
331
332
  return await dataResponse.json();
332
333
  }));
333
334
  }