Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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;
        }
Exemplo n.º 4
0
        public static void Sleep(FunctionEventArgs e)
        {
            var sleepTime = new ZeitDauer(e.Parameters[0].ToString());

            Thread.Sleep((int)sleepTime.DauerMs);
        }
Exemplo n.º 5
0
        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);
        }