Forum: Compiler & IDEs Vergleich 2er Eingangsimpulse


von Ewiger Student (Gast)


Lesenswert?

Hallo !

Ich habe folgendes Problem, welches ich in C lösen muss.

Es existieren 2 unabhängige Impulseingänge Zaehlerstand[0] und 
Zaehlerstand[1].

Der erste Zähler ist das Hauptzählwerk, der zweite das Kontrollzählwerk.

Bei einer Abweichung der beiden Zählwerke soll ein Alarm ausgelöst 
werden.

Hierzu werden 2 Angaben zur Auswertung herangezogen.

Impulsfenster: Anzahl der aufgelaufenen Impulse, in dem EIN Störimpuls 
auftreten darf z.B. 100

Anzahl Störimpulse insgesamt : z.B. 4.

D.h. innerhalb von 400 Impulsen, darf eine Abweichung von 4 Impulsen 
zwischen beiden Zählwerken auftreten.

Ab dieser Stelle habe ich ein Brett vorm Kopf und weiss nicht wie ich 
die Überprüfung innerhalb einer Funktion realisieren könnte.

Hat jmnd. evtl einen Ansatz wie man das umsetzen könnte ( keine fertige 
Lösung, nur ne Idee als Denkanstoß ? )


MfG


der Student

von avr (Gast)


Lesenswert?

was spricht gegen so etwas einfaches:
1
if Zaehlerstand[0]>=400 {
2
    if abs(Zaehlerstand[0]-Zaehlerstand[1])>=4 {
3
        //alarm
4
    }
5
}

von Karl H. (kbuchegg)


Lesenswert?

So einfach ist die Sache nicht.

Dein Problem ist eigentlich nicht die Auswertung sondern die Erfassung 
der Werte. Die Abzählung hinten nach ist das geringste Problem.

Du überwachst den einen Eingang und zählst Pulse. Du überwachst den 
anderen Eingang und zählst ebenfalls Pulse. Sobald auf einem Kanal 400 
Pulse beisammen sind, siehst du nach wie der Zählerstand am anderen 
Kanal ist. Sind das weniger als 397 schlägst du Alarm.
So weit, so naiv angegangen.
Denn: Wie gehts weiter?
Beginnst du dann die Zählung wieder bei 0?

Dann kannst du dich in folgende Situation manövrieren

A |-------------------------|
B |----------------*--*--*--|

Auf beiden Kanälen laufen die Pulse ein. Am B Kanal gibt es 3 Fehler, 
die du auch korrekt feststellst. Nach 400 Pulsen hast du also 3 Fehler - 
kein Grund Alarm zu schlagen.
Jetzt beginnt deine Zählung erneut

A |-------------------------|  |------------------------|
B |----------------*--*--*--|  |-*--*-------------------|

und wieder laufen in besagtem Intervall 2 Fehler auf. 2 Fehler sind kein 
Grund Alarm zu schlagen.

Nur: Das ist Zufall, dass du nicht Alarm geschlagen hast! Zufall, da es 
nur davon abhing, wann genau du mit der Messung begonnen hast. Wäre dein 
µC zu einem anderen Zeitpunkt eingeschaltet worden, dann hättest du 
gemessen

A             |------------------------------|
B             |---*--*--*------*--*----------|

5 Fehler im Intervall und damit eine Alarmsituation.

Und das ist unbefriedigend, wenn es von den Rahmenbedingungen abhängt, 
ob du Alarm schlägst oder nicht.

So gehts also nicht.

Was du brauchst ist ein "gleitendes Fenster". In diesem Fenster sind die 
Daten der letzten 400 Pulse enthalten. Und wenn sich aus diesen Daten 
ergibt, dass du mehr als 4 Fehler hast, dann wird Alarm geschlagen. 
Kommt eine neue Pulsmessung dazu, dann wird die an einem Ende der Daten 
angehängt, während am anderen Ende die Daten eines Pulses raufallen.

Sieht man sich das ganze grafisch in so einem Schema an, dann sieht es 
so aus, als ob die Daten unter einem Sichtfenster durchziehen, daher der 
Name. So wie ein Papierstreifen, den man unter einer Öffnung durchzieht. 
Und wann immer innerhalb der Öffnung 4 Fehler erkennbar sind, schlägst 
du Alarm.

Blöd ist jetzt nur, dass sich dein Fenster durch die Anzahl der Impulse 
definiert. Da aber nicht bekannt ist, wie breit so ein Puls ist, hat das 
Fenster daher keine fixe zeitliche Breite sondern muss sich an die Pulse 
anpassen. Und da hast du jetzt wieder das Problem, dass sich diese 
Pulsbreite bzw. Pulszahl aus 2 Eingangskanälen ergibt. Das Problem ist 
nicht das Hinzufügen des neuen Pulses sondern das bereigigen am anderen 
Ende des Fensters. Das Problem wäre einfacher, wenn dein Fenster sich 
nicht durch Pulszahln definieren würde sondern durch Zeiten. Dann kriegt 
jeder Puls einen Zeitstempel und zu alte Pulse fallen dann einfach raus.
Aber so ist das Problem knifflig.


Da hast du noch einiges vor dir. Die Sache ist nicht so einfach, wie sie 
auf den ersten Blick aussieht.

Alles steht und fällt mit deiner Datenaufnahme. Wenn du gut ist, dann 
ist die Auswertung ein Kinderspiel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.