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("Не выбран файл с данными!"); } }
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); }
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); }