コード例 #1
0
 public ActionResult Index(ExcursionType type)
 {
     ViewData["ExcursionType"] = type;
     var exType = (int) type;
     using (var context = new ContentStorage())
     {
         var excursionList = context.Excursion.Where(e => e.ExcursionType == exType || exType == 0).Select(e => e).OrderBy(e => e.SortOrder).ToList();
         return View(excursionList);
     }
 }
コード例 #2
0
        public async Task <bool> ExcursionTypeCreate(ExcursionTypeCreateInputModel model)
        {
            var excursionTypeToAdd = new ExcursionType()
            {
                Name = model.Name
            };
            await context.ExcursionTypes.AddAsync(excursionTypeToAdd);

            await context.SaveChangesAsync();

            return(true);
        }
コード例 #3
0
 private void OutputFrequencyWarning(DateTime timestamp, double delta, ExcursionType typeOfExcursion, double totalAmount)
 {
     OnStatusMessage(MessageLevel.Info, $"Frequency excursion detected!\r\n              Time = {timestamp:dd-MMM-yyyy HH:mm:ss.fff}\r\n             Delta = {delta}\r\n              Type = {typeOfExcursion}\r\n    Estimated Size = {totalAmount:0.00}MW\r\n");
 }
コード例 #4
0
        /// <summary>
        /// Publishes the <see cref="IFrame"/> of time-aligned collection of <see cref="IMeasurement"/> values that arrived within the
        /// adapter's defined <see cref="ConcentratorBase.LagTime"/>.
        /// </summary>
        /// <param name="frame"><see cref="IFrame"/> of measurements with the same timestamp that arrived within <see cref="ConcentratorBase.LagTime"/> that are ready for processing.</param>
        /// <param name="index">Index of <see cref="IFrame"/> within a second ranging from zero to <c><see cref="ConcentratorBase.FramesPerSecond"/> - 1</c>.</param>
        protected override void PublishFrame(IFrame frame, int index)
        {
            double averageFrequency = double.NaN;

            // Increment frame counter
            m_count++;

            if (m_alarmProhibitCounter > 0)
            {
                m_alarmProhibitCounter--;
            }

            // Calculate the average of all the frequencies that arrived in this frame
            if (frame.Measurements.Count > 0)
            {
                averageFrequency = frame.Measurements.Select(m => m.Value.AdjustedValue).Average();
            }

            // Track new frequency and its timestamp
            m_frequencies.Add(averageFrequency);
            m_timeStamps.Add(frame.Timestamp);

            // Maintain analysis window size
            while (m_frequencies.Count > m_analysisWindowSize)
            {
                m_frequencies.RemoveAt(0);
                m_timeStamps.RemoveAt(0);
            }

            if (m_count % m_analysisInterval == 0 && m_frequencies.Count == m_analysisWindowSize)
            {
                double        frequency1 = m_frequencies[0];
                double        frequency2 = m_frequencies[m_analysisWindowSize - 1];
                double        frequencyDelta = 0.0D, estimatedSize = 0.0D;
                ExcursionType typeofExcursion = ExcursionType.GenerationTrip;
                bool          warningSignaled = false;

                if (!double.IsNaN(frequency1) && !double.IsNaN(frequency2))
                {
                    frequencyDelta = frequency2 - frequency1;

                    if (Math.Abs(frequencyDelta) > m_estimateTriggerThreshold)
                    {
                        m_detectedExcursions++;
                    }
                    else
                    {
                        m_detectedExcursions = 0;
                    }

                    if (m_detectedExcursions >= m_consecutiveDetections)
                    {
                        typeofExcursion = (frequency1 > frequency2 ? ExcursionType.GenerationTrip : ExcursionType.LoadTrip);
                        estimatedSize   = Math.Abs(frequencyDelta) * m_powerEstimateRatio;

                        // Display frequency excursion detection warning
                        if (m_alarmProhibitCounter == 0)
                        {
                            OutputFrequencyWarning(m_timeStamps[0], frequencyDelta, typeofExcursion, estimatedSize);
                            m_alarmProhibitCounter = m_alarmProhibitPeriod;
                        }

                        warningSignaled = true;
                    }
                }

                // Expose output measurement values
                IMeasurement[] outputMeasurements = OutputMeasurements;

                OnNewMeasurements(new IMeasurement[]
                {
                    Measurement.Clone(outputMeasurements[(int)Output.WarningSignal], warningSignaled ? 1.0D : 0.0D, frame.Timestamp),
                    Measurement.Clone(outputMeasurements[(int)Output.FrequencyDelta], frequencyDelta, frame.Timestamp),
                    Measurement.Clone(outputMeasurements[(int)Output.TypeOfExcursion], (int)typeofExcursion, frame.Timestamp),
                    Measurement.Clone(outputMeasurements[(int)Output.EstimatedSize], estimatedSize, frame.Timestamp)
                });
            }
        }
コード例 #5
0
 private void OutputFrequencyWarning(DateTime timestamp, double delta, ExcursionType typeOfExcursion, double totalAmount)
 {
     OnStatusMessage("WARNING: Frequency excursion detected!\r\n              Time = {0}\r\n             Delta = {1}\r\n              Type = {2}\r\n    Estimated Size = {3}MW\r\n", timestamp.ToString("dd-MMM-yyyy HH:mm:ss.fff"), delta, typeOfExcursion, totalAmount.ToString("0.00"));
 }
コード例 #6
0
        public override ITimeSeriesValue[] Compute(IFrame frame, IFrame[] previousFrames, IFrame[] future)
        {
            List <AdaptEvent> result = new List <AdaptEvent>();

            double value     = frame.Measurements["Signal"].Value;
            double prevValue = previousFrames.FirstOrDefault()?.Measurements["Signal"].Value ?? double.NaN;

            if (double.IsNaN(value))
            {
                return(result.ToArray());
            }

            if (m_settings.excursionType == ExcursionType.Lower || m_settings.excursionType == ExcursionType.UpperAndLower)
            {
                // On switch from Ok to in Alarm
                if (value < m_settings.lower && (prevValue >= m_settings.lower || double.IsNaN(prevValue)))
                {
                    m_lastCrossing     = frame.Timestamp;
                    m_differenceLower  = m_settings.lower - value;
                    m_currentExcursion = ExcursionType.Lower;
                }
                // On switch from in Alarm to OK
                else if (value > m_settings.lower && (prevValue <= m_settings.lower))
                {
                    double length = frame.Timestamp - m_lastCrossing;
                    if (length > m_settings.minDur * Gemstone.Ticks.PerSecond)
                    {
                        result.Add(new AdaptEvent("Excursion Detected", m_lastCrossing, length, new KeyValuePair <string, double>("Deviation", m_settings.lower - m_differenceLower)));
                    }
                    m_currentExcursion = ExcursionType.UpperAndLower;
                }

                if ((m_settings.lower - value) > m_differenceLower)
                {
                    m_differenceLower = (m_settings.lower - value);
                }
            }
            if (m_settings.excursionType == ExcursionType.Upper || m_settings.excursionType == ExcursionType.UpperAndLower)
            {
                // On switch from Ok to in Alarm
                if (value > m_settings.upper && (prevValue <= m_settings.upper || double.IsNaN(prevValue)))
                {
                    m_lastCrossing     = frame.Timestamp;
                    m_differenceUpper  = value - m_settings.upper;
                    m_currentExcursion = ExcursionType.Upper;
                }
                // On switch from in Alarm to OK
                else if (value < m_settings.upper && (prevValue >= m_settings.upper))
                {
                    double length = frame.Timestamp - m_lastCrossing;
                    if (length > m_settings.minDur * Gemstone.Ticks.PerSecond)
                    {
                        result.Add(new AdaptEvent("Excursion Detected", m_lastCrossing, length, new KeyValuePair <string, double>("Deviation", m_settings.upper + m_differenceUpper)));
                    }
                    m_currentExcursion = ExcursionType.UpperAndLower;
                }

                if ((value - m_settings.upper) > m_differenceUpper)
                {
                    m_differenceUpper = (value - m_settings.upper);
                }
            }

            return(result.ToArray());
        }
コード例 #7
0
 private void OutputFrequencyWarning(DateTime timestamp, double delta, ExcursionType typeOfExcursion, double totalAmount)
 {
     OnStatusMessage(MessageLevel.Info, $"Frequency excursion detected!\r\n              Time = {timestamp:dd-MMM-yyyy HH:mm:ss.fff}\r\n             Delta = {delta}\r\n              Type = {typeOfExcursion}\r\n    Estimated Size = {totalAmount:0.00}MW\r\n");
 }
コード例 #8
0
ファイル: FrequencyExcursion.cs プロジェクト: rmc00/gsf
 private void OutputFrequencyWarning(DateTime timestamp, double delta, ExcursionType typeOfExcursion, double totalAmount)
 {
     OnStatusMessage("WARNING: Frequency excursion detected!\r\n              Time = {0}\r\n             Delta = {1}\r\n              Type = {2}\r\n    Estimated Size = {3}MW\r\n", timestamp.ToString("dd-MMM-yyyy HH:mm:ss.fff"), delta, typeOfExcursion, totalAmount.ToString("0.00"));
 }