LabVIEWForum.de - Problem bei Zeit ablaufen lassen

LabVIEWForum.de

Normale Version: Problem bei Zeit ablaufen lassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, folgender Sachverhalt:

Wenn ich einen Start-Button drücke, soll eine Zeit t ablaufen. Ist die Zeit t abgelaufen, so soll das z.B. mit einer LED angezeigt werden und von vorne begonnen werden.

Beispiel: Zeit t= 10s

Drücke ich jetzt auf den Start-Button, so soll in 10s eine LED kurz aufleuchten, weitere 10s später nochmal LED aufleuchten, usw.

Dafür habe ich verschiedene Varianten ausprobiert, das funktioniert ohne Probleme (funktioniert mit Get-time und shiftregistern, aber auch mit express vi).

Mein Problem ist:

Wenn die Zeit t=10s ist, aber nach 5s der Zeitablauf gestoppt wird, so sollen beim nächsten Start wieder 10s vergehen, bis die LED aufleuchtet. Bei mir leuchtet die LED sofort nachdem ich den Startbutton wieder betätige, und dann läuft die Zeit 10s.

Hat jemand nen Vorschlag??

Danke
Poste doch mal Dein VI!
Das erleichtert die Sache ungemein!

Gruß
Andreas
Hallo, habe mal ein VI und ein Jpeg gepostet.

führt man das VI aus und setzt den Control Konstanter-Button auf true, so sollte erst die zeit t vergehen, bis die spannung inkrementiert wird und die LED kurz aufleuchtet. Das tut es aber nicht. Sobald der Control Button gedrückt wird, wird sofort inkrementiert und dann die Zeit t gewartet. Dieses erste Inkrement ist unerwünscht.


Danke im Vorraus.

André

[attachment=3975][attachment=3976]
hat keiner ne idee??
Leider hat nicht jeder LV8.2. Da fällt das Prüfen bestehender VI's schon schwer. Und wer zeichnet schon gerne vom Bild ab.

Im übrigen sehe ich da an den Cases "Standard verwenden, wenn nicht verbunden". Weist du denn, was der Standard bei Datum ist und ob dieser Wert in deinen Algorithmus passt?

Ich verwende dieses "Feature" nicht, lieber las ich die Linien überdeckt laufen. Also mach da mal in die False-Zweige ein Datum rein.
' schrieb:Ich verwende dieses "Feature" nicht, lieber las ich die Linien überdeckt laufen. Also mach da mal in die False-Zweige ein Datum rein.


Du meinst statt die linien durchlaufen zu lassen soll ich sie mit einem get date/time vi verbinden?


habe folgendes ausprobiert:
linien im false-case verbunden und getrennt (use default if unwired).
--> macht keinen unterschied

das problem liegt darin, dass 2 zeiten miteinander verglichen werden und dann geprüft wird, ob das gewünschte "delta t" schon erreicht ist. wird der control-button gedrückt wird das "delta t" ist dann tastsächlich überschritten, so gibts sofort ein true am ausgang. aber das darf nicht sein.

ich also irgendwie muss ein reset stattfinden, wenn der control-button auf false gesetzt wird und das "delta t"noch nicht abgelaufen ist.

habe bereits das ganze forum durchsucht und auch einige counter-vi´s aus anderen beiträgen runtergeladen. modifiziere an den vi´s schon den ganzen tag, bislang leider ohne passendes Ergebnis.

Hat sonst jemand ne lösung?

Vielen dank für deine mühe, und danke, dass du mir helfen möchtest.

André
Hallo, IchSelbst,

ich habe deinen Vorschlag ausprobiert und es funktioniert !

Die äusserste Case-structure, die mit Control-Konstanter-Button verbunden ist, darf im false-case keine durchgehende verbindung des get time-vi´s haben, sondern muss am ende mit einem weiteren get-time-vi verbunden werden.

So funktioniert es.

Kann mir ejmand erklären warum das so ist, verstanden habe ich das nämlich noch nicht ganz.
Mach dir doch einfach ein hilfs Schieberegister (BOOL) welches in im False Case auf einen Wert
z.B. False gesetzt wird. Läuft er beim erstem mal in den True Case so wird die Systemzeit erneit gelesen und ins Schieberegister geschrieben und die Hilfvariable auf True gesetzt beim nächsten durchlauf wird die Zeit aus
dem Schieberegister verwendet.

Gruss Sascha
' schrieb:ich habe deinen Vorschlag ausprobiert und es funktioniert !
Sach' blos? Tongue

Zitat:Kann mir ejmand erklären warum das so ist, verstanden habe ich das nämlich noch nicht ganz.
Wenn du "Standard, wenn nicht verbunden" nimmst, wird beim Abarbeiten des (false-)Case-Zweiges der Datumswert NULL quasi in das Schieberegister eingeschrieben. Das aber ergibt in deinem Algorithmus verglichen mir der aktuellen Zeit (die u.U. im MIO bereich liegt) einen so großer Unterschied => sofortiges Increment.
Wenn du den Ausgang des Case-Zweiges mit dem Eingang verbindest (also eine Linie von links nach rechts), dann befindet sich die Uhrzeit von außerhalb der While-Schleife im Schieberegister - und zwar ewig bzw. solange, bis du den Button drückst. Wartest du jetzt also mit dem Drücken 30 Sekunden, dann ist der Vergleicher mit der aktuellen Uhrzeit - richtig: 30 Sekunden. => Incrementieren.
Nur wenn du im Schieberegister die Uhrzeit ständig aktuell hälst - also in allen false-Zweigen ein Datum-VI rein - dann erst geht mit Start durch den Button alles richtig.


Im übrigen: Auch die drei Variablen "Spannung [V]" kannst du durch ein Schieberegister ersetzen. Außerhalb der Cases geht dann der Wire zusätzlich auf das Anzeigeelement "Spannung [v]".
Hallo IchSelbst,

danke für die Info, jetzt hab ichs auch verstanden.

Vielen Dank für Deine Hilfe Smile

André
Referenz-URLs