12.03.2010, 10:28
Beitrag #1
|
tt-web
LVF-Gelegenheitsschreiber
Beiträge: 123
Registriert seit: Jul 2009
8.6
2008
de
64354
Deutschland
|
Werte innerhalb einer Zeitspanne überprüfen
Hallo,
ich habe ein eher allgemeines Programmierproblem:
Ich habe eine Statemachine gebaut "Anfang" "Vergleich" "Ende". In "Anfang" wird überprüft, ob zwei Werte gleich sind. Sind diese gleich wechsel ich in den Zustand "Vergleich". Wenn nicht durchlaufe ich wieder "Anfang".
In "Vergleich" soll überprüft werden, ob die Werte für eine Zeitspanne von 5 Minuten gleich bleiben, danach wechsel ich zu Ende und mein Ursprungsprogramm läuft weiter.
Nun mein Problem mit dem Vergleich: Die Bedingung ist, dass die Werte gleich bleiben. Solange soll eine Schleife laufen. Ist das Ende der Zeitspanne erreicht soll der Wert True ausgegeben werden um in den nächsten Modus zu wechseln. Sollte der Wertevergleich eine Abweichung ergeben (False) soll insgesamt ein False ausgegeben werden um in den Modus "Anfang" zu wechseln. Ich habe jetzt mit diversen While- und Case-Konstruktionen rumgebastelt, aber ich bekomme es nicht hin....
Mein Problem bei Case ist, dass Case immer nur einmal am Anfang ausgelesen wird. Ich überlege jetzt ob ich zwei Whileschleifen benutze. In der einen läuft die Zeit und wird beendet wenn die Zeit abgelaufen ist. Ich habe dies mit der Funktion "Zeit in ms" und Schieberegistern gelöst. In der Zweiten Schleife wird Verglichen. Wenn der Vergleich False ist wird False ausgegeben, ist der Vergleich True und die Zeit True wird ein True ausgegeben, ist der Vergleich True und die Zeit ist True läuft die äußere Schleife um die beiden Schleifen weiter...
Geht das so? Geht das einfacher? Irgendwelche ideen? Gibt es ein VI für solche Fälle?
Gruß thomas
|
|
|
12.03.2010, 10:44
(Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2010 10:45 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Werte innerhalb einer Zeitspanne überprüfen
Hallo Thomas,
eine while-Schleife sollte reichen. Abbruchbedingung für die Schleife ist halt (Zeit abgelaufen) OR (Werte sind ungleich).
Welchen Wert du aus der Schleife rausgibst, bleibt dir überlassen. In deinem Fall müsste es ausreichen, das Ergebnis von (Zeit abgelaufen) weiterzureichen...
Also kurz zusammengefasst: du verknüpfst 2 Bedingungen, um deine Schleife zu beenden, gibst aber nur eine davon als Ausgabe weiter...
|
|
|
12.03.2010, 12:59
(Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2010 13:08 von tt-web.)
Beitrag #3
|
tt-web
LVF-Gelegenheitsschreiber
Beiträge: 123
Registriert seit: Jul 2009
8.6
2008
de
64354
Deutschland
|
Werte innerhalb einer Zeitspanne überprüfen
Danke!
Ich hab mal wieder viel zu kompliziert gedacht....
Gruß Thomas
Kommando zurück... so geht es nicht. Denn wenn ich das so mache wird die Schleife ja sofort beendet, weil die Werte gleich sind. Ich muss nur wissen, ob sie es im Verlauf von 5 Minuten immer noch sind. Ich versuch das Problem mal zu schildern:
Ich frage von einem Messgerät einen Durchfluss ab. Im Anfahrbetrieb nähert er sich immer mehr dem eingestellten Sollwert. In meiner Funktion möchte ich überprüfen, ob dieser Fluss auch innerhalb von 5 Minuten konstant ist. Die Folge ist dann, dass meine Anwendung in den Prozessbetrieb überwechselt. Daher der Aufwand. Ich müsste die Schleife also beenden, wenn die Zeit abgelaufen ist, muss aber erneut in die Schleife einsteigen, wenn der Durchfluss doch nochmal abweichen sollte.
Das war die einfache Version, in Wirklichkeit prüfe ich einen ganzen Bereich +-3% vom Sollwert ab, aber das hat mit dem eigentlichen Problem ja nichts zu tun.
Gruß Thomas
|
|
|
12.03.2010, 13:19
(Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2010 13:22 von GerdW.)
Beitrag #4
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
Werte innerhalb einer Zeitspanne überprüfen
Hallo Thomas,
also zwei ineinander geschachtelte Schleifen.
Innere Schleife: Abbruch nach Zeit; gibt Flag aus, ob Werte innerhalb Sollbereich oder nicht
Äußere Schleife: Abbruch, falls Werte im Sollbereich
Hab ich auch schon mal gehabt, damals mit einem Ofen, der eine bestimmte Temperatur einstellen sollte. Hatte ich gelöst mit einer allgemeinen Wartezeit vorneweg (der Ofen war etwas träge) und einer Schleife, die eine maximale Zeit aufs Einstellen wartet. Wenn der Ofen nach 1 Stunden immer noch nicht den Zielbereich erreicht hatte, war definitiv was kaputt gegangen
Edit:
Du verwendest doch schon eine State-Machine. Da kannst du doch einfach nach deiner Zeitschleife entscheiden, ob du in den "Ende"-State weitergehst oder nochmal in den "Vergleiche"-State... Brauchst also nur eine Schleife!
|
|
|
12.03.2010, 14:07
Beitrag #6
|
|
|
16.06.2010, 08:56
Beitrag #7
|
tt-web
LVF-Gelegenheitsschreiber
Beiträge: 123
Registriert seit: Jul 2009
8.6
2008
de
64354
Deutschland
|
Werte innerhalb einer Zeitspanne überprüfen
Hallo!
Danke für den Beitrag. Jetzt habe ich endlich mal die Zeit gefunden mich mit dem VI auseinanderzusetzen. Früher hätte wenig Sinn gehabt, da mir die Zeit gefehlt hat. . Mir ist noch nicht alles klar aber ich glaube ich könnte es schaffen damit zurecht zu kommen. Vielen Dank auf jeden Fall schon mal vorab.
Liebe Grüße thomas
|
|
|
| |