INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

While Loop Case überspringen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

01.01.2015, 18:09
Beitrag #11

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While Loop Case überspringen
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:
   
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…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
01.01.2015, 23:50 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2015 23:51 von Lucki.)
Beitrag #12

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: While Loop Case überspringen
(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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.01.2015, 15:11 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2015 15:11 von PaulC.)
Beitrag #13

PaulC Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Dec 2014

2014
2014
kA


Deutschland
RE: While Loop Case überspringen
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).


Angehängte Datei(en)
14.0 .vi  Beispiel_3.vi (Größe: 20,71 KB / Downloads: 146)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.01.2015, 15:13 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2015 15:14 von GerdW.)
Beitrag #14

GerdW Offline
______________
LVF-Team

Beiträge: 17.467
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: While Loop Case überspringen
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…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Case-Struktur: Angegebener Case nicht vorhanden braendy 10 6.829 02.02.2021 15:05
Letzter Beitrag: Lucki
  Event Case Ignoriert Tastendruck wenn in Gegenwart eines anderen "Leeren" Event Case Ksanto 8 8.256 23.10.2017 09:08
Letzter Beitrag: Ksanto
  Parallel Port Read and Write Loop.vi rothhp 2 4.288 16.12.2015 16:08
Letzter Beitrag: rothhp
  While-loop Margi 2 3.324 21.09.2015 12:49
Letzter Beitrag: TDO
  For und While Loop katana 2 4.170 29.07.2015 11:14
Letzter Beitrag: Trinitatis
  Case Strukture mit 3 Case lola2014 13 11.471 23.10.2014 14:17
Letzter Beitrag: GerdW

Gehe zu: