using System; using System.Collections.Generic; using System.Threading; using System.Linq; using System.Threading.Tasks; using DPGetDataContract; using Models; namespace DataGen { public class MeasureDataGen : IDPGetDataContract { List messureList = new List(); public List ReadMessureList { get => messureList;} /* public void GenerateÜberdruck(DateTime startprüfung, double prüfdruck, bool failure=false) { List messreihen = new List(); string prüfdatum = startprüfung.ToShortDateString(); bool Bestanden = !failure; List druckwerte = new List(); double druck = 0.0; bool druckerreicht = false; int messreiheID = 0; // Anstiegskurve erzeugen DateTime start = startprüfung; #region Befüllphase while (!druckerreicht) { start = start.AddSeconds(4); if (failure && druck >= 56) break; if (!failure &&(druck > (prüfdruck * 1.1))) druckerreicht = true; Random zufall = new Random(DateTime.Now.Millisecond); if(!druckerreicht) { druck += Convert.ToDouble((zufall.Next(1000, 10000) / 1000.0)); druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, Pressure = druck.ToString(), MeasureType = EMeasureType.BEFÜLLPHASE }); messreiheID++; } Thread.Sleep(100); } #endregion #region Beruhigungsphase if (!failure) { Random druckabfall = new Random(DateTime.Now.Millisecond); double dp = druckabfall.Next(2, 9) + druckabfall.NextDouble(); //double startdruck = druckwerte.Last() - dp; //startdruck += druckabfall.NextDouble(); double dpt = dp / 90.0; for (int i = 0; i <= 90; i++) { start = start.AddSeconds(2); druck -= dpt; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Pressure = druck.ToString(), MeasureType = EMeasureType.BERUHUNGSZEIT, Datum = start, EintragID = messreiheID }); messreiheID++; } } else { int anzahlschritte = 20; double druckabfall = druck / anzahlschritte; for(int i = 0; i <= anzahlschritte; i++) { start = start.AddSeconds(2); druck -= druckabfall; if (druck < 0) druck = 0; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Pressure = druck.ToString(), MeasureType = EMeasureType.BERUHUNGSZEIT, Datum = start, EintragID = messreiheID }); messreiheID++; } } #endregion #region Prüfungsphase if (!failure) { for (int i = 0; i < 90; i++) { Random Prüfung = new Random(DateTime.Now.Millisecond); double abfall = Prüfung.NextDouble() / 10; start = start.AddSeconds(2); if (abfall <= 0.07 && (i % 2 == 0)) { druck -= abfall; } druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, MeasureType = EMeasureType.PRÜFUNGSPHASE, Pressure = druck.ToString() }); messreiheID++; Thread.Sleep(100); } } #endregion #region EndePrüfung start = start.AddSeconds(2); messreiheID++; messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, MeasureType = EMeasureType.ENDEPRÜFUNGMARKER, Pressure = druck.ToString() }) ; start = start.AddSeconds(4); messreihen.Add(new MeasureData() { Pressure = druckwerte.Last().ToString(), Datum = start, MeasureType = EMeasureType.ENDEPRÜFUNGMARKER, EintragID = messreiheID }) ; while(druck > 10) { start = start.AddSeconds(2); double abbau = druck / 2; druck -= abbau; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, Pressure = druck.ToString(), EintragID = messreiheID, MeasureType = EMeasureType.LEERPHASE }); messreiheID++; } messreihen.Add(new MeasureData() { Datum = start.AddSeconds(2), Pressure = "0,0", EintragID = messreiheID, MeasureType = EMeasureType.LEERPHASE }); messreihen.Add(new MeasureData() { Datum = start.AddSeconds(4), Pressure = "0,0", EintragID = messreiheID+1, MeasureType = EMeasureType.ENDEPRÜFUNGMARKER }); #endregion messureList = messreihen; } */ /// /// Generiert unterdruck reihen /// /// /// /// Länge der Prüfung in Sekunden /// public void GenerateUnterdruck(DateTime startprüfung, double prüfdruck, int testduration , bool failure = false) { List messreihen = new List(); string prüfdatum = startprüfung.ToShortDateString(); bool Bestanden = !failure; List druckwerte = new List(); double druck = 0.0; bool druckerreicht = false; int messreiheID = 0; // Anstiegskurve erzeugen DateTime start = startprüfung; #region Befüllphase while (!druckerreicht) { start = start.AddSeconds(4); if (failure && druck >= 56) break; if (!failure && (druck > ((prüfdruck * -1) * 1.1))) druckerreicht = true; Random zufall = new Random(DateTime.Now.Millisecond); if (!druckerreicht) { druck += Convert.ToDouble((zufall.Next(1000, 10000) / 1000.0)); druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, Pressure = (druck * -1).ToString(), MeasureType = EMeasureType.BEFÜLLPHASE }); messreiheID++; } Thread.Sleep(100); } #endregion #region Beruhigungsphase if (!failure) { Random druckabfall = new Random(DateTime.Now.Millisecond); double dp = druckabfall.Next(2, 9) + druckabfall.NextDouble(); //double startdruck = druckwerte.Last() - dp; //startdruck += druckabfall.NextDouble(); double dpt = dp / 90.0; for (int i = 0; i <= 90; i++) { start = start.AddSeconds(2); druck -= dpt; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Pressure = (druck * -1).ToString(), MeasureType = EMeasureType.BERUHUNGSZEIT, Datum = start, EintragID = messreiheID }); messreiheID++; } } else { int anzahlschritte = 20; double druckabfall = druck / anzahlschritte; for (int i = 0; i <= anzahlschritte; i++) { start = start.AddSeconds(2); druck -= druckabfall; if (druck < 0) druck = 0; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Pressure = druck.ToString(), MeasureType = EMeasureType.BERUHUNGSZEIT, Datum = start, EintragID = messreiheID }); messreiheID++; } } #endregion #region Prüfungsphase if (!failure) { for (int i = 0; i < (testduration / 2); i++) { Random Prüfung = new Random(DateTime.Now.Millisecond); double abfall = Prüfung.NextDouble() / 10; start = start.AddSeconds(2); if (abfall <= 0.07 && (i % 2 == 0)) { druck -= abfall; } druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, MeasureType = EMeasureType.PRÜFUNGSPHASE, Pressure = (druck * -1).ToString() }); messreiheID++; Thread.Sleep(100); } } #endregion #region EndePrüfung start = start.AddSeconds(2); messreiheID++; messreihen.Add(new MeasureData() { Datum = start, EintragID = messreiheID, MeasureType = EMeasureType.ENDE, Pressure = (druck * -1).ToString() }); start = start.AddSeconds(4); messreihen.Add(new MeasureData() { Pressure = (druckwerte.Last() * -1).ToString(), Datum = start, MeasureType = EMeasureType.ENDE, EintragID = messreiheID }); while (druck > 10) { start = start.AddSeconds(2); double abbau = druck / 2; druck -= abbau; druckwerte.Add(druck); messreihen.Add(new MeasureData() { Datum = start, Pressure = (druck * -1).ToString(), EintragID = messreiheID, MeasureType = EMeasureType.ABLUFT }); messreiheID++; } messreihen.Add(new MeasureData() { Datum = start.AddSeconds(2), Pressure = "0,0", EintragID = messreiheID, MeasureType = EMeasureType.ABLUFT }); messreihen.Add(new MeasureData() { Datum = start.AddSeconds(4), Pressure = "0,0", EintragID = messreiheID + 1, MeasureType = EMeasureType.ENDE }); #endregion messureList = messreihen; } } }