private static void BitmusterTesten(FunctionEventArgs e) { var bitMuster = e.Parameters[0].ToInteger(); var bitMaske = e.Parameters[1].ToInteger(); var timeout = new ZeitDauer(e.Parameters[2].ToString()); var kommentar = e.Parameters[3].ToString(); var stopwatch = new Stopwatch(); stopwatch.Start(); while (stopwatch.ElapsedMilliseconds < timeout.DauerMs) { Thread.Sleep(10); var digitalOutput = GetDigitalOutputWord(); if ((digitalOutput & (short)bitMaske) == (short)bitMuster) { DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Erfolgreich, (uint)bitMuster, kommentar); return; } DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Aktiv, (uint)bitMuster, kommentar); } DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Timeout, (uint)bitMuster, kommentar); }
public DigEingaengeSetzen(ulong bitMuster, string dauer, string kommentar) { _statusDigEingaenge = StatusDigEingaenge.Init; _bitMuster = new Uint(bitMuster); _dauer = new ZeitDauer(dauer); _kommentar = kommentar; }
public DigAusgaengeTesten(ulong bitMuster, ulong bitMaske, string dauer, double toleranz, string timeout, string kommentar) { _statusDigAusgaenge = StatusDigAusgaenge.Init; _bitMuster = new Uint(bitMuster); _bitMaske = new Uint(bitMaske); var dauer1 = new ZeitDauer(dauer); _dauerMin = (long)(dauer1.DauerMs * (1 - toleranz)); _dauerMax = (long)(dauer1.DauerMs * (1 + toleranz)); _timeout = new ZeitDauer(timeout); _kommentar = kommentar; }
public static void Sleep(FunctionEventArgs e) { var sleepTime = new ZeitDauer(e.Parameters[0].ToString()); Thread.Sleep((int)sleepTime.DauerMs); }
private static void BitmusterBlinktTesten(FunctionEventArgs e) { var bitMuster = e.Parameters[0].ToInteger(); var bitMaske = e.Parameters[1].ToInteger(); var periodenDauer = new ZeitDauer(e.Parameters[2].ToString()); var tastVerhaeltnis = e.Parameters[3].ToFloat(); var anzahlPerioden = e.Parameters[4].ToInteger(); var toleranz = e.Parameters[5].ToFloat(); var timeout = new ZeitDauer(e.Parameters[6].ToString()); var kommentar = e.Parameters[7].ToString(); var periodenDauerMax = periodenDauer.DauerMs * (1 + toleranz); var periodenDauerMin = periodenDauer.DauerMs * (1 - toleranz); var tastVerhaeltnisMax = tastVerhaeltnis * (1 + toleranz); var tastVerhaeltnisMin = tastVerhaeltnis * (1 - toleranz); var messungAktiv = false; var tastverhaeltnis = 0.0; var periodenAnzahl = 0; var zeitImpuls = 0.0; var zeitPause = 0.0; var schritte = SchritteBlinken.AufNegFlankeWarten; var periodenDauerMessen = new Stopwatch(); var stopwatch = new Stopwatch(); stopwatch.Start(); while (stopwatch.ElapsedMilliseconds < timeout.DauerMs) { Thread.Sleep(10); var digitalOutput = GetDigitalOutputWord(); var aktuellePeriodenDauer = zeitImpuls + zeitPause; if (zeitImpuls > 0) { tastverhaeltnis = zeitImpuls / aktuellePeriodenDauer; } switch (schritte) { case SchritteBlinken.AufPosFlankeWarten: zeitPause = periodenDauerMessen.ElapsedMilliseconds; if ((digitalOutput & (short)bitMaske) == (short)bitMuster) { if (messungAktiv) { if (aktuellePeriodenDauer > periodenDauerMax || aktuellePeriodenDauer < periodenDauerMin) { DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Fehler, (uint)bitMuster, $"{kommentar}: Falsche Periodendauer: {aktuellePeriodenDauer}ms"); return; } if (tastverhaeltnis > tastVerhaeltnisMax || tastverhaeltnis < tastVerhaeltnisMin) { DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Fehler, (uint)bitMuster, $"{kommentar}: Falsches Tastverhältnis: {tastverhaeltnis:F2}ms"); return; } periodenAnzahl++; if (periodenAnzahl > anzahlPerioden) { DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Erfolgreich, (uint)bitMuster, $"{kommentar}: E:{zeitImpuls}ms A: {zeitPause}ms → {100 * tastverhaeltnis:F1}%"); return; } } messungAktiv = true; schritte = SchritteBlinken.AufNegFlankeWarten; periodenDauerMessen.Restart(); } break; case SchritteBlinken.AufNegFlankeWarten: zeitImpuls = periodenDauerMessen.ElapsedMilliseconds; if ((digitalOutput & (short)bitMaske) == 0) { if (messungAktiv) { periodenDauerMessen.Restart(); } schritte = SchritteBlinken.AufPosFlankeWarten; } break; default: throw new ArgumentOutOfRangeException(); } DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Aktiv, (uint)bitMuster, $"{kommentar}: I:{zeitImpuls}ms A: {zeitPause}ms → {100 * tastverhaeltnis:F1}%"); } DataGridAnzeigeUpdaten(AutoTester.TestErgebnis.Timeout, (uint)bitMuster, kommentar); }