LabVIEWForum.de
Frage zu Queued state machine - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Frage zu Queued state machine (/Thread-Frage-zu-Queued-state-machine)



Frage zu Queued state machine - montanaro - 15.03.2013 09:28

Hallo,
ich möchte eine Aufgabe programmieren und benutze für diese eine queued state machine.
In meinem HauptVI erzeuge ich eine Queue mit Namen und Datentyp wie im Anhangbeispiel.
Als Struktur verwende ich die producer/consumer Technik. Bis hier alles klar. In einem weiteren
VI (welches unter anderem beim Start des HauptVI dynamisch geladen wird) möchte ich in meine
Queue (die vom HauptVI) Daten schieben. Um dies zu realisieren hatte ich eine Queue-Referenz erzeugt
(im HauptVI, Mauszeiger über den Queue Ausgang, rechte Mauscklick, erstelle Bedienelement), diese dann in das
zweite VI kopiert. Diese Reference habe ich dann mit dem Queue Element einfügen verbunden. Leider funktioniert das nicht, im
Fehlerausgang des Queue-Elemt einfügen bekomme ich dann den Fehler 1.
Ich habe dann das zweite VI umgebaut (wie im Anhang) und jetzt funktioniert es. Leider kann ich dem nicht so recht folgen.
Kann mir bitte jemand eine Erklärung dafür geben. Wenn ich in meinem zweiten VI wieder das Queue Element anfordern verwende, so meine ich,
ich habe dann ja eine neue Queue erzeugt und müsste diese dann am Ende auch wieder freigeben. Aber wo ist dann hier die Referenz auf die Queue
im HauptVI?
Bitte um Erklärung. Danke.
Montanaro


RE: Frage zu Queued state machine - THL - 15.03.2013 09:59

Du brauchst keine Referenz im eigentlichen Sinne. Es genügt, wenn die Queue im zweiten VI denselben Namen hat, wie die in deinem Haupt-VI.


RE: Frage zu Queued state machine - montanaro - 15.03.2013 10:12

Danke für die schnelle Antwort.
Ist das zweite VI dann korrekt? Realisiert man dann auf diese Weise eine Referenz, mit einem neuen Queue Element anfordern mit demselben Namen wie die Queue im HauptVI? Ich muss dann imzweiten VI die angeforderte Queue freigeben. Gibt es dann nicht ein Problem mit der Queue mit demselben Namen im HauptVI?
Entschuldige die ganzen Fragen, aber so recht verstehe ich das noch nicht.
Danke.
Gruss
Montanaro


RE: Frage zu Queued state machine - jg - 15.03.2013 10:51

Ich kann mir aktuell deine VIs nicht anschauen, ich warte noch auf die SP1-DVDs von lv12_img, aber ich fasse einmal zusammen:

Es gibt 2 Möglichkeiten, eine Queue/Notifier Referenz innerhalb eines Programms bzw. einer Instanz zu verteilen:

1) Man erzeugt 1x zentral die Queue/Notifier per "Obtain" VI. Diese Referenz gibt man per Draht/globaler Variable/FGV oder sonst (aber nicht per "Create Constant") an weitere SubVIs weiter. Diese RefNum muss dann am Ende des Programms nur 1x gelöscht werden.

2) Man erzeugt mehrfach per "Obtain" VI Refnums. Solange der Name der Queue/Notifier und natürlich auch der Datentyp identisch sind, greift man dann auf dieselbe Queue zu. Für jedes "Obtain" VI sollte man aber ein "Destroy Queue" einsetzen, damit der Speicher wieder freigegeben wird.

Alles klar?

Gruß, Jens


RE: Frage zu Queued state machine - Kiesch - 15.03.2013 12:25

Alternative zu mehreren Destroys wäre den Parameter "Eliminate Queue" auf True zu setzen. (Standard false) beim Destroy Queue. Damit wird die Referenz freigegeben und alle noch wartenden Queues brechen mit Fehler ab (kann sinnvoll sein um das VI ganz zu beenden). Probleme könnte bereiten, dass dann eventuell Daten nichtmehr verarbeitet werden (bei Destroy bevor die gelesen wurden).


RE: Frage zu Queued state machine - montanaro - 15.03.2013 12:38

jg: Vielen Dank, jetzt habe ich es verstanden. Der erste Punkt erklärt meine Verwirrung.
Die saubere Programmierlösung wird wohl die mit Punkt 1 eins.
Kiesch: Vielen Dank für die Zusatzinfo.
Gruss
Montanaro