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!
29.06.2012, 09:47 (Dieser Beitrag wurde zuletzt bearbeitet: 29.06.2012 09:49 von Kiesch.)
Nochmal zu deinem Ursprünglichen VI, da du scheinbar nur phänomenologisch geschlossen hast das True am Stop nicht erreicht wird:
Schieberegister sind mit "False" und 0 initialisiert. Kucken wir mal was mit dem False passiert: Das gibt im False Case wieder ein False aus. Die Case Struktur ist entsprechend unsinnig, da du in True entweder True oder False ausgibts (mehr zustände hat Bool ja nicht). Das heist: Entweder kannst du die durch eine False konstante, oder durch einen Draht ersetzen (da du wenn bei True-Case True ausgegeben wird auch gleich den angelegten Bool weitergeben kannst (der Case macht nämlich dann nur eine Identität).
Da du mit False initialisierst liegt entsprechend immer am oberen selector (der danach kommt) "false" an und am unteren auch. Entsprechend ist egal was s ist (True oder False) ausgegeben wird immer ein False für den nächsten Schleifendurchlauf und das Spiel wiederholt sich (deswegen stoppt deine Schleife nicht).
Das Numeric ist noch schlimmer: Da initialisierst du mit 0. Für s = "False" schreibst du jeweils wieder 0 ins Register (da passiert also "nichts", es sei denn du hast vorher gezählt, dann nullst du deinen Counter wieder - kann mir auf anhieb nicht vorstellen, dass das Verhalten gewünscht ist).
Für s= "True" zählst du (Anmerkung: In der Anzeige zeigst du dabei 0 für den ersten Schleifendurchlauf, 1 für den Zweiten etc. pp; am Schieberegisterausgang (bei beenden der Schleife) wird hingegen der Schleifendurchlauf angezeigt.
Was ist das Problem dabei? Nunja, da du deine Schleife nicht beendest macht die nur: Zählen für s= True; Counter nullen für s= False. Neben der Tatsache, dass dein Zähler nicht die Anzahl der Schleifendurchläufe anzeigt (wie wohl gewünscht) sondern die Anzahl minus eins, entspricht so der Counter wenn du s irgendwann mal umschaltest überhaupt nichtmehr der Anzahl der Schleifendurchläufe (da zwischendurch genullt wird obwohl die Schleife noch läuft; auch wird dann nichtmehr pro Schleifendurchlauf weitergezählt).
Dann fällt mir auf: Die Schleife rennt ungebremst (kein Wait) das verursacht (vermutlich unnötig) Prozessorlast.
Ansonsten: Mit der Struktur die du da gebaut hast (wenn richtig aufgebaut) misst du lediglich die Anzahl der Schleifendurchläufe bis die Schleife beendet wird und nicht die Gesamtzahl der Schleifendurchläufe (!). Dafür kannst du auch einfach das i (als von der Schleife bereitgestellte Zählvariable) nehmen, mit nem +1 versehen und anzeigen lassen. Das lohnt den Aufwand dann nicht...
Wenn du hingegen die Gesamtzahl aller Schleifendurchläufe in dieser Schleife haben willst, musst du auch nur einfach das i nach aussen geben (aus der schleife), nach der Schleife nen +1 hinzufügen (ginge auch in der Schleife aber du brauchst ja vermutlich nicht bei jedem Durchlauf berechnen welcher Schleifendurchlauf grade läuft) und das ganze dann in der zu der Anzahl der in der äußeren Schleife gespeicherten vorherigen Durchläufe addieren.
Im Anhang das Ganze als Beispiel zur Verdeutlichung.
P.S: Wenn du Stop Inner Loop vor dem Starten der Inneren Schleife drückst läuft die genau einmal durch.
P.P.S: Die Counter und die Additionen für die Korrektur hab ich mal in die Innere Schleife gelegt, da man das ansonsten nicht so schön sieht. Wenn die Anzeige nicht live sein muss, kannst du beides auch nach der Schleife anbringen, dann wird entsprechend erst wenn die Schleife wieder gestopt wird aktualisiert.
Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)