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
was spricht gegen so etwas einfaches:
1 | if Zaehlerstand[0]>=400 { |
2 | if abs(Zaehlerstand[0]-Zaehlerstand[1])>=4 { |
3 | //alarm
|
4 | }
|
5 | }
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.