LabVIEWForum.de
Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues (/Thread-Datenkomunikation-zwischen-parallelen-Schleifen-Frage-zu-Queues)



Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - JensLV - 19.04.2012 17:22

Hallo alle zusammen.

Ich habe folgende Problemstellung:
Ich möchte ein Programm schreiben welches mehrere Messgeräte ausliest, Auf Usereingaben reagiert, aus den Messdaten und Usereingaben Steuerbefehle generiert und diese dann wiederum an externe Hardware ausgibt. Dabei ist es so, dass die Messinstrumente unterschiedlich schnell ausgelesen werden können. Jedes Messinstrument soll mit seiner maximal möglichen Geschwindigkeit arbeiten. Die Steuerbefehle sollen aus den aktuellsten Messwerten berechnet werden, die zum Zeitpunkt des Durchlaufens des "SubVI Steuerung"-Schleife. Sollten keine neuen Messwerte von einem der Geräte generiert werden, soll der letzte gemessene Wert zur Berechnung der Steuerbefehle verwendet werden. Zudem soll das Programm möglichst Modular aufgebaut sein, um leicht Messgeräte hinzufgen zu können. Eine Skizze des Programms habe ich angehängt.

Folgende Fragen hätte ich dazu:
- Ist es möglich diese Programm mit einer Queue zu programmieren?Diese soll alle alle Variablen (Usereingaben, Messwerte, Steuerbefehle) des Programms beinhalten.
Ich habe bereits eine Version programmiert, welche genau die Anforderungen erfüllt, jedoch mehrere Queues (eine pro Messgerät, Steuer-Schleife, Frontpanel) enthält, was es wieder für andere schwer nachvollziehbar macht.

- Wenn nicht mit Queues, gibt es eine andere Möglichkeit so etwas zu programmieren?


Grüße
Jens


RE: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - RMR - 20.04.2012 06:42

Hallo Jens,

ich hoffe ich habe deine Problemstellung verstanden.
Die Anwendung von Queues ist schon mal ein sehr guter Ansatz. Dies stellt sicher, dass deine übermittelten Daten über identische Zeitstempel verfügen.
Was ich nicht ganz verstanden habe, wie willst du mit einer Queue Frontpaneleingaben, Messwerte und Ergebnisse übermitteln?
Eine Queue ist eine "Einbahnstraße". Wie sollen deine Messwerte von der Erfassung zur Verabeitung und weiter zur Ausgabe kommen?

Suche hier im Forum nach den Stichworten "Producer / Consumer". Dort findest du viele Beispiele für dein Problem.

Hoffe etwas geholfen zu haben.

VG, Ralf aka RMR


RE: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - JensLV - 20.04.2012 07:12

Hallo Ralf,

schonmal danke für deine Antwort.
Zum Thema:
Ich habe eine "Queue" bisher immer als eine Art reservierter Speicher im Arbeitsspeicher verstanden, auf dem bis zu einer gewissen Größe (maximale Queue Größe) Daten geschribeben werden können. Daher hatte ich mir eben gedacht, diese könnten dann auch jederzeit gelesen werden. Was Du beschreibst hört sich leider anders an. Gibt es in LV eine Möglichkeit so etwas zu realisieren?
Aber noch eine allgemeine Funktion von Queues:
Angenommen ich habe eine Queue in der sich die Varbiablen a,b,c und d befinden. Jetzt Füge ich mittel "Element Einfügen" neue WErte für die Größen a und c ein. Was passiert mit b und d? Werden die unverändert ins neue Queue Element übernommen?

Grüße Jens


RE: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - Lucki - 20.04.2012 07:50

Google mal mit "Queued State machine" oder "QSM" und lies das hier. QSM ist für meine Begriffe die fortgeschrittenste Architektur überhaupt.
Bei Queues hat man nur einen Empfänger, es kann aber von mehreren Stellen des Programms gesendet werden. Der Empfänger sollte natürlich wissen, woher die Daten jeweils kommen, und außerdem kann das Format der Daten, je nachdem woher es kommt, unterschiedlich sein. Die Lösung dafür ist: Die Queue-Elemente sind Cluster, bestehend aus einen String oder Enum als Beschreibung, und einem Variant zur Aufnahme jedes Datenformates.
Außer Queues gibt es noch Melder, und bei denen können die Daten auch von mehreren Empfängern gelesen werden. (Die Daten werden hier nicht, wie bei der Queue, durch Lesen gelöscht, sondern erst durch neues Beschreiben). Habe ich allerdings noch nicht benutzt und wüßte jetzt kein Beispiel, wo man das braucht.

NB: Die exzessive Verwendung von Sequenzstrukturen ist meiner Erfahrung nach die Visitenkarte jeden Anfängers. In Deinem Fall: Die Referenzleitung der Queue besorgt die richtige Reihenfolge der Ausführung, Sequenz überflüssig


RE: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - RMR - 20.04.2012 07:53

Hallo Jens.

du solltest deinen Queue-Inhalt als "Type-def-cluster" einrichten. Somit hast du jan jeder Stelle im Code den Überblick, was zu gerade schreibst, bzw liest.
(Bundle-/unbudle by name) Die Queue macht dir "Päckchen" in welchen deine Werte zusammen "transportiert" werden.
Deine Päckchen beinhalten also immer die Variablen A,b,c,d..... fügst du ein, überschreibst du.

In den (LV) Beispielen findest du ein paar nette Codes hierzu.

VG, Ralf
(20.04.2012 07:50 )Lucki schrieb:  "QSM" und lies das hier.

DANKE! Guru1

Schönes WE, Ralf


RE: Datenkomunikation zwischen parallelen Schleifen: Frage zu Queues - JensLV - 20.04.2012 08:18

Hallo alle zusammen,

schön das man hier gehofen bekommt.

Cluster zur Grupierung und benennung meiner Variablen nutze ich schon. Ist eigentlich auch einer meiner Hauptgründe die Queues zu verwenden, da duch die möglichkeit des Bundel/Unbundle by name das Programm auch für den, der es nicht geschrieben hat sofort verständelich wird.

Die Sache mit der QSM muss ich mir in einer ruhigen Minute mal zu gemüte führen.

Grüße Jens