//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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        /// <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);
        }