private _PhasorMeta CreateECA_PhasorMeta(TypeMapping typeMapping) { Dictionary <string, FieldMapping> fieldLookup = typeMapping.FieldMappings.ToDictionary(mapping => mapping.Field.Identifier); _PhasorMeta obj = new _PhasorMeta(); { // Assign MetaValues value to "Magnitude" field FieldMapping fieldMapping = fieldLookup["Magnitude"]; IMeasurement measurement = GetMeasurement(fieldMapping); obj.Magnitude = GetMetaValues(measurement); } { // Assign MetaValues value to "Angle" field FieldMapping fieldMapping = fieldLookup["Angle"]; IMeasurement measurement = GetMeasurement(fieldMapping); obj.Angle = GetMetaValues(measurement); } return(obj); }
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); }