예제 #1
0
        /// <summary>
        /// Перерисовака графика
        /// </summary>
        private void CreateChart()
        {
            int WidthDifference  = pbChart.Location.X + chart.Indent + 5;
            int HeightDifference = pbChart.Location.Y + chart.Indent + 10;

            pbChart.Size = new Size(this.Size.Width - WidthDifference, this.Size.Height - HeightDifference);
            StateClass stateClass =
                CalculationDefectsController.GetCurrentStateClass(StateClassController.GetShaft(cbMachines.SelectedItem as Machine),
                                                                  (cbMachines.SelectedItem as Machine).Head);
            List <ResultDiagnostics> resultDiagnostics = new List <ResultDiagnostics>();
            List <Repairs>           repairs           = RepairsController.GetRepairs((cbMachines.SelectedItem as Machine));
            List <ResultForecast>    forecasts         = new List <ResultForecast>();

            if (rbBearing.Checked)
            {
                resultDiagnostics = DiagnosticResultController.GetBearingResult(cbMachines.SelectedItem as Machine);
            }
            else
            {
                resultDiagnostics = DiagnosticResultController.GetShaftResult(cbMachines.SelectedItem as Machine);
            }
            if (rbStandartForecast.Checked)
            {
                forecasts =
                    ForecastController.GetStandartForecast(resultDiagnostics,
                                                           stateClass,
                                                           (cbMachines.SelectedItem as Machine));
            }
            else
            {
                forecasts =
                    ForecastController.GetSimpleForecast(resultDiagnostics,
                                                         stateClass,
                                                         (cbMachines.SelectedItem as Machine));
            }

            chart = new Chart(pbChart.ClientRectangle, resultDiagnostics, forecasts, stateClass, repairs);
            pbChart.Invalidate();
        }
예제 #2
0
 private void cbMachines_SelectedIndexChanged(object sender, EventArgs e)
 {
     LoadRepairs(RepairsController.GetRepairs(cbMachines.SelectedItem as Machine));
 }
예제 #3
0
 private void btnAddRepairs_Click(object sender, EventArgs e)
 {
     RepairsController.AddRepairs(dtpDateRepairs.Value, (cbMachines.SelectedItem as Machine).ID, tbCommentRepairs.Text);
 }
        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);
        }