Add() private static method

private static Add ( DataPoint point1, DataPoint point2 ) : DataPoint
point1 DataPoint
point2 DataPoint
return DataPoint
Esempio n. 1
0
        private void CalculateMissingLLVoltageChannels()
        {
            Meter      meter;
            DataSeries missingSeries;

            //Do this for every Voltage set
            for (int i = 0; i < m_vIndices.Count(); i++)
            {
                // If all line voltages are already present or there are not
                // atleast 2 lines we will not perform line to line calculations
                if (m_vIndices[i].DefinedLineVoltages == 3 || m_vIndices[i].DefinedNeutralVoltages < 2)
                {
                    return;
                }

                // Get the meter associated with the channels in this data group
                DataSeries VA = m_dataGroup[m_vIndices[i].Va];
                DataSeries VB = m_dataGroup[m_vIndices[i].Vb];
                DataSeries VC = m_dataGroup[m_vIndices[i].Vc];

                meter = (VA ?? VB ?? VC).SeriesInfo.Channel.Meter;

                if (m_vIndices[i].Vab == -1 && VA != null && VB != null)
                {
                    // Calculate VAB = VA - VB
                    missingSeries            = VA.Add(VB.Negate());
                    missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Voltage", "AB", VA.SeriesInfo.Channel.AssetID);
                    missingSeries.Calculated = true;
                    m_vIndices[i].Vab        = m_dataGroup.DataSeries.Count;
                    m_dataGroup.Add(missingSeries);
                }

                if (m_vIndices[i].Vbc == -1 && VB != null && VC != null)
                {
                    // Calculate VBC = VB - VC
                    missingSeries            = VB.Add(VC.Negate());
                    missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Voltage", "BC", VB.SeriesInfo.Channel.AssetID);
                    missingSeries.Calculated = true;
                    m_vIndices[i].Vbc        = m_dataGroup.DataSeries.Count;
                    m_dataGroup.Add(missingSeries);
                }

                if (m_vIndices[i].Vca == -1 && VC != null && VA != null)
                {
                    // Calculate VCA = VC - VA
                    missingSeries            = VC.Add(VA.Negate());
                    missingSeries.SeriesInfo = GetSeriesInfo(meter, m_dataGroup, "Voltage", "CA", VC.SeriesInfo.Channel.AssetID);
                    missingSeries.Calculated = true;
                    m_vIndices[i].Vca        = m_dataGroup.DataSeries.Count;
                    m_dataGroup.Add(missingSeries);
                }
            }
        }
Esempio n. 2
0
        // Static Methods
        public static DataSeries AddMissingCurrentSeries(MeterInfoDataContext meterInfo, Meter meter, DataGroup dataGroup)
        {
            DataSeries missingSeries = null;

            // Get all necessary voltage and current channels in the proper order
            List <DataSeries> viSeriesList = Enumerable.Range(VAIndex, IRIndex + 1)
                                             .GroupJoin(dataGroup.DataSeries.Where(IsInstantaneous), i => i, GetIndex, (i, series) => series.FirstOrDefault())
                                             .ToList();

            // Validate that no more than one current channel is missing
            if (viSeriesList.Count(series => (object)series == null) > 1)
            {
                return(null);
            }

            // Attempt to fill in missing current channels
            // based on the relation IR = IA + IB + IC
            if ((object)viSeriesList[IAIndex] == null)
            {
                missingSeries = viSeriesList[IRIndex];
                missingSeries = missingSeries.Add(viSeriesList[IBIndex].Negate());
                missingSeries = missingSeries.Add(viSeriesList[ICIndex].Negate());

                missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, dataGroup, IAIndex);
                missingSeries.SeriesInfo.Channel.Line = viSeriesList[IBIndex].SeriesInfo.Channel.Line;

                viSeriesList[IAIndex] = missingSeries;
            }
            else if ((object)viSeriesList[IBIndex] == null)
            {
                missingSeries = viSeriesList[IRIndex];
                missingSeries = missingSeries.Add(viSeriesList[IAIndex].Negate());
                missingSeries = missingSeries.Add(viSeriesList[ICIndex].Negate());

                missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, dataGroup, IBIndex);
                missingSeries.SeriesInfo.Channel.Line = viSeriesList[IAIndex].SeriesInfo.Channel.Line;

                viSeriesList[IBIndex] = missingSeries;
            }
            else if ((object)viSeriesList[ICIndex] == null)
            {
                missingSeries = viSeriesList[IRIndex];
                missingSeries = missingSeries.Add(viSeriesList[IAIndex].Negate());
                missingSeries = missingSeries.Add(viSeriesList[IBIndex].Negate());

                missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, dataGroup, ICIndex);
                missingSeries.SeriesInfo.Channel.Line = viSeriesList[IAIndex].SeriesInfo.Channel.Line;

                viSeriesList[ICIndex] = missingSeries;
            }
            else if ((object)viSeriesList[IRIndex] == null)
            {
                missingSeries = viSeriesList[IAIndex];
                missingSeries = missingSeries.Add(viSeriesList[IBIndex]);
                missingSeries = missingSeries.Add(viSeriesList[ICIndex]);

                missingSeries.SeriesInfo = GetSeriesInfo(meterInfo, meter, dataGroup, IRIndex);
                missingSeries.SeriesInfo.Channel.Line = viSeriesList[IAIndex].SeriesInfo.Channel.Line;

                viSeriesList[IRIndex] = missingSeries;
            }

            if ((object)missingSeries != null)
            {
                dataGroup.Add(missingSeries);
            }

            return(missingSeries);
        }