예제 #1
0
            private FaultLocationData.FaultGroupRow CreateFaultGroupRow(FaultGroup faultGroup)
            {
                FaultLocationData.FaultGroupRow faultGroupRow = FaultGroupTable.NewFaultGroupRow();

                if (faultGroup.FaultDetectionLogicResult.HasValue)
                {
                    faultGroupRow.FaultDetectionLogicResult = faultGroup.FaultDetectionLogicResult.GetValueOrDefault() ? 1 : 0;
                }

                faultGroupRow.DefaultFaultDetectionLogicResult = faultGroup.DefaultFaultDetectionLogicResult ? 1 : 0;
                faultGroupRow.FaultValidationLogicResult       = faultGroup.FaultValidationLogicResult ? 1 : 0;

                return(faultGroupRow);
            }
예제 #2
0
        private EventClassification Classify(MeterDataSet meterDataSet, DataGroup dataGroup, VICycleDataGroup viCycleDataGroup, FaultGroup faultGroup)
        {
            double     nominalVoltage;
            DataSeries va;
            DataSeries vb;
            DataSeries vc;

            if ((object)faultGroup != null && (faultGroup.FaultDetectionLogicResult ?? faultGroup.FaultValidationLogicResult))
            {
                return(EventClassification.Fault);
            }

            // Get the line-to-neutral nominal voltage in volts
            nominalVoltage = dataGroup.Line.VoltageKV * 1000.0D / Math.Sqrt(3.0D);

            // Per-unit voltage waveforms based on nominal voltage
            va = viCycleDataGroup.VA.RMS.Multiply(1.0D / nominalVoltage);
            vb = viCycleDataGroup.VB.RMS.Multiply(1.0D / nominalVoltage);
            vc = viCycleDataGroup.VC.RMS.Multiply(1.0D / nominalVoltage);

            if (HasInterruption(va, vb, vc))
            {
                return(EventClassification.Interruption);
            }

            if (HasSwell(va, vb, vc))
            {
                return(EventClassification.Swell);
            }

            if (HasSag(va, vb, vc))
            {
                return(EventClassification.Sag);
            }

            return(EventClassification.Other);
        }
예제 #3
0
        private EventClassification Classify(MeterDataSet meterDataSet, DataGroup dataGroup, VIDataGroup viDataGroup, VICycleDataGroup viCycleDataGroup, FaultGroup faultGroup)
        {
            if (viDataGroup.DefinedNeutralVoltages == 0 && viDataGroup.DefinedLineVoltages == 0 && dataGroup.DataSeries.SelectMany(series => series.SeriesInfo.Channel.BreakerChannels).Any())
            {
                return(EventClassification.Breaker);
            }

            if ((object)faultGroup != null && (faultGroup.FaultDetectionLogicResult ?? faultGroup.FaultValidationLogicResult))
            {
                return(EventClassification.Fault);
            }

            DataSeries[] rms =
            {
                viCycleDataGroup.VA?.RMS,
                viCycleDataGroup.VB?.RMS,
                viCycleDataGroup.VC?.RMS,
                viCycleDataGroup.VAB?.RMS,
                viCycleDataGroup.VBC?.RMS,
                viCycleDataGroup.VCA?.RMS
            };

            List <DataSeries> perUnitRMS = rms
                                           .Where(dataSeries => (object)dataSeries != null)
                                           .Where(dataSeries => GetPerUnitValue(dataSeries) != 0.0D)
                                           .Select(dataSeries => dataSeries.Multiply(1.0D / GetPerUnitValue(dataSeries)))
                                           .ToList();

            if (HasInterruption(perUnitRMS))
            {
                return(EventClassification.Interruption);
            }

            if (HasSag(perUnitRMS))
            {
                return(EventClassification.Sag);
            }

            if (HasSwell(perUnitRMS))
            {
                return(EventClassification.Swell);
            }

            return(EventClassification.Other);
        }
        private EventClassification Classify(MeterDataSet meterDataSet, DataGroup dataGroup, VICycleDataGroup viCycleDataGroup, FaultGroup faultGroup)
        {
            if ((object)faultGroup != null && (faultGroup.FaultDetectionLogicResult ?? faultGroup.FaultValidationLogicResult))
            {
                return(EventClassification.Fault);
            }

            DataSeries[] rms =
            {
                viCycleDataGroup.VA?.RMS,
                viCycleDataGroup.VB?.RMS,
                viCycleDataGroup.VC?.RMS,
                viCycleDataGroup.VAB?.RMS,
                viCycleDataGroup.VBC?.RMS,
                viCycleDataGroup.VCA?.RMS
            };

            List <DataSeries> perUnitRMS = rms
                                           .Where(dataSeries => (object)dataSeries != null)
                                           .Where(dataSeries => dataSeries.SeriesInfo.Channel.PerUnitValue.GetValueOrDefault() != 0.0D)
                                           .Select(dataSeries => dataSeries.Multiply(1.0D / dataSeries.SeriesInfo.Channel.PerUnitValue.GetValueOrDefault()))
                                           .ToList();

            if (HasInterruption(perUnitRMS))
            {
                return(EventClassification.Interruption);
            }

            if (HasSag(perUnitRMS))
            {
                return(EventClassification.Sag);
            }

            if (HasSwell(perUnitRMS))
            {
                return(EventClassification.Swell);
            }

            return(EventClassification.Other);
        }