Hallo Zusammen,
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.
Viele Grüße,
Chris
Hallo Chris,
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...
Danke für den Hinweis!
Ich habe das Programm jetzt abgeändert.
Habe nun:
for(Initialisierung - for(Messablauf) - Deinitailisierung)
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.
Dank und Gruß,
Christoph
Hallo Christoph,
Zitat:weil der Prüfstand teilweise in die Brüche gegangen ist.
Hoffentlich nicht aufgrund deiner nicht-abbrechbaren Sequenzstruktur
Hallo zusammen,
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
Hallo Chris,
Zitat:Habt ihr einen Tipp woran es liegen könnte?
- 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!
Hallo,
das mit den lokalen Variablen werde ich ändern.
Mangelndes Verständnis des Dataflows kann gut sein - ist mein erstes Labview-Programm.
Die innere While-Loop wird über die Zeit beendet. Das Minimalbeispiel ist wohl zu minimal.
Habe nochmal eins angehändt.
Gruß,
Chris
Hallo Chris,
und immer noch grober Unsinn im Umgang mit den lokalen Variablen (bzw. RubeGoldberg)...
NIMM DRÄHTE STATT LOKALER VARIABLEN!!!
[
attachment=43033]
Hallo Chris,
Fragen zum VI nur hier im Forum...
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!
Hi,
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?