//private static Complex[,] LineParameters; // save results [line_number, Z, y] #endregion #region [ Methods ] public static Complex[,] LineParameterComputation(Measurement_set CurrentFrameData) { Complex KV1 = 1; Complex KI1 = 1; Complex KV2 = 1; Complex KI2 = 1; Complex[,] LineParameters = new Complex[CurrentFrameData.Measurements.Count(), 3]; int ResultIndex = 0; for (int idx0 = 0; idx0 < CurrentFrameData.Measurements.Count(); idx0++) { int CurrentLineNumberIndex = idx0; int CurrentLineNumber = CurrentLineNumberIndex + 1; double V1M = CurrentFrameData.Measurements[CurrentLineNumberIndex].From_bus.Voltage.Magnitude; double V1A = CurrentFrameData.Measurements[CurrentLineNumberIndex].From_bus.Voltage.Angle; Complex V1 = Complex.FromPolarCoordinates(V1M, V1A * Math.PI / 180); double I1M = CurrentFrameData.Measurements[CurrentLineNumberIndex].From_bus.Current.Magnitude; double I1A = CurrentFrameData.Measurements[CurrentLineNumberIndex].From_bus.Current.Angle; Complex I1 = Complex.FromPolarCoordinates(I1M, I1A * Math.PI / 180); double V2M = CurrentFrameData.Measurements[CurrentLineNumberIndex].To_bus.Voltage.Magnitude; double V2A = CurrentFrameData.Measurements[CurrentLineNumberIndex].To_bus.Voltage.Angle; Complex V2 = Complex.FromPolarCoordinates(V2M, V2A * Math.PI / 180); double I2M = CurrentFrameData.Measurements[CurrentLineNumberIndex].To_bus.Current.Magnitude; double I2A = CurrentFrameData.Measurements[CurrentLineNumberIndex].To_bus.Current.Angle; Complex I2 = Complex.FromPolarCoordinates(I2M, I2A * Math.PI / 180); Complex[] LineParameterResults = SingleLineImpedanceComputation(V1, KV1, I1, KI1, V2, KV2, I2, KI2); LineParameters[ResultIndex, 0] = CurrentLineNumber; LineParameters[ResultIndex, 1] = LineParameterResults[0]; LineParameters[ResultIndex, 2] = LineParameterResults[1]; ResultIndex += 1; } return(LineParameters); }
public static Output Execute(Measurement_set inputData, _Measurement_setMeta inputMeta) { Output output = Output.CreateNew(); try { // TODO: Implement your algorithm here... // You can also write messages to the main window: MainWindow.WriteMessage("Real-time Data Streaming!"); CurrentFrame = inputData; UpdateFrame(); } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } return(output); }
public void openECADataIntegration(openECARawDataSet openECADataStreams) { int Frame_number = openECADataStreams.RawDataSet.Count; int Measurement_number = openECADataStreams.RawDataSet[0].Measurements.Count(); for (int idx0 = 0; idx0 < Frame_number; idx0++) // select raw measurements by frame { Frame CurrentFrame = new Frame(); CurrentFrame.TimeStamp = idx0 + 1; Measurement_set CurrentMeasurementSet = openECADataStreams.RawDataSet[idx0]; for (int idx1 = 0; idx1 < Measurement_number; idx1++) // find measuremnents line by line { int CurrentLineNumber = m_network.LineBusInfo[idx1, 0]; int CurrentFromBusNumber = m_network.LineBusInfo[idx1, 1]; int CurrentToBusNumber = m_network.LineBusInfo[idx1, 2]; //From bus voltage Mag and Ang VIMeasurement CurrentMeasurementV1M = new VIMeasurement(); CurrentMeasurementV1M.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].From_bus.Voltage.Magnitude; CurrentMeasurementV1M.TypeMeasured = VIMeasurementType.PositiveSequenceVoltageMagnitude; CurrentMeasurementV1M.LineNumber = CurrentLineNumber; CurrentMeasurementV1M.BusNumber = CurrentFromBusNumber; VIMeasurement CurrentMeasurementV1A = new VIMeasurement(); CurrentMeasurementV1A.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].From_bus.Voltage.Angle; CurrentMeasurementV1A.TypeMeasured = VIMeasurementType.PositiveSequenceVoltageAngle; CurrentMeasurementV1A.LineNumber = CurrentLineNumber; CurrentMeasurementV1A.BusNumber = CurrentFromBusNumber; //From bus current Mag and Ang VIMeasurement CurrentMeasurementI1M = new VIMeasurement(); CurrentMeasurementI1M.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].From_bus.Current.Magnitude; CurrentMeasurementI1M.TypeMeasured = VIMeasurementType.PositiveSequenceCurrentMagnitude; CurrentMeasurementI1M.LineNumber = CurrentLineNumber; CurrentMeasurementI1M.BusNumber = CurrentFromBusNumber; VIMeasurement CurrentMeasurementI1A = new VIMeasurement(); CurrentMeasurementI1A.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].From_bus.Current.Angle; CurrentMeasurementI1A.TypeMeasured = VIMeasurementType.PositiveSequenceCurrentAngle; CurrentMeasurementI1A.LineNumber = CurrentLineNumber; CurrentMeasurementI1A.BusNumber = CurrentFromBusNumber; //To bus voltage Mag and Ang VIMeasurement CurrentMeasurementV2M = new VIMeasurement(); CurrentMeasurementV2M.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].To_bus.Voltage.Magnitude; CurrentMeasurementV2M.TypeMeasured = VIMeasurementType.PositiveSequenceVoltageMagnitude; CurrentMeasurementV2M.LineNumber = CurrentLineNumber; CurrentMeasurementV2M.BusNumber = CurrentToBusNumber; VIMeasurement CurrentMeasurementV2A = new VIMeasurement(); CurrentMeasurementV2A.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].To_bus.Voltage.Angle; CurrentMeasurementV2A.TypeMeasured = VIMeasurementType.PositiveSequenceVoltageAngle; CurrentMeasurementV2A.LineNumber = CurrentLineNumber; CurrentMeasurementV2A.BusNumber = CurrentToBusNumber; //To bus current Mag and Ang VIMeasurement CurrentMeasurementI2M = new VIMeasurement(); CurrentMeasurementI2M.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].To_bus.Current.Magnitude; CurrentMeasurementI2M.TypeMeasured = VIMeasurementType.PositiveSequenceCurrentMagnitude; CurrentMeasurementI2M.LineNumber = CurrentLineNumber; CurrentMeasurementI2M.BusNumber = CurrentToBusNumber; VIMeasurement CurrentMeasurementI2A = new VIMeasurement(); CurrentMeasurementI2A.ValueMeasured = CurrentMeasurementSet.Measurements[idx1].To_bus.Current.Angle; CurrentMeasurementI2A.TypeMeasured = VIMeasurementType.PositiveSequenceCurrentAngle; CurrentMeasurementI2A.LineNumber = CurrentLineNumber; CurrentMeasurementI2A.BusNumber = CurrentToBusNumber; if (CurrentFrame.MeasurementsList[0].ValueMeasured == 0) { CurrentFrame.MeasurementsList[0] = CurrentMeasurementV1M; } else { CurrentFrame.MeasurementsList.Add(CurrentMeasurementV1M); } CurrentFrame.MeasurementsList.Add(CurrentMeasurementV1A); CurrentFrame.MeasurementsList.Add(CurrentMeasurementI1M); CurrentFrame.MeasurementsList.Add(CurrentMeasurementI1A); CurrentFrame.MeasurementsList.Add(CurrentMeasurementV2M); CurrentFrame.MeasurementsList.Add(CurrentMeasurementV2A); CurrentFrame.MeasurementsList.Add(CurrentMeasurementI2M); CurrentFrame.MeasurementsList.Add(CurrentMeasurementI2A); } AddFrameToTimeSeriesFrames(CurrentFrame); } }
/// <summary> /// Default data processing entry point for <see cref="Algorithm"/>. /// </summary> /// <param name="timestamp">Timestamp of <paramref name="dataBlock"/>.</param> /// <param name="dataBlock">Points values read at current timestamp.</param> public void Execute(DateTime timestamp, DataPoint[] raw_dataBlock, int lineNumber) { DataPoint[] dataBlock = raw_dataBlock; if (m_rawDataSet.TimeStamps[0].Year == 1969) { m_rawDataSet.TimeStamps[0] = timestamp; } else { m_rawDataSet.TimeStamps.Add(timestamp); } // Check dataBlock completeness if (dataBlock.Count() < (lineNumber * 8)) { for (int idx0 = 0; idx0 < (lineNumber * 8 - 1); idx0++) { if (idx0 >= (dataBlock.Count() - 1)) { DataPoint[] TempDataBlock = new DataPoint[dataBlock.Count() + 1]; for (int idx1 = 0; idx1 < dataBlock.Count(); idx1++) { TempDataBlock[idx1] = dataBlock[idx1]; } int idx2 = dataBlock.Count() - 1; DataPoint TempPoint = new DataPoint(); TempPoint.PointID = dataBlock[idx2].PointID + 1; TempPoint.Timestamp = dataBlock[idx2].Timestamp; TempPoint.Value = 0; TempPoint.Flags = dataBlock[idx2].Flags; TempDataBlock[dataBlock.Count()] = TempPoint; TempDataBlock[dataBlock.Count()] = TempPoint; dataBlock = TempDataBlock; } else { if ((dataBlock[idx0 + 1].PointID != (dataBlock[idx0].PointID + 1))) { DataPoint TempPoint = new DataPoint(); TempPoint.PointID = dataBlock[idx0].PointID + 1; TempPoint.Timestamp = dataBlock[idx0].Timestamp; TempPoint.Value = 0; TempPoint.Flags = dataBlock[idx0].Flags; dataBlock = InsertPoint(dataBlock, TempPoint, (idx0 + 1), lineNumber); } } } //dataBlock = TempDataBlock; } int AssignValueCount = 0; Measurement_set CurrentFrameMeasurementSet = new Measurement_set(); do { Phasor FromBusVTemp = new Phasor(); Phasor FromBusITemp = new Phasor(); Phasor ToBusVTemp = new Phasor(); Phasor ToBusITemp = new Phasor(); VI_data FromBusVITemp = new VI_data(); VI_data ToBusVITemp = new VI_data(); Line_data CurrentLineDataTemp = new Line_data(); FromBusVTemp.Magnitude = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; FromBusVTemp.Angle = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; FromBusVITemp.Voltage = FromBusVTemp; FromBusITemp.Magnitude = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; FromBusITemp.Angle = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; FromBusVITemp.Current = FromBusITemp; ToBusVTemp.Magnitude = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; ToBusVTemp.Angle = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; ToBusVITemp.Voltage = ToBusVTemp; ToBusITemp.Magnitude = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; ToBusITemp.Angle = dataBlock[AssignValueCount].ValueAsSingle; AssignValueCount += 1; ToBusVITemp.Current = ToBusITemp; CurrentLineDataTemp.From_bus = FromBusVITemp; CurrentLineDataTemp.To_bus = ToBusVITemp; if (CurrentFrameMeasurementSet.Measurements[0].From_bus == null) { CurrentFrameMeasurementSet.Measurements[0] = CurrentLineDataTemp; } else { CurrentFrameMeasurementSet.Measurements.Add(CurrentLineDataTemp); } } while (AssignValueCount < (dataBlock.Count() - 7)); if (m_rawDataSet.RawDataSet[0].Measurements[0].From_bus == null) { m_rawDataSet.RawDataSet[0] = CurrentFrameMeasurementSet; } else { m_rawDataSet.RawDataSet.Add(CurrentFrameMeasurementSet); } m_processedDataBlocks++; //string message = $"Analyzed {m_processedDataBlocks:N0} timestamps so far.{Environment.NewLine}"; //Console.WriteLine(message); }