Überprüfen ob Wert steigt

fctla

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,
in meinem programm wird zyklisch die geschwindigkeit berechnet, ich möchte nun auch zyklisch berechnen ob die geschwindigkeit im vergeich zum vorigen wert gesunken oder gestiegen ist. hat jemand eine idee, kriegs irgendwie nicht hin.. hoffe meine frage versteht man..

danke
 
Hier ein kleines Beispiel:

Deklaration so:

Code:
oldVelocity : REAL;
Velocity : REAL;
gestiegen : BOOL;
gesunken : BOOL;

Code so:

Code:
gestiegen := oldVelocity < Velocity;
gesunken := oldVelocity > Velocity
oldVelocity := Velocity
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Programmbeispiel ist gut. Aber viel hängt von der Geschwindigkeitsberechnung ab.
Abhängig von der Art der Erfassung der Geschwindigkeit könnte ein Tiefpass (z.B. FT_PT1 aus oscat) hilfreich sein, um ein "Flackern" der beiden Merker zu unterbinden.
Ich erfasse schonmal gerne die Zähne eines Ritzels als LOWCOST Drehgeber und werte das über eine Periodendauermessung aus. Je schneller ich werde, umso größer wird dabei mein prozentualer Fehler und wird in einem Jitter der erfassten Geschwindigkeit seeehr sichtbar.

Alternativ oder in Kombination eine Hysterese (hier z.B. 5):
Code:
gestiegen := oldVelocity < Velocity-5;
gesunken := oldVelocity > Velocity+5;
oldVelocity := Velocity;
 
..Abhängig von der Art der Erfassung der Geschwindigkeit könnte ein Tiefpass (z.B. FT_PT1 aus oscat) hilfreich sein..
Genau. Und wenn man dann schon über den Tiefpass einen gedämpften Wert hat, kann man den mit dem aktuellen oder einen weniger gedämpften Wert vergleichen. Der gedämpfte Wert eilt dem aktuellen nach. Ist der gedämpfte Wert kleiner, hat man einen Anstieg, ist er größer hat man einen Abfall.
 
So danke erstmal für die Antworten! :)
aber funktionieren tut es leider nicht so wie es sollte, also wenn ich von Velocity = 0 an beschleunige wird gestiegen = TRUE erkannt, dann beschleunige ich z.B. bis auf Velocity = 300 und geh dann vom Gas. Ich bin auf der Sps eingeloggt und kann beobachten wie Velocity sinkt, es sinkt zwar schnell ist aber gut beobachtbar. Trotz der sinkenden Velocity bleibt mein gestiegen weiter auf TRUE bis Velocity wieder den Wert 0 erreicht, erst dann wechselt gestiegen auf FALSE. Habt ihr eine Idee, an der Zykluszeit wird es vermutlich ja nicht liegen, die müsste sicher klein genug sein oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da fehlen 2 Semikolon ;), aber das hast Du gemerkt.
Mich interessiert mehr, wo der Speedwert herkommt. Ist der gefiltert oder nicht.
Wenn der stark "flattert" ... siehe oben. Schau Dir das mal im Trace an.
Wenn die Geschwindigkeit konstat bleibt, egal auf welchem Wert, sind beide Bools = False.

edit: Alternativ mal den Schwellwert, wie in meinem Codesnippet mal einfügen. Schwellwert klein halten!!

Nochmal edit: Eine langsame Zykluszeit ist hier von Vorteil.
 
Zuletzt bearbeitet:
Hast du den Code in einer Funktion, einen Funktionsbaustein oder in einem Programm eingebaut?
Wenn du eine Funktion verwendest und oldVelocity in der Funktion deklariert ist, wird der Wert in jedem Zyklus wieder zurück auf 0 gesetzt. Das würde zu dem von dir beobachteten Verhalten passen.
 
MasterOhh hat das Rätsel gelöst, danke das war der Fehler :)
Jetzt funktionierts, danke ans Forum für die Geduld :)
 
Zurück
Oben