private PhasorCollection CreateECAPhasorCollection(TypeMapping typeMapping) { Dictionary <string, FieldMapping> fieldLookup = typeMapping.FieldMappings.ToDictionary(mapping => mapping.Field.Identifier); PhasorCollection obj = new PhasorCollection(); { // Create Phasor UDT array for "Phasors" field ArrayMapping arrayMapping = (ArrayMapping)fieldLookup["Phasors"]; PushWindowFrame(arrayMapping); List <Phasor> list = new List <Phasor>(); int count = GetUDTArrayTypeMappingCount(arrayMapping); for (int i = 0; i < count; i++) { TypeMapping nestedMapping = GetUDTArrayTypeMapping(arrayMapping, i); list.Add(CreateECAPhasor(nestedMapping)); } obj.Phasors = list.ToArray(); PopWindowFrame(arrayMapping); } return(obj); }
internal static Output Execute(PhasorCollection inputData, _PhasorCollectionMeta inputMeta) { Output output = Output.CreateNew(); try { // TODO: Implement your algorithm here... // You can also write messages to the main window: MainWindow.WriteMessage("Hello, World!"); } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } return(output); }
public static Output Execute(PhasorCollection inputData, _PhasorCollectionMeta inputMeta) { Output output = new Output(); if (m_frameCount == 100) { m_frameCount = 0; } try { m_network.Model.InputKeyValuePairs.Clear(); m_network.Model.ClearValues(); for (int i = 0; i < inputData.Phasors.Length; i++) { Phasor phasor = inputData.Phasors[i]; _PhasorMeta metaData = inputMeta.Phasors[i]; string magnitudeKey = HistorianIdFromGuid(inputMeta.Phasors[i].Magnitude.ID); string angleKey = HistorianIdFromGuid(inputMeta.Phasors[i].Angle.ID); m_network.Model.InputKeyValuePairs.Add(magnitudeKey, phasor.Magnitude); m_network.Model.InputKeyValuePairs.Add(angleKey, phasor.Angle); } m_network.Model.OnNewMeasurements(); m_network.RunNetworkReconstructionCheck(); if (m_network.HasChangedSincePreviousFrame) { m_network.Model.DetermineActiveCurrentFlows(); m_network.Model.DetermineActiveCurrentInjections(); } if (m_network.HasChangedSincePreviousFrame) { m_network.Model.ResolveToObservedBuses(); m_network.Model.ResolveToSingleFlowBranches(); } m_network.ComputeSystemState(); if (m_frameCount % 33 == 0) { // UNCOMMENT FOR TEST HARNESS DEMO //MainWindow.WriteMessage(""); //MainWindow.WriteMessage("Sampled Output"); //MainWindow.WriteMessage(""); //foreach (Substation substation in m_network.Model.Substations) //{ // MainWindow.WriteMessage($"{substation.Name}"); // foreach (Node node in substation.Nodes) // { // MainWindow.WriteMessage($"{node.Name}: {node.Voltage.PositiveSequence.Estimate.PrettyStringValue}"); // } // MainWindow.WriteMessage(""); //} // UNCOMMENT FOR TOPOLOGY DETECTION DEMO MainWindow.WriteMessage(""); MainWindow.WriteMessage("Level 2 Topology Assessment"); MainWindow.WriteMessage(""); foreach (Substation substation in m_network.Model.Substations) { if (substation.Name == "Rannish") { MainWindow.WriteMessage($"{substation.Name}"); foreach (CircuitBreaker breaker in substation.CircuitBreakers) { if (breaker.CrossDevicePhasors != null) { if (breaker.CrossDevicePhasors.GroupA != null && breaker.CrossDevicePhasors.GroupB != null) { MainWindow.WriteMessage($"{breaker.FromNode.Name} to {breaker.ToNode.Name}: {breaker.InferredState}"); } } } } } } } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } m_frameCount++; return(output); }