LabVIEWForum.de - Mehrere Programmabschnitte

LabVIEWForum.de

Normale Version: Mehrere Programmabschnitte
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe ein VI welches aus mehreren Programmabschnitten besteht (eig. sind es genaugenommen unterschiedliche Programme in einem).
Nun sollen die Programmabschnitte einzeln gestartet/beendet werden oder alle zusammen gestartet/beendet werden. Wichtig ist jedoch, das die Programmabschnitte ihre "Endroutine" ausführen (zb. Ports schließen) und nicht einfach die Schleife abbrechen.

Ich habe es bisher mit lokale Variablen/Schleifen mehr oder minder gelöst. Mir kommt aber meine Lösung sehr "schmutzig" vor. Ich würde gerne wissen wie ich an die Aufgabenstellung herangehen soll.

Danke

Gruß
Hallo LabView2013,

hast du dich schonmal in Melder-Operationen eingearbeitet?
Damit ginge es sicher etwas "sauberer"

Gruß, Marko
Ja, ich hab mir zwar schon vieles bei LabView angesehen aber es kamm noch nicht alles zum Einsatz.
Also meinst du Melder sind dafür am besten geeignet?
Gruß
Ob Melder die beste Lösung sind, hängt von deiner Aufgabenstellung ab.

Generell sind aber Melder und Queues das Mittel der Wahl, um unabhängige Programm-Prozesse zu steuern, es schadet also überhaupt nicht, wenn du dich damit grundlegend vertraut machst.

Grundbeispiel wären z.B. eine Producer-Consumer-Struktur mit mehreren Consumern.

Gruß, Jens
Hallo LabVIEW2013,

Zitat:Nun sollen die Programmabschnitte einzeln gestartet/beendet werden oder alle zusammen gestartet/beendet werden.

Zwei Folgerungen:
- jeder "Abschnitt" wartet auf sein eigenes Start-Signal.
- jeder "Abschnitt" wartet auf sein eigenes Stopp-Signal.
Wie dieses Signal aussieht, bleibt dir überlassen. (Named) Queues/Notifier könnte man verwenden. Wenn die Anzahl der "Abschnitte" fest steht, könnte man auch eine FGV verwenden. Am primitivsten könnten globale Variablen zu verwenden sein...

Zitat:Wichtig ist jedoch, das die Programmabschnitte ihre "Endroutine" ausführen (zb. Ports schließen) und nicht einfach die Schleife abbrechen.
Das ist keine Frage des Stopp-Signals, sondern einzig nur durch deine Programmierung gegeben. Wenn du die Aufräumarbeiten jeweils nach der eigentlichen Arbeitsschleife deines "Abschnitts" durchführst, wird immer aufgeräumt, bevor der "Abschnitt" beendet wird...
Die perfekte Lösung heißt:
Ereignisgesteuerte queue driven State Machine
Leider habe ich im Moment keinen Zeit für das Beispiel. Bitte etwas gedulden. Oder es springt jemand Anderes schnell auf den Zug auf...
Hier das versprochene VI, unaufgeräumt und hastig zusmmengeklickt. Für gewöhnllch wird die Queue auch benutzt, um außer dem State auch Daten in die States mit zu übergeben. Als Datenformat wird dann meist Variant genommen, um in die unterschiedichen States unterschiedliche Datentypen übergeben zu können. Das habe ich hier alles weggelassen.
Referenz-URLs