Ejemplo n.º 1
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>();
            CycleDataResource cycleDataResource = meterDataSet.GetResource <CycleDataResource>();
            FaultGroup        faultGroup;

            Log.Info("Executing operation to load fault location data into the database...");

            m_faultSummarizer = new FaultSummarizer(m_systemFrequency);
            m_faultSummarizer.MeterDataSet = meterDataSet;

            foreach (DataGroup dataGroup in cycleDataResource.DataGroups)
            {
                if (!faultDataResource.FaultLookup.TryGetValue(dataGroup, out faultGroup))
                {
                    continue;
                }

                // Generate summary rows for the fault to be entered into the database
                m_faultSummarizer.DataGroup  = dataGroup;
                m_faultSummarizer.FaultGroup = faultGroup;
                m_faultSummarizer.SummarizeFault();
            }
        }
Ejemplo n.º 2
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            CycleDataResource cycleDataResource = meterDataSet.GetResource <CycleDataResource>();
            FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>();

            using (AdoDataConnection connection = meterDataSet.CreateDbConnection())
            {
                object ToDateTime2(DateTime dateTime)
                {
                    using (IDbCommand command = connection.Connection.CreateCommand())
                    {
                        IDbDataParameter parameter = command.CreateParameter();
                        parameter.DbType = DbType.DateTime2;
                        parameter.Value  = dateTime;
                        return(parameter);
                    }
                }

                TableOperations <Event>     eventTable     = new TableOperations <Event>(connection);
                TableOperations <EventStat> eventStatTable = new TableOperations <EventStat>(connection);

                for (int i = 0; i < cycleDataResource.DataGroups.Count; i++)
                {
                    const string Filter =
                        "FileGroupID = {0} AND " +
                        "AssetID = {1} AND " +
                        "StartTime = {2} AND " +
                        "EndTime = {3}";

                    DataGroup        dataGroup        = cycleDataResource.DataGroups[i];
                    VIDataGroup      viDataGroup      = cycleDataResource.VIDataGroups[i];
                    VICycleDataGroup viCycleDataGroup = cycleDataResource.VICycleDataGroups[i];
                    int    fileGroupID = meterDataSet.FileGroup.ID;
                    int    assetID     = dataGroup.Asset.ID;
                    object startTime   = ToDateTime2(dataGroup.StartTime);
                    object endTime     = ToDateTime2(dataGroup.EndTime);

                    Event evt = eventTable.QueryRecordWhere(Filter, fileGroupID, assetID, startTime, endTime);

                    if (evt == null)
                    {
                        continue;
                    }

                    double?vPeak  = CalcVoltagePeak(viDataGroup);
                    double?vaMax  = CalcMax(viCycleDataGroup.VA?.RMS);
                    double?vbMax  = CalcMax(viCycleDataGroup.VB?.RMS);
                    double?vcMax  = CalcMax(viCycleDataGroup.VC?.RMS);
                    double?vabMax = CalcMax(viCycleDataGroup.VAB?.RMS);
                    double?vbcMax = CalcMax(viCycleDataGroup.VBC?.RMS);
                    double?vcaMax = CalcMax(viCycleDataGroup.VCA?.RMS);
                    double?vaMin  = CalcMin(viCycleDataGroup.VA?.RMS);
                    double?vbMin  = CalcMin(viCycleDataGroup.VB?.RMS);
                    double?vcMin  = CalcMin(viCycleDataGroup.VC?.RMS);
                    double?vabMin = CalcMin(viCycleDataGroup.VAB?.RMS);
                    double?vbcMin = CalcMin(viCycleDataGroup.VBC?.RMS);
                    double?vcaMin = CalcMin(viCycleDataGroup.VCA?.RMS);

                    double?iPeak = CalcPeak(new[] { viDataGroup.IA, viDataGroup.IB, viDataGroup.IC });
                    double?iaMax = CalcMax(viCycleDataGroup.IA?.RMS);
                    double?ibMax = CalcMax(viCycleDataGroup.IB?.RMS);
                    double?icMax = CalcMax(viCycleDataGroup.IC?.RMS);

                    double?ia2t = null;
                    double?ib2t = null;
                    double?ic2t = null;

                    double?initialMW = CalcMW(viCycleDataGroup, true);
                    double?finalMW   = CalcMW(viCycleDataGroup, false);

                    if (faultDataResource.FaultLookup.TryGetValue(dataGroup, out DataAnalysis.FaultGroup faultGroup))
                    {
                        ia2t = CalcI2t(faultGroup, viDataGroup.IA);
                        ib2t = CalcI2t(faultGroup, viDataGroup.IB);
                        ic2t = CalcI2t(faultGroup, viDataGroup.IC);
                    }

                    int?pqviewID = null;
                    if (meterDataSet.FilePath.Contains("\\pqview4\\events\\"))
                    {
                        Regex  pattern = new Regex(@"^\\pqview4\\events\\PQView4 \d+\\\d+T\d+-(?<PQViewID>\d+).pqd$");
                        Match  match   = pattern.Match(meterDataSet.FilePath);
                        string str     = match.Groups["PQViewID"].Value;
                        if (str != null)
                        {
                            pqviewID = int.Parse(str);
                        }
                    }

                    eventStatTable.AddNewRecord(new EventStat()
                    {
                        EventID   = evt.ID,
                        VPeak     = vPeak,
                        VAMax     = vaMax,
                        VBMax     = vbMax,
                        VCMax     = vcMax,
                        VABMax    = vabMax,
                        VBCMax    = vbcMax,
                        VCAMax    = vcaMax,
                        VAMin     = vaMin,
                        VBMin     = vbMin,
                        VCMin     = vcMin,
                        VABMin    = vabMin,
                        VBCMin    = vbcMin,
                        VCAMin    = vcaMin,
                        IPeak     = iPeak,
                        IAMax     = iaMax,
                        IBMax     = ibMax,
                        ICMax     = icMax,
                        IA2t      = ia2t,
                        IB2t      = ib2t,
                        IC2t      = ic2t,
                        InitialMW = initialMW,
                        FinalMW   = finalMW,
                        PQViewID  = pqviewID
                    });
                }
            }
        }
Ejemplo n.º 3
0
        public override void Execute(MeterDataSet meterDataSet)
        {
            FaultDataResource faultDataResource = meterDataSet.GetResource <FaultDataResource>();
            string            stationKey        = meterDataSet.Meter.MeterLocation.AssetKey;

            foreach (var kvp in faultDataResource.FaultLookup)
            {
                DataGroup dataGroup = kvp.Key;
                DataAnalysis.FaultGroup faultGroup = kvp.Value;
                string lineKey = dataGroup.Line.AssetKey;

                for (int i = 0; i < faultGroup.Faults.Count; i++)
                {
                    int faultNumber          = i + 1;
                    DataAnalysis.Fault fault = faultGroup.Faults[i];

                    if (fault.IsSuppressed)
                    {
                        continue;
                    }

                    string distance = fault.Summaries
                                      .Where(summary => summary.IsValid)
                                      .Where(summary => summary.IsSelectedAlgorithm)
                                      .Select(summary => summary.Distance.ToString("0.###"))
                                      .FirstOrDefault();

                    if (distance == null)
                    {
                        return;
                    }

                    string    url           = string.Format(Settings.URLFormat, stationKey, lineKey, distance);
                    string    structureInfo = GetStructureInfo(url);
                    DataTable structureData = ToDataTable(structureInfo);

                    if (structureData.Rows.Count == 0)
                    {
                        return;
                    }

                    Func <string, string> fieldMappingLookup = FieldMappingLookup;
                    string assetKeyField     = fieldMappingLookup("AssetKey");
                    string latitudeKeyField  = fieldMappingLookup("Latitude");
                    string longitudeKeyField = fieldMappingLookup("Longitude");

                    if (!structureData.Columns.Contains(assetKeyField))
                    {
                        return;
                    }

                    using (AdoDataConnection connection = meterDataSet.CreateDbConnection())
                    {
                        TableOperations <Event> eventTable = new TableOperations <Event>(connection);
                        Event evt            = eventTable.GetEvent(meterDataSet.FileGroup, dataGroup);
                        int   faultSummaryID = connection.ExecuteScalar <int>(FaultSummaryQuery, evt.ID, faultNumber);

                        TableOperations <Structure> structureTable = new TableOperations <Structure>(connection);

                        foreach (DataRow row in structureData.Rows)
                        {
                            string assetKey  = row.Field <string>(assetKeyField);
                            string latitude  = null;
                            string longitude = null;

                            if (structureData.Columns.Contains(latitudeKeyField))
                            {
                                latitude = row.Field <string>(latitudeKeyField);
                            }

                            if (structureData.Columns.Contains(longitudeKeyField))
                            {
                                longitude = row.Field <string>(longitudeKeyField);
                            }

                            Structure structure = structureTable.QueryRecordWhere("AssetKey = {0}", assetKey)
                                                  ?? new Structure()
                            {
                                AssetKey = assetKey
                            };

                            structure.LineID = dataGroup.Line.ID;

                            if (double.TryParse(latitude, out double lat))
                            {
                                structure.Latitude = lat;
                            }

                            if (double.TryParse(longitude, out double lon))
                            {
                                structure.Longitude = lon;
                            }

                            structureTable.AddNewOrUpdateRecord(structure);

                            if (structure.ID == 0)
                            {
                                structure.ID = connection.ExecuteScalar <int>("SELECT @@IDENTITY");
                            }

                            if (faultSummaryID != 0)
                            {
                                connection.ExecuteNonQuery("INSERT INTO NearestStructure(FaultSummaryID, StructureID) VALUES({0}, {1})", faultSummaryID, structure.ID);
                            }
                        }
                    }
                }
            }
        }