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!
ich hoffe, ich bin hier im richtigen Unterforum gelandet.
Es geht um folgendes:
Ich habe ein Messprogramm, das ist mit einer gestapelten Sequenzstruktur aufgebaut. Das Programm ist zu Komplex um ein sinnvolles Minimalbeispiel zu geben, ich hoffe, es geht so:
-1- Initialisierung
-2- Daten Messen und Schreiben
-3- Deinitialisierung
Das ganze funktioniert auch wunderbar. Jetzt soll der Messablauf aber mehrmals hintereinander gefahren werden. Der Test also zyklisch betrieben werden.
Ich habe versucht einfach eine for-Schleife um das komplette Programm zu legen und zu sagen, mache das n mal.
Jetzt war es so:
für n=1: Messablauf funktioniert wie er soll
für n=2: Messablauf bricht nach ca. eine halbe Minute ab
für n=3: Messablauf funktioniert wie er soll.
Hat jemand eine Idee was ich falsch mache? Bzw. was könnte ich sonst versuchen? Ein anderer Versuch war die for-Schleife nur um Teil -2- zu legen, hat aber zum selben Resultat geführt.
Zitat:Messprogramm, das ist mit einer gestapelten Sequenzstruktur aufgebaut.
Die Frage schreit geradezu nach der "einzig gültigen" Antwort: mach eine Statemachine daraus!!!
LabVIEW unterstützt dich dabei, indem man die gestapelte Sequenz einfach in eine Case-Struktur umwandeln kann. Jetzt noch eine While-Loop drumherum und du hast das wichtigstes schon geschafft...
Ich habe jetzt ganz auf Case oder Sequenz verzichtet. Mal sehen ob es so klappt. Kann das Programm gerade leider nicht Testen weil der Prüfstand teilweise in die Brüche gegangen ist.
keine Sorge, das mit dem Prüfstand lag nicht an meinem Programm ;-).
Allerdings habe ich wirklich das Problem, dass mein Programm den Zyklus nicht abbricht.
Das Problem ist seltsam, wenn ich 1 Zyklus haben möchte, stoppt das Programm auch nach 1 Zyklus. Möchte ich allerdings zwei Zyklen haben, dann tut es das nicht.
Habe:
while Anzahl Zyklen <= Zyklus Nr. (Initialisierung - for(Messablauf) - Deinitialisierung)
Aber selbst wenn Anzahl Zyklen <= Zyklus Nr. = TRUE, bricht die while- Schleife trotz "Stop if True" nicht ab.
Hier ein kleines Minimalbeispiel (Labview 8.5).
Habt ihr einen Tipp woran es liegen könnte?
Grüße,
Chris
11.01.2013, 10:29 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2013 10:31 von GerdW.)
- Mangelndes Verständnis des DATAFLOW-Prinzips von LabVIEW?
- Massive und dazu noch falsche Nutzung lokaler Variablen?
Mal im Ernst: Wozu die ganzen lokalen Variablen? Nimm Drähte!
Die Frage beantwortet sich sehr schnell, wenn du mal das VI mit Highlighting ablaufen lässt.
Wie willst du dein VI beenden, wenn es dafür kein Eingabeelement gibt (zumindest nicht für die innere While-Loop)? THINK DATAFLOW!
Du hast ineinander geschachtelte Schleife und wunderst dich, warum die innere nicht abbricht, wenn du Controls, die in der äußeren Loop liegen, änderst. Nochmal: THINK DATAFLOW!
Überlege dir ein vernünftiges Programm-Schema (Consumer-Producer, Statemachine, etc.), du findest dazu Beispiele in LabVIEW!
mir ist schon klar, dass die äußere nicht abbricht, wenn die innere noch läuft.
Mein Gedanke ist, dass die innere ganz normal durchläuft und regulär beendet wird. nach dem die innere Schleife beendet ist, sollte er doch die Bedingung für die äußere Schleife testen und falls die Bedingung True ist die Schleife stoppen. Sehe ich das falsch?