Пример #1
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            CycleDataResource cycleDataResource;

            DataGroup        dataGroup;
            VIDataGroup      viDataGroup;
            VICycleDataGroup viCycleDataGroup;

            cycleDataResource = CycleDataResource.GetResource(meterDataSet, m_dbAdapterContainer);

            m_breakerCurrents = new HashSet <string>(cycleDataResource.DataGroups
                                                     .Where(dg => dg.Line.AssetKey.StartsWith("BR"))
                                                     .SelectMany(dg => dg.DataSeries)
                                                     .SelectMany(ds => ds.SeriesInfo.Channel.BreakerChannels)
                                                     .Select(ch => ch.BreakerNumber));

            for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
            {
                dataGroup        = cycleDataResource.DataGroups[i];
                viDataGroup      = cycleDataResource.VIDataGroups[i];
                viCycleDataGroup = cycleDataResource.VICycleDataGroups[i];
                IdentifyBreakerOperations(dataGroup, viDataGroup, viCycleDataGroup);
            }

            m_meterDataSet = meterDataSet;
        }
Пример #2
0
        public void WriteResults(DbAdapterContainer dbAdapterContainer, MeterDataSet meterDataSet)
        {
            CycleDataResource cycleDataResource;
            FaultDataResource faultDataResource;

            DataGroup        dataGroup;
            VICycleDataGroup viCycleDataGroup;
            FaultGroup       faultGroup;

            string rootFileName;
            string fileName;

            cycleDataResource = meterDataSet.GetResource(() => CycleDataResource.GetResource(meterDataSet, dbAdapterContainer));
            faultDataResource = meterDataSet.GetResource(() => new FaultDataResource(dbAdapterContainer));

            if (!Directory.Exists(m_resultsPath))
            {
                Directory.CreateDirectory(m_resultsPath);
            }

            for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
            {
                dataGroup = cycleDataResource.DataGroups[i];

                if (faultDataResource.FaultLookup.TryGetValue(dataGroup, out faultGroup))
                {
                    rootFileName = FilePath.GetFileNameWithoutExtension(meterDataSet.FilePath);
                    fileName     = string.Format("{0},{1:000},Line{2}.xml", rootFileName, i, dataGroup.Line.AssetKey);

                    viCycleDataGroup = cycleDataResource.VICycleDataGroups[i];
                    WriteResults(meterDataSet, dataGroup, viCycleDataGroup, faultGroup.Faults, Path.Combine(m_resultsPath, fileName));
                }
            }
        }
Пример #3
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            CycleDataResource           cycleDataResource;
            EventClassificationResource eventClassificationResource;

            Log.Info("Executing operation to load event data into the database...");

            cycleDataResource           = CycleDataResource.GetResource(meterDataSet, m_dbAdapterContainer);
            eventClassificationResource = meterDataSet.GetResource(() => new EventClassificationResource(m_dbAdapterContainer));
            LoadEvents(meterDataSet, cycleDataResource.DataGroups, cycleDataResource.VICycleDataGroups, eventClassificationResource.Classifications);
            LoadDisturbances(meterDataSet, cycleDataResource.DataGroups);

            m_meterDataSet = meterDataSet;
        }
Пример #4
0
        public void WriteResults(DbAdapterContainer dbAdapterContainer, MeterDataSet meterDataSet)
        {
            CycleDataResource cycleDataResource;
            FaultDataResource faultDataResource;

            DataGroup    dataGroup;
            FaultGroup   faultGroup;
            List <int>   seriesIDs;
            EventDataSet eventDataSet;

            string rootFileName;
            string fileName;

            cycleDataResource = meterDataSet.GetResource(() => CycleDataResource.GetResource(meterDataSet, dbAdapterContainer));
            faultDataResource = meterDataSet.GetResource(() => new FaultDataResource(dbAdapterContainer));

            if (!Directory.Exists(m_resultsPath))
            {
                Directory.CreateDirectory(m_resultsPath);
            }

            for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
            {
                dataGroup = cycleDataResource.DataGroups[i];

                if (faultDataResource.FaultLookup.TryGetValue(dataGroup, out faultGroup))
                {
                    rootFileName = FilePath.GetFileNameWithoutExtension(meterDataSet.FilePath);
                    fileName     = string.Format("{0},{1:000},Line{2}.dat", rootFileName, i, dataGroup.Line.AssetKey);

                    seriesIDs = dataGroup.DataSeries
                                .Select(series => series.SeriesInfo.ID)
                                .ToList();

                    eventDataSet = new EventDataSet()
                    {
                        ResultsPath      = Path.Combine(m_resultsPath, fileName),
                        MeterDataSet     = meterDataSet,
                        TimeZoneOffset   = GetTimeZoneOffset(meterDataSet.Meter.TimeZone, dataGroup.StartTime),
                        DataGroup        = dataGroup,
                        VICycleDataGroup = cycleDataResource.VICycleDataGroups[i],
                        Faults           = faultGroup.Faults,
                        OutputChannels   = dbAdapterContainer.GetAdapter <FaultLocationInfoDataContext>().OutputChannels.Where(channel => seriesIDs.Contains(channel.SeriesID)).ToList()
                    };

                    WriteResults(eventDataSet);
                }
            }
        }
        public override void Execute(MeterDataSet meterDataSet)
        {
            CycleDataResource        cycleDataResource        = CycleDataResource.GetResource(meterDataSet, m_dbAdapterContainer);
            SagDataResource          sagDataResource          = SagDataResource.GetResource(meterDataSet, m_dbAdapterContainer);
            SwellDataResource        swellDataResource        = SwellDataResource.GetResource(meterDataSet, m_dbAdapterContainer);
            InterruptionDataResource interruptionDataResource = InterruptionDataResource.GetResource(meterDataSet, m_dbAdapterContainer);

            DisturbanceTableAdapter disturbanceAdapter = m_dbAdapterContainer.GetAdapter <DisturbanceTableAdapter>();
            DisturbanceDataTable    disturbanceTable   = disturbanceAdapter.GetDataByFileGroup(meterDataSet.FileGroup.ID);

            SystemInfoDataContext systemInfo = m_dbAdapterContainer.GetAdapter <SystemInfoDataContext>();

            m_disturbanceSeverityTable = new DisturbanceSeverityDataTable();

            foreach (VoltageEnvelope envelope in systemInfo.VoltageEnvelopes)
            {
                foreach (DisturbanceRow disturbance in disturbanceTable)
                {
                    IEnumerable <VoltageCurvePoint> points = envelope.VoltageCurves.Select(curve => curve.VoltageCurvePoints
                                                                                           .Where(p => p.DurationSeconds <= disturbance.DurationSeconds)
                                                                                           .OrderBy(p => p.LoadOrder)
                                                                                           .LastOrDefault());

                    IEnumerable <int> severityCodes = points.Select(point => ((object)point != null)
                        ? (int)((1.0D - disturbance.PerUnitMagnitude) / (1.0D - point.PerUnitMagnitude))
                        : 0);

                    int maxSeverityCode = severityCodes
                                          .DefaultIfEmpty(0)
                                          .Max();

                    if (maxSeverityCode < 0)
                    {
                        maxSeverityCode = 0;
                    }
                    else if (maxSeverityCode > 5)
                    {
                        maxSeverityCode = 5;
                    }

                    m_disturbanceSeverityTable.AddDisturbanceSeverityRow(envelope.ID, disturbance.ID, maxSeverityCode);
                }
            }
        }
Пример #6
0
        public void Initialize(MeterDataSet meterDataSet, DbAdapterContainer dbAdapterContainer)
        {
            DataGroup         dataGroup;
            VICycleDataGroup  viCycleDataGroup;
            CycleDataResource cycleDataResource;

            ConnectionStringParser.ParseConnectionString(meterDataSet.ConnectionString, this);

            m_disturbances = new Dictionary <DataGroup, List <Disturbance> >();

            cycleDataResource = CycleDataResource.GetResource(meterDataSet, dbAdapterContainer);

            for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
            {
                dataGroup        = cycleDataResource.DataGroups[i];
                viCycleDataGroup = cycleDataResource.VICycleDataGroups[i];
                DetectDisturbances(dataGroup, viCycleDataGroup);
            }
        }
Пример #7
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            CycleDataResource cycleDataResource;

            DataGroup        dataGroup;
            VIDataGroup      viDataGroup;
            VICycleDataGroup viCycleDataGroup;

            cycleDataResource = CycleDataResource.GetResource(meterDataSet, m_dbAdapterContainer);

            for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
            {
                dataGroup        = cycleDataResource.DataGroups[i];
                viDataGroup      = cycleDataResource.VIDataGroups[i];
                viCycleDataGroup = cycleDataResource.VICycleDataGroups[i];
                IdentifyBreakerOperations(dataGroup, viDataGroup, viCycleDataGroup);
            }

            m_meterDataSet = meterDataSet;
        }
Пример #8
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            FaultDataResource faultDataResource = meterDataSet.GetResource(() => new FaultDataResource(m_dbAdapterContainer));
            CycleDataResource cycleDataResource = CycleDataResource.GetResource(meterDataSet, m_dbAdapterContainer);
            FaultGroup        faultGroup;

            Log.Info("Executing operation to load fault location data into the database...");

            m_faultSummarizer = new FaultSummarizer(m_systemFrequency);
            m_faultSummarizer.MeterDataSet = meterDataSet;

            foreach (DataGroup dataGroup in cycleDataResource.DataGroups)
            {
                if (!faultDataResource.FaultLookup.TryGetValue(dataGroup, out faultGroup))
                {
                    continue;
                }

                // Generate summary rows for the fault to be entered into the database
                m_faultSummarizer.DataGroup  = dataGroup;
                m_faultSummarizer.FaultGroup = faultGroup;
                m_faultSummarizer.SummarizeFault();
            }
        }