LabVIEWForum.de - queue per Konstante/Bedienelement anfordern

LabVIEWForum.de

Normale Version: queue per Konstante/Bedienelement anfordern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

ich hab eine queued state machine mit 2 consumer schleifen. Beide consumer haben eine eigene queue.

Jetzt möchte ich, dass consumer 1 in die queue von consumer 2 schreiben kann. Das hab ich bisher so gelöst, dass consumer 1 per "queue anfordern"-funktion, die queue von consumer 2 holt. Jetzt hab ich aber gesehen, dass man das auch etwas "schöner" lösen kann, indem man einfach eine queue konstante verwendet (rechtsklick auf das queue kabel -> konstante erstellen).

Wenn ich diese konstante jetzt statt dem queue anfordern verwende, funktionierts allerdings nicht mehr. Es kommt der Fehler:
Zitat:Fehler 1 ist bei Element einfügen in XXX.vi aufgetreten

Mögliche Ursachen:

LabVIEW: Ein Ausgabeparameter ist ungültig. Wenn am Eingang beispielsweise ein Pfad anliegt, kann dieser Pfad Zeichen wie ? oder @ enthalten, die im betreffenden Betriebssystem nicht zulässig sind.


Aber warum klappt es mit der queue-konstante in diesem Beispiel:
http://expressionflow.com/wp-content/upl...xample.zip
Weil in diesem Bsp im "Init-Case 2" die Refnum der Queue in einem Schieberegister gespeichert wird:
[attachment=38053]
Über den Rechtsklick->Create Constant wird dir "nur" der Datentyp für eine Queue-Referenz erzeugt. Aber die Queue-Refnum selber wird immer erst zur Laufzeit durch den ersten Aufruf von "Obtain Queue" erzeugt.

Gruß, Jens
Du kannst die Queue doch jeweils einfach in die Schleifen reinführen...oder z.B. auch in eine lokale/globale/functional global Variable speichern und dort wieder auslesen, wo du in die Queue schreiben willst! Der Queue-Draht ist ja nur sowas wie ein Zeiger bzw. eine Referenz auf einen Datenspeicher...du brauchst dir also keine Sorgen machen, dass du hier Probleme kriegst weil du den LV-Data flow nicht einhälst!

Du musst also nicht unbedingt jedes Mal "Obtain Queue" ausführen...wobei das auch egal ist. Wenn im Speicher schon eine Queue "Q1" existiert, dann wird diese bei weiteren Obtain-Operationen einfach wieder verwendet und nicht jedes mal neu erzeugt!

A.
Das ist in diesem Zusammenhang vielleicht auch interessant:
Als Queue-Referenz könnte man ja eine globale Variable verwenden. Viel genialer ist aber eine "beim ersten Aufruf sich selbst initialisierende FGV", wie ich das in einem Lehrbuch-Beispiel (Johnson-Jennings) gefunden habe:
[attachment=38074]
Super, vielen Dank euch allen. Das diese Queue-konstanten im init gefüllt werden, hab ich übersehen. Das ist mir dann doch zu unübersichtlich. Mein init-case ist eh schon überfüllt.

Hab es jetzt mal wie vorgeschlagen in eine FGV gepackt (siehe Anhang). Funktioniert prächtig.
Referenz-URLs