public static List <ResultForecast> GetSimpleForecast(List <ResultDiagnostics> resultdiagnostics, StateClass stateClass, Machine machine)
        {
            List <ResultDiagnostics> results = new List <ResultDiagnostics>();

            results.AddRange(resultdiagnostics);

            List <ResultForecast> forecasts = new List <ResultForecast>();

            int CountForecast = 0;

            ResultForecast forecast = new ResultForecast();

            float Smax  = 0;
            float Stemp = 0;

            ResultDiagnostics resultmax1 = new ResultDiagnostics();
            ResultDiagnostics resultmax2 = new ResultDiagnostics();

            float SecondStateValue;

            Repairs lastrepairs = RepairsController.GetLastRepairs(machine);

            results = results.Where(x => x.date > lastrepairs.date).OrderBy(x => x.date).ToList();

            for (int i = 1; i < results.Count; i++)
            {
                Stemp = (Math.Abs(results[i].value - results[i - 1].value) / (((results[i].date.Ticks - 621355968000000000) / 10000000)
                                                                              - ((results[i - 1].date.Ticks - 621355968000000000) / 10000000)));
                if (Stemp > Smax)
                {
                    Smax       = Stemp;
                    resultmax1 = results[i];
                    resultmax2 = results[i - 1];
                }
            }

            if (results.Max(x => x.value) > stateClass.acceptably)
            {
                SecondStateValue = stateClass.limited;
                forecast.level   = "Недопустимо";
                CountForecast    = 1;
            }
            else if (results.Max(x => x.value) > stateClass.nicely)
            {
                SecondStateValue = stateClass.acceptably;
                forecast.level   = "Требует принятия мер";
                CountForecast    = 2;
            }
            else
            {
                SecondStateValue = stateClass.nicely;
                forecast.level   = "Допустимо";
                CountForecast    = 3;
            }

            for (int i = 0; i < CountForecast; i++)
            {
                forecast = new ResultForecast();
                float ValueDifference1 = Math.Abs(resultmax1.value - resultmax2.value);

                TimeSpan TimeDifference1 = resultmax1.date - resultmax2.date;

                float ValueDifference2 = Math.Abs(SecondStateValue - results.Last().value);

                TimeSpan TimeDifference2 = new TimeSpan(Convert.ToInt64((TimeDifference1.Ticks * ValueDifference2) / ValueDifference1));

                forecast.date  = results.Max(x => x.date).AddTicks(TimeDifference2.Ticks);
                forecast.value = SecondStateValue;

                forecasts.Add(forecast);

                results.Add(new ResultDiagnostics("", forecast.value, forecast.level, forecast.date));

                if (forecast.value >= stateClass.acceptably)
                {
                    SecondStateValue = stateClass.limited;
                    forecast.level   = "Недопустимо";
                }
                else if (forecast.value >= stateClass.nicely)
                {
                    SecondStateValue = stateClass.acceptably;
                    forecast.level   = "Требует принятия мер";
                }
            }


            return(forecasts);
        }
Example #2
0
 public float GetMaxY()
 {
     return(ResultForecast.Max(x => x.value) + 0.5f);
 }
        public static List <ResultForecast> GetStandartForecast(List <ResultDiagnostics> resultdiagnostics, StateClass stateClass, Machine machine)
        {
            List <ResultDiagnostics> results = new List <ResultDiagnostics>();

            if (resultdiagnostics.Count > 5)
            {
                results.AddRange(resultdiagnostics.OrderByDescending(x => x.date).Take(5).OrderBy(x => x.date));
            }
            else
            {
                results.AddRange(resultdiagnostics);
            }

            List <ResultForecast> forecasts = new List <ResultForecast>();

            int CountForecast = 0;

            ResultForecast forecast = new ResultForecast();
            float          SecondStateValue;

            float    AverageChangeValue = 0;
            TimeSpan AverageChangeDate  = new TimeSpan();

            for (int i = 1; i < results.Count; i++)
            {
                AverageChangeValue += Math.Abs(results[i].value - results[i - 1].value);
                AverageChangeDate  += results[i].date - results[i - 1].date;
            }

            AverageChangeValue = AverageChangeValue / (results.Count - 1);
            AverageChangeDate  = new TimeSpan(AverageChangeDate.Ticks / (results.Count - 1));

            if (results.Max(x => x.value) > stateClass.acceptably)
            {
                SecondStateValue = stateClass.limited;
                forecast.level   = "Недопустимо";
                CountForecast    = 1;
            }
            else if (results.Max(x => x.value) > stateClass.nicely)
            {
                SecondStateValue = stateClass.acceptably;
                forecast.level   = "Требует принятия мер";
                CountForecast    = 2;
            }
            else
            {
                SecondStateValue = stateClass.nicely;
                forecast.level   = "Допустимо";
                CountForecast    = 3;
            }

            for (int i = 0; i < CountForecast; i++)
            {
                forecast = new ResultForecast();
                float ValueDifference = SecondStateValue - results.OrderBy(x => x.date).Last().value;

                TimeSpan addedtime = new TimeSpan(Convert.ToInt64((AverageChangeDate.Ticks * ValueDifference) / AverageChangeValue));

                forecast.date  = results.OrderBy(x => x.date).Last().date.AddTicks(addedtime.Ticks);
                forecast.value = SecondStateValue;

                forecasts.Add(forecast);

                results.Add(new ResultDiagnostics("", forecast.value, forecast.level, forecast.date));

                if (forecast.value >= stateClass.acceptably)
                {
                    SecondStateValue = stateClass.limited;
                    forecast.level   = "Недопустимо";
                }
                else if (forecast.value >= stateClass.nicely)
                {
                    SecondStateValue = stateClass.acceptably;
                    forecast.level   = "Требует принятия мер";
                }
            }

            return(forecasts);
        }
Example #4
0
        public float GetMaxX()
        {
            TimeSpan time = new TimeSpan(ResultForecast.Max(x => x.date).Ticks);

            return(time.Days);
        }