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); }
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); }
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); }