Пример #1
0
            public void SummarizeFault()
            {
                using (AdoDataConnection connection = MeterDataSet.CreateDbConnection())
                {
                    TableOperations <Event>       eventTable       = new TableOperations <Event>(connection);
                    TableOperations <SegmentType> segmentTypeTable = new TableOperations <SegmentType>(connection);

                    TableOperations <openXDA.Model.FaultGroup> faultGroupTable   = new TableOperations <openXDA.Model.FaultGroup>(connection);
                    TableOperations <FaultSegment>             faultSegmentTable = new TableOperations <FaultSegment>(connection);
                    TableOperations <FaultSummary>             faultSummaryTable = new TableOperations <FaultSummary>(connection);

                    Event       evt = eventTable.GetEvent(MeterDataSet.FileGroup, DataGroup);
                    SegmentType faultSegmentType = segmentTypeTable.GetOrAdd("Fault");

                    // Create a fault group row for the whole group of faults
                    if (FaultGroup.FaultDetectionLogicResult != false || FaultGroup.FaultValidationLogicResult != false)
                    {
                        faultGroupTable.AddNewRecord(CreateFaultGroup(evt.ID, FaultGroup));
                    }

                    for (int faultIndex = 0; faultIndex < FaultGroup.Faults.Count; faultIndex++)
                    {
                        Fault fault = FaultGroup.Faults[faultIndex];

                        // Create a fault segment for the fault itself
                        faultSegmentTable.AddNewRecord(CreateFaultSegment(evt.ID, fault, faultSegmentType));

                        // Create fault segments for each fault type found within the fault
                        foreach (Fault.Segment segment in fault.Segments)
                        {
                            string      segmentTypeName = string.Format("{0} Fault", segment.FaultType).Replace("ABC", "3-Phase");
                            SegmentType segmentType     = segmentTypeTable.GetOrAdd(segmentTypeName);
                            faultSegmentTable.AddNewRecord(CreateFaultSegment(evt.ID, segment, segmentType));
                        }

                        // Create the fault summary rows for this fault
                        foreach (FaultSummary faultSummary in CreateFaultSummaries(evt.ID, faultIndex + 1, fault))
                        {
                            faultSummaryTable.AddNewRecord(faultSummary);
                        }
                    }

                    // Generate fault curves for each algorithm used to analyze the fault
                    TableOperations <FaultCurve>          faultCurveTable          = new TableOperations <FaultCurve>(connection);
                    TableOperations <FaultCurveStatistic> faultCurveStatisticTable = new TableOperations <FaultCurveStatistic>(connection);

                    if (FaultGroup.Faults.Any())
                    {
                        for (int i = 0; i < FaultGroup.Faults[0].Curves.Count; i++)
                        {
                            FaultCurve faultCurve = CreateFaultCurve(evt.ID, i);
                            faultCurveTable.AddNewRecord(faultCurve);
                            faultCurve.ID = connection.ExecuteScalar <int>("SELECT @@IDENTITY");

                            for (int faultIndex = 0; faultIndex < FaultGroup.Faults.Count; faultIndex++)
                            {
                                Fault fault = FaultGroup.Faults[faultIndex];

                                if (fault.Curves[i].Series.DataPoints.Count == 0)
                                {
                                    continue;
                                }

                                FaultCurveStatistic faultCurveStatistic = new FaultCurveStatistic()
                                {
                                    FaultCurveID      = faultCurve.ID,
                                    FaultNumber       = faultIndex + 1,
                                    Maximum           = ToDbFloat(fault.Curves[i].Maximum),
                                    Minimum           = ToDbFloat(fault.Curves[i].Minimum),
                                    Average           = ToDbFloat(fault.Curves[i].Average),
                                    StandardDeviation = ToDbFloat(fault.Curves[i].StandardDeviation)
                                };

                                faultCurveStatisticTable.AddNewRecord(faultCurveStatistic);
                            }
                        }
                    }
                }
            }