Exemple #1
0
        private XElement GetSegmentElement(Fault.Segment segment)
        {
            double duration = (segment.EndTime - segment.StartTime).TotalSeconds;

            return(new XElement("segment",
                                new XElement("type", segment.FaultType),
                                new XElement("start",
                                             new XElement("time", segment.StartTime.ToString(DateTimeFormat)),
                                             new XElement("index", segment.StartSample)),
                                new XElement("end",
                                             new XElement("time", segment.EndTime.ToString(DateTimeFormat)),
                                             new XElement("index", segment.EndSample)),
                                new XElement("duration",
                                             new XElement("seconds", duration.ToString(DoubleFormat)),
                                             new XElement("cycles", (duration * m_systemFrequency).ToString(DoubleFormat)))));
        }
Exemple #2
0
            private FaultLocationData.FaultSegmentRow CreateFaultSegment(Fault.Segment segment)
            {
                string      segmentTypeName;
                SegmentType segmentType;

                FaultLocationData.FaultSegmentRow faultSegment;

                segmentTypeName = string.Format("{0} Fault", segment.FaultType).Replace("ABC", "3-Phase");

                // ReSharper disable once InconsistentlySynchronizedField
                if (s_segmentTypeLookup.TryGetValue(segmentTypeName, out segmentType))
                {
                    faultSegment = FaultSegmentTable.NewFaultSegmentRow();
                    faultSegment.SegmentTypeID = segmentType.ID;
                    faultSegment.StartTime     = segment.StartTime;
                    faultSegment.EndTime       = segment.EndTime;
                    faultSegment.StartSample   = segment.StartSample;
                    faultSegment.EndSample     = segment.EndSample;

                    return(faultSegment);
                }

                return(null);
            }
Exemple #3
0
        private void ClassifyFaults(List <Fault> faults, DataGroup dataGroup, VICycleDataGroup viCycleDataGroup)
        {
            Fault.Segment currentSegment = null;

            DataSeries iaRMS = viCycleDataGroup.IA.RMS;
            DataSeries ibRMS = viCycleDataGroup.IB.RMS;
            DataSeries icRMS = viCycleDataGroup.IC.RMS;

            double iaPre = iaRMS[0].Value;
            double ibPre = ibRMS[0].Value;
            double icPre = icRMS[0].Value;

            double ia;
            double ib;
            double ic;

            int       numPhases;
            FaultType faultType;

            foreach (Fault fault in faults)
            {
                for (int i = fault.StartSample; i <= fault.EndSample && i < iaRMS.DataPoints.Count; i++)
                {
                    ia = iaRMS[i].Value;
                    ib = ibRMS[i].Value;
                    ic = icRMS[i].Value;

                    numPhases = GetNumPhases(4.0D, ia, ib, ic);

                    if (numPhases == 3)
                    {
                        numPhases = GetNumPhases(1.5, ia - iaPre, ib - ibPre, ic - icPre);
                    }

                    faultType = GetFaultType(numPhases, ia, ib, ic);

                    if ((object)currentSegment == null)
                    {
                        currentSegment             = new Fault.Segment(faultType);
                        currentSegment.StartTime   = viCycleDataGroup.IA.RMS[i].Time;
                        currentSegment.StartSample = i;
                        fault.Segments.Add(currentSegment);
                    }
                    else if (currentSegment.FaultType != faultType)
                    {
                        currentSegment.EndTime   = viCycleDataGroup.IA.RMS[i - 1].Time;
                        currentSegment.EndSample = i - 1;

                        currentSegment             = new Fault.Segment(faultType);
                        currentSegment.StartTime   = viCycleDataGroup.IA.RMS[i].Time;
                        currentSegment.StartSample = i;
                        fault.Segments.Add(currentSegment);
                    }
                }

                if ((object)currentSegment != null)
                {
                    currentSegment.EndTime   = dataGroup[0][fault.EndSample].Time;
                    currentSegment.EndSample = fault.EndSample;
                    currentSegment           = null;
                }
            }
        }