Exemple #1
0
        private void MapIndexes()
        {
            m_iaIndex = -1;
            m_ibIndex = -1;
            m_icIndex = -1;
            m_irIndex = -1;

            List <int> vaIndices  = new List <int>();
            List <int> vbIndices  = new List <int>();
            List <int> vcIndices  = new List <int>();
            List <int> vabIndices = new List <int>();
            List <int> vbcIndices = new List <int>();
            List <int> vcaIndices = new List <int>();

            for (int i = 0; i < m_cycleDataGroups.Count; i++)
            {
                if (isVoltage("AN", m_cycleDataGroups[i]))
                {
                    vaIndices.Add(i);
                }
                else if (isVoltage("BN", m_cycleDataGroups[i]))
                {
                    vbIndices.Add(i);
                }
                else if (isVoltage("CN", m_cycleDataGroups[i]))
                {
                    vcIndices.Add(i);
                }
                else if (isVoltage("AB", m_cycleDataGroups[i]))
                {
                    vabIndices.Add(i);
                }
                else if (isVoltage("BC", m_cycleDataGroups[i]))
                {
                    vbcIndices.Add(i);
                }
                else if (isVoltage("CA", m_cycleDataGroups[i]))
                {
                    vcaIndices.Add(i);
                }
            }

            //Walk through all Va and try to get corresponding Vb and Vc...
            List <int?> ProcessedIndices = new List <int?>();

            foreach (int?VaIndex in vaIndices)
            {
                int assetID = m_cycleDataGroups[(int)VaIndex].Asset.ID;

                int VbIndex  = vbIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VcIndex  = vcIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VabIndex = vabIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VbcIndex = vbcIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VcaIndex = vcaIndices.Cast <int?>().FirstOrDefault(i => m_cycleDataGroups[(int)i].Asset.ID == assetID && !ProcessedIndices.Contains(i)) ?? -1;

                VIndices set = new VIndices();
                ProcessedIndices.Add(VaIndex);
                set.Va = (int)VaIndex;

                if (VbIndex > -1)
                {
                    ProcessedIndices.Add(VbIndex);
                    set.Vb = VbIndex;
                }
                if (VcIndex > -1)
                {
                    ProcessedIndices.Add(VcIndex);
                    set.Vc = VcIndex;
                }

                if (VabIndex > -1)
                {
                    ProcessedIndices.Add(VabIndex);
                    set.Vab = VabIndex;
                }
                if (VbcIndex > -1)
                {
                    ProcessedIndices.Add(VbcIndex);
                    set.Vbc = VbcIndex;
                }
                if (VcaIndex > -1)
                {
                    ProcessedIndices.Add(VcaIndex);
                    set.Vca = VcaIndex;
                }


                if (assetID == m_asset.ID)
                {
                    set.distance = 0;
                }
                else
                {
                    set.distance = m_asset.DistanceToAsset(assetID);
                }

                m_vIndices.Add(set);
            }


            for (int i = 0; i < m_cycleDataGroups.Count; i++)
            {
                string measurementType = m_cycleDataGroups[i].RMS.SeriesInfo.Channel.MeasurementType.Name;
                string phase           = m_cycleDataGroups[i].RMS.SeriesInfo.Channel.Phase.Name;


                if (measurementType == "Current" && phase == "AN")
                {
                    m_iaIndex = i;
                }
                else if (measurementType == "Current" && phase == "BN")
                {
                    m_ibIndex = i;
                }
                else if (measurementType == "Current" && phase == "CN")
                {
                    m_icIndex = i;
                }
                else if (measurementType == "Current" && phase == "RES")
                {
                    m_irIndex = i;
                }
            }
        }
Exemple #2
0
        public VIDataGroup(DataGroup dataGroup)
        {
            // Initialize each of
            // the indexes to -1
            m_vIndices = new List <VIndices>();

            m_iaIndex = -1;
            m_ibIndex = -1;
            m_icIndex = -1;
            m_irIndex = -1;

            // Initialize the data group
            m_dataGroup = new DataGroup(dataGroup.DataSeries, dataGroup.Asset);


            // List of Indices matching channel type
            List <int> vaIndices  = new List <int>();
            List <int> vbIndices  = new List <int>();
            List <int> vcIndices  = new List <int>();
            List <int> vabIndices = new List <int>();
            List <int> vbcIndices = new List <int>();
            List <int> vcaIndices = new List <int>();

            List <int> iaIndices   = new List <int>();
            List <int> ibIndices   = new List <int>();
            List <int> icIndices   = new List <int>();
            List <int> iresIndices = new List <int>();

            for (int i = 0; i < dataGroup.DataSeries.Count; i++)
            {
                if (isVoltage("AN", dataGroup[i]))
                {
                    vaIndices.Add(i);
                }
                else if (isVoltage("BN", dataGroup[i]))
                {
                    vbIndices.Add(i);
                }
                else if (isVoltage("CN", dataGroup[i]))
                {
                    vcIndices.Add(i);
                }
                else if (isVoltage("AB", dataGroup[i]))
                {
                    vabIndices.Add(i);
                }
                else if (isVoltage("BC", dataGroup[i]))
                {
                    vbcIndices.Add(i);
                }
                else if (isVoltage("CA", dataGroup[i]))
                {
                    vcaIndices.Add(i);
                }
                else if (isCurrent("AN", dataGroup[i]))
                {
                    iaIndices.Add(i);
                }
                else if (isCurrent("BN", dataGroup[i]))
                {
                    ibIndices.Add(i);
                }
                else if (isCurrent("CN", dataGroup[i]))
                {
                    icIndices.Add(i);
                }
                else if (isCurrent("RES", dataGroup[i]))
                {
                    iresIndices.Add(i);
                }
            }

            //Walk through all Va and try to get corresponding Vb and Vc...
            List <int?> ProcessedIndices = new List <int?>();

            foreach (int?VaIndex in vaIndices)
            {
                int assetID  = dataGroup[(int)VaIndex].SeriesInfo.Channel.AssetID;
                int VbIndex  = vbIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VcIndex  = vcIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VabIndex = vabIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VbcIndex = vbcIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1;
                int VcaIndex = vcaIndices.Cast <int?>().FirstOrDefault(i => dataGroup[(int)i].SeriesInfo.Channel.AssetID == assetID && !ProcessedIndices.Contains(i)) ?? -1;

                VIndices set = new VIndices();
                ProcessedIndices.Add(VaIndex);
                set.Va = (int)VaIndex;

                if (VbIndex > -1)
                {
                    ProcessedIndices.Add(VbIndex);
                    set.Vb = VbIndex;
                }
                if (VcIndex > -1)
                {
                    ProcessedIndices.Add(VcIndex);
                    set.Vc = VcIndex;
                }

                if (VabIndex > -1)
                {
                    ProcessedIndices.Add(VabIndex);
                    set.Vab = VabIndex;
                }
                if (VbcIndex > -1)
                {
                    ProcessedIndices.Add(VbcIndex);
                    set.Vbc = VbcIndex;
                }
                if (VcaIndex > -1)
                {
                    ProcessedIndices.Add(VcaIndex);
                    set.Vca = VcaIndex;
                }


                if (assetID == dataGroup.Asset.ID)
                {
                    set.distance = 0;
                }
                else
                {
                    set.distance = dataGroup.Asset.DistanceToAsset(assetID);
                }

                m_vIndices.Add(set);
            }

            // Start by matching
            //Check if a voltage and current channnel exist on this asset

            if (iaIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0)
            {
                m_iaIndex = iaIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First();
            }
            if (ibIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0)
            {
                m_ibIndex = ibIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First();
            }
            if (icIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0)
            {
                m_icIndex = icIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First();
            }

            if (iresIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).Count() > 0)
            {
                m_irIndex = iresIndices.Where(i => dataGroup[i].SeriesInfo.Channel.AssetID == dataGroup.Asset.ID).First();
            }

            // use one of the connected Assets
            List <int> connectedAssets = dataGroup.Asset.ConnectedAssets.Select(item => item.ID).ToList();



            if (m_iaIndex == -1 && iaIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0)
            {
                m_iaIndex = iaIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First();
            }
            if (m_ibIndex == -1 && ibIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0)
            {
                m_ibIndex = ibIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First();
            }
            if (m_icIndex == -1 && icIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0)
            {
                m_icIndex = icIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First();
            }

            if (m_irIndex == -1 && iresIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).Count() > 0)
            {
                m_irIndex = iresIndices.Where(i => connectedAssets.Contains(dataGroup[i].SeriesInfo.Channel.AssetID)).First();
            }


            if (m_iaIndex == -1 && iaIndices.Count() > 0)
            {
                m_iaIndex = iaIndices.First();
            }
            if (m_ibIndex == -1 && ibIndices.Count() > 0)
            {
                m_ibIndex = ibIndices.First();
            }
            if (m_ibIndex == -1 && ibIndices.Count() > 0)
            {
                m_ibIndex = icIndices.First();
            }

            if (m_irIndex == -1 && iresIndices.Count() > 0)
            {
                m_irIndex = iresIndices.First();
            }


            if (m_vIndices.Count() == 0)
            {
                m_vIndices.Add(new VIndices());
            }

            CalculateMissingCurrentChannel();
            CalculateMissingLLVoltageChannels();

            //sort by all available Channels and number of Hops to actual Asset
            m_vIndices.Sort((a, b) =>
            {
                if (b.allVoltagesDefined && !a.allVoltagesDefined)
                {
                    return(1);
                }
                if (a.allVoltagesDefined && !b.allVoltagesDefined)
                {
                    return(-1);
                }
                return(a.distance.CompareTo(b.distance));
            });
        }