private void btnCalculation_Click(object sender, EventArgs e)
        {
            float CurrentHead;

            if ((TempStorage.GetFL().Count > 0))
            {
                bool SuccessParse = float.TryParse(tbCurrentHead.Text, out CurrentHead);
                if (SuccessParse || CurrentHead != 0)
                {
                    Machine           machine = lbMachines.SelectedItem as Machine;
                    ResultDiagnostics shaft   = CalculationDefectsController.CalculShaft(machine, CurrentHead);;
                    ResultDiagnostics bearing = CalculationDefectsController.CalculBearing(machine, CurrentHead);
                    ResultDiagnostics engine  = CalculationDefectsController.CalculEngine(machine, CurrentHead);
                    lbShaft.Text        = shaft.level;
                    lbShaft.BackColor   = ColorQualifier(lbShaft.Text);
                    lbBearing.Text      = bearing.level;
                    lbBearing.BackColor = ColorQualifier(lbBearing.Text);
                    lbEngine.Text       = engine.level;
                    lbEngine.BackColor  = ColorQualifier(lbEngine.Text);
                }
                else
                {
                    MessageBox.Show("Некорректно введен текущий относительный напор!");
                }
            }
            else
            {
                MessageBox.Show("Не выбран файл с данными!");
            }
        }
Exemple #2
0
        public static ResultDiagnostics CalculBearing(Machine machine, float CurrentHead)
        {
            ResultDiagnostics result     = new ResultDiagnostics();
            float             maxBearing = 0;

            StateClass CurrenClass = GetCurrentStateClass(model.StateClass.GetBearingStateClasses(machine), CurrentHead); //Определение подходящий классов состояния

            float fiftyHz = 0;                                                                                            //вычисляем среднее значение при 50Гц
            int   countFL = TempStorage.GetFL().Count;

            foreach (var item in TempStorage.GetFL())
            {
                fiftyHz += item.GetdB(50);
            }
            fiftyHz = fiftyHz / countFL;

            float SpeedHz = machine.Speed / 60; // Находим частоту оборотов в герцах

            float maxAmplitude = 0;             //Находим среднюю максимальную амплитуду в файлах

            foreach (var fl in TempStorage.GetFL())
            {
                maxAmplitude += fl.GetMaxAmplitudeBearing(SpeedHz);
            }
            maxAmplitude = maxAmplitude / countFL;

            maxBearing   = maxAmplitude / fiftyHz;
            result.file  = "В разработке";
            result.value = maxBearing;
            result.date  = DateTime.Now;
            if (maxBearing <= CurrenClass.nicely)
            {
                result.level = "Хорошо";
            }
            else if ((maxBearing <= CurrenClass.acceptably) && (maxBearing > CurrenClass.nicely))
            {
                result.level = "Допустимо";
            }
            else if ((maxBearing <= CurrenClass.limited) && (maxBearing > CurrenClass.acceptably) && (maxBearing > CurrenClass.nicely))
            {
                result.level = "Требует принятия мер";
            }
            else
            {
                result.level = "Недопустимо";
            }
            DiagnosticResultController.AddBearingResult(machine, result);
            return(result);
        }
Exemple #3
0
        public static ResultDiagnostics CalculEngine(Machine machine, float CurrentHead)
        {
            ResultDiagnostics result     = new ResultDiagnostics();
            float             averEngine = 0;

            float fiftyHz = 0; //вычисляем среднее значение при 50Гц
            int   countFL = TempStorage.GetFL().Count;

            foreach (var item in TempStorage.GetFL())
            {
                fiftyHz += item.GetdB(50);
            }
            fiftyHz = fiftyHz / countFL;

            float SpeedHz = machine.Speed / 60; // Находим частоту оборотов в герцах

            float maxAmplitudeEngine  = 0;      //Максимальная амплитуда на отрезках fподш дв и fэксц дв
            float maxAmplitudeBearing = 0;      //Максимальная амплитуда на отрезке fподш

            foreach (var fl in TempStorage.GetFL())
            {
                maxAmplitudeEngine  += fl.GetMaxAmplitudeEngine(SpeedHz, machine.CountPairs);
                maxAmplitudeBearing += fl.GetMaxAmplitudeBearing(SpeedHz);
            }
            maxAmplitudeEngine  = maxAmplitudeEngine / countFL;
            maxAmplitudeBearing = maxAmplitudeBearing / countFL;

            averEngine   = maxAmplitudeEngine / maxAmplitudeBearing;
            result.file  = "Не реализованно!";
            result.value = averEngine;
            result.date  = DateTime.Now;
            if (averEngine > 0.7)
            {
                result.level = "Обнаружено";
            }
            else
            {
                result.level = "Не обнаружено";
            }
            DiagnosticResultController.AddEngineResult(machine, result);
            return(result);
        }
 public static void AddEngineResult(Machine machine, ResultDiagnostics engineresult)
 {
     model.EngineResult.Add(machine, engineresult);
 }
 public static void AddBearingResult(Machine machine, ResultDiagnostics bearingresult)
 {
     model.BearingResult.Add(machine, bearingresult);
 }
 public static void AddShaftResult(Machine machine, ResultDiagnostics shaftresult)
 {
     model.ShaftResult.Add(machine, shaftresult);
 }
        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);
        }