Example #1
0
        private Dictionary <BreakerOperationType, int> GetBreakerOperationTypeLookup(DbAdapterContainer dbAdapterContainer)
        {
            MeterData.BreakerOperationTypeDataTable breakerOperationTypeTable = new MeterData.BreakerOperationTypeDataTable();
            BreakerOperationType breakerOperationType = default(BreakerOperationType);

            foreach (BreakerOperationType operationType in Enum.GetValues(typeof(BreakerOperationType)))
            {
                breakerOperationTypeTable.AddBreakerOperationTypeRow(operationType.ToString(), operationType.ToString());
            }

            BulkLoader bulkLoader = new BulkLoader();

            bulkLoader.Connection     = dbAdapterContainer.Connection;
            bulkLoader.CommandTimeout = dbAdapterContainer.CommandTimeout;

            bulkLoader.MergeTableFormat = "MERGE INTO {0} AS Target " +
                                          "USING {1} AS Source " +
                                          "ON Source.Name = Target.Name " +
                                          "WHEN NOT MATCHED THEN " +
                                          "    INSERT (Name, Description) " +
                                          "    VALUES (Source.Name, Source.Description);";

            bulkLoader.Load(breakerOperationTypeTable);

            dbAdapterContainer.GetAdapter <BreakerOperationTypeTableAdapter>().Fill(breakerOperationTypeTable);

            return(breakerOperationTypeTable
                   .Where(row => Enum.TryParse(row.Name, out breakerOperationType)).Select(row => Tuple.Create(breakerOperationType, row.ID))
                   .ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2));
        }
Example #2
0
        private BreakerOperation GetBreakerOperation(AdoDataConnection connection, int eventID, string breakerNumber, BreakerTiming breakerTiming, PhaseTiming aPhaseTiming, PhaseTiming bPhaseTiming, PhaseTiming cPhaseTiming)
        {
            TableOperations <Phase> phaseTable = new TableOperations <Phase>(connection);
            TableOperations <openXDA.Model.BreakerOperationType> breakerOperationTypeTable = new TableOperations <openXDA.Model.BreakerOperationType>(connection);

            double maxTiming          = GetMaxTiming(breakerTiming, aPhaseTiming, bPhaseTiming, cPhaseTiming);
            string phase              = GetLatestPhase(aPhaseTiming, bPhaseTiming, cPhaseTiming);
            BreakerOperationType type = GetBreakerOperationType(maxTiming, breakerTiming.Speed);

            return(new BreakerOperation()
            {
                EventID = eventID,
                PhaseID = phaseTable.GetOrAdd(phase).ID,
                BreakerOperationTypeID = breakerOperationTypeTable.GetOrAdd(type.ToString()).ID,
                BreakerNumber = breakerNumber,
                TripCoilEnergized = breakerTiming.TimeEnergized.Time,
                StatusBitSet = breakerTiming.IsValid ? breakerTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time,
                StatusBitChatter = breakerTiming.StatusChatter,
                APhaseCleared = aPhaseTiming.IsValid ? aPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time,
                BPhaseCleared = bPhaseTiming.IsValid ? bPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time,
                CPhaseCleared = cPhaseTiming.IsValid ? cPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time,
                BreakerTiming = NotNaN(maxTiming),
                StatusTiming = NotNaN(breakerTiming.Timing),
                APhaseBreakerTiming = NotNaN(aPhaseTiming.Timing),
                BPhaseBreakerTiming = NotNaN(bPhaseTiming.Timing),
                CPhaseBreakerTiming = NotNaN(cPhaseTiming.Timing),
                DcOffsetDetected = (aPhaseTiming.DcOffsetDetected || bPhaseTiming.DcOffsetDetected || cPhaseTiming.DcOffsetDetected),
                BreakerSpeed = NotNaN(breakerTiming.Speed)
            });
        }
Example #3
0
        private MeterData.BreakerOperationRow GetBreakerOperationRow(string breakerNumber, BreakerTiming breakerTiming, PhaseTiming aPhaseTiming, PhaseTiming bPhaseTiming, PhaseTiming cPhaseTiming)
        {
            double maxTiming          = GetMaxTiming(aPhaseTiming, bPhaseTiming, cPhaseTiming);
            string phase              = GetLatestPhase(aPhaseTiming, bPhaseTiming, cPhaseTiming);
            BreakerOperationType type = GetBreakerOperationType(maxTiming, breakerTiming.Speed);

            MeterData.BreakerOperationRow breakerOperationRow = m_breakerOperationTable.NewBreakerOperationRow();

            breakerOperationRow.PhaseID = m_phaseLookup.GetOrAdd(phase, name => new Phase()
            {
                Name = name, Description = name
            }).ID;
            breakerOperationRow.BreakerOperationTypeID = s_breakerOperationTypeLookup[type];
            breakerOperationRow.BreakerNumber          = breakerNumber;
            breakerOperationRow.TripCoilEnergized      = breakerTiming.TimeEnergized.Time;
            breakerOperationRow.StatusBitSet           = breakerTiming.IsValid ? breakerTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time;
            breakerOperationRow.APhaseCleared          = aPhaseTiming.IsValid ? aPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time;
            breakerOperationRow.BPhaseCleared          = bPhaseTiming.IsValid ? bPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time;
            breakerOperationRow.CPhaseCleared          = cPhaseTiming.IsValid ? cPhaseTiming.TimeCleared.Time : breakerTiming.TimeEnergized.Time;
            breakerOperationRow.BreakerTiming          = NotNaN(maxTiming);
            breakerOperationRow.APhaseBreakerTiming    = NotNaN(aPhaseTiming.Timing);
            breakerOperationRow.BPhaseBreakerTiming    = NotNaN(bPhaseTiming.Timing);
            breakerOperationRow.CPhaseBreakerTiming    = NotNaN(cPhaseTiming.Timing);
            breakerOperationRow.BreakerSpeed           = NotNaN(breakerTiming.Speed);

            return(breakerOperationRow);
        }
        private Dictionary <BreakerOperationType, int> GetBreakerOperationTypeLookup(DbAdapterContainer dbAdapterContainer)
        {
            BreakerOperationTypeDataTable breakerOperationTypeTable = new BreakerOperationTypeDataTable();
            BreakerOperationType          breakerOperationType      = default(BreakerOperationType);

            foreach (BreakerOperationType operationType in Enum.GetValues(typeof(BreakerOperationType)))
            {
                breakerOperationTypeTable.AddBreakerOperationTypeRow(operationType.ToString(), operationType.ToString());
            }

            BulkLoader bulkLoader = new BulkLoader();

            bulkLoader.Connection     = dbAdapterContainer.Connection;
            bulkLoader.CommandTimeout = dbAdapterContainer.CommandTimeout;

            bulkLoader.MergeTableFormat = "MERGE INTO {0} AS Target " +
                                          "USING {1} AS Source " +
                                          "ON Source.Name = Target.Name " +
                                          "WHEN NOT MATCHED THEN " +
                                          "    INSERT (Name, Description) " +
                                          "    VALUES (Source.Name, Source.Description);";

            bulkLoader.Load(breakerOperationTypeTable);

            dbAdapterContainer.GetAdapter <BreakerOperationTypeTableAdapter>().Fill(breakerOperationTypeTable);

            foreach (IGrouping <string, BreakerOperationTypeRow> grouping in breakerOperationTypeTable.GroupBy(row => row.Name))
            {
                if (grouping.Count() > 1)
                {
                    Log.Warn($"Found duplicate breaker operation type: {grouping.Key}");
                }
            }

            return(breakerOperationTypeTable
                   .Where(row => Enum.TryParse(row.Name, out breakerOperationType))
                   .Select(row => new { BreakerOperationType = breakerOperationType, row.ID })
                   .ToList()
                   .DistinctBy(obj => obj.BreakerOperationType)
                   .ToDictionary(obj => obj.BreakerOperationType, obj => obj.ID));
        }