LabVIEWForum.de - While Loop Case überspringen

LabVIEWForum.de

Normale Version: While Loop Case überspringen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Paul,

du hast da noch ein paar Ungereimtheiten:
Code:
for i = 0:Array(end)
Zeit_Teilversuch = Array(i);
Momentan wird nicht das i-te Arrayelement indiziert, sondern irgendwas mit dem Faktor 5 multipliziertes und aus beiden Countern berechnetes…

Code:
% Zählen Counter
if counter_1 = 5
counter_1 = 0;
Das kann man mittels Modulo-Arithmetik so ausdrücken:
[attachment=51687]
Mit dem Test auf ">0" kann man dann counter_2 erhöhen…

Code:
if stop_fkt = true
Wartezeit_Anfang = now;

while stop_fkt = true
Wartezeit_Ende = now;
end
Und wo wird "stop_fkt" zu FALSE?

Zitat:wie ich in Zukunft die Warten-Funktion so modifizieren kann, dass auch bei langer Wartezeit die counter konstant gehalten werden.
Eine lange Wartezeit von z.B. 100s löst man programmatisch durch entsprechend viele kurze Wartezeiten, z.B. 200× 0.5s…

Wenn du noch ein oder zwei weitere Bedingungen formulierst, bist du ruckzuck bei einer sauberen Statemachine angelangt. Dies dürfte auf längere Sicht auch ein sinnvoller Weg für dich darstellen…
(01.01.2015 16:09 )PaulC schrieb: [ -> ]Luckis Vorschlag ist nicht schlecht, allerdings gibt es den Nachteil, dass das Abbrechen eines Teilversuchs nicht sofort erfolgt. Die einzelnen Teilversuche sollen später einige hundert Sekunden dauern, weswegen ein sofortiges Reagieren von Vorteil ist.
Das Vi habe hatte ich still und leise ausgetauscht, da geht es sofort. Hast Du das bemerkt?
Zitat:Unklar ist mir, wie ich in Zukunft die Warten-Funktion so modifizieren kann, dass auch bei langer Wartezeit die counter konstant gehalten werden.
Die Wartefunktion immer schlecht, wenn es um lange Zeiten geht, da man das Warten nicht unterbrechen kann. Nimm statt dessen das VI "verstrichene Zeit", so wie in meinem Beispiel.
Zitat:du hast da noch ein paar Ungereimtheiten:
Code:
for i = 0:Array(end)
Zeit_Teilversuch = Array(i);
Momentan wird nicht das i-te Arrayelement indiziert, sondern irgendwas mit dem Faktor 5 multipliziertes und aus beiden Countern berechnetes…

Anstatt direkt auf das i zuzugreifen, habe ich es aus den Laufvariablen berechnet.

Zitat:Und wo wird "stop_fkt" zu FALSE?

Die Funktion soll auf Tastendruck zu False werden.

Die Wartefunktion soll so funktionieren, dass beim ersten Tastendruck (Bsp. 'True') die Anfangszeit registriert wird, beim zweiten Tastendruck (Bsp. 'False') die Zeit ein weiteres Mal aufgezeichnet wird. Aus den Zeiten soll die Differenz berechnet werden. Diese Differenz soll dann wiederum zu den Array-Werten addiert werden.

In Pseudocode:
If Boolean = true then T1 = getTime();
If Boolean = false then T2 = getTime();
Wartezeit = T2 - T1;
Array( : ) = Array( : ) + Wartezeit;

Auf einem - vermutlich unnötig komplizierten - konnte ich die Wartezeit-Funktion implementieren (Beispiel 3). Dazu habe ich Luckis <Reinit to Default>-Funktion aufgeriffen. Da ich vermutlich nicht den besten Weg gewählt habe, fällt mir nur eine Event-Struktur ein, um zu verhindern, dass sich eine der beiden Laufvariablen ändert, wenn die Wartezeit aktiviert ist (Zwischen Okay-Button = true und stop = true).
Hallo Paul,

Zitat:In Pseudocode:
If Boolean = true then T1 = getTime();
If Boolean = false then T2 = getTime();
Das Problem ist der falsch formulierte Pseudocode…

Er sollte lauten:
Code:
IF RisingEdge(boolean) THEN T1 := gettime()
IF FallingEdge(boolean) THEN T2 := gettime()
Es gibt da eine Funktion namens PtByPt_BooleanCrossing…
Seiten: 1 2
Referenz-URLs