Hallo zusammen,
ich lese mit einer Task zwei Drezahlen ein. Ich erwarte dort Werte von [0...16] Hz.
Durch Fehlmessungen kommt es manchmal vor, dass im Programm der Drehzahlwert über diesen Wertebereich springt.
Wie kann ich eine schnelle Überprüfung zwischen dem Auslesen und dem Weiterverarbeiten zwischenschalten,
die einfach schaut ob der eingelesene Wert valide ist.
Ich hatte mir das folgendermaßen vorgestellt:
[PSEUDOCODE]
Wie kann ich das vielleicht einfacher mit einem Baustein realisieren?
Ich bekomme leider durch die o.g. Lösung beim Aufstarten
eine 0 in TEMP_RPM geschrieben. Und dann werden alle folgenden (validen)
Drehzahlen nicht mehr in den Ausgang geschrieben.
Gibt es eine schönere Lösung?
ich lese mit einer Task zwei Drezahlen ein. Ich erwarte dort Werte von [0...16] Hz.
Durch Fehlmessungen kommt es manchmal vor, dass im Programm der Drehzahlwert über diesen Wertebereich springt.
Wie kann ich eine schnelle Überprüfung zwischen dem Auslesen und dem Weiterverarbeiten zwischenschalten,
die einfach schaut ob der eingelesene Wert valide ist.
Ich hatte mir das folgendermaßen vorgestellt:
[PSEUDOCODE]
Code:
IF AKTUELLE_RPM > 1.01*TEMP_RPM THEN
// Fehlmessung:
// Letzter gespeicherte Wert wird ausgegeben
ELSIF AKTUELLE_RPM < 0.99*TEMP_RPM THEN
// Fehlmessung:
// Letzter gespeicherte Wert wird ausgegeben
ELSE
// Aktuelle Drehzahl ist im 10% Bereich des vorherigen Wertes
TEMP_RPM := AKTUELLE_RPM;
END_IF
AUSGANG := TEMP_RPM;
Ich bekomme leider durch die o.g. Lösung beim Aufstarten
eine 0 in TEMP_RPM geschrieben. Und dann werden alle folgenden (validen)
Drehzahlen nicht mehr in den Ausgang geschrieben.
Gibt es eine schönere Lösung?