From 6e8a3647ff0cd9cb6d655af278ae201b8210efed Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Wed, 13 Apr 2022 09:01:38 +0200 Subject: [PATCH] Initialcommit --- DataGen.csproj | 13 ++ MeasureDataGen.cs | 355 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 368 insertions(+) create mode 100644 DataGen.csproj create mode 100644 MeasureDataGen.cs diff --git a/DataGen.csproj b/DataGen.csproj new file mode 100644 index 0000000..2d6a842 --- /dev/null +++ b/DataGen.csproj @@ -0,0 +1,13 @@ + + + + + + + + + + netstandard2.0 + + + diff --git a/MeasureDataGen.cs b/MeasureDataGen.cs new file mode 100644 index 0000000..db481d0 --- /dev/null +++ b/MeasureDataGen.cs @@ -0,0 +1,355 @@ +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; + } + + + + } +}