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